@sapui5/sap.fe.core 1.99.0 → 1.100.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 (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -190,7 +190,8 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
190
190
  model: oModel,
191
191
  aActionParameters: aActionParameters,
192
192
  bGetBoundContext: mParameters.bGetBoundContext,
193
- defaultValuesExtensionFunction: mParameters.defaultValuesExtensionFunction
193
+ defaultValuesExtensionFunction: mParameters.defaultValuesExtensionFunction,
194
+ label: mParameters.label
194
195
  };
195
196
 
196
197
  if (oAction.getObject("$IsBound")) {
@@ -315,6 +316,11 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
315
316
  var oMessageManager = sap.ui.getCore().getMessageManager();
316
317
  var aMessages = oMessageManager.getMessageModel().getData();
317
318
  aFieldInvalid = aFieldInvalid || [];
319
+
320
+ if (!aMessages.length) {
321
+ aFieldInvalid = [];
322
+ }
323
+
318
324
  aActionParameters.forEach(function (oActionParameters) {
319
325
  var sParameter = oActionParameters.$Name;
320
326
  aMessages.forEach(function (oMessage) {
@@ -449,6 +455,7 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
449
455
  vParameterValue = undefined;
450
456
  }
451
457
 
458
+ mParameters.label = sActionLabel;
452
459
  return _executeAction(oAppComponent, mParameters).then(function (oOperation) {
453
460
  oDialog.close();
454
461
  resolve(oOperation);
@@ -782,6 +789,22 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
782
789
  }
783
790
  }
784
791
 
792
+ function executeDependingOnSelectedContexts(oAction, mParameters, bGetBoundContext, sGroupId) {
793
+ var oActionPromise;
794
+
795
+ if (mParameters.internalModelContext && mParameters.internalModelContext.getObject().numberOfSelectedContexts > 1) {
796
+ oActionPromise = bGetBoundContext ? oAction.execute(sGroupId).then(function () {
797
+ return oAction.getBoundContext();
798
+ }) : oAction.execute(sGroupId);
799
+ } else {
800
+ oActionPromise = bGetBoundContext ? oAction.execute(sGroupId, undefined, CommonUtils.fnOnStrictHandlingFailed.bind(operations, sGroupId, mParameters.label, mParameters.model)).then(function () {
801
+ return oAction.getBoundContext();
802
+ }) : oAction.execute(sGroupId, undefined, CommonUtils.fnOnStrictHandlingFailed.bind(operations, sGroupId, mParameters.label, mParameters.model));
803
+ }
804
+
805
+ return oActionPromise;
806
+ }
807
+
785
808
  function _executeAction(oAppComponent, mParameters) {
786
809
  var aContexts = mParameters.aContexts || [];
787
810
  var oModel = mParameters.model;
@@ -791,7 +814,6 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
791
814
  var fnOnSubmitted = mParameters.fnOnSubmitted;
792
815
  var fnOnResponse = mParameters.fnOnResponse;
793
816
  var bIsCreateAction = mParameters.bIsCreateAction;
794
- var bActionParametersExist = false;
795
817
  var oAction;
796
818
 
797
819
  function fnDifferentiate(promise) {
@@ -819,8 +841,6 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
819
841
 
820
842
  function setActionParameterDefaultValue() {
821
843
  if (aActionParameters && aActionParameters.length) {
822
- bActionParametersExist = true;
823
-
824
844
  for (var j = 0; j < aActionParameters.length; j++) {
825
845
  if (!aActionParameters[j].value) {
826
846
  switch (aActionParameters[j].$Type) {
@@ -865,9 +885,7 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
865
885
  setActionParameterDefaultValue(); // For invocation grouping "isolated" need batch group per action call
866
886
 
867
887
  sGroupId = !bGrouped ? "$auto." + index : oAction.getUpdateGroupId();
868
- oActionPromise = bGetBoundContext ? oAction.execute(sGroupId).then(function () {
869
- return oAction.getBoundContext();
870
- }) : oAction.execute(sGroupId);
888
+ oActionPromise = executeDependingOnSelectedContexts(oAction, mParameters, bGetBoundContext, sGroupId);
871
889
  aActionPromises.push(oActionPromise);
872
890
  var oSideEffectsService = oAppComponent.getSideEffectsService(); // trigger actions from side effects
873
891
 
@@ -899,9 +917,7 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
899
917
  setActionParameterDefaultValue(); // For invocation grouping "isolated" need batch group per action call
900
918
 
901
919
  sGroupId = "apiMode" + index;
902
- oActionPromise = bGetBoundContext ? oAction.execute(sGroupId).then(function () {
903
- return oAction.getBoundContext();
904
- }) : oAction.execute(sGroupId);
920
+ oActionPromise = executeDependingOnSelectedContexts(oAction, mParameters, bGetBoundContext, sGroupId);
905
921
  aActionPromises.push(oActionPromise);
906
922
  aLocalPromise.push(oActionPromise);
907
923
  var oSideEffectsService = oAppComponent.getSideEffectsService(); // trigger actions from side effects
@@ -999,7 +1015,8 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
999
1015
  }
1000
1016
 
1001
1017
  if (results[iResultCount].status === "resolved") {
1002
- if (bIsCreateAction && bActionParametersExist) {
1018
+ if (bIsCreateAction) {
1019
+ // removed the bActionParametersExist so that create new action can work in both cases - with and without dialog
1003
1020
  //only used for NewAction
1004
1021
  results[iResultCount].bConsiderDocumentModified = true;
1005
1022
  aResolvedItems.push(results[iResultCount]);
@@ -1036,8 +1053,9 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
1036
1053
  } else {
1037
1054
  oAction = oModel.bindContext("/" + sActionName + "(...)");
1038
1055
  setActionParameterDefaultValue();
1039
- var oActionPromise = oAction.execute("actionImport");
1040
- oModel.submitBatch("actionImport"); // trigger onSubmitted "event"
1056
+ var sGroupId = "actionImport";
1057
+ var oActionPromise = oAction.execute(sGroupId, undefined, CommonUtils.fnOnStrictHandlingFailed.bind(operations, sGroupId, mParameters.label, oModel));
1058
+ oModel.submitBatch(sGroupId); // trigger onSubmitted "event"
1041
1059
 
1042
1060
  (fnOnSubmitted || function noop() {
1043
1061
  /**/
@@ -1070,8 +1088,9 @@ sap.ui.define(["sap/m/MessageBox", "sap/m/Dialog", "sap/ui/model/json/JSONModel"
1070
1088
  callBoundAction: callBoundAction,
1071
1089
  callActionImport: callActionImport,
1072
1090
  callBoundFunction: callBoundFunction,
1073
- callFunctionImport: callFunctionImport
1091
+ callFunctionImport: callFunctionImport,
1092
+ executeDependingOnSelectedContexts: executeDependingOnSelectedContexts
1074
1093
  };
1075
1094
  return operations;
1076
1095
  }, false);
1077
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwibmFtZXMiOlsiQ29uc3RhbnRzIiwiRkVMaWJyYXJ5IiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiQWN0aW9uIiwiTWVzc2FnZUJveCIsImNhbGxCb3VuZEFjdGlvbiIsInNBY3Rpb25OYW1lIiwiY29udGV4dHMiLCJvTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwibVBhcmFtZXRlcnMiLCJsZW5ndGgiLCJQcm9taXNlIiwicmVqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiYlJldHVybkFzQXJyYXkiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0FjdGlvblBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJvQm91bmRBY3Rpb24iLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImFDb250ZXh0cyIsImlzQ3JpdGljYWxBY3Rpb24iLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwiY2FsbEFjdGlvbiIsImNhbGxBY3Rpb25JbXBvcnQiLCJiaW5kQ29udGV4dCIsIm9BY3Rpb25JbXBvcnQiLCJnZXRPYmplY3QiLCJjYWxsQm91bmRGdW5jdGlvbiIsInNGdW5jdGlvbk5hbWUiLCJjb250ZXh0Iiwic0Z1bmN0aW9uUGF0aCIsIm9Cb3VuZEZ1bmN0aW9uIiwiX2V4ZWN1dGVGdW5jdGlvbiIsImNhbGxGdW5jdGlvbkltcG9ydCIsInJlc29sdmUiLCJvRnVuY3Rpb25JbXBvcnQiLCJvRnVuY3Rpb24iLCJzR3JvdXBJZCIsIkVycm9yIiwib0Z1bmN0aW9uUHJvbWlzZSIsImV4ZWN1dGUiLCJzdWJtaXRCYXRjaCIsInRoZW4iLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwiYUFjdGlvblBhcmFtZXRlcnMiLCJhY3Rpb25QYXJhbWV0ZXJzIiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJwcmVwYXJlQWN0aW9uUGFyYW1ldGVycyIsImNvbmZpcm1Dcml0aWNhbEFjdGlvbiIsImZuT25TdWJtaXR0ZWQiLCJvblN1Ym1pdHRlZCIsImZuT25SZXNwb25zZSIsIm9uUmVzcG9uc2UiLCJhY3Rpb25OYW1lIiwibW9kZWwiLCJiR2V0Qm91bmRDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiYWRkaXRpb25hbFNpZGVFZmZlY3QiLCJwYXRoRXhwcmVzc2lvbnMiLCJmaW5kSW5kZXgiLCJleHAiLCIkUHJvcGVydHlQYXRoIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInRyaWdnZXJBY3Rpb25zIiwic3BsaWNlIiwiYkdyb3VwZWQiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJDaGFuZ2VTZXQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImJPYmplY3RQYWdlIiwicGFyZW50Q29udHJvbCIsImVudGl0eVNldE5hbWUiLCJtZXNzYWdlSGFuZGxlciIsIl9leGVjdXRlQWN0aW9uIiwib09wZXJhdGlvblJlc3VsdCIsImNhdGNoIiwib0FjdGlvbkNvbnRleHQiLCJvUGFyZW50Q29udHJvbCIsImJvdW5kQWN0aW9uTmFtZSIsInN1ZmZpeFJlc291cmNlS2V5Iiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0Q29udHJvbGxlciIsInNDb25maXJtYXRpb25UZXh0IiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImNvbmZpcm0iLCJvbkNsb3NlIiwic0FjdGlvbiIsIk9LIiwib09wZXJhdGlvbiIsIm9FcnJvciIsInNob3dNZXNzYWdlRGlhbG9nIiwic1BhdGgiLCJfZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZW50aXR5U2V0Q29udGV4dCIsInNBY3Rpb25OYW1lUGF0aCIsImFjdGlvbk5hbWVDb250ZXh0Iiwic0ZyYWdtZW50TmFtZSIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiYUZpZWxkSW52YWxpZCIsImFGb3JtRWxlbWVudHMiLCJtRmllbGRWYWx1ZU1hcCIsInZhbGlkYXRlUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYWxsIiwiZmlsdGVyIiwib0Zvcm1FbGVtZW50Iiwib0ZpZWxkIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZVN0YXRlIiwibWFwIiwidmFsdWUiLCJpc0EiLCJnZXRJdGVtcyIsImdldFZhbHVlIiwidW5kZWZpbmVkIiwiZ2V0TGFiZWwiLCJnZXRUZXh0IiwiYVJlc3VsdHMiLCJyZXN1bHQiLCJfdmFsaWRhdGVNZXNzYWdlcyIsImJDbGVhclRhcmdldCIsIm9NZXNzYWdlTWFuYWdlciIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiYU1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZvckVhY2giLCJvQWN0aW9uUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCIkTmFtZSIsIm9NZXNzYWdlIiwic1BhcmFtIiwicmVwbGFjZSIsImNvbnRyb2xJZHMiLCJnZXRDb250cm9sSWQiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwicHVzaCIsInRhcmdldCIsIm9Db250cm9sbGVyIiwiaGFuZGxlQ2hhbmdlIiwib0V2ZW50IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0U291cmNlIiwic0ZpZWxkSWQiLCJnZXRQYXJhbWV0ZXIiLCJvRmllbGRQcm9taXNlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJiaW5kaW5nQ29udGV4dHMiLCJhY3Rpb24iLCJlbnRpdHlTZXQiLCJtb2RlbHMiLCJhRnVuY3Rpb25QYXJhbXMiLCJvT3BlcmF0aW9uQmluZGluZyIsInNldFVzZXJEZWZhdWx0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwib0RpYWxvZ0NvbnRlbnQiLCJvRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImNsb3NlIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJnZW5lcmF0ZSIsInRleHQiLCJ0eXBlIiwicHJlc3MiLCJhRW1wdHlNYW5kYXRvcnlGaWVsZHMiLCJvTWVzc2FnZXMiLCJpIiwiY29kZSIsImN1c3RvbU1lc3NhZ2VzIiwibWVzc2FnZUhhbmRsaW5nIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJ2UGFyYW1ldGVyVmFsdWUiLCJvUGFyYW1ldGVyQ29udGV4dCIsImdldFBhcmFtZXRlckNvbnRleHQiLCIkaXNDb2xsZWN0aW9uIiwiYU1WRkNvbnRlbnQiLCJnZXRQcm9wZXJ0eSIsImFLZXlWYWx1ZXMiLCJqIiwiS2V5IiwiYkhhc0V0YWdNZXNzYWdlIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsInNob3dNZXNzYWdlcyIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwiZmluYWxseSIsInVubG9jayIsImVuZEJ1dHRvbiIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsImJlZm9yZU9wZW4iLCJvQ2xvbmVFdmVudCIsImFzc2lnbiIsImdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInNEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0JvdW5kRnVuY3Rpb25OYW1lIiwicHJlZmlsbFBhcmFtZXRlciIsInNQYXJhbU5hbWUiLCJ2UGFyYW1EZWZhdWx0VmFsdWUiLCIkUGF0aCIsIm9Qcm9taXNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5Iiwib1ZhbHVlIiwicmVxdWVzdFByb3BlcnR5IiwidlBhcmFtVmFsdWUiLCJzUGF0aEZvckNvbnRleHQiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwiTG9nIiwiZXJyb3IiLCJiTGF0ZVByb3BlcnR5RXJyb3IiLCJvRGF0YSIsImdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsInNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uVGFyZ2V0Iiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYVByZWZpbGxQYXJhbVByb21pc2VzIiwiYUV4ZWNGdW5jdGlvblByb21pc2VzIiwib0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UiLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiYVByb21pc2VzIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsImhhc093blByb3BlcnR5Iiwic2V0UGFyYW1ldGVyIiwiYkVycm9yRm91bmQiLCJzb21lIiwic1RleHQiLCJ3YXJuaW5nIiwiY29udGVudFdpZHRoIiwiYVBhcmFtZXRlcnMiLCJyZXF1ZXN0T2JqZWN0Iiwib0NvbnRleHRPYmplY3QiLCJhZnRlckNsb3NlIiwiZGVzdHJveSIsImdldEFnZ3JlZ2F0aW9uIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsInBhdGgiLCJvTVZGTW9kZWwiLCJhZGREZXBlbmRlbnQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdEJpbmRpbmciLCJvcGVuIiwiYVByZWRlZmluZWRQYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwidkFjdGlvbkNyaXRpY2FsIiwic0NyaXRpY2FsUGF0aCIsImFCaW5kaW5nUGFyYW1zIiwiYVBhdGhzIiwiYkNvbmRpdGlvbiIsIm9QYXJhbXMiLCJpbmRleCIsImpvaW4iLCJpRXhpc3RpbmdNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiYkFjdGlvblBhcmFtZXRlcnNFeGlzdCIsImZuRGlmZmVyZW50aWF0ZSIsInByb21pc2UiLCJyZXNwb25zZSIsInN0YXR1cyIsInNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsIiRUeXBlIiwiYUFjdGlvblByb21pc2VzIiwiZm5FeGVjdXRlQWN0aW9uIiwib1NpZGVFZmZlY3QiLCJnZXRVcGRhdGVHcm91cElkIiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsInNUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJKU09OIiwicGFyc2UiLCJmbkV4ZWN1dGVTaW5nbGVBY3Rpb24iLCJvTG9jYWxQcm9taXNlIiwiYUxvY2FsUHJvbWlzZSIsImZuRXhlY3V0ZVNlcXVlbnRpYWxseSIsIm5vb3AiLCJwcm9jZXNzT25lQWN0aW9uIiwib0FjdGlvbkFuZFNpZGVFZmZlY3RQcm9taXNlIiwiaWQiLCJmbkhhbmRsZVJlc3VsdHMiLCJyZXN1bHRzIiwiYVJlamVjdGVkSXRlbXMiLCJhUmVzb2x2ZWRJdGVtcyIsImlSZXN1bHRDb3VudCIsImJDb25zaWRlckRvY3VtZW50TW9kaWZpZWQiLCJyZXNvbHZlZEl0ZW1zIiwicmVqZWN0ZWRJdGVtcyIsIm9wZXJhdGlvbnMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQWFBLE1BQU1BLFNBQVMsR0FBR0MsU0FBUyxDQUFDRCxTQUE1QjtBQUFBLE1BQ0NFLGtCQUFrQixHQUFHRCxTQUFTLENBQUNDLGtCQURoQztBQUVBLE1BQU1DLE1BQU0sR0FBSUMsVUFBRCxDQUFvQkQsTUFB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VUFBVSxHQUFHO0FBQ2xCclYsSUFBQUEsZUFBZSxFQUFFQSxlQURDO0FBRWxCdUIsSUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUZBO0FBR2xCSSxJQUFBQSxpQkFBaUIsRUFBRUEsaUJBSEQ7QUFJbEJNLElBQUFBLGtCQUFrQixFQUFFQTtBQUpGLEdBQW5CO1NBT2VvVCxVIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9hY3Rpb25zL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuXG5jb25zdCBDb25zdGFudHMgPSBGRUxpYnJhcnkuQ29uc3RhbnRzLFxuXHRJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuY29uc3QgQWN0aW9uID0gKE1lc3NhZ2VCb3ggYXMgYW55KS5BY3Rpb247XG5cbi8qKlxuICogQ2FsbHMgYSBib3VuZCBhY3Rpb24gZm9yIG9uZSBvciBtdWx0aXBsZSBjb250ZXh0cy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQm91bmRBY3Rpb25cbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gY29udGV4dHMgRWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgdG8gYmUgYmUgY2FsbGVkXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Nb2RlbH0gb01vZGVsIE9EYXRhIE1vZGVsXG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge21hcH0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIHttYXB9IFttUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzXSBBIG1hcCBvZiBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgZm9yIGV2ZXJ5IGFjdGlvbiBjYWxsXG4gKiBAcGFyYW0ge21hcH0gW21QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVyc10gQSBtYXAgb2YgYmluZGluZyBwYXJhbWV0ZXJzIHRoYXQgd291bGQgYmUgcGFydCBvZiAkc2VsZWN0IGFuZCAkZXhwYW5kIGNvbWluZyBmcm9tIHNpZGUgZWZmZWN0cyBmb3IgYm91bmQgYWN0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gW21QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0XSBBcnJheSBvZiBwcm9wZXJ0eSBwYXRocyB0byBiZSByZXF1ZXN0ZWQgaW4gYWRkaXRpb24gdG8gYWN0dWFsIHRhcmdldCBwcm9wZXJ0aWVzIG9mIHRoZSBzaWRlIGVmZmVjdFxuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIHtzdHJpbmd9IFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IFttUGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmddIE1vZGUgaG93IGFjdGlvbnMgYXJlIHRvIGJlIGNhbGxlZDogQ2hhbmdlc2V0IHRvIHB1dCBhbGwgYWN0aW9uIGNhbGxzIGludG8gb25lIGNoYW5nZXNldCwgSXNvbGF0ZWQgdG8gcHV0IHRoZW0gaW50byBzZXBhcmF0ZSBjaGFuZ2VzZXRzLCBkZWZhdWx0cyB0byBJc29sYXRlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSB7bWFwfSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcGFyYW0ge3NhcC51aS5jb3JlLkVsZW1lbnR9IFttUGFyYW1ldGVycy5wYXJlbnRDb250cm9sXSBJZiBzcGVjaWZpZWQgdGhlIGRpYWxvZ3MgYXJlIGFkZGVkIGFzIGRlcGVuZGVudCBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHRdIElmIHNwZWNpZmllZCB0aGUgYWN0aW9uIHByb21pc2UgcmV0dXJucyB0aGUgYm91bmQgY29udGV4dFxuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzIChUT0RPOiB0byBiZSBjaGFuZ2VkKVxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBjYWxsQm91bmRBY3Rpb24oc0FjdGlvbk5hbWU6IHN0cmluZywgY29udGV4dHM6IGFueSwgb01vZGVsOiBhbnksIG9BcHBDb21wb25lbnQ6IG9iamVjdCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRpZiAoIWNvbnRleHRzIHx8IGNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vSW4gRnJlZXN0eWxlIGFwcHMgYm91bmQgYWN0aW9ucyBjYW4gaGF2ZSBubyBjb250ZXh0XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQm91bmQgYWN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGNvbnRleHRcIik7XG5cdH1cblx0Ly8gd2UgZXhwZWN0IGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSBvZiBjb250ZXh0c1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250ZXh0cykpIHtcblx0XHRtUGFyYW1ldGVycy5iUmV0dXJuQXNBcnJheSA9IHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0Ly9hY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIG9uIHRoaXMgY29udGV4dCBmcm9tIHRoZSBkZXBlbmRlbnQgYmluZGluZyBzbyBVSSBmaWVsZHMgYXJlIHVwZGF0ZWQgd2l0aCByZXNwb25zZSBkYXRhXG5cdFx0Y29udGV4dHMgPSBbY29udGV4dHNdO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0FjdGlvblBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHRzWzBdLmdldFBhdGgoKSkgKyBcIi9cIiArIHNBY3Rpb25OYW1lLFxuXHRcdG9Cb3VuZEFjdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0FjdGlvblBhdGggKyBcIi9AJHVpNS5vdmVybG9hZC8wXCIpO1xuXHRtUGFyYW1ldGVycy5hQ29udGV4dHMgPSBjb250ZXh0cztcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbCwgc0FjdGlvblBhdGgsIGNvbnRleHRzLCBvQm91bmRBY3Rpb24pO1xuXHRyZXR1cm4gY2FsbEFjdGlvbihzQWN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRBY3Rpb24sIG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzKTtcbn1cbi8qKlxuICogQ2FsbHMgYW4gYWN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsQWN0aW9uSW1wb3J0XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbXBvcnQgdG8gYmUgY2FsbGVkXG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsfSBvTW9kZWwgQW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgdjQgbW9kZWxcbiAqIEBwYXJhbSB7b2JqZWN0fSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSB7bWFwfSBbbVBhcmFtZXRlcnNdIE9wdGlvbmFsLCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiBAcGFyYW0ge21hcH0gW21QYXJhbWV0ZXJzLmFjdGlvblBhcmFtZXRlcnNdIEEgbWFwIG9mIHBhcmFtZXRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSBhY3Rpb24gaW1wb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gW21QYXJhbWV0ZXJzLmxhYmVsXSBBIGh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nXSBJZiBzZXQgYW5kIGlmIHBhcmFtZXRlcnMgZXhpc3QgdGhlIHVzZXIgcmV0cmlldmVzIGEgZGlhbG9nIHRvIGZpbGwgaW4gcGFyYW1ldGVycywgaWYgYWN0aW9uUGFyYW1ldGVycyBhcmUgcGFzc2VkIHRoZXkgYXJlIHNob3duIHRvIHRoZSB1c2VyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbbVBhcmFtZXRlcnMub25TdWJtaXR0ZWRdIEZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBvbmNlIHRoZSBhY3Rpb25zIGFyZSBzdWJtaXR0ZWQgd2l0aCBhbiBhcnJheSBvZiBwcm9taXNlc1xuICogQHBhcmFtIHttYXB9IFttUGFyYW1ldGVycy5kZWZhdWx0UGFyYW1ldGVyc10gQ2FuIGNvbnRhaW4gZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gRkxQIHVzZXIgZGVmYXVsdHNcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gY2FsbEFjdGlvbkltcG9ydChzQWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IGFueSwgb0FwcENvbXBvbmVudDogb2JqZWN0LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdGlmICghb01vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiQWN0aW9uIGV4cGVjdHMgYSBtb2RlbC9jb250ZXh0IGZvciBleGVjdXRpb25cIik7XG5cdH1cblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzQWN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChcIi9cIiArIHNBY3Rpb25OYW1lKS5nZXRQYXRoKCksXG5cdFx0b0FjdGlvbkltcG9ydCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIgKyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkQWN0aW9uXCIpICsgXCIvMFwiKTtcblx0bVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbiA9IGdldElzQWN0aW9uQ3JpdGljYWwob01ldGFNb2RlbCwgc0FjdGlvblBhdGggKyBcIi9AJHVpNS5vdmVybG9hZFwiKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0FjdGlvbkltcG9ydCwgb0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpO1xufVxuZnVuY3Rpb24gY2FsbEJvdW5kRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogc3RyaW5nLCBjb250ZXh0OiBhbnksIG9Nb2RlbDogYW55KSB7XG5cdGlmICghY29udGV4dCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGZ1bmN0aW9ucyBhbHdheXMgcmVxdWlyZXMgYSBjb250ZXh0XCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpICsgXCIvXCIgKyBzRnVuY3Rpb25OYW1lLFxuXHRcdG9Cb3VuZEZ1bmN0aW9uID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKTtcblx0cmV0dXJuIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZSwgb01vZGVsLCBvQm91bmRGdW5jdGlvbiwgY29udGV4dCk7XG59XG4vKipcbiAqIENhbGxzIGEgZnVuY3Rpb24gaW1wb3J0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zLmNhbGxGdW5jdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHNGdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbH0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIHY0IG1vZGVsXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsbEZ1bmN0aW9uSW1wb3J0KHNGdW5jdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBhbnkpIHtcblx0aWYgKCFzRnVuY3Rpb25OYW1lKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0Z1bmN0aW9uUGF0aCA9IG9Nb2RlbC5iaW5kQ29udGV4dChcIi9cIiArIHNGdW5jdGlvbk5hbWUpLmdldFBhdGgoKSxcblx0XHRvRnVuY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFxuXHRcdFx0XCIvXCIgKyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNGdW5jdGlvblBhdGgpLmdldE9iamVjdChcIiRGdW5jdGlvblwiKSArIFwiLzBcIlxuXHRcdCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0Z1bmN0aW9uSW1wb3J0KTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlRnVuY3Rpb24oc0Z1bmN0aW9uTmFtZTogYW55LCBvTW9kZWw6IGFueSwgb0Z1bmN0aW9uOiBhbnksIGNvbnRleHQ/OiBhbnkpIHtcblx0bGV0IHNHcm91cElkO1xuXHRpZiAoIW9GdW5jdGlvbiB8fCAhb0Z1bmN0aW9uLmdldE9iamVjdCgpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZ1bmN0aW9uIFwiICsgc0Z1bmN0aW9uTmFtZSArIFwiIG5vdCBmb3VuZFwiKSk7XG5cdH1cblx0aWYgKGNvbnRleHQpIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoc0Z1bmN0aW9uTmFtZSArIFwiKC4uLilcIiwgY29udGV4dCk7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uR3JvdXBcIjtcblx0fSBlbHNlIHtcblx0XHRvRnVuY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoXCIvXCIgKyBzRnVuY3Rpb25OYW1lICsgXCIoLi4uKVwiKTtcblx0XHRzR3JvdXBJZCA9IFwiZnVuY3Rpb25JbXBvcnRcIjtcblx0fVxuXHRjb25zdCBvRnVuY3Rpb25Qcm9taXNlID0gb0Z1bmN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpO1xuXHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRyZXR1cm4gb0Z1bmN0aW9uUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBvRnVuY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gY2FsbEFjdGlvbihzQWN0aW9uTmFtZTogYW55LCBvTW9kZWw6IGFueSwgb0FjdGlvbjogYW55LCBvQXBwQ29tcG9uZW50OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRsZXQgYUFjdGlvblBhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzIHx8IFtdO1xuXHRcdGxldCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVyczogYW55ID0ge307XG5cdFx0bGV0IGZuRGlhbG9nO1xuXHRcdGxldCBvQWN0aW9uUHJvbWlzZTtcblx0XHRjb25zdCBzQWN0aW9uTGFiZWwgPSBtUGFyYW1ldGVycy5sYWJlbDtcblx0XHRsZXQgYlNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2cgPSBtUGFyYW1ldGVycy5zaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cztcblx0XHRjb25zdCBiSXNDcmVhdGVBY3Rpb24gPSBtUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb247XG5cdFx0Y29uc3QgYklzQ3JpdGljYWxBY3Rpb24gPSBtUGFyYW1ldGVycy5pc0NyaXRpY2FsQWN0aW9uO1xuXHRcdGxldCBvTWV0YU1vZGVsO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cdFx0bGV0IHNNZXNzYWdlc1BhdGg6IGFueTtcblx0XHRsZXQgaU1lc3NhZ2VTaWRlRWZmZWN0O1xuXHRcdGlmICghb0FjdGlvbiB8fCAhb0FjdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJBY3Rpb24gXCIgKyBzQWN0aW9uTmFtZSArIFwiIG5vdCBmb3VuZFwiKSk7XG5cdFx0fVxuXHRcdGlmIChiU2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyB8fCBhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVycyA9IHByZXBhcmVBY3Rpb25QYXJhbWV0ZXJzKG9BY3Rpb24sIGFBY3Rpb25QYXJhbWV0ZXJzKTtcblx0XHRcdGlmICghYUFjdGlvblBhcmFtZXRlcnMgfHwgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGJTaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChiU2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZykge1xuXHRcdFx0Zm5EaWFsb2cgPSBzaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nO1xuXHRcdH0gZWxzZSBpZiAoYklzQ3JpdGljYWxBY3Rpb24pIHtcblx0XHRcdGZuRGlhbG9nID0gY29uZmlybUNyaXRpY2FsQWN0aW9uO1xuXHRcdH1cblx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdGZuT25TdWJtaXR0ZWQ6IG1QYXJhbWV0ZXJzLm9uU3VibWl0dGVkLFxuXHRcdFx0Zm5PblJlc3BvbnNlOiBtUGFyYW1ldGVycy5vblJlc3BvbnNlLFxuXHRcdFx0YWN0aW9uTmFtZTogc0FjdGlvbk5hbWUsXG5cdFx0XHRtb2RlbDogb01vZGVsLFxuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnM6IGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0YkdldEJvdW5kQ29udGV4dDogbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0fTtcblx0XHRpZiAob0FjdGlvbi5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSkge1xuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucykge1xuXHRcdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGFDb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0XHRzTWVzc2FnZXNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFQYXRoICsgXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlcy8kUGF0aFwiKTtcblxuXHRcdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRcdGlNZXNzYWdlU2lkZUVmZmVjdCA9IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5maW5kSW5kZXgoZnVuY3Rpb24oZXhwOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBleHAuJFByb3BlcnR5UGF0aCA9PT0gc01lc3NhZ2VzUGF0aDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGlmIChpTWVzc2FnZVNpZGVFZmZlY3QgPiAtMSkge1xuXHRcdFx0XHRcdFx0Ly8gdGhlIG1lc3NhZ2UgcGF0aCBpcyBhbm5vdGF0ZWQgYXMgc2lkZSBlZmZlY3QuIEFzIHRoZXJlJ3Mgbm8gYmluZGluZyBmb3IgaXQgYW5kIHRoZSBtb2RlbCBkb2VzIGN1cnJlbnRseSBub3QgYWxsb3dcblx0XHRcdFx0XHRcdC8vIHRvIGFkZCBpdCBhdCBhIGxhdGVyIHBvaW50IG9mIHRpbWUgd2UgaGF2ZSB0byB0YWtlIGNhcmUgaXQncyBwYXJ0IG9mIHRoZSAkc2VsZWN0IG9mIHRoZSBQT1NULCB0aGVyZWZvcmUgbW92aW5nIGl0XG5cdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMgfHwge307XG5cblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0b0FjdGlvbi5nZXRPYmplY3QoXCIkUmV0dXJuVHlwZS8kVHlwZS9cIiArIHNNZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0XHRcdCghbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgfHxcblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdC5zcGxpdChcIixcIikuaW5kZXhPZihzTWVzc2FnZXNQYXRoKSA9PT0gLTEpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdD8gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3QgKyBcIixcIiArIHNNZXNzYWdlc1BhdGhcblx0XHRcdFx0XHRcdFx0XHQ6IHNNZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIG5vIHRyaWdnZXIgYWN0aW9uIHRoZXJlZm9yZSBubyBuZWVkIHRvIHJlcXVlc3QgbWVzc2FnZXMgYWdhaW5cblx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuc3BsaWNlKGlNZXNzYWdlU2lkZUVmZmVjdCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYUNvbnRleHRzID0gYUNvbnRleHRzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJHcm91cGVkID0gbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nID09PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYlJldHVybkFzQXJyYXkgPSBtUGFyYW1ldGVycy5iUmV0dXJuQXNBcnJheTtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0ID0gbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgPSBtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXA7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iT2JqZWN0UGFnZSA9IG1QYXJhbWV0ZXJzLmJPYmplY3RQYWdlO1xuXHRcdH1cblx0XHRpZiAoYklzQ3JlYXRlQWN0aW9uKSB7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iSXNDcmVhdGVBY3Rpb24gPSBiSXNDcmVhdGVBY3Rpb247XG5cdFx0fVxuXHRcdGlmIChmbkRpYWxvZykge1xuXHRcdFx0b0FjdGlvblByb21pc2UgPSBmbkRpYWxvZyhcblx0XHRcdFx0c0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQsXG5cdFx0XHRcdHNBY3Rpb25MYWJlbCxcblx0XHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRvQWN0aW9uLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5lbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRtUGFyYW1ldGVycy5tZXNzYWdlSGFuZGxlclxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0FjdGlvblByb21pc2UgPSBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycyk7XG5cdFx0fVxuXHRcdHJldHVybiBvQWN0aW9uUHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24ob09wZXJhdGlvblJlc3VsdDogYW55KSB7XG5cdFx0XHRcdHJlc29sdmUob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRyZWplY3Qob09wZXJhdGlvblJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fSk7XG59XG5mdW5jdGlvbiBjb25maXJtQ3JpdGljYWxBY3Rpb24oXG5cdHNBY3Rpb25OYW1lOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IGFueSxcblx0c0FjdGlvbkxhYmVsOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueVxuKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHNBY3Rpb25OYW1lID8gc0FjdGlvbk5hbWUgOiBudWxsO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9XG5cdFx0XHRib3VuZEFjdGlvbk5hbWUuaW5kZXhPZihcIi5cIikgPj0gMCA/IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIilbYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5sZW5ndGggLSAxXSA6IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiBlbnRpdHlTZXROYW1lID8gZW50aXR5U2V0TmFtZSArIFwifFwiICsgYm91bmRBY3Rpb25OYW1lIDogXCJcIjtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRcdGNvbnN0IHNDb25maXJtYXRpb25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcIkNfT1BFUkFUSU9OU19BQ1RJT05fQ09ORklSTV9NRVNTQUdFXCIsXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0c3VmZml4UmVzb3VyY2VLZXlcblx0XHQpO1xuXG5cdFx0TWVzc2FnZUJveC5jb25maXJtKHNDb25maXJtYXRpb25UZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBmdW5jdGlvbihzQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0aWYgKHNBY3Rpb24gPT09IEFjdGlvbi5PSykge1xuXHRcdFx0XHRcdHJldHVybiBfZXhlY3V0ZUFjdGlvbihvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycylcblx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKG9PcGVyYXRpb246IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlclxuXHRcdFx0XHRcdFx0XHRcdC5zaG93TWVzc2FnZURpYWxvZygpXG5cdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlamVjdChvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyhcblx0c0FjdGlvbk5hbWU6IGFueSxcblx0b0FwcENvbXBvbmVudDogYW55LFxuXHRzQWN0aW9uTGFiZWw6IGFueSxcblx0bVBhcmFtZXRlcnM6IGFueSxcblx0YUFjdGlvblBhcmFtZXRlcnM6IGFueSxcblx0b0FjdGlvbkNvbnRleHQ6IGFueSxcblx0b1BhcmVudENvbnRyb2w6IGFueSxcblx0ZW50aXR5U2V0TmFtZTogYW55LFxuXHRtZXNzYWdlSGFuZGxlcjogYW55XG4pIHtcblx0Y29uc3Qgc1BhdGggPSBfZ2V0UGF0aChvQWN0aW9uQ29udGV4dCwgc0FjdGlvbk5hbWUpLFxuXHRcdG1ldGFNb2RlbCA9IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCkub01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdGVudGl0eVNldENvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGgpLFxuXHRcdHNBY3Rpb25OYW1lUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpXG5cdFx0XHQ/IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AJHVpNS5vdmVybG9hZC8wXCIpWzBdXG5cdFx0XHQ6IG9BY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi8wXCIpWzBdLFxuXHRcdGFjdGlvbk5hbWVDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25OYW1lUGF0aCksXG5cdFx0c0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQWN0aW9uUGFyYW1ldGVyRGlhbG9nXCI7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0Y29uc3Qgb1BhcmFtZXRlck1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdFx0fSk7XG5cdFx0bGV0IGFGaWVsZEludmFsaWQ6IGFueVtdID0gW107XG5cdFx0bGV0IGFGb3JtRWxlbWVudHM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgbUZpZWxkVmFsdWVNYXA6IGFueSA9IHt9O1xuXHRcdGNvbnN0IHZhbGlkYXRlUmVxdWlyZWRQcm9wZXJ0aWVzID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGFGb3JtRWxlbWVudHNcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uKG9Gb3JtRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmllbGQgPSBvRm9ybUVsZW1lbnQuZ2V0RmllbGRzKClbMF07XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0ZpZWxkLmdldFJlcXVpcmVkKCkgJiYgb0ZpZWxkLmdldFZhbHVlU3RhdGUoKSAhPT0gXCJFcnJvclwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm1hcChmdW5jdGlvbihvRm9ybUVsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvRm9ybUVsZW1lbnQuZ2V0RmllbGRzKClbMF0uaXNBKFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIilcblx0XHRcdFx0XHRcdFx0PyBvRm9ybUVsZW1lbnQuZ2V0RmllbGRzKClbMF0uZ2V0SXRlbXMoKVxuXHRcdFx0XHRcdFx0XHQ6IG9Gb3JtRWxlbWVudC5nZXRGaWVsZHMoKVswXS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Gb3JtRWxlbWVudC5nZXRMYWJlbCgpLmdldFRleHQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0KS50aGVuKGZ1bmN0aW9uKGFSZXN1bHRzOiBhbnlbXSkge1xuXHRcdFx0XHRhUmVzdWx0cyA9IGFSZXN1bHRzLmZpbHRlcihmdW5jdGlvbihyZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBhUmVzdWx0cztcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y29uc3QgX3ZhbGlkYXRlTWVzc2FnZXMgPSBmdW5jdGlvbihhQWN0aW9uUGFyYW1ldGVyczogYW55LCBhRmllbGRJbnZhbGlkOiBhbnksIGJDbGVhclRhcmdldD86IGJvb2xlYW4pIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHRcdGNvbnN0IGFNZXNzYWdlcyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cblx0XHRcdGFGaWVsZEludmFsaWQgPSBhRmllbGRJbnZhbGlkIHx8IFtdO1xuXG5cdFx0XHRhQWN0aW9uUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uKG9BY3Rpb25QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlciA9IG9BY3Rpb25QYXJhbWV0ZXJzLiROYW1lO1xuXHRcdFx0XHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbihvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1BhcmFtID0gc1BhcmFtZXRlci5yZXBsYWNlKFwiLWlubmVyXCIsIFwiXCIpO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdG9NZXNzYWdlLmNvbnRyb2xJZHMubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdFx0KG9NZXNzYWdlLmdldENvbnRyb2xJZCgpLmluY2x1ZGVzKFwiQVBEXzo6XCIgKyBzUGFyYW1ldGVyKSB8fFxuXHRcdFx0XHRcdFx0XHQob01lc3NhZ2UuZ2V0Q29udHJvbElkKCkuaW5jbHVkZXMoXCJBUERfOjpcIiArIHNQYXJhbWV0ZXIgKyBcImlubmVyXCIpICYmXG5cdFx0XHRcdFx0XHRcdFx0YUZpZWxkSW52YWxpZC5pbmRleE9mKFwiQVBEXzo6XCIgKyBzUGFyYW0pIDwgMCkpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoYkNsZWFyVGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhRmllbGRJbnZhbGlkLnB1c2goXCJBUERfOjpcIiArIHNQYXJhbSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIEhhbmRsZSBtZXNzYWdlcyByZWxhdGVkIHRvIGlucHV0IHdpdGggaW52YWxpZCB0b2tlblxuXHRcdFx0XHRcdGlmIChvTWVzc2FnZS50YXJnZXQuaW5jbHVkZXMoXCJBUERfOjpcIiArIHNQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdFx0XHRhRmllbGRJbnZhbGlkLnB1c2goXCJBUERfOjpcIiArIHNQYXJhbSk7XG5cdFx0XHRcdFx0XHRvTWVzc2FnZS50YXJnZXQgPSBiQ2xlYXJUYXJnZXQgPyBcIlwiIDogb01lc3NhZ2UudGFyZ2V0O1xuXHRcdFx0XHRcdFx0aWYgKGJDbGVhclRhcmdldCkge1xuXHRcdFx0XHRcdFx0XHRvTWVzc2FnZU1hbmFnZXIucmVtb3ZlTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhRmllbGRJbnZhbGlkO1xuXHRcdH07XG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB7XG5cdFx0XHRoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRjb25zdCBvRmllbGQgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdGNvbnN0IHNGaWVsZElkID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImlkXCIpO1xuXHRcdFx0XHRjb25zdCBvRmllbGRQcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIik7XG5cdFx0XHRcdGlmIChvRmllbGRQcm9taXNlKSB7XG5cdFx0XHRcdFx0bUZpZWxkVmFsdWVNYXBbc0ZpZWxkSWRdID0gb0ZpZWxkUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9GaWVsZC5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF92YWxpZGF0ZU1lc3NhZ2VzKGFBY3Rpb25QYXJhbWV0ZXJzLCBhRmllbGRJbnZhbGlkKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRcdFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0XHRvRnJhZ21lbnQsXG5cdFx0XHRcdHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0YWN0aW9uTmFtZTogYWN0aW9uTmFtZUNvbnRleHQsXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGVudGl0eVNldENvbnRleHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0YWN0aW9uOiBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0YWN0aW9uTmFtZTogYWN0aW9uTmFtZUNvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHQpXG5cdFx0XHQudGhlbihmdW5jdGlvbihvRnJhZ21lbnQ6IGFueSkge1xuXHRcdFx0XHQvLyBUT0RPOiBtb3ZlIHRoZSBkaWFsb2cgaW50byB0aGUgZnJhZ21lbnQgYW5kIG1vdmUgdGhlIGhhbmRsZXJzIHRvIHRoZSBvQ29udHJvbGxlclxuXHRcdFx0XHRsZXQgYUNvbnRleHRzOiBhbnlbXTtcblx0XHRcdFx0Y29uc3QgYUZ1bmN0aW9uUGFyYW1zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRsZXQgb09wZXJhdGlvbkJpbmRpbmc6IGFueTtcblx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnNldFVzZXJEZWZhdWx0cyhvQXBwQ29tcG9uZW50LCBhQWN0aW9uUGFyYW1ldGVycywgb1BhcmFtZXRlck1vZGVsLCB0cnVlKS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoeyBkZWZpbml0aW9uOiBvRnJhZ21lbnQsIGNvbnRyb2xsZXI6IG9Db250cm9sbGVyIH0pLnRoZW4oZnVuY3Rpb24ob0RpYWxvZ0NvbnRlbnQ6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gb1BhcmVudENvbnRyb2wuZ2V0Q29udHJvbGxlcigpLm9SZXNvdXJjZUJ1bmRsZTtcblx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHVuZGVmaW5lZCwge1xuXHRcdFx0XHRcdFx0XHR0aXRsZTpcblx0XHRcdFx0XHRcdFx0XHRzQWN0aW9uTGFiZWwgfHxcblx0XHRcdFx0XHRcdFx0XHRDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnRdLFxuXHRcdFx0XHRcdFx0XHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKGdlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCBzQWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSksIHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBzQWN0aW9uTGFiZWwgfHwgQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIiwgb1Jlc291cmNlQnVuZGxlKSxcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWxpZGF0ZVJlcXVpcmVkUHJvcGVydGllcygpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKGFFbXB0eU1hbmRhdG9yeUZpZWxkczogYW55W10pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUVtcHR5TWFuZGF0b3J5RmllbGRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFFbXB0eU1hbmRhdG9yeUZpZWxkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvTWVzc2FnZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NSVNTSU5HX01BTkRBVE9SWV9NU0dcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFFbXB0eU1hbmRhdG9yeUZpZWxkc1tpXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29kZTogMjAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiRXJyb3JcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tTWVzc2FnZXM6IG9NZXNzYWdlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUZpZWxkSW52YWxpZCA9IF92YWxpZGF0ZU1lc3NhZ2VzKGFBY3Rpb25QYXJhbWV0ZXJzLCBhRmllbGRJbnZhbGlkKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRJbnZhbGlkLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuc2hvd1VuYm91bmRNZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRCdXN5TG9ja2VyLmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobUZpZWxkVmFsdWVNYXApLm1hcChmdW5jdGlvbihzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1GaWVsZFZhbHVlTWFwW3NLZXldO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogZHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIG1vdmUgcGFyYW1ldGVyIHZhbHVlcyBmcm9tIERpYWxvZyAoU2ltcGxlRm9ybSkgdG8gbVBhcmFtZXRlcnMuYWN0aW9uUGFyYW1ldGVycyBzbyB0aGF0IHRoZXkgYXJlIGF2YWlsYWJsZSBpbiB0aGUgb3BlcmF0aW9uIGJpbmRpbmdzIGZvciBhbGwgY29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHZQYXJhbWV0ZXJWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlckNvbnRleHQgPSBvT3BlcmF0aW9uQmluZGluZyAmJiBvT3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhQWN0aW9uUGFyYW1ldGVyc1tpXS4kaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhTVZGQ29udGVudCA9IG9EaWFsb2dcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldFByb3BlcnR5KFwiL1wiICsgYUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGogaW4gYU1WRkNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUtleVZhbHVlcy5wdXNoKGFNVkZDb250ZW50W2pdLktleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBhS2V5VmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyVmFsdWUgPSBvUGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eShhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLnZhbHVlID0gdlBhcmFtZXRlclZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob09wZXJhdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJIYXNFdGFnTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5tb2RpZnlFVGFnTWVzc2FnZXNPbmx5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJIYXNFdGFnTWVzc2FnZTogYkhhc0V0YWdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nICYmIGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTsgLy9jbG9zZSB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgYWZ0ZXIgcmVmcmVzaCBvZiB0aGUgY29udGV4dCBhZnRlciBldGFnIG1pc21hdGNoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZmluYWxseShmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdF92YWxpZGF0ZU1lc3NhZ2VzKGFBY3Rpb25QYXJhbWV0ZXJzLCBhRmllbGRJbnZhbGlkLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGJlZm9yZU9wZW46IGZ1bmN0aW9uKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY2xvbmUgZXZlbnQgZm9yIGFjdGlvbldyYXBwZXIgYXMgb0V2ZW50Lm9Tb3VyY2UgZ2V0cyBsb3N0IGR1cmluZyBwcm9jZXNzaW5nIG9mIGJlZm9yZU9wZW4gZXZlbnQgaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9DbG9uZUV2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgb0V2ZW50KTtcblxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9EaWFsb2cuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2cgPSBmdW5jdGlvbihzQmluZGluZ1BhcmFtZXRlcj86IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JvdW5kRnVuY3Rpb25OYW1lID0gZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcmVmaWxsUGFyYW1ldGVyID0gZnVuY3Rpb24oc1BhcmFtTmFtZTogYW55LCB2UGFyYW1EZWZhdWx0VmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxOiBUaGVyZSBpcyBhIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbURlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDAgJiYgdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9taXNlID0gQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9taXNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob1ZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldFBhcmFtZXRlckNvbnRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkodlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudGhlbihmdW5jdGlvbih2UGFyYW1WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzUGF0aEZvckNvbnRleHQgPSB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzUGF0aEZvckNvbnRleHQuaW5kZXhPZihzQmluZGluZ1BhcmFtZXRlciArIFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXRoRm9yQ29udGV4dCA9IHNQYXRoRm9yQ29udGV4dC5yZXBsYWNlKHNCaW5kaW5nUGFyYW1ldGVyICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0c1tpXS5nZXRQcm9wZXJ0eShzUGF0aEZvckNvbnRleHQpICE9PSB2UGFyYW1WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlcyBmcm9tIHRoZSBjb250ZXh0cyBhcmUgbm90IGFsbCB0aGUgc2FtZSwgZG8gbm90IHByZWZpbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJOb1Bvc3NpYmxlVmFsdWU6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbVZhbHVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2ltcGx5IGNsZWFyIHBhcmFtZXRlciBkZWZhdWx0IGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbURlZmF1bHRWYWx1ZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAyOiBUaGVyZSBpcyBubyBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvbiAoPT4gbG9vayBpbnRvIHRoZSBGTFAgVXNlciBEZWZhdWx0cylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1ldGVyTW9kZWwgJiYgKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24oc1BhcmFtTmFtZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvRGlhbG9nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uVGFyZ2V0ID0gc0FjdGlvblBhdGggKyBcIi9cIiArIHNQYXJhbU5hbWUgKyBcIkBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblRhcmdldCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcIl07IC8vIGVpdGhlciB7ICRQYXRoOiAnc29tZVBhdGgnIH0gb3IgJ3NvbWVTdHJpbmcnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlKHNQYXJhbU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnB1c2gocHJlZmlsbFBhcmFtZXRlcihzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmIHNCb3VuZEZ1bmN0aW9uTmFtZS5sZW5ndGggPiAwICYmIHR5cGVvZiBzQm91bmRGdW5jdGlvbk5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVByZWZpbGxQYXJhbVByb21pc2VzID0gUHJvbWlzZS5hbGwoYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgYUV4ZWNGdW5jdGlvblByb21pc2VzOiBQcm9taXNlPGFueVtdPiA9IFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgb0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZ1bmN0aW9uUGFyYW1zICYmIGFGdW5jdGlvblBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFGdW5jdGlvblBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNNb2R1bGUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlID0gRlBNSGVscGVyLmFjdGlvbldyYXBwZXIob0Nsb25lRXZlbnQsIHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbnRleHRzXCI6IGFDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0UHJvbWlzZS5hbGwoW2FQcmVmaWxsUGFyYW1Qcm9taXNlcywgYUV4ZWNGdW5jdGlvblByb21pc2VzLCBvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZV0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKGFQcm9taXNlczogW2FueVtdLCBhbnlbXSwgYW55XSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWU6IGFueSA9IGFQcm9taXNlc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXMgPSBhUHJvbWlzZXNbMV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ID0gYVByb21pc2VzWzJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzRGlhbG9nUGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0RpYWxvZ1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Lmhhc093blByb3BlcnR5KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdFtzRGlhbG9nUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLnZhbHVlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBkZXRlcm1pbmVkIGR1ZSB0byBkaWZmZXJlbnQgY29udGV4dHMsIHdlIGRvIG5vdGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgIWFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtc1tqXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXNbaiArIDFdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUZ1bmN0aW9uUGFyYW1zW2ogKyAxXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PT0gYUNvbnRleHRzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vT25seSBvbmUgY29udGV4dCwgdGhlbiB0aGUgZGVmYXVsdCBwYXJhbSB2YWx1ZXMgYXJlIHRvIGJlIHZlcmlmaWVkIGZyb20gdGhlIGZ1bmN0aW9uOlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGdW5jdGlvblBhcmFtc1swXSAmJiBhRnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBiRXJyb3JGb3VuZCA9IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUuc29tZShmdW5jdGlvbihvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX0xBVEVfUFJPUEVSVFlcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNUZXh0LCB7IGNvbnRlbnRXaWR0aDogXCIyNWVtXCIgfSBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlciA9IGFQYXJhbWV0ZXJzWzBdICYmIGFQYXJhbWV0ZXJzWzBdLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzWzBdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob0NvbnRleHRPYmplY3Q6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dE9iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHNCaW5kaW5nUGFyYW1ldGVyLCBvQ29udGV4dE9iamVjdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nKHNCaW5kaW5nUGFyYW1ldGVyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YUZvcm1FbGVtZW50cyA9IG9EaWFsb2dDb250ZW50XG5cdFx0XHRcdFx0XHRcdC5nZXRBZ2dyZWdhdGlvbihcImZvcm1cIilcblx0XHRcdFx0XHRcdFx0LmdldEFnZ3JlZ2F0aW9uKFwiZm9ybUNvbnRhaW5lcnNcIilbMF1cblx0XHRcdFx0XHRcdFx0LmdldEFnZ3JlZ2F0aW9uKFwiZm9ybUVsZW1lbnRzXCIpO1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdFx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHRcdFx0XHRsZXQgc0FjdGlvblBhdGggPSBzQWN0aW9uTmFtZSArIFwiKC4uLilcIjtcblx0XHRcdFx0XHRcdGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0XHRcdFx0XHRcdGlmICghYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IFwiL1wiICsgc0FjdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0XHRcdFx0cGF0aDogc0FjdGlvblBhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChhQ29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nID0gb0RpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvblBhcmFtZXRlcnMob0FjdGlvbjogYW55LCBhUHJlZGVmaW5lZFBhcmFtZXRlcnM6IGFueSkge1xuXHQvLyBjaGVjayBpZiBwYXJhbWV0ZXJzIGV4aXN0IGF0IGFsbFxuXHRjb25zdCBhUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cdGFQcmVkZWZpbmVkUGFyYW1ldGVycyA9IGFQcmVkZWZpbmVkUGFyYW1ldGVycyB8fCBbXTtcblxuXHRpZiAoYVByZWRlZmluZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBUT0RPOiBtZXJnZSB0aGUgcHJlZGVmaW5lZCBvbmNlIHdpdGggdGhlIHJlYWwgZXhpc3Rpbmcgb25lXG5cdH1cblxuXHRyZXR1cm4gYVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25QYXJhbWV0ZXJzKG9BY3Rpb246IGFueSkge1xuXHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKSB8fCBbXTtcblx0aWYgKGFQYXJhbWV0ZXJzICYmIGFQYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHQvL2luIGNhc2Ugb2YgYm91bmQgYWN0aW9ucywgaWdub3JlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYW5kIGNvbnNpZGVyIHRoZSByZXN0XG5cdFx0XHRyZXR1cm4gYVBhcmFtZXRlcnMuc2xpY2UoMSwgYVBhcmFtZXRlcnMubGVuZ3RoKSB8fCBbXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnksIGNvbnRleHRzPzogYW55LCBvQm91bmRBY3Rpb24/OiBhbnkpIHtcblx0Y29uc3QgdkFjdGlvbkNyaXRpY2FsID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiKTtcblx0bGV0IHNDcml0aWNhbFBhdGggPSB2QWN0aW9uQ3JpdGljYWwgJiYgdkFjdGlvbkNyaXRpY2FsLiRQYXRoO1xuXHRpZiAoIXNDcml0aWNhbFBhdGgpIHtcblx0XHQvLyB0aGUgc3RhdGljIHZhbHVlIHNjZW5hcmlvIGZvciBpc0FjdGlvbkNyaXRpY2FsXG5cdFx0cmV0dXJuICEhdkFjdGlvbkNyaXRpY2FsO1xuXHR9XG5cdGNvbnN0IGFCaW5kaW5nUGFyYW1zID0gb0JvdW5kQWN0aW9uICYmIG9Cb3VuZEFjdGlvbi5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpLFxuXHRcdGFQYXRocyA9IHNDcml0aWNhbFBhdGggJiYgc0NyaXRpY2FsUGF0aC5zcGxpdChcIi9cIiksXG5cdFx0YkNvbmRpdGlvbiA9XG5cdFx0XHRhQmluZGluZ1BhcmFtcyAmJiBhQmluZGluZ1BhcmFtcy5sZW5ndGggJiYgdHlwZW9mIGFCaW5kaW5nUGFyYW1zID09PSBcIm9iamVjdFwiICYmIHNDcml0aWNhbFBhdGggJiYgY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoO1xuXHRpZiAoYkNvbmRpdGlvbikge1xuXHRcdC8vaW4gY2FzZSBiaW5kaW5nIHBhdGFtZXRlcnMgYXJlIHRoZXJlIGluIHBhdGggbmVlZCB0byByZW1vdmUgZWc6IC0gX2l0L2lzVmVyaWZpZWQgPT4gbmVlZCB0byByZW1vdmUgX2l0IGFuZCB0aGUgcGF0aCBzaG91bGQgYmUgaXNWZXJpZmllZFxuXHRcdGFCaW5kaW5nUGFyYW1zLmZpbHRlcihmdW5jdGlvbihvUGFyYW1zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYVBhdGhzICYmIGFQYXRocy5pbmRleE9mKG9QYXJhbXMuJE5hbWUpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0YVBhdGhzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c0NyaXRpY2FsUGF0aCA9IGFQYXRocy5qb2luKFwiL1wiKTtcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9IGVsc2UgaWYgKHNDcml0aWNhbFBhdGgpIHtcblx0XHQvL2lmIHNjZW5hcmlvIGlzIHBhdGggYmFzZWQgcmV0dXJuIHRoZSBwYXRoIHZhbHVlXG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fVxufVxuZnVuY3Rpb24gX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdGNvbnN0IGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0Y29uc3Qgb01vZGVsID0gbVBhcmFtZXRlcnMubW9kZWw7XG5cdGNvbnN0IGlFeGlzdGluZ01lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCkubGVuZ3RoIHx8IDA7XG5cdGNvbnN0IGFBY3Rpb25QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMuYUFjdGlvblBhcmFtZXRlcnMgfHwgW107XG5cdGNvbnN0IHNBY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuYWN0aW9uTmFtZTtcblx0Y29uc3QgZm5PblN1Ym1pdHRlZCA9IG1QYXJhbWV0ZXJzLmZuT25TdWJtaXR0ZWQ7XG5cdGNvbnN0IGZuT25SZXNwb25zZSA9IG1QYXJhbWV0ZXJzLmZuT25SZXNwb25zZTtcblx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRsZXQgYkFjdGlvblBhcmFtZXRlcnNFeGlzdCA9IGZhbHNlO1xuXHRsZXQgb0FjdGlvbjogYW55O1xuXG5cdGZ1bmN0aW9uIGZuRGlmZmVyZW50aWF0ZShwcm9taXNlOiBhbnkpIHtcblx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2U6IGFueSkge1xuXHRcdFx0XHRjb25zdCBhTWVzc2FnZXMgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXMoKTtcblx0XHRcdFx0Ly8gQWN0aW9uIERpYWxvZyBtdXN0IHJlbWFpbiBvcGVuIGlmIHRoZXJlIGFyZSByZXNwb25zZSBlcnJvci1tZXNzYWdlcywgYmVjYXVzZSBpbiB0aGUgamF2YSBzdGFjayB0aGUgZGlhbG9nIHdvdWxkIGJlIGNsb3NlZCBpbW1lZGlhdGVseS5cblx0XHRcdFx0aWYgKGFNZXNzYWdlcy5sZW5ndGggPiBpRXhpc3RpbmdNZXNzYWdlcyAmJiBhTWVzc2FnZXNbYU1lc3NhZ2VzLmxlbmd0aCAtIDFdLnR5cGUgPT09IFwiRXJyb3JcIikge1xuXHRcdFx0XHRcdHJldHVybiB7IHJlc3BvbnNlOiByZXNwb25zZSwgc3RhdHVzOiBcInJlamVjdGVkXCIgfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UsIHN0YXR1czogXCJyZXNvbHZlZFwiIH07XG5cdFx0XHR9LFxuXHRcdFx0ZnVuY3Rpb24ocmVzcG9uc2U6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UsIHN0YXR1czogXCJyZWplY3RlZFwiIH07XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldEFjdGlvblBhcmFtZXRlckRlZmF1bHRWYWx1ZSgpIHtcblx0XHRpZiAoYUFjdGlvblBhcmFtZXRlcnMgJiYgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRiQWN0aW9uUGFyYW1ldGVyc0V4aXN0ID0gdHJ1ZTtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0aWYgKCFhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoYUFjdGlvblBhcmFtZXRlcnNbal0uJFR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uU3RyaW5nXCI6XG5cdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJ5dGVcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uSW50MTZcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uSW50NjRcIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdC8vIHRiY1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG9BY3Rpb24uc2V0UGFyYW1ldGVyKGFBY3Rpb25QYXJhbWV0ZXJzW2pdLiROYW1lLCBhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgbUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzO1xuXHRcdFx0Y29uc3QgYkdyb3VwZWQgPSBtUGFyYW1ldGVycy5iR3JvdXBlZDtcblx0XHRcdGNvbnN0IGJSZXR1cm5Bc0FycmF5ID0gbVBhcmFtZXRlcnMuYlJldHVybkFzQXJyYXk7XG5cdFx0XHRjb25zdCBiR2V0Qm91bmRDb250ZXh0ID0gbVBhcmFtZXRlcnMuYkdldEJvdW5kQ29udGV4dDtcblx0XHRcdGNvbnN0IGFBY3Rpb25Qcm9taXNlczogYW55W10gPSBbXTtcblx0XHRcdGxldCBvQWN0aW9uUHJvbWlzZTtcblx0XHRcdGxldCBpO1xuXHRcdFx0bGV0IHNHcm91cElkOiBzdHJpbmc7XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVBY3Rpb24gPSBmdW5jdGlvbihvQWN0aW9uOiBhbnksIGluZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnkpIHtcblx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBuZWVkIGJhdGNoIGdyb3VwIHBlciBhY3Rpb24gY2FsbFxuXHRcdFx0XHRzR3JvdXBJZCA9ICFiR3JvdXBlZCA/IFwiJGF1dG8uXCIgKyBpbmRleCA6IG9BY3Rpb24uZ2V0VXBkYXRlR3JvdXBJZCgpO1xuXHRcdFx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdFx0XHQ/IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCkudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdDogb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0XHRcdFx0YUFjdGlvblByb21pc2VzLnB1c2gob0FjdGlvblByb21pc2UpO1xuXHRcdFx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBhY3Rpb25zIGZyb20gc2lkZSBlZmZlY3RzXG5cdFx0XHRcdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucyAmJiBvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHNUcmlnZ2VyQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0XHRcdFx0Ly8gYXMgd2UgbW92ZSB0aGUgbWVzc2FnZXMgcmVxdWVzdCB0byBQT1NUICRzZWxlY3Qgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gZW1wdHkgYXJyYXlcblx0XHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2Vcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMob1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLCBvU2lkZUVmZmVjdC5jb250ZXh0LCBzR3JvdXBJZClcblx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmIG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBmbkV4ZWN1dGVTaW5nbGVBY3Rpb24gPSBmdW5jdGlvbihvQWN0aW9uOiBhbnksIGluZGV4OiBhbnksIG9TaWRlRWZmZWN0OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb1Byb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcblx0XHRcdFx0XHRsZXQgb0xvY2FsUHJvbWlzZTtcblx0XHRcdFx0XHRjb25zdCBhTG9jYWxQcm9taXNlID0gW107XG5cdFx0XHRcdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdFx0c0dyb3VwSWQgPSBcImFwaU1vZGVcIiArIGluZGV4O1xuXHRcdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gYkdldEJvdW5kQ29udGV4dFxuXHRcdFx0XHRcdFx0PyBvQWN0aW9uLmV4ZWN1dGUoc0dyb3VwSWQpLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdFx0XHQgIH0pXG5cdFx0XHRcdFx0XHQ6IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCk7XG5cblx0XHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRcdFx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdFx0XHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0XHRcdFx0XHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMgJiYgb1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHNUcmlnZ2VyQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0b0xvY2FsUHJvbWlzZSA9IG9TaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihzVHJpZ2dlckFjdGlvbiwgb1NpZGVFZmZlY3QuY29udGV4dCwgc0dyb3VwSWQpO1xuXHRcdFx0XHRcdFx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHJlcXVlc3Qgc2lkZSBlZmZlY3RzIGZvciB0aGlzIGFjdGlvblxuXHRcdFx0XHRcdC8vIGFzIHdlIG1vdmUgdGhlIG1lc3NhZ2VzIHJlcXVlc3QgdG8gUE9TVCAkc2VsZWN0IHdlIG5lZWQgdG8gYmUgcHJlcGFyZWQgZm9yIGFuIGVtcHR5IGFycmF5XG5cdFx0XHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0xvY2FsUHJvbWlzZSA9IG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucywgb1NpZGVFZmZlY3QuY29udGV4dCwgc0dyb3VwSWQpO1xuXHRcdFx0XHRcdFx0YUxvY2FsUHJvbWlzZS5wdXNoKG9Mb2NhbFByb21pc2UpO1xuXHRcdFx0XHRcdFx0b0xvY2FsUHJvbWlzZVxuXHRcdFx0XHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwICYmIG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRDb21tb25VdGlscy5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRcdFx0XHRQcm9taXNlLmFsbChhTG9jYWxQcm9taXNlKVxuXHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gb1Byb21pc2U7XG5cdFx0XHR9O1xuXG5cdFx0XHRmdW5jdGlvbiBmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoYUNvbnRleHRzOiBhbnkpIHtcblx0XHRcdFx0Ly8gT25lIGFjdGlvbiBhbmQgaXRzIHNpZGUgZWZmZWN0cyBhcmUgY29tcGxldGVkIGJlZm9yZSB0aGUgbmV4dCBhY3Rpb24gaXMgZXhlY3V0ZWRcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXHRcdFx0XHRmdW5jdGlvbiBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChzQWN0aW9uTmFtZSArIFwiKC4uLilcIiwgY29udGV4dCwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRyZXR1cm4gZm5FeGVjdXRlU2luZ2xlQWN0aW9uKG9BY3Rpb24sIGksIHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IGNvbnRleHQsXG5cdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IG9BY3Rpb25BbmRTaWRlRWZmZWN0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRsZXQgaiA9IDA7XG5cdFx0XHRcdGFDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGlkID0gKytqO1xuXHRcdFx0XHRcdG9BY3Rpb25BbmRTaWRlRWZmZWN0UHJvbWlzZSA9IG9BY3Rpb25BbmRTaWRlRWZmZWN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHByb2Nlc3NPbmVBY3Rpb24oY29udGV4dCwgaWQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0b0FjdGlvbkFuZFNpZGVFZmZlY3RQcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVJlc3VsdHMoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobVBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgJiYgIWJHcm91cGVkKSB7XG5cdFx0XHRcdC8vIEZvciBpbnZvY2F0aW9uIGdyb3VwaW5nIFwiaXNvbGF0ZWRcIiBjYWxsZWQgZnJvbSBPYmplY3RQYWdlLCBlbnN1cmUgdGhhdCBlYWNoIGFjdGlvbiBhbmQgbWF0Y2hpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIGFyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBuZXh0IHNldCBpcyBzdWJtaXR0ZWQuIFdvcmthcm91bmQgdW50aWwgSlNPTiBiYXRjaCBpcyBhdmFpbGFibGUuXG5cdFx0XHRcdGZuRXhlY3V0ZVNlcXVlbnRpYWxseShhQ29udGV4dHMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGFDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoc0FjdGlvbk5hbWUgKyBcIiguLi4pXCIsIGFDb250ZXh0c1tpXSwgbUJpbmRpbmdQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRmbkV4ZWN1dGVBY3Rpb24ob0FjdGlvbiwgYUNvbnRleHRzLmxlbmd0aCA8PSAxID8gbnVsbCA6IGksIHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IGFDb250ZXh0c1tpXSxcblx0XHRcdFx0XHRcdHBhdGhFeHByZXNzaW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0KFxuXHRcdFx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KShhQWN0aW9uUHJvbWlzZXMpO1xuXHRcdFx0XHRmbkhhbmRsZVJlc3VsdHMoKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gZm5IYW5kbGVSZXN1bHRzKCkge1xuXHRcdFx0XHRQcm9taXNlLmFsbChhQWN0aW9uUHJvbWlzZXMubWFwKGZuRGlmZmVyZW50aWF0ZSkpXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ocmVzdWx0czogYW55W10pIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFSZWplY3RlZEl0ZW1zID0gW107XG5cdFx0XHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRJdGVtcyA9IFtdO1xuXHRcdFx0XHRcdFx0bGV0IGlSZXN1bHRDb3VudDtcblx0XHRcdFx0XHRcdGZvciAoaVJlc3VsdENvdW50ID0gMDsgaVJlc3VsdENvdW50IDwgcmVzdWx0cy5sZW5ndGg7IGlSZXN1bHRDb3VudCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRzW2lSZXN1bHRDb3VudF0uc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRhUmVqZWN0ZWRJdGVtcy5wdXNoKHJlc3VsdHNbaVJlc3VsdENvdW50XS5yZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKHJlc3VsdHNbaVJlc3VsdENvdW50XS5zdGF0dXMgPT09IFwicmVzb2x2ZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChiSXNDcmVhdGVBY3Rpb24gJiYgYkFjdGlvblBhcmFtZXRlcnNFeGlzdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly9vbmx5IHVzZWQgZm9yIE5ld0FjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0c1tpUmVzdWx0Q291bnRdLmJDb25zaWRlckRvY3VtZW50TW9kaWZpZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0YVJlc29sdmVkSXRlbXMucHVzaChyZXN1bHRzW2lSZXN1bHRDb3VudF0pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZWRJdGVtcy5wdXNoKHJlc3VsdHNbaVJlc3VsdENvdW50XS5yZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIXJlc3VsdHMgfHwgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPT09IDApKSB7XG5cdFx0XHRcdFx0XHRcdHJlamVjdCh0cnVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhUmVqZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKGJSZXR1cm5Bc0FycmF5KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhUmVzb2x2ZWRJdGVtcyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29udGV4dCBpcyBnaXZlbiBkaXJlY3RseSB3aXRob3V0IGFuIGFycmF5IHNvIGFsc28gbm8gYXJyYXkgaXMgZXhwZWN0ZWRcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGFSZXNvbHZlZEl0ZW1zWzBdKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZEl0ZW1zOiBhUmVzb2x2ZWRJdGVtcyxcblx0XHRcdFx0XHRcdFx0XHRyZWplY3RlZEl0ZW1zOiBhUmVqZWN0ZWRJdGVtc1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdFx0fVxuXHRcdH0pLmZpbmFsbHkoZnVuY3Rpb24oKSB7XG5cdFx0XHQoXG5cdFx0XHRcdGZuT25SZXNwb25zZSB8fFxuXHRcdFx0XHRmdW5jdGlvbiBub29wKCkge1xuXHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0fVxuXHRcdFx0KSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiKC4uLilcIik7XG5cdFx0c2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlKCk7XG5cdFx0Y29uc3Qgb0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoXCJhY3Rpb25JbXBvcnRcIik7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKFwiYWN0aW9uSW1wb3J0XCIpO1xuXHRcdC8vIHRyaWdnZXIgb25TdWJtaXR0ZWQgXCJldmVudFwiXG5cdFx0KFxuXHRcdFx0Zm5PblN1Ym1pdHRlZCB8fFxuXHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0LyoqL1xuXHRcdFx0fVxuXHRcdCkob0FjdGlvblByb21pc2UpO1xuXHRcdHJldHVybiBvQWN0aW9uUHJvbWlzZS5maW5hbGx5KGZ1bmN0aW9uKCkge1xuXHRcdFx0KFxuXHRcdFx0XHRmbk9uUmVzcG9uc2UgfHxcblx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHQvKiovXG5cdFx0XHRcdH1cblx0XHRcdCkoKTtcblx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gX2dldFBhdGgob0FjdGlvbkNvbnRleHQ6IGFueSwgc0FjdGlvbk5hbWU6IGFueSkge1xuXHRsZXQgc1BhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCk7XG5cdHNQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KFwiJElzQm91bmRcIikgPyBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdIDogc1BhdGguc3BsaXQoXCIvMFwiKVswXTtcblx0cmV0dXJuIHNQYXRoLnNwbGl0KFwiL1wiICsgc0FjdGlvbk5hbWUpWzBdO1xufVxuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgdG8gY2FsbCBPRGF0YSBhY3Rpb25zIChib3VuZC9pbXBvcnQpIGFuZCBmdW5jdGlvbnMgKGJvdW5kL2ltcG9ydClcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAYWxpYXMgc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3Qgb3BlcmF0aW9ucyA9IHtcblx0Y2FsbEJvdW5kQWN0aW9uOiBjYWxsQm91bmRBY3Rpb24sXG5cdGNhbGxBY3Rpb25JbXBvcnQ6IGNhbGxBY3Rpb25JbXBvcnQsXG5cdGNhbGxCb3VuZEZ1bmN0aW9uOiBjYWxsQm91bmRGdW5jdGlvbixcblx0Y2FsbEZ1bmN0aW9uSW1wb3J0OiBjYWxsRnVuY3Rpb25JbXBvcnRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wZXJhdGlvbnM7XG4iXX0=
1096
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9wZXJhdGlvbnMudHMiXSwibmFtZXMiOlsiQ29uc3RhbnRzIiwiRkVMaWJyYXJ5IiwiSW52b2NhdGlvbkdyb3VwaW5nIiwiQWN0aW9uIiwiTWVzc2FnZUJveCIsImNhbGxCb3VuZEFjdGlvbiIsInNBY3Rpb25OYW1lIiwiY29udGV4dHMiLCJvTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwibVBhcmFtZXRlcnMiLCJsZW5ndGgiLCJQcm9taXNlIiwicmVqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiYlJldHVybkFzQXJyYXkiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0FjdGlvblBhdGgiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJvQm91bmRBY3Rpb24iLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImFDb250ZXh0cyIsImlzQ3JpdGljYWxBY3Rpb24iLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwiY2FsbEFjdGlvbiIsImNhbGxBY3Rpb25JbXBvcnQiLCJiaW5kQ29udGV4dCIsIm9BY3Rpb25JbXBvcnQiLCJnZXRPYmplY3QiLCJjYWxsQm91bmRGdW5jdGlvbiIsInNGdW5jdGlvbk5hbWUiLCJjb250ZXh0Iiwic0Z1bmN0aW9uUGF0aCIsIm9Cb3VuZEZ1bmN0aW9uIiwiX2V4ZWN1dGVGdW5jdGlvbiIsImNhbGxGdW5jdGlvbkltcG9ydCIsInJlc29sdmUiLCJvRnVuY3Rpb25JbXBvcnQiLCJvRnVuY3Rpb24iLCJzR3JvdXBJZCIsIkVycm9yIiwib0Z1bmN0aW9uUHJvbWlzZSIsImV4ZWN1dGUiLCJzdWJtaXRCYXRjaCIsInRoZW4iLCJnZXRCb3VuZENvbnRleHQiLCJvQWN0aW9uIiwiYUFjdGlvblBhcmFtZXRlcnMiLCJhY3Rpb25QYXJhbWV0ZXJzIiwibUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMiLCJmbkRpYWxvZyIsIm9BY3Rpb25Qcm9taXNlIiwic0FjdGlvbkxhYmVsIiwibGFiZWwiLCJiU2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyIsInNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJiSXNDcmVhdGVBY3Rpb24iLCJiSXNDcml0aWNhbEFjdGlvbiIsInNNZXRhUGF0aCIsInNNZXNzYWdlc1BhdGgiLCJpTWVzc2FnZVNpZGVFZmZlY3QiLCJwcmVwYXJlQWN0aW9uUGFyYW1ldGVycyIsImNvbmZpcm1Dcml0aWNhbEFjdGlvbiIsImZuT25TdWJtaXR0ZWQiLCJvblN1Ym1pdHRlZCIsImZuT25SZXNwb25zZSIsIm9uUmVzcG9uc2UiLCJhY3Rpb25OYW1lIiwibW9kZWwiLCJiR2V0Qm91bmRDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiYWRkaXRpb25hbFNpZGVFZmZlY3QiLCJwYXRoRXhwcmVzc2lvbnMiLCJmaW5kSW5kZXgiLCJleHAiLCIkUHJvcGVydHlQYXRoIiwibUJpbmRpbmdQYXJhbWV0ZXJzIiwiJHNlbGVjdCIsInNwbGl0IiwiaW5kZXhPZiIsInRyaWdnZXJBY3Rpb25zIiwic3BsaWNlIiwiYkdyb3VwZWQiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJDaGFuZ2VTZXQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImJPYmplY3RQYWdlIiwicGFyZW50Q29udHJvbCIsImVudGl0eVNldE5hbWUiLCJtZXNzYWdlSGFuZGxlciIsIl9leGVjdXRlQWN0aW9uIiwib09wZXJhdGlvblJlc3VsdCIsImNhdGNoIiwib0FjdGlvbkNvbnRleHQiLCJvUGFyZW50Q29udHJvbCIsImJvdW5kQWN0aW9uTmFtZSIsInN1ZmZpeFJlc291cmNlS2V5Iiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0Q29udHJvbGxlciIsInNDb25maXJtYXRpb25UZXh0IiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImNvbmZpcm0iLCJvbkNsb3NlIiwic0FjdGlvbiIsIk9LIiwib09wZXJhdGlvbiIsIm9FcnJvciIsInNob3dNZXNzYWdlRGlhbG9nIiwic1BhdGgiLCJfZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZW50aXR5U2V0Q29udGV4dCIsInNBY3Rpb25OYW1lUGF0aCIsImFjdGlvbk5hbWVDb250ZXh0Iiwic0ZyYWdtZW50TmFtZSIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib1BhcmFtZXRlck1vZGVsIiwiSlNPTk1vZGVsIiwiJGRpc3BsYXlNb2RlIiwiYUZpZWxkSW52YWxpZCIsImFGb3JtRWxlbWVudHMiLCJtRmllbGRWYWx1ZU1hcCIsInZhbGlkYXRlUmVxdWlyZWRQcm9wZXJ0aWVzIiwiYWxsIiwiZmlsdGVyIiwib0Zvcm1FbGVtZW50Iiwib0ZpZWxkIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZVN0YXRlIiwibWFwIiwidmFsdWUiLCJpc0EiLCJnZXRJdGVtcyIsImdldFZhbHVlIiwidW5kZWZpbmVkIiwiZ2V0TGFiZWwiLCJnZXRUZXh0IiwiYVJlc3VsdHMiLCJyZXN1bHQiLCJfdmFsaWRhdGVNZXNzYWdlcyIsImJDbGVhclRhcmdldCIsIm9NZXNzYWdlTWFuYWdlciIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiYU1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZvckVhY2giLCJvQWN0aW9uUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCIkTmFtZSIsIm9NZXNzYWdlIiwic1BhcmFtIiwicmVwbGFjZSIsImNvbnRyb2xJZHMiLCJnZXRDb250cm9sSWQiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwicHVzaCIsInRhcmdldCIsIm9Db250cm9sbGVyIiwiaGFuZGxlQ2hhbmdlIiwib0V2ZW50IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0U291cmNlIiwic0ZpZWxkSWQiLCJnZXRQYXJhbWV0ZXIiLCJvRmllbGRQcm9taXNlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJiaW5kaW5nQ29udGV4dHMiLCJhY3Rpb24iLCJlbnRpdHlTZXQiLCJtb2RlbHMiLCJhRnVuY3Rpb25QYXJhbXMiLCJvT3BlcmF0aW9uQmluZGluZyIsInNldFVzZXJEZWZhdWx0cyIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwib0RpYWxvZ0NvbnRlbnQiLCJvRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJjb250ZW50IiwiZXNjYXBlSGFuZGxlciIsImNsb3NlIiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJnZW5lcmF0ZSIsInRleHQiLCJ0eXBlIiwicHJlc3MiLCJhRW1wdHlNYW5kYXRvcnlGaWVsZHMiLCJvTWVzc2FnZXMiLCJpIiwiY29kZSIsImN1c3RvbU1lc3NhZ2VzIiwibWVzc2FnZUhhbmRsaW5nIiwic2hvd1VuYm91bmRNZXNzYWdlcyIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiT2JqZWN0Iiwia2V5cyIsInNLZXkiLCJ2UGFyYW1ldGVyVmFsdWUiLCJvUGFyYW1ldGVyQ29udGV4dCIsImdldFBhcmFtZXRlckNvbnRleHQiLCIkaXNDb2xsZWN0aW9uIiwiYU1WRkNvbnRlbnQiLCJnZXRQcm9wZXJ0eSIsImFLZXlWYWx1ZXMiLCJqIiwiS2V5IiwiYkhhc0V0YWdNZXNzYWdlIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsInNob3dNZXNzYWdlcyIsImlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nT3BlbiIsIm1lc3NhZ2VQYWdlTmF2aWdhdGlvbkNhbGxiYWNrIiwiZmluYWxseSIsInVubG9jayIsImVuZEJ1dHRvbiIsIkNhbmNlbEFjdGlvbkRpYWxvZyIsImJlZm9yZU9wZW4iLCJvQ2xvbmVFdmVudCIsImFzc2lnbiIsImdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInNEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZyIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0JvdW5kRnVuY3Rpb25OYW1lIiwicHJlZmlsbFBhcmFtZXRlciIsInNQYXJhbU5hbWUiLCJ2UGFyYW1EZWZhdWx0VmFsdWUiLCIkUGF0aCIsIm9Qcm9taXNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5Iiwib1ZhbHVlIiwicmVxdWVzdFByb3BlcnR5IiwidlBhcmFtVmFsdWUiLCJzUGF0aEZvckNvbnRleHQiLCJwYXJhbU5hbWUiLCJiTm9Qb3NzaWJsZVZhbHVlIiwiTG9nIiwiZXJyb3IiLCJiTGF0ZVByb3BlcnR5RXJyb3IiLCJvRGF0YSIsImdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsInNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uVGFyZ2V0Iiwib1BhcmFtZXRlckFubm90YXRpb25zIiwib1BhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUiLCJ2UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYVByZWZpbGxQYXJhbVByb21pc2VzIiwiYUV4ZWNGdW5jdGlvblByb21pc2VzIiwib0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2UiLCJzTW9kdWxlIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJGUE1IZWxwZXIiLCJhY3Rpb25XcmFwcGVyIiwiYVByb21pc2VzIiwib0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Iiwic0RpYWxvZ1BhcmFtTmFtZSIsImhhc093blByb3BlcnR5Iiwic2V0UGFyYW1ldGVyIiwiYkVycm9yRm91bmQiLCJzb21lIiwic1RleHQiLCJ3YXJuaW5nIiwiY29udGVudFdpZHRoIiwiYVBhcmFtZXRlcnMiLCJyZXF1ZXN0T2JqZWN0Iiwib0NvbnRleHRPYmplY3QiLCJhZnRlckNsb3NlIiwiZGVzdHJveSIsImdldEFnZ3JlZ2F0aW9uIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsInBhdGgiLCJvTVZGTW9kZWwiLCJhZGREZXBlbmRlbnQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdEJpbmRpbmciLCJvcGVuIiwiYVByZWRlZmluZWRQYXJhbWV0ZXJzIiwiZ2V0QWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwidkFjdGlvbkNyaXRpY2FsIiwic0NyaXRpY2FsUGF0aCIsImFCaW5kaW5nUGFyYW1zIiwiYVBhdGhzIiwiYkNvbmRpdGlvbiIsIm9QYXJhbXMiLCJpbmRleCIsImpvaW4iLCJleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwiYmluZCIsIm9wZXJhdGlvbnMiLCJpRXhpc3RpbmdNZXNzYWdlcyIsImdldE1lc3NhZ2VzIiwiZm5EaWZmZXJlbnRpYXRlIiwicHJvbWlzZSIsInJlc3BvbnNlIiwic3RhdHVzIiwic2V0QWN0aW9uUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiJFR5cGUiLCJhQWN0aW9uUHJvbWlzZXMiLCJmbkV4ZWN1dGVBY3Rpb24iLCJvU2lkZUVmZmVjdCIsImdldFVwZGF0ZUdyb3VwSWQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic1RyaWdnZXJBY3Rpb24iLCJleGVjdXRlQWN0aW9uIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsIkpTT04iLCJwYXJzZSIsImZuRXhlY3V0ZVNpbmdsZUFjdGlvbiIsIm9Mb2NhbFByb21pc2UiLCJhTG9jYWxQcm9taXNlIiwiZm5FeGVjdXRlU2VxdWVudGlhbGx5Iiwibm9vcCIsInByb2Nlc3NPbmVBY3Rpb24iLCJvQWN0aW9uQW5kU2lkZUVmZmVjdFByb21pc2UiLCJpZCIsImZuSGFuZGxlUmVzdWx0cyIsInJlc3VsdHMiLCJhUmVqZWN0ZWRJdGVtcyIsImFSZXNvbHZlZEl0ZW1zIiwiaVJlc3VsdENvdW50IiwiYkNvbnNpZGVyRG9jdW1lbnRNb2RpZmllZCIsInJlc29sdmVkSXRlbXMiLCJyZWplY3RlZEl0ZW1zIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFhQSxNQUFNQSxTQUFTLEdBQUdDLFNBQVMsQ0FBQ0QsU0FBNUI7QUFBQSxN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QyxLQUFOLENBQVksTUFBTTNFLFdBQWxCLEVBQStCLENBQS9CLENBQVA7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTW1ULFVBQVUsR0FBRztBQUNsQnBULElBQUFBLGVBQWUsRUFBRUEsZUFEQztBQUVsQnVCLElBQUFBLGdCQUFnQixFQUFFQSxnQkFGQTtBQUdsQkksSUFBQUEsaUJBQWlCLEVBQUVBLGlCQUhEO0FBSWxCTSxJQUFBQSxrQkFBa0IsRUFBRUEsa0JBSkY7QUFLbEIrUSxJQUFBQSxrQ0FBa0MsRUFBRUE7QUFMbEIsR0FBbkI7U0FRZUksVSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcblxuY29uc3QgQ29uc3RhbnRzID0gRkVMaWJyYXJ5LkNvbnN0YW50cyxcblx0SW52b2NhdGlvbkdyb3VwaW5nID0gRkVMaWJyYXJ5Lkludm9jYXRpb25Hcm91cGluZztcbmNvbnN0IEFjdGlvbiA9IChNZXNzYWdlQm94IGFzIGFueSkuQWN0aW9uO1xuXG4vKipcbiAqIENhbGxzIGEgYm91bmQgYWN0aW9uIGZvciBvbmUgb3IgbXVsdGlwbGUgY29udGV4dHMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEJvdW5kQWN0aW9uXG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5vcGVyYXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IGNvbnRleHRzIEVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIHRvIGJlIGJlIGNhbGxlZFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuTW9kZWx9IG9Nb2RlbCBPRGF0YSBNb2RlbFxuICogQHBhcmFtIHtvYmplY3R9IG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIHttYXB9IFttUGFyYW1ldGVyc10gT3B0aW9uYWwsIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIEBwYXJhbSB7bWFwfSBbbVBhcmFtZXRlcnMuYWN0aW9uUGFyYW1ldGVyc10gQSBtYXAgb2YgcGFyYW1ldGVycyB0byBiZSBzZW50IGZvciBldmVyeSBhY3Rpb24gY2FsbFxuICogQHBhcmFtIHttYXB9IFttUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnNdIEEgbWFwIG9mIGJpbmRpbmcgcGFyYW1ldGVycyB0aGF0IHdvdWxkIGJlIHBhcnQgb2YgJHNlbGVjdCBhbmQgJGV4cGFuZCBjb21pbmcgZnJvbSBzaWRlIGVmZmVjdHMgZm9yIGJvdW5kIGFjdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IFttUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdF0gQXJyYXkgb2YgcHJvcGVydHkgcGF0aHMgdG8gYmUgcmVxdWVzdGVkIGluIGFkZGl0aW9uIHRvIGFjdHVhbCB0YXJnZXQgcHJvcGVydGllcyBvZiB0aGUgc2lkZSBlZmZlY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW21QYXJhbWV0ZXJzLnNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2ddIElmIHNldCBhbmQgaWYgcGFyYW1ldGVycyBleGlzdCB0aGUgdXNlciByZXRyaWV2ZXMgYSBkaWFsb2cgdG8gZmlsbCBpbiBwYXJhbWV0ZXJzLCBpZiBhY3Rpb25QYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdGhleSBhcmUgc2hvd24gdG8gdGhlIHVzZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbVBhcmFtZXRlcnMubGFiZWxdIEEgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbVBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nXSBNb2RlIGhvdyBhY3Rpb25zIGFyZSB0byBiZSBjYWxsZWQ6IENoYW5nZXNldCB0byBwdXQgYWxsIGFjdGlvbiBjYWxscyBpbnRvIG9uZSBjaGFuZ2VzZXQsIElzb2xhdGVkIHRvIHB1dCB0aGVtIGludG8gc2VwYXJhdGUgY2hhbmdlc2V0cywgZGVmYXVsdHMgdG8gSXNvbGF0ZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFttUGFyYW1ldGVycy5vblN1Ym1pdHRlZF0gRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uY2UgdGhlIGFjdGlvbnMgYXJlIHN1Ym1pdHRlZCB3aXRoIGFuIGFycmF5IG9mIHByb21pc2VzXG4gKiBAcGFyYW0ge21hcH0gW21QYXJhbWV0ZXJzLmRlZmF1bHRQYXJhbWV0ZXJzXSBDYW4gY29udGFpbiBkZWZhdWx0IHBhcmFtZXRlcnMgZnJvbSBGTFAgdXNlciBkZWZhdWx0c1xuICogQHBhcmFtIHtzYXAudWkuY29yZS5FbGVtZW50fSBbbVBhcmFtZXRlcnMucGFyZW50Q29udHJvbF0gSWYgc3BlY2lmaWVkIHRoZSBkaWFsb2dzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbnQgb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFttUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0XSBJZiBzcGVjaWZpZWQgdGhlIGFjdGlvbiBwcm9taXNlIHJldHVybnMgdGhlIGJvdW5kIGNvbnRleHRcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgcmVzcG9uc2Ugb2JqZWN0cyAoVE9ETzogdG8gYmUgY2hhbmdlZClcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gY2FsbEJvdW5kQWN0aW9uKHNBY3Rpb25OYW1lOiBzdHJpbmcsIGNvbnRleHRzOiBhbnksIG9Nb2RlbDogYW55LCBvQXBwQ29tcG9uZW50OiBvYmplY3QsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0aWYgKCFjb250ZXh0cyB8fCBjb250ZXh0cy5sZW5ndGggPT09IDApIHtcblx0XHQvL0luIEZyZWVzdHlsZSBhcHBzIGJvdW5kIGFjdGlvbnMgY2FuIGhhdmUgbm8gY29udGV4dFxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkJvdW5kIGFjdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb250ZXh0XCIpO1xuXHR9XG5cdC8vIHdlIGV4cGVjdCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgb2YgY29udGV4dHNcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udGV4dHMpKSB7XG5cdFx0bVBhcmFtZXRlcnMuYlJldHVybkFzQXJyYXkgPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdC8vYWN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGlzIGNvbnRleHQgZnJvbSB0aGUgZGVwZW5kZW50IGJpbmRpbmcgc28gVUkgZmllbGRzIGFyZSB1cGRhdGVkIHdpdGggcmVzcG9uc2UgZGF0YVxuXHRcdGNvbnRleHRzID0gW2NvbnRleHRzXTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNBY3Rpb25QYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0c1swXS5nZXRQYXRoKCkpICsgXCIvXCIgKyBzQWN0aW9uTmFtZSxcblx0XHRvQm91bmRBY3Rpb24gPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBY3Rpb25QYXRoICsgXCIvQCR1aTUub3ZlcmxvYWQvMFwiKTtcblx0bVBhcmFtZXRlcnMuYUNvbnRleHRzID0gY29udGV4dHM7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIHNBY3Rpb25QYXRoLCBjb250ZXh0cywgb0JvdW5kQWN0aW9uKTtcblx0cmV0dXJuIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kQWN0aW9uLCBvQXBwQ29tcG9uZW50LCBtUGFyYW1ldGVycyk7XG59XG4vKipcbiAqIENhbGxzIGFuIGFjdGlvbiBpbXBvcnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnMuY2FsbEFjdGlvbkltcG9ydFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW1wb3J0IHRvIGJlIGNhbGxlZFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbH0gb01vZGVsIEFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIHY0IG1vZGVsXG4gKiBAcGFyYW0ge29iamVjdH0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0ge21hcH0gW21QYXJhbWV0ZXJzXSBPcHRpb25hbCwgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICogQHBhcmFtIHttYXB9IFttUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzXSBBIG1hcCBvZiBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgd2l0aCB0aGUgYWN0aW9uIGltcG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IFttUGFyYW1ldGVycy5sYWJlbF0gQSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIGFjdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZ10gSWYgc2V0IGFuZCBpZiBwYXJhbWV0ZXJzIGV4aXN0IHRoZSB1c2VyIHJldHJpZXZlcyBhIGRpYWxvZyB0byBmaWxsIGluIHBhcmFtZXRlcnMsIGlmIGFjdGlvblBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aGV5IGFyZSBzaG93biB0byB0aGUgdXNlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW21QYXJhbWV0ZXJzLm9uU3VibWl0dGVkXSBGdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgb25jZSB0aGUgYWN0aW9ucyBhcmUgc3VibWl0dGVkIHdpdGggYW4gYXJyYXkgb2YgcHJvbWlzZXNcbiAqIEBwYXJhbSB7bWFwfSBbbVBhcmFtZXRlcnMuZGVmYXVsdFBhcmFtZXRlcnNdIENhbiBjb250YWluIGRlZmF1bHQgcGFyYW1ldGVycyBmcm9tIEZMUCB1c2VyIGRlZmF1bHRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHJlc3BvbnNlIG9iamVjdHMgKFRPRE86IHRvIGJlIGNoYW5nZWQpXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGNhbGxBY3Rpb25JbXBvcnQoc0FjdGlvbk5hbWU6IHN0cmluZywgb01vZGVsOiBhbnksIG9BcHBDb21wb25lbnQ6IG9iamVjdCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcIkFjdGlvbiBleHBlY3RzIGEgbW9kZWwvY29udGV4dCBmb3IgZXhlY3V0aW9uXCIpO1xuXHR9XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0FjdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoXCIvXCIgKyBzQWN0aW9uTmFtZSkuZ2V0UGF0aCgpLFxuXHRcdG9BY3Rpb25JbXBvcnQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiICsgb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uUGF0aCkuZ2V0T2JqZWN0KFwiJEFjdGlvblwiKSArIFwiLzBcIik7XG5cdG1QYXJhbWV0ZXJzLmlzQ3JpdGljYWxBY3Rpb24gPSBnZXRJc0FjdGlvbkNyaXRpY2FsKG9NZXRhTW9kZWwsIHNBY3Rpb25QYXRoICsgXCIvQCR1aTUub3ZlcmxvYWRcIik7XG5cdHJldHVybiBjYWxsQWN0aW9uKHNBY3Rpb25OYW1lLCBvTW9kZWwsIG9BY3Rpb25JbXBvcnQsIG9BcHBDb21wb25lbnQsIG1QYXJhbWV0ZXJzKTtcbn1cbmZ1bmN0aW9uIGNhbGxCb3VuZEZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IHN0cmluZywgY29udGV4dDogYW55LCBvTW9kZWw6IGFueSkge1xuXHRpZiAoIWNvbnRleHQpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJCb3VuZCBmdW5jdGlvbnMgYWx3YXlzIHJlcXVpcmVzIGEgY29udGV4dFwiKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKSArIFwiL1wiICsgc0Z1bmN0aW9uTmFtZSxcblx0XHRvQm91bmRGdW5jdGlvbiA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bmN0aW9uUGF0aCk7XG5cdHJldHVybiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWUsIG9Nb2RlbCwgb0JvdW5kRnVuY3Rpb24sIGNvbnRleHQpO1xufVxuLyoqXG4gKiBDYWxscyBhIGZ1bmN0aW9uIGltcG9ydC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9ucy5jYWxsRnVuY3Rpb25JbXBvcnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm9wZXJhdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBzRnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWx9IG9Nb2RlbCBBbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSB2NCBtb2RlbFxuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZXNcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNhbGxGdW5jdGlvbkltcG9ydChzRnVuY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogYW55KSB7XG5cdGlmICghc0Z1bmN0aW9uTmFtZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdHNGdW5jdGlvblBhdGggPSBvTW9kZWwuYmluZENvbnRleHQoXCIvXCIgKyBzRnVuY3Rpb25OYW1lKS5nZXRQYXRoKCksXG5cdFx0b0Z1bmN0aW9uSW1wb3J0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcblx0XHRcdFwiL1wiICsgb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVuY3Rpb25QYXRoKS5nZXRPYmplY3QoXCIkRnVuY3Rpb25cIikgKyBcIi8wXCJcblx0XHQpO1xuXHRyZXR1cm4gX2V4ZWN1dGVGdW5jdGlvbihzRnVuY3Rpb25OYW1lLCBvTW9kZWwsIG9GdW5jdGlvbkltcG9ydCk7XG59XG5mdW5jdGlvbiBfZXhlY3V0ZUZ1bmN0aW9uKHNGdW5jdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9GdW5jdGlvbjogYW55LCBjb250ZXh0PzogYW55KSB7XG5cdGxldCBzR3JvdXBJZDtcblx0aWYgKCFvRnVuY3Rpb24gfHwgIW9GdW5jdGlvbi5nZXRPYmplY3QoKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGdW5jdGlvbiBcIiArIHNGdW5jdGlvbk5hbWUgKyBcIiBub3QgZm91bmRcIikpO1xuXHR9XG5cdGlmIChjb250ZXh0KSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KHNGdW5jdGlvbk5hbWUgKyBcIiguLi4pXCIsIGNvbnRleHQpO1xuXHRcdHNHcm91cElkID0gXCJmdW5jdGlvbkdyb3VwXCI7XG5cdH0gZWxzZSB7XG5cdFx0b0Z1bmN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KFwiL1wiICsgc0Z1bmN0aW9uTmFtZSArIFwiKC4uLilcIik7XG5cdFx0c0dyb3VwSWQgPSBcImZ1bmN0aW9uSW1wb3J0XCI7XG5cdH1cblx0Y29uc3Qgb0Z1bmN0aW9uUHJvbWlzZSA9IG9GdW5jdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0cmV0dXJuIG9GdW5jdGlvblByb21pc2UudGhlbihmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gb0Z1bmN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGNhbGxBY3Rpb24oc0FjdGlvbk5hbWU6IGFueSwgb01vZGVsOiBhbnksIG9BY3Rpb246IGFueSwgb0FwcENvbXBvbmVudDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0bGV0IGFBY3Rpb25QYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMuYWN0aW9uUGFyYW1ldGVycyB8fCBbXTtcblx0XHRsZXQgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdGxldCBmbkRpYWxvZztcblx0XHRsZXQgb0FjdGlvblByb21pc2U7XG5cdFx0Y29uc3Qgc0FjdGlvbkxhYmVsID0gbVBhcmFtZXRlcnMubGFiZWw7XG5cdFx0bGV0IGJTaG93QWN0aW9uUGFyYW1ldGVyRGlhbG9nID0gbVBhcmFtZXRlcnMuc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZztcblx0XHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHM7XG5cdFx0Y29uc3QgYklzQ3JlYXRlQWN0aW9uID0gbVBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uO1xuXHRcdGNvbnN0IGJJc0NyaXRpY2FsQWN0aW9uID0gbVBhcmFtZXRlcnMuaXNDcml0aWNhbEFjdGlvbjtcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc01ldGFQYXRoO1xuXHRcdGxldCBzTWVzc2FnZXNQYXRoOiBhbnk7XG5cdFx0bGV0IGlNZXNzYWdlU2lkZUVmZmVjdDtcblx0XHRpZiAoIW9BY3Rpb24gfHwgIW9BY3Rpb24uZ2V0T2JqZWN0KCkpIHtcblx0XHRcdHJldHVybiByZWplY3QobmV3IEVycm9yKFwiQWN0aW9uIFwiICsgc0FjdGlvbk5hbWUgKyBcIiBub3QgZm91bmRcIikpO1xuXHRcdH1cblx0XHRpZiAoYlNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2cgfHwgYUFjdGlvblBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUFjdGlvblBhcmFtZXRlcnMgPSBwcmVwYXJlQWN0aW9uUGFyYW1ldGVycyhvQWN0aW9uLCBhQWN0aW9uUGFyYW1ldGVycyk7XG5cdFx0XHRpZiAoIWFBY3Rpb25QYXJhbWV0ZXJzIHx8IGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRiU2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYlNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2cpIHtcblx0XHRcdGZuRGlhbG9nID0gc2hvd0FjdGlvblBhcmFtZXRlckRpYWxvZztcblx0XHR9IGVsc2UgaWYgKGJJc0NyaXRpY2FsQWN0aW9uKSB7XG5cdFx0XHRmbkRpYWxvZyA9IGNvbmZpcm1Dcml0aWNhbEFjdGlvbjtcblx0XHR9XG5cdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRmbk9uU3VibWl0dGVkOiBtUGFyYW1ldGVycy5vblN1Ym1pdHRlZCxcblx0XHRcdGZuT25SZXNwb25zZTogbVBhcmFtZXRlcnMub25SZXNwb25zZSxcblx0XHRcdGFjdGlvbk5hbWU6IHNBY3Rpb25OYW1lLFxuXHRcdFx0bW9kZWw6IG9Nb2RlbCxcblx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzOiBhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdGJHZXRCb3VuZENvbnRleHQ6IG1QYXJhbWV0ZXJzLmJHZXRCb3VuZENvbnRleHQsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbixcblx0XHRcdGxhYmVsOiBtUGFyYW1ldGVycy5sYWJlbFxuXHRcdH07XG5cdFx0aWYgKG9BY3Rpb24uZ2V0T2JqZWN0KFwiJElzQm91bmRcIikpIHtcblx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChhQ29udGV4dHNbMF0uZ2V0UGF0aCgpKTtcblx0XHRcdFx0c01lc3NhZ2VzUGF0aCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhUGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXMvJFBhdGhcIik7XG5cblx0XHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0XHRpTWVzc2FnZVNpZGVFZmZlY3QgPSBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMuZmluZEluZGV4KGZ1bmN0aW9uKGV4cDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZXhwLiRQcm9wZXJ0eVBhdGggPT09IHNNZXNzYWdlc1BhdGg7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAoaU1lc3NhZ2VTaWRlRWZmZWN0ID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vIHRoZSBtZXNzYWdlIHBhdGggaXMgYW5ub3RhdGVkIGFzIHNpZGUgZWZmZWN0LiBBcyB0aGVyZSdzIG5vIGJpbmRpbmcgZm9yIGl0IGFuZCB0aGUgbW9kZWwgZG9lcyBjdXJyZW50bHkgbm90IGFsbG93XG5cdFx0XHRcdFx0XHQvLyB0byBhZGQgaXQgYXQgYSBsYXRlciBwb2ludCBvZiB0aW1lIHdlIGhhdmUgdG8gdGFrZSBjYXJlIGl0J3MgcGFydCBvZiB0aGUgJHNlbGVjdCBvZiB0aGUgUE9TVCwgdGhlcmVmb3JlIG1vdmluZyBpdFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFJldHVyblR5cGUvJFR5cGUvXCIgKyBzTWVzc2FnZXNQYXRoKSAmJlxuXHRcdFx0XHRcdFx0XHQoIW1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IHx8XG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Quc3BsaXQoXCIsXCIpLmluZGV4T2Yoc01lc3NhZ2VzUGF0aCkgPT09IC0xKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gbVBhcmFtZXRlcnMubUJpbmRpbmdQYXJhbWV0ZXJzLiRzZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHQ/IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ICsgXCIsXCIgKyBzTWVzc2FnZXNQYXRoXG5cdFx0XHRcdFx0XHRcdFx0OiBzTWVzc2FnZXNQYXRoO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBubyB0cmlnZ2VyIGFjdGlvbiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXF1ZXN0IG1lc3NhZ2VzIGFnYWluXG5cdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLnNwbGljZShpTWVzc2FnZVNpZGVFZmZlY3QsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFDb250ZXh0cyA9IGFDb250ZXh0cztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLm1CaW5kaW5nUGFyYW1ldGVycztcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ID0gbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3Q7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5iR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmludm9jYXRpb25Hcm91cGluZyA9PT0gSW52b2NhdGlvbkdyb3VwaW5nLkNoYW5nZVNldDtcblx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLmJSZXR1cm5Bc0FycmF5ID0gbVBhcmFtZXRlcnMuYlJldHVybkFzQXJyYXk7XG5cdFx0XHRtQWN0aW9uRXhlY3V0aW9uUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gbVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwO1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYk9iamVjdFBhZ2UgPSBtUGFyYW1ldGVycy5iT2JqZWN0UGFnZTtcblx0XHR9XG5cdFx0aWYgKGJJc0NyZWF0ZUFjdGlvbikge1xuXHRcdFx0bUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMuYklzQ3JlYXRlQWN0aW9uID0gYklzQ3JlYXRlQWN0aW9uO1xuXHRcdH1cblx0XHRpZiAoZm5EaWFsb2cpIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZm5EaWFsb2coXG5cdFx0XHRcdHNBY3Rpb25OYW1lLFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRzQWN0aW9uTGFiZWwsXG5cdFx0XHRcdG1BY3Rpb25FeGVjdXRpb25QYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0b0FjdGlvbixcblx0XHRcdFx0bVBhcmFtZXRlcnMucGFyZW50Q29udHJvbCxcblx0XHRcdFx0bVBhcmFtZXRlcnMuZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0bVBhcmFtZXRlcnMubWVzc2FnZUhhbmRsZXJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9BY3Rpb25Qcm9taXNlID0gX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbUFjdGlvbkV4ZWN1dGlvblBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2Vcblx0XHRcdC50aGVuKGZ1bmN0aW9uKG9PcGVyYXRpb25SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihvT3BlcmF0aW9uUmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0cmVqZWN0KG9PcGVyYXRpb25SZXN1bHQpO1xuXHRcdFx0fSk7XG5cdH0pO1xufVxuZnVuY3Rpb24gY29uZmlybUNyaXRpY2FsQWN0aW9uKFxuXHRzQWN0aW9uTmFtZTogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBhbnksXG5cdHNBY3Rpb25MYWJlbDogYW55LFxuXHRtUGFyYW1ldGVyczogYW55LFxuXHRhQWN0aW9uUGFyYW1ldGVyczogYW55LFxuXHRvQWN0aW9uQ29udGV4dDogYW55LFxuXHRvUGFyZW50Q29udHJvbDogYW55LFxuXHRlbnRpdHlTZXROYW1lOiBhbnksXG5cdG1lc3NhZ2VIYW5kbGVyOiBhbnlcbikge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSBzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogbnVsbDtcblx0XHRib3VuZEFjdGlvbk5hbWUgPVxuXHRcdFx0Ym91bmRBY3Rpb25OYW1lLmluZGV4T2YoXCIuXCIpID49IDAgPyBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpW2JvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikubGVuZ3RoIC0gMV0gOiBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgZW50aXR5U2V0TmFtZSA/IGVudGl0eVNldE5hbWUgKyBcInxcIiArIGJvdW5kQWN0aW9uTmFtZSA6IFwiXCI7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gb1BhcmVudENvbnRyb2wuZ2V0Q29udHJvbGxlcigpLm9SZXNvdXJjZUJ1bmRsZTtcblx0XHRjb25zdCBzQ29uZmlybWF0aW9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XCJDX09QRVJBVElPTlNfQUNUSU9OX0NPTkZJUk1fTUVTU0FHRVwiLFxuXHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0bnVsbCxcblx0XHRcdHN1ZmZpeFJlc291cmNlS2V5XG5cdFx0KTtcblxuXHRcdE1lc3NhZ2VCb3guY29uZmlybShzQ29uZmlybWF0aW9uVGV4dCwge1xuXHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdGlmIChzQWN0aW9uID09PSBBY3Rpb24uT0spIHtcblx0XHRcdFx0XHRyZXR1cm4gX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQudGhlbihmdW5jdGlvbihvT3BlcmF0aW9uOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShvT3BlcmF0aW9uKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXJcblx0XHRcdFx0XHRcdFx0XHQuc2hvd01lc3NhZ2VEaWFsb2coKVxuXHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3Qob0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIHNob3dBY3Rpb25QYXJhbWV0ZXJEaWFsb2coXG5cdHNBY3Rpb25OYW1lOiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IGFueSxcblx0c0FjdGlvbkxhYmVsOiBhbnksXG5cdG1QYXJhbWV0ZXJzOiBhbnksXG5cdGFBY3Rpb25QYXJhbWV0ZXJzOiBhbnksXG5cdG9BY3Rpb25Db250ZXh0OiBhbnksXG5cdG9QYXJlbnRDb250cm9sOiBhbnksXG5cdGVudGl0eVNldE5hbWU6IGFueSxcblx0bWVzc2FnZUhhbmRsZXI6IGFueVxuKSB7XG5cdGNvbnN0IHNQYXRoID0gX2dldFBhdGgob0FjdGlvbkNvbnRleHQsIHNBY3Rpb25OYW1lKSxcblx0XHRtZXRhTW9kZWwgPSBvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRlbnRpdHlTZXRDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRzQWN0aW9uTmFtZVBhdGggPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKVxuXHRcdFx0PyBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvQCR1aTUub3ZlcmxvYWQvMFwiKVswXVxuXHRcdFx0OiBvQWN0aW9uQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvMFwiKVswXSxcblx0XHRhY3Rpb25OYW1lQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQWN0aW9uTmFtZVBhdGgpLFxuXHRcdHNGcmFnbWVudE5hbWUgPSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FjdGlvblBhcmFtZXRlckRpYWxvZ1wiO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9GcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdGNvbnN0IG9QYXJhbWV0ZXJNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0JGRpc3BsYXlNb2RlOiB7fVxuXHRcdH0pO1xuXHRcdGxldCBhRmllbGRJbnZhbGlkOiBhbnlbXSA9IFtdO1xuXHRcdGxldCBhRm9ybUVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IG1GaWVsZFZhbHVlTWFwOiBhbnkgPSB7fTtcblx0XHRjb25zdCB2YWxpZGF0ZVJlcXVpcmVkUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRhRm9ybUVsZW1lbnRzXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbihvRm9ybUVsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkID0gb0Zvcm1FbGVtZW50LmdldEZpZWxkcygpWzBdO1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9GaWVsZC5nZXRSZXF1aXJlZCgpICYmIG9GaWVsZC5nZXRWYWx1ZVN0YXRlKCkgIT09IFwiRXJyb3JcIjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24ob0Zvcm1FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gb0Zvcm1FbGVtZW50LmdldEZpZWxkcygpWzBdLmlzQShcInNhcC51aS5tZGMuTXVsdGlWYWx1ZUZpZWxkXCIpXG5cdFx0XHRcdFx0XHRcdD8gb0Zvcm1FbGVtZW50LmdldEZpZWxkcygpWzBdLmdldEl0ZW1zKClcblx0XHRcdFx0XHRcdFx0OiBvRm9ybUVsZW1lbnQuZ2V0RmllbGRzKClbMF0uZ2V0VmFsdWUoKTtcblx0XHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvRm9ybUVsZW1lbnQuZ2V0TGFiZWwoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdCkudGhlbihmdW5jdGlvbihhUmVzdWx0czogYW55W10pIHtcblx0XHRcdFx0YVJlc3VsdHMgPSBhUmVzdWx0cy5maWx0ZXIoZnVuY3Rpb24ocmVzdWx0OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gYVJlc3VsdHM7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IF92YWxpZGF0ZU1lc3NhZ2VzID0gZnVuY3Rpb24oYUFjdGlvblBhcmFtZXRlcnM6IGFueSwgYUZpZWxkSW52YWxpZDogYW55LCBiQ2xlYXJUYXJnZXQ/OiBib29sZWFuKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0XHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXG5cdFx0XHRhRmllbGRJbnZhbGlkID0gYUZpZWxkSW52YWxpZCB8fCBbXTtcblxuXHRcdFx0aWYgKCFhTWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGFGaWVsZEludmFsaWQgPSBbXTtcblx0XHRcdH1cblx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob0FjdGlvblBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyID0gb0FjdGlvblBhcmFtZXRlcnMuJE5hbWU7XG5cdFx0XHRcdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBzUGFyYW0gPSBzUGFyYW1ldGVyLnJlcGxhY2UoXCItaW5uZXJcIiwgXCJcIik7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0b01lc3NhZ2UuY29udHJvbElkcy5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0XHQob01lc3NhZ2UuZ2V0Q29udHJvbElkKCkuaW5jbHVkZXMoXCJBUERfOjpcIiArIHNQYXJhbWV0ZXIpIHx8XG5cdFx0XHRcdFx0XHRcdChvTWVzc2FnZS5nZXRDb250cm9sSWQoKS5pbmNsdWRlcyhcIkFQRF86OlwiICsgc1BhcmFtZXRlciArIFwiaW5uZXJcIikgJiZcblx0XHRcdFx0XHRcdFx0XHRhRmllbGRJbnZhbGlkLmluZGV4T2YoXCJBUERfOjpcIiArIHNQYXJhbSkgPCAwKSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmIChiQ2xlYXJUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFGaWVsZEludmFsaWQucHVzaChcIkFQRF86OlwiICsgc1BhcmFtKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gSGFuZGxlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gaW5wdXQgd2l0aCBpbnZhbGlkIHRva2VuXG5cdFx0XHRcdFx0aWYgKG9NZXNzYWdlLnRhcmdldC5pbmNsdWRlcyhcIkFQRF86OlwiICsgc1BhcmFtZXRlcikpIHtcblx0XHRcdFx0XHRcdGFGaWVsZEludmFsaWQucHVzaChcIkFQRF86OlwiICsgc1BhcmFtKTtcblx0XHRcdFx0XHRcdG9NZXNzYWdlLnRhcmdldCA9IGJDbGVhclRhcmdldCA/IFwiXCIgOiBvTWVzc2FnZS50YXJnZXQ7XG5cdFx0XHRcdFx0XHRpZiAoYkNsZWFyVGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFGaWVsZEludmFsaWQ7XG5cdFx0fTtcblx0XHRjb25zdCBvQ29udHJvbGxlciA9IHtcblx0XHRcdGhhbmRsZUNoYW5nZTogZnVuY3Rpb24ob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0bWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdGNvbnN0IG9GaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdFx0Y29uc3Qgc0ZpZWxkSWQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiaWRcIik7XG5cdFx0XHRcdGNvbnN0IG9GaWVsZFByb21pc2UgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRcdFx0aWYgKG9GaWVsZFByb21pc2UpIHtcblx0XHRcdFx0XHRtRmllbGRWYWx1ZU1hcFtzRmllbGRJZF0gPSBvRmllbGRQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0ZpZWxkLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0X3ZhbGlkYXRlTWVzc2FnZXMoYUFjdGlvblBhcmFtZXRlcnMsIGFGaWVsZEludmFsaWQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGFjdGlvbjogb0FjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dCxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Q29udGV4dFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRhY3Rpb246IG9BY3Rpb25Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRhY3Rpb25OYW1lOiBhY3Rpb25OYW1lQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBlbnRpdHlTZXRDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IGVudGl0eVNldENvbnRleHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdClcblx0XHRcdC50aGVuKGZ1bmN0aW9uKG9GcmFnbWVudDogYW55KSB7XG5cdFx0XHRcdC8vIFRPRE86IG1vdmUgdGhlIGRpYWxvZyBpbnRvIHRoZSBmcmFnbWVudCBhbmQgbW92ZSB0aGUgaGFuZGxlcnMgdG8gdGhlIG9Db250cm9sbGVyXG5cdFx0XHRcdGxldCBhQ29udGV4dHM6IGFueVtdO1xuXHRcdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXM6IGFueVtdID0gW107XG5cdFx0XHRcdGxldCBvT3BlcmF0aW9uQmluZGluZzogYW55O1xuXHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKG9BcHBDb21wb25lbnQsIGFBY3Rpb25QYXJhbWV0ZXJzLCBvUGFyYW1ldGVyTW9kZWwsIHRydWUpLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Ly8gVE9ETzogbW92ZSB0aGUgZGlhbG9nIGludG8gdGhlIGZyYWdtZW50IGFuZCBtb3ZlIHRoZSBoYW5kbGVycyB0byB0aGUgb0NvbnRyb2xsZXJcblx0XHRcdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7IGRlZmluaXRpb246IG9GcmFnbWVudCwgY29udHJvbGxlcjogb0NvbnRyb2xsZXIgfSkudGhlbihmdW5jdGlvbihvRGlhbG9nQ29udGVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBvUGFyZW50Q29udHJvbC5nZXRDb250cm9sbGVyKCkub1Jlc291cmNlQnVuZGxlO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2codW5kZWZpbmVkLCB7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOlxuXHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25MYWJlbCB8fFxuXHRcdFx0XHRcdFx0XHRcdENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCIsIG9SZXNvdXJjZUJ1bmRsZSksXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IFtvRGlhbG9nQ29udGVudF0sXG5cdFx0XHRcdFx0XHRcdGVzY2FwZUhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKSwge1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IHNBY3Rpb25MYWJlbCB8fCBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0RJQUxPR19PS1wiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbGlkYXRlUmVxdWlyZWRQcm9wZXJ0aWVzKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oYUVtcHR5TWFuZGF0b3J5RmllbGRzOiBhbnlbXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRW1wdHlNYW5kYXRvcnlGaWVsZHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUVtcHR5TWFuZGF0b3J5RmllbGRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9NZXNzYWdlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX01JU1NJTkdfTUFOREFUT1JZX01TR1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUVtcHR5TWFuZGF0b3J5RmllbGRzW2ldXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2RlOiAyMDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJFcnJvclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXIuc2hvd01lc3NhZ2VEaWFsb2coe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21NZXNzYWdlczogb01lc3NhZ2VzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRmllbGRJbnZhbGlkID0gX3ZhbGlkYXRlTWVzc2FnZXMoYUFjdGlvblBhcmFtZXRlcnMsIGFGaWVsZEludmFsaWQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZEludmFsaWQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5zaG93VW5ib3VuZE1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEJ1c3lMb2NrZXIubG9jayhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhtRmllbGRWYWx1ZU1hcCkubWFwKGZ1bmN0aW9uKHNLZXk6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUZpZWxkVmFsdWVNYXBbc0tleV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBkdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbW92ZSBwYXJhbWV0ZXIgdmFsdWVzIGZyb20gRGlhbG9nIChTaW1wbGVGb3JtKSB0byBtUGFyYW1ldGVycy5hY3Rpb25QYXJhbWV0ZXJzIHNvIHRoYXQgdGhleSBhcmUgYXZhaWxhYmxlIGluIHRoZSBvcGVyYXRpb24gYmluZGluZ3MgZm9yIGFsbCBjb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgdlBhcmFtZXRlclZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyQ29udGV4dCA9IG9PcGVyYXRpb25CaW5kaW5nICYmIG9PcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFBY3Rpb25QYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFNVkZDb250ZW50ID0gb0RpYWxvZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5nZXRNb2RlbChcIm12ZnZpZXdcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZ2V0UHJvcGVydHkoXCIvXCIgKyBhQWN0aW9uUGFyYW1ldGVyc1tpXS4kTmFtZSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFLZXlWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaiBpbiBhTVZGQ29udGVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhS2V5VmFsdWVzLnB1c2goYU1WRkNvbnRlbnRbal0uS2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IGFLZXlWYWx1ZXM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbWV0ZXJWYWx1ZSA9IG9QYXJhbWV0ZXJDb250ZXh0LmdldFByb3BlcnR5KGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0udmFsdWUgPSB2UGFyYW1ldGVyVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dlBhcmFtZXRlclZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmxhYmVsID0gc0FjdGlvbkxhYmVsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gX2V4ZWN1dGVBY3Rpb24ob0FwcENvbXBvbmVudCwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob09wZXJhdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKG9PcGVyYXRpb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTWVzc2FnZU1hbmFnZXIgPSBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGJIYXNFdGFnTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5tb2RpZnlFVGFnTWVzc2FnZXNPbmx5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9NZXNzYWdlTWFuYWdlcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJIYXNFdGFnTWVzc2FnZTogYkhhc0V0YWdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHQ6IG1QYXJhbWV0ZXJzLmFDb250ZXh0c1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0FjdGlvblBhcmFtZXRlckRpYWxvZ09wZW46IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZVBhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nICYmIGJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTsgLy9jbG9zZSB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgYWZ0ZXIgcmVmcmVzaCBvZiB0aGUgY29udGV4dCBhZnRlciBldGFnIG1pc21hdGNoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuZmluYWxseShmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oZ2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHNBY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSksIHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiLCBvUmVzb3VyY2VCdW5kbGUpLFxuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdF92YWxpZGF0ZU1lc3NhZ2VzKGFBY3Rpb25QYXJhbWV0ZXJzLCBhRmllbGRJbnZhbGlkLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVqZWN0KENvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRcdGJlZm9yZU9wZW46IGZ1bmN0aW9uKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY2xvbmUgZXZlbnQgZm9yIGFjdGlvbldyYXBwZXIgYXMgb0V2ZW50Lm9Tb3VyY2UgZ2V0cyBsb3N0IGR1cmluZyBwcm9jZXNzaW5nIG9mIGJlZm9yZU9wZW4gZXZlbnQgaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9DbG9uZUV2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgb0V2ZW50KTtcblxuXHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGdldERlZmF1bHRWYWx1ZXNGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9EaWFsb2cuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzRGVmYXVsdFZhbHVlc0Z1bmN0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm5TZXREZWZhdWx0c0FuZE9wZW5EaWFsb2cgPSBmdW5jdGlvbihzQmluZGluZ1BhcmFtZXRlcj86IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0JvdW5kRnVuY3Rpb25OYW1lID0gZ2V0RGVmYXVsdFZhbHVlc0Z1bmN0aW9uKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwcmVmaWxsUGFyYW1ldGVyID0gZnVuY3Rpb24oc1BhcmFtTmFtZTogYW55LCB2UGFyYW1EZWZhdWx0VmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxOiBUaGVyZSBpcyBhIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBhbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHZQYXJhbURlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDAgJiYgdlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9taXNlID0gQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZQYXJhbURlZmF1bHRWYWx1ZS4kUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9taXNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob1ZhbHVlOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb25CaW5kaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmdldFBhcmFtZXRlckNvbnRleHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0UHJvcGVydHkodlBhcmFtRGVmYXVsdFZhbHVlLiRQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudGhlbihmdW5jdGlvbih2UGFyYW1WYWx1ZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIG11bHRpIHNlbGVjdCwgbmVlZCB0byBsb29wIG92ZXIgYUNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzUGF0aEZvckNvbnRleHQgPSB2UGFyYW1EZWZhdWx0VmFsdWUuJFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChzUGF0aEZvckNvbnRleHQuaW5kZXhPZihzQmluZGluZ1BhcmFtZXRlciArIFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXRoRm9yQ29udGV4dCA9IHNQYXRoRm9yQ29udGV4dC5yZXBsYWNlKHNCaW5kaW5nUGFyYW1ldGVyICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgYUNvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFDb250ZXh0c1tpXS5nZXRQcm9wZXJ0eShzUGF0aEZvckNvbnRleHQpICE9PSB2UGFyYW1WYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaWYgdGhlIHZhbHVlcyBmcm9tIHRoZSBjb250ZXh0cyBhcmUgbm90IGFsbCB0aGUgc2FtZSwgZG8gbm90IHByZWZpbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWU6IHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJOb1Bvc3NpYmxlVmFsdWU6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbVZhbHVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2ltcGx5IGNsZWFyIHBhcmFtZXRlciBkZWZhdWx0IGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkVycm9yIHdoaWxlIHJlYWRpbmcgZGVmYXVsdCBhY3Rpb24gcGFyYW1ldGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNQYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lOiBzUGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiTGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHZQYXJhbURlZmF1bHRWYWx1ZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAyOiBUaGVyZSBpcyBubyBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvbiAoPT4gbG9vayBpbnRvIHRoZSBGTFAgVXNlciBEZWZhdWx0cylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1ldGVyTW9kZWwgJiYgKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZTogc1BhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogKG9QYXJhbWV0ZXJNb2RlbCBhcyBhbnkpLm9EYXRhW3NQYXJhbU5hbWVdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSh7IHBhcmFtTmFtZTogc1BhcmFtTmFtZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24oc1BhcmFtTmFtZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvRGlhbG9nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0FjdGlvblBhdGggPSBvQWN0aW9uQ29udGV4dC5zUGF0aCAmJiBvQWN0aW9uQ29udGV4dC5zUGF0aC5zcGxpdChcIi9AXCIpWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNBY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uVGFyZ2V0ID0gc0FjdGlvblBhdGggKyBcIi9cIiArIHNQYXJhbU5hbWUgKyBcIkBcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvblRhcmdldCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlckRlZmF1bHRWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyQW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QYXJhbWV0ZXJEZWZhdWx0VmFsdWVcIl07IC8vIGVpdGhlciB7ICRQYXRoOiAnc29tZVBhdGgnIH0gb3IgJ3NvbWVTdHJpbmcnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNQYXJhbU5hbWUsIHZQYXJhbWV0ZXJEZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUFjdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2UGFyYW1ldGVyRGVmYXVsdFZhbHVlID0gZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlKHNQYXJhbU5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlLnB1c2gocHJlZmlsbFBhcmFtZXRlcihzUGFyYW1OYW1lLCB2UGFyYW1ldGVyRGVmYXVsdFZhbHVlKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc0JvdW5kRnVuY3Rpb25OYW1lICYmIHNCb3VuZEZ1bmN0aW9uTmFtZS5sZW5ndGggPiAwICYmIHR5cGVvZiBzQm91bmRGdW5jdGlvbk5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGkgaW4gYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FsbEJvdW5kRnVuY3Rpb24oc0JvdW5kRnVuY3Rpb25OYW1lLCBhQ29udGV4dHNbaV0sIG1QYXJhbWV0ZXJzLm1vZGVsKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVByZWZpbGxQYXJhbVByb21pc2VzID0gUHJvbWlzZS5hbGwoYUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgYUV4ZWNGdW5jdGlvblByb21pc2VzOiBQcm9taXNlPGFueVtdPiA9IFByb21pc2UucmVzb2x2ZShbXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgb0V4ZWNGdW5jdGlvbkZyb21NYW5pZmVzdFByb21pc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZ1bmN0aW9uUGFyYW1zICYmIGFGdW5jdGlvblBhcmFtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFFeGVjRnVuY3Rpb25Qcm9taXNlcyA9IFByb21pc2UuYWxsKGFGdW5jdGlvblBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNNb2R1bGUgPSBtUGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5zdWJzdHJpbmcoMCwgbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzRnVuY3Rpb25OYW1lID0gbVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLnN1YnN0cmluZyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgKyAxLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9FeGVjRnVuY3Rpb25Gcm9tTWFuaWZlc3RQcm9taXNlID0gRlBNSGVscGVyLmFjdGlvbldyYXBwZXIob0Nsb25lRXZlbnQsIHNNb2R1bGUsIHNGdW5jdGlvbk5hbWUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbnRleHRzXCI6IGFDb250ZXh0c1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0UHJvbWlzZS5hbGwoW2FQcmVmaWxsUGFyYW1Qcm9taXNlcywgYUV4ZWNGdW5jdGlvblByb21pc2VzLCBvRXhlY0Z1bmN0aW9uRnJvbU1hbmlmZXN0UHJvbWlzZV0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKGFQcm9taXNlczogW2FueVtdLCBhbnlbXSwgYW55XSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWU6IGFueSA9IGFQcm9taXNlc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRnVuY3Rpb25QYXJhbXMgPSBhUHJvbWlzZXNbMV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0ID0gYVByb21pc2VzWzJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBzRGlhbG9nUGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhQWN0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c0RpYWxvZ1BhcmFtTmFtZSA9IGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvRnVuY3Rpb25QYXJhbXNGcm9tTWFuaWZlc3QgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0Z1bmN0aW9uUGFyYW1zRnJvbU1hbmlmZXN0Lmhhc093blByb3BlcnR5KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9GdW5jdGlvblBhcmFtc0Zyb21NYW5pZmVzdFtzRGlhbG9nUGFyYW1OYW1lXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhQ3VycmVudFBhcmFtRGVmYXVsdFZhbHVlW2ldLnZhbHVlICE9PSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUN1cnJlbnRQYXJhbURlZmF1bHRWYWx1ZVtpXS52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgZGVmYXVsdCB2YWx1ZSBoYWQgbm90IGJlZW4gcHJldmlvdXNseSBkZXRlcm1pbmVkIGR1ZSB0byBkaWZmZXJlbnQgY29udGV4dHMsIHdlIGRvIG5vdGhpbmcgZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzQm91bmRGdW5jdGlvbk5hbWUgJiYgIWFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWVbaV0uYk5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBjaGVjayBpZiB0aGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzYW1lIHBhcmFtIHZhbHVlIGZvciBhbGwgdGhlIGNvbnRleHRzOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoaiA8IGFDb250ZXh0cy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtc1tqXSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXNbaiArIDFdICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUZ1bmN0aW9uUGFyYW1zW2ogKyAxXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PT0gYUNvbnRleHRzLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbaV0uJE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFGdW5jdGlvblBhcmFtc1tqXS5nZXRPYmplY3Qoc0RpYWxvZ1BhcmFtTmFtZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vT25seSBvbmUgY29udGV4dCwgdGhlbiB0aGUgZGVmYXVsdCBwYXJhbSB2YWx1ZXMgYXJlIHRvIGJlIHZlcmlmaWVkIGZyb20gdGhlIGZ1bmN0aW9uOlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGdW5jdGlvblBhcmFtc1swXSAmJiBhRnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvT3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFBY3Rpb25QYXJhbWV0ZXJzW2ldLiROYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhRnVuY3Rpb25QYXJhbXNbMF0uZ2V0T2JqZWN0KHNEaWFsb2dQYXJhbU5hbWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBiRXJyb3JGb3VuZCA9IGFDdXJyZW50UGFyYW1EZWZhdWx0VmFsdWUuc29tZShmdW5jdGlvbihvVmFsdWU6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9WYWx1ZS5iTGF0ZVByb3BlcnR5RXJyb3I7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGJFcnJvckZvdW5kKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX0xBVEVfUFJPUEVSVFlcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNUZXh0LCB7IGNvbnRlbnRXaWR0aDogXCIyNWVtXCIgfSBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkSXNCb3VuZFwiKSAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBvQWN0aW9uQ29udGV4dC5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzQmluZGluZ1BhcmFtZXRlciA9IGFQYXJhbWV0ZXJzWzBdICYmIGFQYXJhbWV0ZXJzWzBdLiROYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzWzBdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24ob0NvbnRleHRPYmplY3Q6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvQ29udGV4dE9iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b09wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHNCaW5kaW5nUGFyYW1ldGVyLCBvQ29udGV4dE9iamVjdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZuU2V0RGVmYXVsdHNBbmRPcGVuRGlhbG9nKHNCaW5kaW5nUGFyYW1ldGVyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmblNldERlZmF1bHRzQW5kT3BlbkRpYWxvZygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJDbG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0YUZvcm1FbGVtZW50cyA9IG9EaWFsb2dDb250ZW50XG5cdFx0XHRcdFx0XHRcdC5nZXRBZ2dyZWdhdGlvbihcImZvcm1cIilcblx0XHRcdFx0XHRcdFx0LmdldEFnZ3JlZ2F0aW9uKFwiZm9ybUNvbnRhaW5lcnNcIilbMF1cblx0XHRcdFx0XHRcdFx0LmdldEFnZ3JlZ2F0aW9uKFwiZm9ybUVsZW1lbnRzXCIpO1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvQWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpLm9Nb2RlbCk7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9QYXJhbWV0ZXJNb2RlbCwgXCJwYXJhbXNNb2RlbFwiKTtcblx0XHRcdFx0XHRcdG9EaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdFx0XHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyBlbXB0eSBtb2RlbCB0byBhZGQgZWxlbWVudHMgZHluYW1pY2FsbHkgZGVwZW5kaW5nIG9uIG51bWJlciBvZiBNVkYgZmllbGRzIGRlZmluZWQgb24gdGhlIGRpYWxvZ1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01WRk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLnNldE1vZGVsKG9NVkZNb2RlbCwgXCJtdmZ2aWV3XCIpO1xuXG5cdFx0XHRcdFx0XHRsZXQgc0FjdGlvblBhdGggPSBzQWN0aW9uTmFtZSArIFwiKC4uLilcIjtcblx0XHRcdFx0XHRcdGFDb250ZXh0cyA9IG1QYXJhbWV0ZXJzLmFDb250ZXh0cyB8fCBbXTtcblx0XHRcdFx0XHRcdGlmICghYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRzQWN0aW9uUGF0aCA9IFwiL1wiICsgc0FjdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvRGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdFx0XHRcdFx0cGF0aDogc0FjdGlvblBhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGEgcGFyZW50IGNvbnRyb2wgc3BlY2lmaWVkIGFkZCB0aGUgZGlhbG9nIGFzIGRlcGVuZGVudFxuXHRcdFx0XHRcdFx0XHRvUGFyZW50Q29udHJvbC5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChhQ29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9PcGVyYXRpb25CaW5kaW5nID0gb0RpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCk7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdH0pO1xufVxuZnVuY3Rpb24gcHJlcGFyZUFjdGlvblBhcmFtZXRlcnMob0FjdGlvbjogYW55LCBhUHJlZGVmaW5lZFBhcmFtZXRlcnM6IGFueSkge1xuXHQvLyBjaGVjayBpZiBwYXJhbWV0ZXJzIGV4aXN0IGF0IGFsbFxuXHRjb25zdCBhUGFyYW1ldGVycyA9IGdldEFjdGlvblBhcmFtZXRlcnMob0FjdGlvbik7XG5cdGFQcmVkZWZpbmVkUGFyYW1ldGVycyA9IGFQcmVkZWZpbmVkUGFyYW1ldGVycyB8fCBbXTtcblxuXHRpZiAoYVByZWRlZmluZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBUT0RPOiBtZXJnZSB0aGUgcHJlZGVmaW5lZCBvbmNlIHdpdGggdGhlIHJlYWwgZXhpc3Rpbmcgb25lXG5cdH1cblxuXHRyZXR1cm4gYVBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25QYXJhbWV0ZXJzKG9BY3Rpb246IGFueSkge1xuXHRjb25zdCBhUGFyYW1ldGVycyA9IG9BY3Rpb24uZ2V0T2JqZWN0KFwiJFBhcmFtZXRlclwiKSB8fCBbXTtcblx0aWYgKGFQYXJhbWV0ZXJzICYmIGFQYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdGlmIChvQWN0aW9uLmdldE9iamVjdChcIiRJc0JvdW5kXCIpKSB7XG5cdFx0XHQvL2luIGNhc2Ugb2YgYm91bmQgYWN0aW9ucywgaWdub3JlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYW5kIGNvbnNpZGVyIHRoZSByZXN0XG5cdFx0XHRyZXR1cm4gYVBhcmFtZXRlcnMuc2xpY2UoMSwgYVBhcmFtZXRlcnMubGVuZ3RoKSB8fCBbXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gZ2V0SXNBY3Rpb25Dcml0aWNhbChvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnksIGNvbnRleHRzPzogYW55LCBvQm91bmRBY3Rpb24/OiBhbnkpIHtcblx0Y29uc3QgdkFjdGlvbkNyaXRpY2FsID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiKTtcblx0bGV0IHNDcml0aWNhbFBhdGggPSB2QWN0aW9uQ3JpdGljYWwgJiYgdkFjdGlvbkNyaXRpY2FsLiRQYXRoO1xuXHRpZiAoIXNDcml0aWNhbFBhdGgpIHtcblx0XHQvLyB0aGUgc3RhdGljIHZhbHVlIHNjZW5hcmlvIGZvciBpc0FjdGlvbkNyaXRpY2FsXG5cdFx0cmV0dXJuICEhdkFjdGlvbkNyaXRpY2FsO1xuXHR9XG5cdGNvbnN0IGFCaW5kaW5nUGFyYW1zID0gb0JvdW5kQWN0aW9uICYmIG9Cb3VuZEFjdGlvbi5nZXRPYmplY3QoXCIkUGFyYW1ldGVyXCIpLFxuXHRcdGFQYXRocyA9IHNDcml0aWNhbFBhdGggJiYgc0NyaXRpY2FsUGF0aC5zcGxpdChcIi9cIiksXG5cdFx0YkNvbmRpdGlvbiA9XG5cdFx0XHRhQmluZGluZ1BhcmFtcyAmJiBhQmluZGluZ1BhcmFtcy5sZW5ndGggJiYgdHlwZW9mIGFCaW5kaW5nUGFyYW1zID09PSBcIm9iamVjdFwiICYmIHNDcml0aWNhbFBhdGggJiYgY29udGV4dHMgJiYgY29udGV4dHMubGVuZ3RoO1xuXHRpZiAoYkNvbmRpdGlvbikge1xuXHRcdC8vaW4gY2FzZSBiaW5kaW5nIHBhdGFtZXRlcnMgYXJlIHRoZXJlIGluIHBhdGggbmVlZCB0byByZW1vdmUgZWc6IC0gX2l0L2lzVmVyaWZpZWQgPT4gbmVlZCB0byByZW1vdmUgX2l0IGFuZCB0aGUgcGF0aCBzaG91bGQgYmUgaXNWZXJpZmllZFxuXHRcdGFCaW5kaW5nUGFyYW1zLmZpbHRlcihmdW5jdGlvbihvUGFyYW1zOiBhbnkpIHtcblx0XHRcdGNvbnN0IGluZGV4ID0gYVBhdGhzICYmIGFQYXRocy5pbmRleE9mKG9QYXJhbXMuJE5hbWUpO1xuXHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0YVBhdGhzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c0NyaXRpY2FsUGF0aCA9IGFQYXRocy5qb2luKFwiL1wiKTtcblx0XHRyZXR1cm4gY29udGV4dHNbMF0uZ2V0T2JqZWN0KHNDcml0aWNhbFBhdGgpO1xuXHR9IGVsc2UgaWYgKHNDcml0aWNhbFBhdGgpIHtcblx0XHQvL2lmIHNjZW5hcmlvIGlzIHBhdGggYmFzZWQgcmV0dXJuIHRoZSBwYXRoIHZhbHVlXG5cdFx0cmV0dXJuIGNvbnRleHRzWzBdLmdldE9iamVjdChzQ3JpdGljYWxQYXRoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKG9BY3Rpb246IGFueSwgbVBhcmFtZXRlcnM6IGFueSwgYkdldEJvdW5kQ29udGV4dDogYm9vbGVhbiwgc0dyb3VwSWQ6IHN0cmluZykge1xuXHRsZXQgb0FjdGlvblByb21pc2U7XG5cdGlmIChtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRPYmplY3QoKS5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPiAxKSB7XG5cdFx0b0FjdGlvblByb21pc2UgPSBiR2V0Qm91bmRDb250ZXh0XG5cdFx0XHQ/IG9BY3Rpb24uZXhlY3V0ZShzR3JvdXBJZCkudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdCAgfSlcblx0XHRcdDogb0FjdGlvbi5leGVjdXRlKHNHcm91cElkKTtcblx0fSBlbHNlIHtcblx0XHRvQWN0aW9uUHJvbWlzZSA9IGJHZXRCb3VuZENvbnRleHRcblx0XHRcdD8gb0FjdGlvblxuXHRcdFx0XHRcdC5leGVjdXRlKFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRDb21tb25VdGlscy5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChvcGVyYXRpb25zLCBzR3JvdXBJZCwgbVBhcmFtZXRlcnMubGFiZWwsIG1QYXJhbWV0ZXJzLm1vZGVsKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHQ6IG9BY3Rpb24uZXhlY3V0ZShcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0Q29tbW9uVXRpbHMuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQob3BlcmF0aW9ucywgc0dyb3VwSWQsIG1QYXJhbWV0ZXJzLmxhYmVsLCBtUGFyYW1ldGVycy5tb2RlbClcblx0XHRcdCAgKTtcblx0fVxuXG5cdHJldHVybiBvQWN0aW9uUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIF9leGVjdXRlQWN0aW9uKG9BcHBDb21wb25lbnQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRjb25zdCBhQ29udGV4dHMgPSBtUGFyYW1ldGVycy5hQ29udGV4dHMgfHwgW107XG5cdGNvbnN0IG9Nb2RlbCA9IG1QYXJhbWV0ZXJzLm1vZGVsO1xuXHRjb25zdCBpRXhpc3RpbmdNZXNzYWdlcyA9IG1lc3NhZ2VIYW5kbGluZy5nZXRNZXNzYWdlcygpLmxlbmd0aCB8fCAwO1xuXHRjb25zdCBhQWN0aW9uUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzLmFBY3Rpb25QYXJhbWV0ZXJzIHx8IFtdO1xuXHRjb25zdCBzQWN0aW9uTmFtZSA9IG1QYXJhbWV0ZXJzLmFjdGlvbk5hbWU7XG5cdGNvbnN0IGZuT25TdWJtaXR0ZWQgPSBtUGFyYW1ldGVycy5mbk9uU3VibWl0dGVkO1xuXHRjb25zdCBmbk9uUmVzcG9uc2UgPSBtUGFyYW1ldGVycy5mbk9uUmVzcG9uc2U7XG5cdGNvbnN0IGJJc0NyZWF0ZUFjdGlvbiA9IG1QYXJhbWV0ZXJzLmJJc0NyZWF0ZUFjdGlvbjtcblx0bGV0IG9BY3Rpb246IGFueTtcblxuXHRmdW5jdGlvbiBmbkRpZmZlcmVudGlhdGUocHJvbWlzZTogYW55KSB7XG5cdFx0cmV0dXJuIHByb21pc2UudGhlbihcblx0XHRcdGZ1bmN0aW9uKHJlc3BvbnNlOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgYU1lc3NhZ2VzID0gbWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKCk7XG5cdFx0XHRcdC8vIEFjdGlvbiBEaWFsb2cgbXVzdCByZW1haW4gb3BlbiBpZiB0aGVyZSBhcmUgcmVzcG9uc2UgZXJyb3ItbWVzc2FnZXMsIGJlY2F1c2UgaW4gdGhlIGphdmEgc3RhY2sgdGhlIGRpYWxvZyB3b3VsZCBiZSBjbG9zZWQgaW1tZWRpYXRlbHkuXG5cdFx0XHRcdGlmIChhTWVzc2FnZXMubGVuZ3RoID4gaUV4aXN0aW5nTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2FNZXNzYWdlcy5sZW5ndGggLSAxXS50eXBlID09PSBcIkVycm9yXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4geyByZXNwb25zZTogcmVzcG9uc2UsIHN0YXR1czogXCJyZWplY3RlZFwiIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlLCBzdGF0dXM6IFwicmVzb2x2ZWRcIiB9O1xuXHRcdFx0fSxcblx0XHRcdGZ1bmN0aW9uKHJlc3BvbnNlOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHsgcmVzcG9uc2U6IHJlc3BvbnNlLCBzdGF0dXM6IFwicmVqZWN0ZWRcIiB9O1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKSB7XG5cdFx0aWYgKGFBY3Rpb25QYXJhbWV0ZXJzICYmIGFBY3Rpb25QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhQWN0aW9uUGFyYW1ldGVycy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoIWFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChhQWN0aW9uUGFyYW1ldGVyc1tqXS4kVHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5TdHJpbmdcIjpcblx0XHRcdFx0XHRcdFx0YUFjdGlvblBhcmFtZXRlcnNbal0udmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRhQWN0aW9uUGFyYW1ldGVyc1tqXS52YWx1ZSA9IDA7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Ly8gdGJjXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0FjdGlvbi5zZXRQYXJhbWV0ZXIoYUFjdGlvblBhcmFtZXRlcnNbal0uJE5hbWUsIGFBY3Rpb25QYXJhbWV0ZXJzW2pdLnZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBtQmluZGluZ1BhcmFtZXRlcnMgPSBtUGFyYW1ldGVycy5tQmluZGluZ1BhcmFtZXRlcnM7XG5cdFx0XHRjb25zdCBiR3JvdXBlZCA9IG1QYXJhbWV0ZXJzLmJHcm91cGVkO1xuXHRcdFx0Y29uc3QgYlJldHVybkFzQXJyYXkgPSBtUGFyYW1ldGVycy5iUmV0dXJuQXNBcnJheTtcblx0XHRcdGNvbnN0IGJHZXRCb3VuZENvbnRleHQgPSBtUGFyYW1ldGVycy5iR2V0Qm91bmRDb250ZXh0O1xuXHRcdFx0Y29uc3QgYUFjdGlvblByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IG9BY3Rpb25Qcm9taXNlO1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRsZXQgc0dyb3VwSWQ6IHN0cmluZztcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZUFjdGlvbiA9IGZ1bmN0aW9uKG9BY3Rpb246IGFueSwgaW5kZXg6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSkge1xuXHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0Ly8gRm9yIGludm9jYXRpb24gZ3JvdXBpbmcgXCJpc29sYXRlZFwiIG5lZWQgYmF0Y2ggZ3JvdXAgcGVyIGFjdGlvbiBjYWxsXG5cdFx0XHRcdHNHcm91cElkID0gIWJHcm91cGVkID8gXCIkYXV0by5cIiArIGluZGV4IDogb0FjdGlvbi5nZXRVcGRhdGVHcm91cElkKCk7XG5cdFx0XHRcdG9BY3Rpb25Qcm9taXNlID0gZXhlY3V0ZURlcGVuZGluZ09uU2VsZWN0ZWRDb250ZXh0cyhvQWN0aW9uLCBtUGFyYW1ldGVycywgYkdldEJvdW5kQ29udGV4dCwgc0dyb3VwSWQpO1xuXHRcdFx0XHRhQWN0aW9uUHJvbWlzZXMucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGFjdGlvbnMgZnJvbSBzaWRlIGVmZmVjdHNcblx0XHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oc1RyaWdnZXJBY3Rpb246IGFueSkge1xuXHRcdFx0XHRcdFx0aWYgKHNUcmlnZ2VyQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihzVHJpZ2dlckFjdGlvbiwgb1NpZGVFZmZlY3QuY29udGV4dCwgc0dyb3VwSWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHJlcXVlc3Qgc2lkZSBlZmZlY3RzIGZvciB0aGlzIGFjdGlvblxuXHRcdFx0XHQvLyBhcyB3ZSBtb3ZlIHRoZSBtZXNzYWdlcyByZXF1ZXN0IHRvIFBPU1QgJHNlbGVjdCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBhbiBlbXB0eSBhcnJheVxuXHRcdFx0XHRpZiAob1NpZGVFZmZlY3QgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zICYmIG9TaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKVxuXHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtUGFyYW1ldGVycy5vcGVyYXRpb25BdmFpbGFibGVNYXAgJiYgbVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHRDb21tb25VdGlscy5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRKU09OLnBhcnNlKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0XHRcdFx0XHRcdFx0XHRtUGFyYW1ldGVycy5hQ29udGV4dHNcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGZuRXhlY3V0ZVNpbmdsZUFjdGlvbiA9IGZ1bmN0aW9uKG9BY3Rpb246IGFueSwgaW5kZXg6IGFueSwgb1NpZGVFZmZlY3Q6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuXHRcdFx0XHRcdGxldCBvTG9jYWxQcm9taXNlO1xuXHRcdFx0XHRcdGNvbnN0IGFMb2NhbFByb21pc2UgPSBbXTtcblx0XHRcdFx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgbmVlZCBiYXRjaCBncm91cCBwZXIgYWN0aW9uIGNhbGxcblx0XHRcdFx0XHRzR3JvdXBJZCA9IFwiYXBpTW9kZVwiICsgaW5kZXg7XG5cdFx0XHRcdFx0b0FjdGlvblByb21pc2UgPSBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzKG9BY3Rpb24sIG1QYXJhbWV0ZXJzLCBiR2V0Qm91bmRDb250ZXh0LCBzR3JvdXBJZCk7XG5cdFx0XHRcdFx0YUFjdGlvblByb21pc2VzLnB1c2gob0FjdGlvblByb21pc2UpO1xuXHRcdFx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvQWN0aW9uUHJvbWlzZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRcdFx0Ly8gdHJpZ2dlciBhY3Rpb25zIGZyb20gc2lkZSBlZmZlY3RzXG5cdFx0XHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zICYmIG9TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0b1NpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihzVHJpZ2dlckFjdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oc1RyaWdnZXJBY3Rpb24sIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0XHRcdFx0XHRhTG9jYWxQcm9taXNlLnB1c2gob0xvY2FsUHJvbWlzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyByZXF1ZXN0IHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBhY3Rpb25cblx0XHRcdFx0XHQvLyBhcyB3ZSBtb3ZlIHRoZSBtZXNzYWdlcyByZXF1ZXN0IHRvIFBPU1QgJHNlbGVjdCB3ZSBuZWVkIHRvIGJlIHByZXBhcmVkIGZvciBhbiBlbXB0eSBhcnJheVxuXHRcdFx0XHRcdGlmIChvU2lkZUVmZmVjdCAmJiBvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMgJiYgb1NpZGVFZmZlY3QucGF0aEV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9Mb2NhbFByb21pc2UgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsIG9TaWRlRWZmZWN0LmNvbnRleHQsIHNHcm91cElkKTtcblx0XHRcdFx0XHRcdGFMb2NhbFByb21pc2UucHVzaChvTG9jYWxQcm9taXNlKTtcblx0XHRcdFx0XHRcdG9Mb2NhbFByb21pc2Vcblx0XHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCAmJiBtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Q29tbW9uVXRpbHMuc2V0QWN0aW9uRW5hYmxlbWVudChcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuaW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04ucGFyc2UobVBhcmFtZXRlcnMub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMuYUNvbnRleHRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Nb2RlbC5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0XHRcdFx0UHJvbWlzZS5hbGwoYUxvY2FsUHJvbWlzZSlcblx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHRcdFx0fTtcblxuXHRcdFx0ZnVuY3Rpb24gZm5FeGVjdXRlU2VxdWVudGlhbGx5KGFDb250ZXh0czogYW55KSB7XG5cdFx0XHRcdC8vIE9uZSBhY3Rpb24gYW5kIGl0cyBzaWRlIGVmZmVjdHMgYXJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIG5leHQgYWN0aW9uIGlzIGV4ZWN1dGVkXG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0ZnVuY3Rpb24gcHJvY2Vzc09uZUFjdGlvbihjb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdG9BY3Rpb24gPSBvTW9kZWwuYmluZENvbnRleHQoc0FjdGlvbk5hbWUgKyBcIiguLi4pXCIsIGNvbnRleHQsIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZuRXhlY3V0ZVNpbmdsZUFjdGlvbihvQWN0aW9uLCBpLCB7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdFx0XHRcdFx0cGF0aEV4cHJlc3Npb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC5wYXRoRXhwcmVzc2lvbnMsXG5cdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uczogbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QgJiYgbVBhcmFtZXRlcnMuYWRkaXRpb25hbFNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbnNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBvQWN0aW9uQW5kU2lkZUVmZmVjdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0bGV0IGogPSAwO1xuXHRcdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbihjb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBpZCA9ICsrajtcblx0XHRcdFx0XHRvQWN0aW9uQW5kU2lkZUVmZmVjdFByb21pc2UgPSBvQWN0aW9uQW5kU2lkZUVmZmVjdFByb21pc2UudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBwcm9jZXNzT25lQWN0aW9uKGNvbnRleHQsIGlkKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9BY3Rpb25BbmRTaWRlRWZmZWN0UHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmJPYmplY3RQYWdlICYmICFiR3JvdXBlZCkge1xuXHRcdFx0XHQvLyBGb3IgaW52b2NhdGlvbiBncm91cGluZyBcImlzb2xhdGVkXCIgY2FsbGVkIGZyb20gT2JqZWN0UGFnZSwgZW5zdXJlIHRoYXQgZWFjaCBhY3Rpb24gYW5kIG1hdGNoaW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHQvLyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSB0aGUgbmV4dCBzZXQgaXMgc3VibWl0dGVkLiBXb3JrYXJvdW5kIHVudGlsIEpTT04gYmF0Y2ggaXMgYXZhaWxhYmxlLlxuXHRcdFx0XHRmbkV4ZWN1dGVTZXF1ZW50aWFsbHkoYUNvbnRleHRzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhQ29udGV4dHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRvQWN0aW9uID0gb01vZGVsLmJpbmRDb250ZXh0KHNBY3Rpb25OYW1lICsgXCIoLi4uKVwiLCBhQ29udGV4dHNbaV0sIG1CaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0Zm5FeGVjdXRlQWN0aW9uKG9BY3Rpb24sIGFDb250ZXh0cy5sZW5ndGggPD0gMSA/IG51bGwgOiBpLCB7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiBhQ29udGV4dHNbaV0sXG5cdFx0XHRcdFx0XHRwYXRoRXhwcmVzc2lvbnM6IG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0ICYmIG1QYXJhbWV0ZXJzLmFkZGl0aW9uYWxTaWRlRWZmZWN0LnBhdGhFeHByZXNzaW9ucyxcblx0XHRcdFx0XHRcdHRyaWdnZXJBY3Rpb25zOiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdCAmJiBtUGFyYW1ldGVycy5hZGRpdGlvbmFsU2lkZUVmZmVjdC50cmlnZ2VyQWN0aW9uc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdChcblx0XHRcdFx0XHRmbk9uU3VibWl0dGVkIHx8XG5cdFx0XHRcdFx0ZnVuY3Rpb24gbm9vcCgpIHtcblx0XHRcdFx0XHRcdC8qKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdCkoYUFjdGlvblByb21pc2VzKTtcblx0XHRcdFx0Zm5IYW5kbGVSZXN1bHRzKCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGZuSGFuZGxlUmVzdWx0cygpIHtcblx0XHRcdFx0UHJvbWlzZS5hbGwoYUFjdGlvblByb21pc2VzLm1hcChmbkRpZmZlcmVudGlhdGUpKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKHJlc3VsdHM6IGFueVtdKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhUmVqZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdFx0XHRcdFx0Y29uc3QgYVJlc29sdmVkSXRlbXMgPSBbXTtcblx0XHRcdFx0XHRcdGxldCBpUmVzdWx0Q291bnQ7XG5cdFx0XHRcdFx0XHRmb3IgKGlSZXN1bHRDb3VudCA9IDA7IGlSZXN1bHRDb3VudCA8IHJlc3VsdHMubGVuZ3RoOyBpUmVzdWx0Q291bnQrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0c1tpUmVzdWx0Q291bnRdLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVJlamVjdGVkSXRlbXMucHVzaChyZXN1bHRzW2lSZXN1bHRDb3VudF0ucmVzcG9uc2UpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHRzW2lSZXN1bHRDb3VudF0uc3RhdHVzID09PSBcInJlc29sdmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYklzQ3JlYXRlQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyByZW1vdmVkIHRoZSBiQWN0aW9uUGFyYW1ldGVyc0V4aXN0IHNvIHRoYXQgY3JlYXRlIG5ldyBhY3Rpb24gY2FuIHdvcmsgaW4gYm90aCBjYXNlcyAtIHdpdGggYW5kIHdpdGhvdXQgZGlhbG9nXG5cdFx0XHRcdFx0XHRcdFx0XHQvL29ubHkgdXNlZCBmb3IgTmV3QWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzW2lSZXN1bHRDb3VudF0uYkNvbnNpZGVyRG9jdW1lbnRNb2RpZmllZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZWRJdGVtcy5wdXNoKHJlc3VsdHNbaVJlc3VsdENvdW50XSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlZEl0ZW1zLnB1c2gocmVzdWx0c1tpUmVzdWx0Q291bnRdLnJlc3BvbnNlKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghcmVzdWx0cyB8fCAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA9PT0gMCkpIHtcblx0XHRcdFx0XHRcdFx0cmVqZWN0KHRydWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGFSZWplY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYlJldHVybkFzQXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGFSZXNvbHZlZEl0ZW1zKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb250ZXh0IGlzIGdpdmVuIGRpcmVjdGx5IHdpdGhvdXQgYW4gYXJyYXkgc28gYWxzbyBubyBhcnJheSBpcyBleHBlY3RlZFxuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoYVJlc29sdmVkSXRlbXNbMF0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZWplY3Qoe1xuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkSXRlbXM6IGFSZXNvbHZlZEl0ZW1zLFxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdGVkSXRlbXM6IGFSZWplY3RlZEl0ZW1zXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0XHR9XG5cdFx0fSkuZmluYWxseShmdW5jdGlvbigpIHtcblx0XHRcdChcblx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHR9XG5cdFx0XHQpKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0FjdGlvbiA9IG9Nb2RlbC5iaW5kQ29udGV4dChcIi9cIiArIHNBY3Rpb25OYW1lICsgXCIoLi4uKVwiKTtcblx0XHRzZXRBY3Rpb25QYXJhbWV0ZXJEZWZhdWx0VmFsdWUoKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiYWN0aW9uSW1wb3J0XCI7XG5cdFx0Y29uc3Qgb0FjdGlvblByb21pc2UgPSBvQWN0aW9uLmV4ZWN1dGUoXG5cdFx0XHRzR3JvdXBJZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdENvbW1vblV0aWxzLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKG9wZXJhdGlvbnMsIHNHcm91cElkLCBtUGFyYW1ldGVycy5sYWJlbCwgb01vZGVsKVxuXHRcdCk7XG5cdFx0b01vZGVsLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHQvLyB0cmlnZ2VyIG9uU3VibWl0dGVkIFwiZXZlbnRcIlxuXHRcdChcblx0XHRcdGZuT25TdWJtaXR0ZWQgfHxcblx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdC8qKi9cblx0XHRcdH1cblx0XHQpKG9BY3Rpb25Qcm9taXNlKTtcblx0XHRyZXR1cm4gb0FjdGlvblByb21pc2UuZmluYWxseShmdW5jdGlvbigpIHtcblx0XHRcdChcblx0XHRcdFx0Zm5PblJlc3BvbnNlIHx8XG5cdFx0XHRcdGZ1bmN0aW9uIG5vb3AoKSB7XG5cdFx0XHRcdFx0LyoqL1xuXHRcdFx0XHR9XG5cdFx0XHQpKCk7XG5cdFx0fSk7XG5cdH1cbn1cbmZ1bmN0aW9uIF9nZXRQYXRoKG9BY3Rpb25Db250ZXh0OiBhbnksIHNBY3Rpb25OYW1lOiBhbnkpIHtcblx0bGV0IHNQYXRoID0gb0FjdGlvbkNvbnRleHQuZ2V0UGF0aCgpO1xuXHRzUGF0aCA9IG9BY3Rpb25Db250ZXh0LmdldE9iamVjdChcIiRJc0JvdW5kXCIpID8gc1BhdGguc3BsaXQoXCJAJHVpNS5vdmVybG9hZFwiKVswXSA6IHNQYXRoLnNwbGl0KFwiLzBcIilbMF07XG5cdHJldHVybiBzUGF0aC5zcGxpdChcIi9cIiArIHNBY3Rpb25OYW1lKVswXTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIHRvIGNhbGwgT0RhdGEgYWN0aW9ucyAoYm91bmQvaW1wb3J0KSBhbmQgZnVuY3Rpb25zIChib3VuZC9pbXBvcnQpXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMub3BlcmF0aW9uc1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG9wZXJhdGlvbnMgPSB7XG5cdGNhbGxCb3VuZEFjdGlvbjogY2FsbEJvdW5kQWN0aW9uLFxuXHRjYWxsQWN0aW9uSW1wb3J0OiBjYWxsQWN0aW9uSW1wb3J0LFxuXHRjYWxsQm91bmRGdW5jdGlvbjogY2FsbEJvdW5kRnVuY3Rpb24sXG5cdGNhbGxGdW5jdGlvbkltcG9ydDogY2FsbEZ1bmN0aW9uSW1wb3J0LFxuXHRleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzOiBleGVjdXRlRGVwZW5kaW5nT25TZWxlY3RlZENvbnRleHRzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBvcGVyYXRpb25zO1xuIl19