oxygen-cli 1.37.8 → 1.37.9

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 (303) hide show
  1. package/CHANGELOG.md +1687 -1687
  2. package/LICENSE +672 -672
  3. package/README.md +37 -37
  4. package/build/core/OxygenCore.js +8 -2
  5. package/build/core/OxygenEvents.js +4 -2
  6. package/build/core/OxygenModule.js +1 -1
  7. package/build/core/OxygenService.js +1 -1
  8. package/build/core/OxygenSubModule.js +1 -1
  9. package/build/core/WebDriverModule.js +1 -1
  10. package/build/core/utils.js +1 -1
  11. package/build/errors/HookError.js +1 -1
  12. package/build/errors/ModuleError.js +1 -1
  13. package/build/errors/ModuleUnavailableError.js +1 -1
  14. package/build/errors/OxygenError.js +1 -1
  15. package/build/errors/ScriptNotFound.js +1 -1
  16. package/build/errors/helper.js +1 -1
  17. package/build/index.js +1 -1
  18. package/build/lib/cli-util.js +25 -6
  19. package/build/lib/cli.js +2 -2
  20. package/build/lib/debugger.js +1 -1
  21. package/build/lib/img-merge.js +1 -1
  22. package/build/lib/launcher.js +1 -1
  23. package/build/lib/logger.js +43 -43
  24. package/build/lib/moduleRequire.js +1 -1
  25. package/build/lib/parallel-launcher.js +1 -1
  26. package/build/lib/param-manager.js +1 -1
  27. package/build/lib/param-reader-csv.js +1 -1
  28. package/build/lib/param-reader-excel.js +1 -1
  29. package/build/lib/param-reader-json.js +1 -1
  30. package/build/lib/text-to-image.js +1 -1
  31. package/build/lib/util.js +2 -2
  32. package/build/model/case-result.js +1 -1
  33. package/build/model/failure.js +1 -1
  34. package/build/model/status.js +1 -1
  35. package/build/model/step-result.js +1 -1
  36. package/build/model/suite-result.js +2 -1
  37. package/build/model/test-result.js +1 -1
  38. package/build/model/testcase.js +1 -1
  39. package/build/model/testsuite.js +1 -1
  40. package/build/ox_modules/index.js +1 -1
  41. package/build/ox_modules/module-assert.js +37 -37
  42. package/build/ox_modules/module-date.js +24 -24
  43. package/build/ox_modules/module-db.js +52 -52
  44. package/build/ox_modules/module-email.js +59 -59
  45. package/build/ox_modules/module-eyes.js +34 -34
  46. package/build/ox_modules/module-http/ntlm-util.js +10 -10
  47. package/build/ox_modules/module-http/ntlm.js +15 -15
  48. package/build/ox_modules/module-http.js +132 -132
  49. package/build/ox_modules/module-log.js +27 -27
  50. package/build/ox_modules/module-mailinator.js +87 -87
  51. package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
  52. package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
  53. package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
  54. package/build/ox_modules/module-mob/commands/assertText.js +21 -21
  55. package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
  56. package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
  57. package/build/ox_modules/module-mob/commands/back.js +16 -16
  58. package/build/ox_modules/module-mob/commands/clear.js +19 -19
  59. package/build/ox_modules/module-mob/commands/click.js +17 -17
  60. package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
  61. package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
  62. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
  63. package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
  64. package/build/ox_modules/module-mob/commands/debug.js +16 -16
  65. package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
  66. package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
  67. package/build/ox_modules/module-mob/commands/execute.js +21 -21
  68. package/build/ox_modules/module-mob/commands/findElement.js +20 -20
  69. package/build/ox_modules/module-mob/commands/findElements.js +23 -23
  70. package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
  71. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
  72. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
  73. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
  74. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
  75. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
  76. package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
  77. package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
  78. package/build/ox_modules/module-mob/commands/getSource.js +16 -16
  79. package/build/ox_modules/module-mob/commands/getText.js +18 -18
  80. package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
  81. package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
  82. package/build/ox_modules/module-mob/commands/getValue.js +18 -18
  83. package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
  84. package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
  85. package/build/ox_modules/module-mob/commands/index.js +1 -1
  86. package/build/ox_modules/module-mob/commands/installApp.js +16 -16
  87. package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
  88. package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
  89. package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
  90. package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
  91. package/build/ox_modules/module-mob/commands/isExist.js +19 -19
  92. package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
  93. package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
  94. package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
  95. package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
  96. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
  97. package/build/ox_modules/module-mob/commands/open.js +17 -17
  98. package/build/ox_modules/module-mob/commands/pause.js +16 -16
  99. package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
  100. package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
  101. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
  102. package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
  103. package/build/ox_modules/module-mob/commands/select.js +24 -24
  104. package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
  105. package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
  106. package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
  107. package/build/ox_modules/module-mob/commands/setContext.js +16 -16
  108. package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
  109. package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
  110. package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
  111. package/build/ox_modules/module-mob/commands/shake.js +16 -16
  112. package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
  113. package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
  114. package/build/ox_modules/module-mob/commands/swipe.js +20 -20
  115. package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
  116. package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
  117. package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
  118. package/build/ox_modules/module-mob/commands/tap.js +17 -17
  119. package/build/ox_modules/module-mob/commands/type.js +20 -20
  120. package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
  121. package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
  122. package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
  123. package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
  124. package/build/ox_modules/module-mob.js +74 -74
  125. package/build/ox_modules/module-pdf.js +35 -35
  126. package/build/ox_modules/module-proxy.js +77 -77
  127. package/build/ox_modules/module-serial.js +55 -55
  128. package/build/ox_modules/module-shell.js +25 -25
  129. package/build/ox_modules/module-soap.js +72 -72
  130. package/build/ox_modules/module-twilio.js +41 -41
  131. package/build/ox_modules/module-utils.js +91 -91
  132. package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
  133. package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
  134. package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
  135. package/build/ox_modules/module-web/commands/assertExist.js +17 -17
  136. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
  137. package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
  138. package/build/ox_modules/module-web/commands/assertText.js +21 -21
  139. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
  140. package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
  141. package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
  142. package/build/ox_modules/module-web/commands/assertValue.js +20 -20
  143. package/build/ox_modules/module-web/commands/back.js +16 -16
  144. package/build/ox_modules/module-web/commands/clear.js +18 -18
  145. package/build/ox_modules/module-web/commands/click.js +25 -25
  146. package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
  147. package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
  148. package/build/ox_modules/module-web/commands/debug.js +15 -15
  149. package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
  150. package/build/ox_modules/module-web/commands/deselect.js +22 -22
  151. package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
  152. package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
  153. package/build/ox_modules/module-web/commands/execute.js +24 -24
  154. package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
  155. package/build/ox_modules/module-web/commands/findElement.js +19 -19
  156. package/build/ox_modules/module-web/commands/findElements.js +22 -22
  157. package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
  158. package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
  159. package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
  160. package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
  161. package/build/ox_modules/module-web/commands/getCookies.js +13 -13
  162. package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
  163. package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
  164. package/build/ox_modules/module-web/commands/getHTML.js +17 -17
  165. package/build/ox_modules/module-web/commands/getSource.js +16 -16
  166. package/build/ox_modules/module-web/commands/getText.js +18 -18
  167. package/build/ox_modules/module-web/commands/getTitle.js +12 -12
  168. package/build/ox_modules/module-web/commands/getUrl.js +16 -16
  169. package/build/ox_modules/module-web/commands/getValue.js +18 -18
  170. package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
  171. package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
  172. package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
  173. package/build/ox_modules/module-web/commands/index.js +1 -1
  174. package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
  175. package/build/ox_modules/module-web/commands/isChecked.js +18 -18
  176. package/build/ox_modules/module-web/commands/isExist.js +19 -19
  177. package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
  178. package/build/ox_modules/module-web/commands/isSelected.js +23 -23
  179. package/build/ox_modules/module-web/commands/isVisible.js +19 -19
  180. package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
  181. package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
  182. package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
  183. package/build/ox_modules/module-web/commands/mock.js +20 -20
  184. package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
  185. package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
  186. package/build/ox_modules/module-web/commands/newWindow.js +16 -16
  187. package/build/ox_modules/module-web/commands/open.js +16 -16
  188. package/build/ox_modules/module-web/commands/pause.js +15 -15
  189. package/build/ox_modules/module-web/commands/point.js +21 -21
  190. package/build/ox_modules/module-web/commands/pointJS.js +15 -15
  191. package/build/ox_modules/module-web/commands/refresh.js +15 -15
  192. package/build/ox_modules/module-web/commands/rightClick.js +17 -17
  193. package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
  194. package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
  195. package/build/ox_modules/module-web/commands/select.js +23 -23
  196. package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
  197. package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
  198. package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
  199. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
  200. package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
  201. package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
  202. package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
  203. package/build/ox_modules/module-web/commands/type.js +20 -20
  204. package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
  205. package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
  206. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
  207. package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
  208. package/build/ox_modules/module-web/commands/verifyText.js +21 -21
  209. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
  210. package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
  211. package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
  212. package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
  213. package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
  214. package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
  215. package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
  216. package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
  217. package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
  218. package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
  219. package/build/ox_modules/module-web/commands/waitForText.js +20 -20
  220. package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
  221. package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
  222. package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
  223. package/build/ox_modules/module-web.js +105 -100
  224. package/build/ox_modules/module-win/commands/assertText.js +17 -17
  225. package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
  226. package/build/ox_modules/module-win/commands/assertValue.js +14 -14
  227. package/build/ox_modules/module-win/commands/back.js +11 -11
  228. package/build/ox_modules/module-win/commands/clear.js +13 -13
  229. package/build/ox_modules/module-win/commands/click.js +13 -13
  230. package/build/ox_modules/module-win/commands/clickLong.js +14 -14
  231. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
  232. package/build/ox_modules/module-win/commands/findElement.js +15 -15
  233. package/build/ox_modules/module-win/commands/findElements.js +15 -15
  234. package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
  235. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
  236. package/build/ox_modules/module-win/commands/getLocation.js +14 -14
  237. package/build/ox_modules/module-win/commands/getSource.js +12 -12
  238. package/build/ox_modules/module-win/commands/getText.js +14 -14
  239. package/build/ox_modules/module-win/commands/getValue.js +14 -14
  240. package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
  241. package/build/ox_modules/module-win/commands/index.js +1 -1
  242. package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
  243. package/build/ox_modules/module-win/commands/isChecked.js +14 -14
  244. package/build/ox_modules/module-win/commands/isClickable.js +14 -14
  245. package/build/ox_modules/module-win/commands/isExist.js +15 -15
  246. package/build/ox_modules/module-win/commands/isSelected.js +14 -14
  247. package/build/ox_modules/module-win/commands/isVisible.js +15 -15
  248. package/build/ox_modules/module-win/commands/open.js +13 -13
  249. package/build/ox_modules/module-win/commands/pause.js +12 -12
  250. package/build/ox_modules/module-win/commands/rightClick.js +13 -13
  251. package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
  252. package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
  253. package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
  254. package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
  255. package/build/ox_modules/module-win/commands/tap.js +13 -13
  256. package/build/ox_modules/module-win/commands/type.js +16 -16
  257. package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
  258. package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
  259. package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
  260. package/build/ox_modules/module-win.js +47 -47
  261. package/build/ox_modules/utils.js +8 -8
  262. package/build/ox_reporters/excel/template.json +48 -48
  263. package/build/ox_reporters/html/index.ejs +163 -163
  264. package/build/ox_reporters/html/summary.ejs +77 -77
  265. package/build/ox_reporters/html/tests-details.ejs +134 -134
  266. package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
  267. package/build/ox_reporters/reporter-excel.js +1 -1
  268. package/build/ox_reporters/reporter-html.js +1 -1
  269. package/build/ox_reporters/reporter-json.js +1 -1
  270. package/build/ox_reporters/reporter-junit.js +1 -1
  271. package/build/ox_reporters/reporter-pdf.js +1 -1
  272. package/build/ox_reporters/reporter-rp.js +376 -0
  273. package/build/ox_reporters/reporter-xml.js +1 -1
  274. package/build/ox_services/service-devtools/submodule-network.js +1 -1
  275. package/build/ox_services/service-devtools.js +1 -1
  276. package/build/reporter/FileReporterBase.js +1 -1
  277. package/build/reporter/ReportAggregator.js +110 -43
  278. package/build/reporter/ReporterBase.js +2 -2
  279. package/build/runners/WorkerProcess.js +1 -1
  280. package/build/runners/cucumber/CucumberEventListener.js +1 -1
  281. package/build/runners/cucumber/CucumberReporter.js +1 -1
  282. package/build/runners/cucumber/CucumberWorker.js +1 -1
  283. package/build/runners/cucumber/index.js +1 -1
  284. package/build/runners/cucumber/worker.js +1 -1
  285. package/build/runners/index.js +1 -1
  286. package/build/runners/oxygen/OxygenWorker.js +1 -1
  287. package/build/runners/oxygen/index.js +37 -22
  288. package/build/runners/oxygen/worker.js +1 -1
  289. package/config/default.json +6 -6
  290. package/log.txt +1614 -0
  291. package/package.json +136 -135
  292. package/types/index.d.ts +70 -70
  293. package/types/module-eyes.d.ts +39 -39
  294. package/types/module-http.d.ts +163 -163
  295. package/types/module-log.d.ts +34 -34
  296. package/types/module-mob.d.ts +966 -966
  297. package/types/module-pdf.d.ts +40 -40
  298. package/types/module-proxy.d.ts +100 -100
  299. package/types/module-shell.d.ts +24 -24
  300. package/types/module-utils.d.ts +99 -99
  301. package/types/module-web.d.ts +1053 -1053
  302. package/types/module-win.d.ts +352 -352
  303. package/types/oxygen.d.ts +53 -53
@@ -489,4 +489,4 @@ class WorkerProcess extends _events.EventEmitter {
489
489
  }
490
490
 
491
491
  exports.default = WorkerProcess;
492
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfZGVidWdnZXIiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0IiwiY29uc29sZSIsInRvU3RyaW5nIiwidHJpbSIsImUiLCJleGVjUmVzdWx0IiwiTk9ERV9QQVRIIiwiX2hvb2tDaGlsZFByb2NFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2luaXRpYWxpemVEZWJ1Z2dlciIsInN0b3BEZWJ1Z2dlciIsImNsb3NlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsInN0YXR1cyIsIl9wYXVzZWQiLCJkaXNhYmxlIiwicmVzdW1lVGVybWluYXRlIiwiaW52b2tlIiwiX3NlbmQiLCJ0eXBlIiwia2lsbCIsIl9yZXNldCIsImluaXRPeHlnZW4iLCJyaWQiLCJvcHRpb25zIiwiY2FwcyIsImJlZm9yZVRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImFmdGVyVGltZSIsImR1cmF0aW9uIiwic3RhcnRTZXNzaW9uIiwiZW5kU2Vzc2lvbiIsImRpc3Bvc2VNb2R1bGVzIiwiZGlzcG9zZSIsImRlYnVnZ2VyIiwiaXNSdW5uaW5nIiwiaXNJbml0aWFsaXplZCIsInJ1biIsInJ1bk9wdHMiLCJzdWJzY3JpYmUiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwiZXZlbnQiLCJtZXRob2QiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzaGlmdCIsImNhbGxJZCIsIm94dXRpbCIsImdlbmVyYXRlVW5pcXVlSWQiLCJwcm9taXNlIiwiaW52b2tlVGVzdEhvb2siLCJob29rTmFtZSIsImhvb2tBcmdzIiwibWVzc2FnZSIsInNlbmQiLCJfd2hlbk94eWdlbkRpc3Bvc2VkIiwiX3doZW5PeHlnZW5Jbml0aWFsaXplZCIsIl93aGVuTW9kdWxlc0Rpc3Bvc2VkIiwib24iLCJfaGFuZGxlQ2hpbGRNZXNzYWdlIiwiYmluZCIsIl9oYW5kbGVDaGlsZEVycm9yIiwiX2hhbmRsZUNoaWxkRXhpdCIsIl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QiLCJfaGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbiIsIl9oYW5kbGVDaGlsZFNpZ0ludCIsIm1zZyIsImhhc093blByb3BlcnR5IiwiZXJyb3IiLCJyZXR2YWwiLCJlbWl0IiwiX2hhbmRsZVdvcmtlckV2ZW50IiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJkZWJ1ZyIsImV4aXRDb2RlIiwic2lnbmFsIiwiRGVidWdnZXIiLCJ3aGVuRGVidWdnZXJSZWFkeSIsIl90aGlzIiwiY29udGludWUiLCJpc1Jlc29sdmVkIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwiaW5jbHVkZXMiLCJjb25uZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFHQTs7QUFDQTs7OztBQUhBLE1BQU1BLEdBQUcsR0FBRyxxQkFBTyxlQUFQLENBQVo7O0FBTUEsTUFBTUMsTUFBTSxHQUFHQyxFQUFFLElBQUksSUFBSUMsT0FBSixDQUFZQyxPQUFPLElBQUlDLFVBQVUsQ0FBQ0QsT0FBRCxFQUFVRixFQUFWLENBQWpDLENBQXJCOztBQUtlLE1BQU1JLGFBQU4sU0FBNEJDLG9CQUE1QixDQUF5QztBQUNwREMsRUFBQUEsV0FBVyxDQUFDQyxHQUFELEVBQU1DLFVBQU4sRUFBa0JDLFNBQWxCLEVBQTZCQyxTQUE3QixFQUF3Q0MsSUFBSSxHQUFHLElBQS9DLEVBQXFEQyxpQkFBaUIsR0FBRyxJQUF6RSxFQUErRTtBQUN0RjtBQUNBLFNBQUtDLEtBQUwsR0FBYUYsSUFBYjtBQUNBLFNBQUtHLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxTQUFLQyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixJQUF0QjtBQUNBLFNBQUtDLElBQUwsR0FBWVYsR0FBWjtBQUNBLFNBQUtXLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCVixTQUFsQjtBQUNBLFNBQUtXLFVBQUwsR0FBa0JWLFNBQWxCO0FBQ0EsU0FBS1csU0FBTCxHQUFpQixJQUFqQjtBQUNBLFNBQUtDLFdBQUwsR0FBbUJkLFVBQW5CO0FBQ0EsU0FBS2Usa0JBQUwsR0FBMEJYLGlCQUExQjtBQUNBLFNBQUtZLGlCQUFMLEdBQXlCLEVBQXpCO0FBRUEsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLQyxjQUFMLEdBQXNCLEVBQXRCO0FBQ0g7O0FBQ1UsUUFBTEMsS0FBSyxHQUFHO0FBQ1YsVUFBTUMsR0FBRyxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0MsT0FBTyxDQUFDSCxHQUF0QixFQUEyQjtBQUNuQ0ksTUFBQUEsU0FBUyxFQUFFLElBRHdCO0FBRW5DQyxNQUFBQSxLQUFLLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLEtBQUtkLFVBQU4sQ0FGc0I7QUFHbkNlLE1BQUFBLGtCQUFrQixFQUFFO0FBSGUsS0FBM0IsQ0FBWjtBQU1BckMsSUFBQUEsR0FBRyxDQUFDc0MsSUFBSixDQUFVLDJCQUEwQixLQUFLbkIsSUFBSyxHQUE5QztBQUNBLFFBQUlvQixRQUFRLEdBQUc7QUFDWEMsTUFBQUEsR0FBRyxFQUFFUCxPQUFPLENBQUNPLEdBQVIsRUFETTtBQUVYVixNQUFBQSxHQUZXO0FBR1hXLE1BQUFBLFFBQVEsRUFBRSxFQUhDO0FBSVhDLE1BQUFBLFFBQVEsRUFBRTtBQUpDLEtBQWY7O0FBT0EsUUFBSSxLQUFLcEIsVUFBVCxFQUFxQjtBQUVqQmlCLE1BQUFBLFFBQVEsQ0FBQ0UsUUFBVCxHQUFvQlYsTUFBTSxDQUFDQyxNQUFQLENBQWNPLFFBQVEsQ0FBQ0UsUUFBdkIsRUFBaUMsQ0FBQyxtQkFBbUIsS0FBS25CLFVBQXpCLENBQWpDLENBQXBCO0FBQ0g7O0FBR0RpQixJQUFBQSxRQUFRLENBQUNFLFFBQVQsQ0FBa0JFLElBQWxCLENBQXVCLGtCQUF2Qjs7QUFFQSxRQUFJLEtBQUtsQixrQkFBVCxFQUE2QjtBQUN6QixVQUFJO0FBQ0EsWUFBSW1CLG9CQUFKOztBQUVBLFlBQUlYLE9BQU8sQ0FBQ1ksUUFBUixLQUFxQixRQUF6QixFQUFtQztBQUMvQixnQkFBTSxDQUFDLE1BQU07QUFDVCxtQkFBTyxJQUFJMUMsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVTBDLE1BQVYsS0FBcUI7QUFDcEMsa0JBQUk7QUFDQSx5Q0FBSyxhQUFMLEVBQW9CO0FBQUNOLGtCQUFBQSxHQUFHLEVBQUVQLE9BQU8sQ0FBQ08sR0FBUjtBQUFOLGlCQUFwQixFQUEwQyxVQUFVTyxHQUFWLEVBQWVDLE1BQWYsRUFBdUI7QUFDN0Qsc0JBQUlELEdBQUosRUFBUztBQUNMRSxvQkFBQUEsT0FBTyxDQUFDakQsR0FBUixDQUFZLHdCQUFaLEVBQXNDK0MsR0FBdEM7QUFDQTNDLG9CQUFBQSxPQUFPO0FBQ1Y7O0FBQ0Qsc0JBQUk0QyxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsUUFBckIsRUFBK0I7QUFDM0JOLG9CQUFBQSxvQkFBb0IsR0FBR0ksTUFBTSxDQUFDRSxRQUFQLEdBQWtCQyxJQUFsQixFQUF2QjtBQUNBL0Msb0JBQUFBLE9BQU87QUFDVjtBQUNKLGlCQVREO0FBVUgsZUFYRCxDQVdFLE9BQU9nRCxDQUFQLEVBQVU7QUFDUk4sZ0JBQUFBLE1BQU0sQ0FBQ00sQ0FBRCxDQUFOO0FBQ0g7QUFDSixhQWZNLENBQVA7QUFnQkgsV0FqQkssR0FBTjtBQWtCSCxTQW5CRCxNQW1CTztBQUNILGdCQUFNQyxVQUFVLEdBQUcsNkJBQVMsYUFBVCxDQUFuQjs7QUFFQSxjQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQ0gsUUFBN0IsRUFBdUM7QUFDbkNOLFlBQUFBLG9CQUFvQixHQUFHUyxVQUFVLENBQUNILFFBQVgsR0FBc0JDLElBQXRCLEVBQXZCO0FBQ0g7QUFDSjs7QUFFRCxZQUNJUCxvQkFBb0IsSUFDcEJMLFFBREEsSUFFQUEsUUFBUSxDQUFDVCxHQUhiLEVBSUU7QUFDRVMsVUFBQUEsUUFBUSxDQUFDVCxHQUFULENBQWF3QixTQUFiLEdBQXlCVixvQkFBekI7QUFDSDtBQUNKLE9BckNELENBcUNFLE9BQU9RLENBQVAsRUFBVTtBQUNSSCxRQUFBQSxPQUFPLENBQUNqRCxHQUFSLENBQVksaUJBQVosRUFBK0JvRCxDQUEvQjtBQUNIO0FBQ0o7O0FBR0QsU0FBS2hDLFVBQUwsR0FBa0IseUJBQUssS0FBS0ksV0FBVixFQUF1QmUsUUFBdkIsQ0FBbEI7O0FBRUEsU0FBS2dCLG9CQUFMOztBQUdBLFNBQUt2QyxVQUFMLEdBQWtCLElBQWxCO0FBQ0EsV0FBTyxLQUFLSSxVQUFaO0FBQ0g7O0FBRWtCLFFBQWJvQyxhQUFhLEdBQUc7QUFDbEIsUUFBSSxLQUFLbkMsVUFBVCxFQUFxQjtBQUNqQixZQUFNLEtBQUtvQyxtQkFBTCxFQUFOO0FBQ0g7QUFDSjs7QUFFaUIsUUFBWkMsWUFBWSxHQUFHO0FBQ2pCLFFBQUksS0FBS25DLFNBQVQsRUFBb0I7QUFDaEIsWUFBTSxLQUFLQSxTQUFMLENBQWVvQyxLQUFmLEVBQU47O0FBQ0EsV0FBS3BDLFNBQUwsQ0FBZXFDLGtCQUFmOztBQUNBLFdBQUtyQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0g7QUFDSjs7QUFFUyxRQUFKc0MsSUFBSSxDQUFDQyxNQUFNLEdBQUcsSUFBVixFQUFnQjtBQUN0QixRQUFJLEtBQUs3QyxjQUFMLElBQXVCLEtBQUtHLFVBQWhDLEVBQTRDO0FBQ3hDLFVBQUksS0FBS0csU0FBTCxJQUFrQixLQUFLQSxTQUFMLENBQWV3QyxPQUFyQyxFQUE4QztBQUMxQyxZQUFJLGVBQWVELE1BQW5CLEVBQTJCO0FBQ3ZCLGdCQUFNLEtBQUt2QyxTQUFMLENBQWV5QyxPQUFmLEVBQU47QUFDSCxTQUZELE1BRU87QUFDSCxnQkFBTSxLQUFLekMsU0FBTCxDQUFlMEMsZUFBZixFQUFOO0FBQ0g7QUFDSjs7QUFDRCxZQUFNLEtBQUtDLE1BQUwsQ0FBWSxTQUFaLEVBQXVCSixNQUF2QixDQUFOO0FBQ0EsWUFBTTdELE1BQU0sQ0FBQyxHQUFELENBQVo7QUFDSCxLQVZELE1BVU8sSUFBSSxLQUFLbUIsVUFBVCxFQUFxQjtBQUN4QixZQUFNbkIsTUFBTSxDQUFDLEdBQUQsQ0FBWjtBQUNIOztBQUNELFFBQUksS0FBS3NCLFNBQVQsRUFBb0I7QUFDaEIsWUFBTSxLQUFLQSxTQUFMLENBQWVvQyxLQUFmLEVBQU47QUFDSDs7QUFFRCxTQUFLUSxLQUFMLENBQVc7QUFDUEMsTUFBQUEsSUFBSSxFQUFFLE1BREM7QUFFUE4sTUFBQUEsTUFBTSxFQUFFQTtBQUZELEtBQVg7O0FBSUEsU0FBS08sSUFBTDs7QUFDQSxTQUFLQyxNQUFMO0FBQ0g7O0FBRURELEVBQUFBLElBQUksR0FBRztBQUNILFFBQUksS0FBS2pELFVBQVQsRUFBcUI7QUFDakIsV0FBS0EsVUFBTCxDQUFnQmlELElBQWhCLENBQXFCLFFBQXJCO0FBQ0g7QUFDSjs7QUFFZSxRQUFWRSxVQUFVLENBQUNDLEdBQUQsRUFBTUMsT0FBTixFQUFlQyxJQUFmLEVBQXFCO0FBQ2pDLFFBQUksQ0FBQyxLQUFLekQsY0FBVixFQUEwQjtBQUN0QixZQUFNMEQsVUFBVSxHQUFHLElBQUlDLElBQUosR0FBV0MsT0FBWCxFQUFuQjtBQUNBLFlBQU0sS0FBS1gsTUFBTCxDQUFZLE1BQVosRUFBb0JNLEdBQXBCLEVBQXlCQyxPQUF6QixFQUFrQ0MsSUFBbEMsQ0FBTjtBQUVBLFlBQU1JLFNBQVMsR0FBRyxJQUFJRixJQUFKLEdBQVdDLE9BQVgsRUFBbEI7QUFDQSxZQUFNRSxRQUFRLEdBQUdELFNBQVMsR0FBR0gsVUFBN0I7QUFDQSxXQUFLMUQsY0FBTCxHQUFzQixJQUF0QjtBQUNBLFVBQUlZLEtBQUssR0FBRyxFQUFaOztBQUNBLFVBQUksS0FBS2QsS0FBVCxFQUFnQjtBQUNaYyxRQUFBQSxLQUFLLEdBQUcsS0FBS2QsS0FBTCxHQUFhLEdBQXJCO0FBQ0g7O0FBQ0RmLE1BQUFBLEdBQUcsQ0FBQ3NDLElBQUosQ0FBU1QsS0FBSyxHQUFHLHdCQUFSLEdBQW1Da0QsUUFBbkMsR0FBOEMsS0FBdkQ7QUFDSDtBQUNKOztBQUVpQixRQUFaQyxZQUFZLEdBQUc7QUFDakIsUUFBSW5ELEtBQUssR0FBRyxFQUFaOztBQUNBLFFBQUksS0FBS2QsS0FBVCxFQUFnQjtBQUNaYyxNQUFBQSxLQUFLLEdBQUcsS0FBS2QsS0FBTCxHQUFhLEdBQXJCO0FBQ0g7O0FBQ0RmLElBQUFBLEdBQUcsQ0FBQ3NDLElBQUosQ0FBU1QsS0FBSyxHQUFHLGlCQUFqQjtBQUNIOztBQUVlLFFBQVZvRCxVQUFVLENBQUNuQixNQUFNLEdBQUcsSUFBVixFQUFnQm9CLGNBQWMsR0FBRyxJQUFqQyxFQUF1QztBQUNuRCxRQUFJLEtBQUs5RCxVQUFULEVBQXFCO0FBQ2pCLFlBQU11RCxVQUFVLEdBQUcsSUFBSUMsSUFBSixHQUFXQyxPQUFYLEVBQW5CO0FBQ0EsWUFBTSxLQUFLWCxNQUFMLENBQVksWUFBWixFQUEwQkosTUFBMUIsRUFBa0NvQixjQUFsQyxDQUFOO0FBQ0EsWUFBTUosU0FBUyxHQUFHLElBQUlGLElBQUosR0FBV0MsT0FBWCxFQUFsQjtBQUNBLFlBQU1FLFFBQVEsR0FBR0QsU0FBUyxHQUFHSCxVQUE3QjtBQUNBLFVBQUk5QyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxVQUFJLEtBQUtkLEtBQVQsRUFBZ0I7QUFDWmMsUUFBQUEsS0FBSyxHQUFHLEtBQUtkLEtBQUwsR0FBYSxHQUFyQjtBQUNIOztBQUNEZixNQUFBQSxHQUFHLENBQUNzQyxJQUFKLENBQVNULEtBQUssR0FBRyxtQkFBUixHQUE4QmtELFFBQTlCLEdBQXlDLEtBQWxEO0FBQ0g7QUFDSjs7QUFFWSxRQUFQSSxPQUFPLENBQUNyQixNQUFNLEdBQUcsSUFBVixFQUFnQjtBQUN6QixRQUFJLEtBQUt2QyxTQUFULEVBQW9CO0FBQ2hCLFlBQU0sS0FBS0EsU0FBTCxDQUFlb0MsS0FBZixFQUFOO0FBQ0g7O0FBQ0QsUUFBSSxLQUFLMUMsY0FBTCxJQUF1QixLQUFLRyxVQUFoQyxFQUE0QztBQUN4QyxXQUFLSCxjQUFMLEdBQXNCLEtBQXRCO0FBRUEsWUFBTSxLQUFLaUQsTUFBTCxDQUFZLFNBQVosRUFBdUJKLE1BQXZCLENBQU47O0FBQ0EsV0FBS0ssS0FBTCxDQUFXO0FBQ1BDLFFBQUFBLElBQUksRUFBRSxNQURDO0FBRVBOLFFBQUFBLE1BQU0sRUFBRUE7QUFGRCxPQUFYOztBQUlBLFdBQUtPLElBQUw7QUFFSCxLQVZELE1BVU8sSUFBSSxLQUFLakQsVUFBVCxFQUFxQjtBQUN4QixXQUFLSCxjQUFMLEdBQXNCLEtBQXRCOztBQUNBLFdBQUtrRCxLQUFMLENBQVc7QUFDUEMsUUFBQUEsSUFBSSxFQUFFLE1BREM7QUFFUE4sUUFBQUEsTUFBTSxFQUFFQTtBQUZELE9BQVg7O0FBSUEsV0FBS08sSUFBTDtBQUNIO0FBQ0o7O0FBRVcsTUFBUmUsUUFBUSxHQUFJO0FBQ1osV0FBTyxLQUFLN0QsU0FBWjtBQUNIOztBQUVZLE1BQVQ4RCxTQUFTLEdBQUk7QUFDYixXQUFPLEtBQUtyRSxVQUFaO0FBQ0g7O0FBRWdCLE1BQWJzRSxhQUFhLEdBQUc7QUFDaEIsV0FBTyxLQUFLckUsY0FBWjtBQUNIOztBQUVRLFFBQUhzRSxHQUFHLENBQUNDLE9BQUQsRUFBVTtBQUNmLFdBQU8sTUFBTSxLQUFLdEIsTUFBTCxDQUFZLEtBQVosRUFBbUJzQixPQUFuQixDQUFiO0FBQ0g7O0FBRURDLEVBQUFBLFNBQVMsQ0FBQ0MsU0FBRCxFQUFZQyxPQUFaLEVBQXFCO0FBQzFCLFFBQUksQ0FBQyxLQUFLL0QsY0FBTCxDQUFvQjhELFNBQXBCLENBQUQsSUFBbUMsT0FBT0MsT0FBUCxLQUFtQixVQUExRCxFQUFzRTtBQUNsRSxXQUFLL0QsY0FBTCxDQUFvQjhELFNBQXBCLElBQWlDQyxPQUFqQzs7QUFDQSxXQUFLeEIsS0FBTCxDQUFXO0FBQ1BDLFFBQUFBLElBQUksRUFBRSxXQURDO0FBRVB3QixRQUFBQSxLQUFLLEVBQUVGO0FBRkEsT0FBWDtBQUlIO0FBQ0o7O0FBRVcsUUFBTnhCLE1BQU0sQ0FBQzJCLE1BQUQsRUFBUztBQUNqQixRQUFJQyxJQUFJLEdBQUdDLEtBQUssQ0FBQ0MsU0FBTixDQUFnQkMsS0FBaEIsQ0FBc0JDLElBQXRCLENBQTJCQyxTQUEzQixDQUFYOztBQUVBLFFBQUlMLElBQUksQ0FBQ00sTUFBTCxHQUFjLENBQWxCLEVBQXFCO0FBQ2pCTixNQUFBQSxJQUFJLENBQUNPLEtBQUw7QUFDSDs7QUFDRCxRQUFJLEtBQUtqRixVQUFULEVBQXFCO0FBQ2pCLFlBQU1rRixNQUFNLEdBQUdDLGNBQU9DLGdCQUFQLEVBQWY7O0FBQ0EsV0FBS3JDLEtBQUwsQ0FBVztBQUNQQyxRQUFBQSxJQUFJLEVBQUUsUUFEQztBQUVQeUIsUUFBQUEsTUFBTSxFQUFFQSxNQUZEO0FBR1BTLFFBQUFBLE1BQU0sRUFBRUEsTUFIRDtBQUlQUixRQUFBQSxJQUFJLEVBQUVBO0FBSkMsT0FBWDs7QUFNQSxXQUFLbkUsTUFBTCxDQUFZMkUsTUFBWixJQUFzQixrQkFBdEI7QUFDQSxhQUFPLEtBQUszRSxNQUFMLENBQVkyRSxNQUFaLEVBQW9CRyxPQUEzQjtBQUNIO0FBQ0o7O0FBRW1CLFFBQWRDLGNBQWMsQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLEVBQXFCO0FBQ3JDLFVBQU1OLE1BQU0sR0FBR0MsY0FBT0MsZ0JBQVAsRUFBZjs7QUFDQSxTQUFLckMsS0FBTCxDQUFXO0FBQ1BDLE1BQUFBLElBQUksRUFBRSxhQURDO0FBRVB5QixNQUFBQSxNQUFNLEVBQUVjLFFBRkQ7QUFHUEwsTUFBQUEsTUFBTSxFQUFFQSxNQUhEO0FBSVBSLE1BQUFBLElBQUksRUFBRWM7QUFKQyxLQUFYOztBQU1BLFNBQUtqRixNQUFMLENBQVkyRSxNQUFaLElBQXNCLGtCQUF0QjtBQUNBLFdBQU8sS0FBSzNFLE1BQUwsQ0FBWTJFLE1BQVosRUFBb0JHLE9BQTNCO0FBQ0g7O0FBRUR0QyxFQUFBQSxLQUFLLENBQUMwQyxPQUFELEVBQVU7QUFDWCxRQUFJLENBQUMsS0FBS3pGLFVBQVYsRUFBc0I7QUFDbEIsYUFBTyxLQUFQO0FBQ0g7O0FBQ0QsU0FBS0EsVUFBTCxDQUFnQjBGLElBQWhCLENBQXFCRCxPQUFyQjs7QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFFRHZDLEVBQUFBLE1BQU0sR0FBRztBQUNMLFNBQUtsRCxVQUFMLEdBQWtCLElBQWxCO0FBQ0EsU0FBS0csU0FBTCxHQUFpQixJQUFqQjtBQUNBLFNBQUtQLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxTQUFLSyxVQUFMLEdBQWtCLElBQWxCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUt5RixtQkFBTCxHQUEyQixJQUEzQjtBQUNBLFNBQUtDLHNCQUFMLEdBQThCLElBQTlCO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEIsSUFBNUI7QUFDQSxTQUFLaEcsY0FBTCxHQUFzQixLQUF0QjtBQUNIOztBQUVEc0MsRUFBQUEsb0JBQW9CLEdBQUc7QUFDbkIsUUFBSSxDQUFDLEtBQUtuQyxVQUFWLEVBQXNCO0FBQ2xCO0FBQ0g7O0FBQ0QsU0FBS0EsVUFBTCxDQUFnQjhGLEVBQWhCLENBQW1CLFNBQW5CLEVBQThCLEtBQUtDLG1CQUFMLENBQXlCQyxJQUF6QixDQUE4QixJQUE5QixDQUE5Qjs7QUFDQSxTQUFLaEcsVUFBTCxDQUFnQjhGLEVBQWhCLENBQW1CLE9BQW5CLEVBQTRCLEtBQUtHLGlCQUFMLENBQXVCRCxJQUF2QixDQUE0QixJQUE1QixDQUE1Qjs7QUFDQSxTQUFLaEcsVUFBTCxDQUFnQjhGLEVBQWhCLENBQW1CLE1BQW5CLEVBQTJCLEtBQUtJLGdCQUFMLENBQXNCRixJQUF0QixDQUEyQixJQUEzQixDQUEzQjs7QUFDQSxTQUFLaEcsVUFBTCxDQUFnQjhGLEVBQWhCLENBQW1CLFlBQW5CLEVBQWlDLEtBQUtLLHNCQUFMLENBQTRCSCxJQUE1QixDQUFpQyxJQUFqQyxDQUFqQzs7QUFDQSxTQUFLaEcsVUFBTCxDQUFnQjhGLEVBQWhCLENBQW1CLG1CQUFuQixFQUF3QyxLQUFLTSw2QkFBTCxDQUFtQ0osSUFBbkMsQ0FBd0MsSUFBeEMsQ0FBeEM7O0FBQ0EsU0FBS2hHLFVBQUwsQ0FBZ0I4RixFQUFoQixDQUFtQixRQUFuQixFQUE2QixLQUFLTyxrQkFBTCxDQUF3QkwsSUFBeEIsQ0FBNkIsSUFBN0IsQ0FBN0I7QUFDSDs7QUFFREQsRUFBQUEsbUJBQW1CLENBQUNPLEdBQUQsRUFBTTtBQUNyQixRQUFJQSxHQUFHLENBQUM5QixLQUFSLEVBQWU7QUFDWCxjQUFROEIsR0FBRyxDQUFDOUIsS0FBWjtBQUNJLGFBQUssZUFBTDtBQUNJLGNBQUk4QixHQUFHLENBQUNwQixNQUFKLElBQWN2RSxNQUFNLENBQUNpRSxTQUFQLENBQWlCMkIsY0FBakIsQ0FBZ0N6QixJQUFoQyxDQUFxQyxLQUFLdkUsTUFBMUMsRUFBa0QrRixHQUFHLENBQUNwQixNQUF0RCxDQUFsQixFQUFpRjtBQUM3RSxrQkFBTUcsT0FBTyxHQUFHLEtBQUs5RSxNQUFMLENBQVkrRixHQUFHLENBQUNwQixNQUFoQixDQUFoQjs7QUFDQSxnQkFBSW9CLEdBQUcsQ0FBQ0UsS0FBUixFQUFlO0FBQ1huQixjQUFBQSxPQUFPLENBQUMzRCxNQUFSLENBQWU0RSxHQUFHLENBQUNFLEtBQW5CO0FBQ0gsYUFGRCxNQUdLO0FBQ0RuQixjQUFBQSxPQUFPLENBQUNyRyxPQUFSLENBQWdCc0gsR0FBRyxDQUFDRyxNQUFwQjtBQUNIOztBQUNELG1CQUFPLEtBQUtsRyxNQUFMLENBQVkrRixHQUFHLENBQUNwQixNQUFoQixDQUFQO0FBQ0g7O0FBQ0Q7O0FBQ0osYUFBSyxVQUFMO0FBQ0ksY0FBSW9CLEdBQUcsQ0FBQzdCLE1BQVIsRUFBZ0I7QUFDWixpQkFBS2lDLElBQUwsQ0FBVSxVQUFWLEVBQXNCO0FBQUVySCxjQUFBQSxHQUFHLEVBQUUsS0FBS1UsSUFBWjtBQUFrQjBFLGNBQUFBLE1BQU0sRUFBRTZCLEdBQUcsQ0FBQzdCLE1BQTlCO0FBQXNDQyxjQUFBQSxJQUFJLEVBQUU0QixHQUFHLENBQUM1QjtBQUFoRCxhQUF0QjtBQUNIOztBQUNEOztBQUNKLGFBQUssT0FBTDtBQUNJLGVBQUtpQyxrQkFBTCxDQUF3QkwsR0FBRyxDQUFDN0csSUFBNUIsRUFBa0M2RyxHQUFHLENBQUM1QixJQUF0Qzs7QUFDQTtBQXBCUjtBQXNCSDs7QUFDRCxTQUFLZ0MsSUFBTCxDQUFVLFNBQVYsRUFBcUIvRixNQUFNLENBQUNDLE1BQVAsQ0FBYzBGLEdBQWQsRUFBbUI7QUFBRWpILE1BQUFBLEdBQUcsRUFBRSxLQUFLVTtBQUFaLEtBQW5CLENBQXJCO0FBQ0g7O0FBRXVCLFFBQWxCNEcsa0JBQWtCLENBQUNsSCxJQUFELEVBQU9pRixJQUFQLEVBQWE7QUFDakMsUUFBSWpGLElBQUksSUFBSSxLQUFLZSxjQUFiLElBQStCLEtBQUtBLGNBQUwsQ0FBb0JmLElBQXBCLENBQW5DLEVBQThEO0FBQzFELFVBQUk7QUFDQSxjQUFNLEtBQUtlLGNBQUwsQ0FBb0JmLElBQXBCLEVBQTBCbUgsS0FBMUIsQ0FBZ0NDLFNBQWhDLEVBQTJDbkMsSUFBM0MsQ0FBTjtBQUNILE9BRkQsQ0FHQSxPQUFPMUMsQ0FBUCxFQUFVO0FBQ05wRCxRQUFBQSxHQUFHLENBQUM0SCxLQUFKLENBQVUsZ0RBQVYsRUFBNER4RSxDQUE1RDtBQUNIO0FBQ0o7QUFDSjs7QUFFRGlFLEVBQUFBLGlCQUFpQixDQUFDTyxLQUFELEVBQVE7QUFDckI1SCxJQUFBQSxHQUFHLENBQUNrSSxLQUFKLENBQVcsVUFBUyxLQUFLL0csSUFBSyxxQkFBb0J5RyxLQUFNLEdBQXhEO0FBQ0EsU0FBS0UsSUFBTCxDQUFVLE9BQVYsRUFBbUIvRixNQUFNLENBQUNDLE1BQVAsQ0FBYztBQUFFNEYsTUFBQUEsS0FBSyxFQUFHQTtBQUFWLEtBQWQsRUFBaUM7QUFBRW5ILE1BQUFBLEdBQUcsRUFBRSxLQUFLVTtBQUFaLEtBQWpDLENBQW5CO0FBQ0g7O0FBRURtRyxFQUFBQSxnQkFBZ0IsQ0FBQ2EsUUFBRCxFQUFXQyxNQUFYLEVBQW1CO0FBQy9CcEksSUFBQUEsR0FBRyxDQUFDa0ksS0FBSixDQUFXLFVBQVMsS0FBSy9HLElBQUssNEJBQTJCZ0gsUUFBUyxlQUFjQyxNQUFPLEdBQXZGOztBQUNBLFNBQUs5RCxNQUFMOztBQUNBLFNBQUt3RCxJQUFMLENBQVUsTUFBVixFQUFrQjtBQUFFckgsTUFBQUEsR0FBRyxFQUFFLEtBQUtVLElBQVo7QUFBa0JnSCxNQUFBQSxRQUFsQjtBQUE0QkMsTUFBQUE7QUFBNUIsS0FBbEI7QUFDSDs7QUFFRGIsRUFBQUEsc0JBQXNCLEdBQUc7QUFDckJ2SCxJQUFBQSxHQUFHLENBQUNrSSxLQUFKLENBQVcsVUFBUyxLQUFLL0csSUFBSyxnQkFBOUI7QUFDSDs7QUFFRHFHLEVBQUFBLDZCQUE2QixDQUFDSSxLQUFELEVBQVE7QUFDakM1SCxJQUFBQSxHQUFHLENBQUNrSSxLQUFKLENBQVcsVUFBUyxLQUFLL0csSUFBSyw4QkFBNkJ5RyxLQUFNLEdBQWpFOztBQUNBLFNBQUt0RCxNQUFMOztBQUNBLFNBQUt3RCxJQUFMLENBQVUsT0FBVixFQUFtQi9GLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQUU0RixNQUFBQSxLQUFLLEVBQUdBO0FBQVYsS0FBZCxFQUFpQztBQUFFbkgsTUFBQUEsR0FBRyxFQUFFLEtBQUtVO0FBQVosS0FBakMsQ0FBbkI7QUFDQSxTQUFLMkcsSUFBTCxDQUFVLE1BQVYsRUFBa0I7QUFBRXJILE1BQUFBLEdBQUcsRUFBRSxLQUFLVSxJQUFaO0FBQWtCZ0gsTUFBQUEsUUFBUSxFQUFFO0FBQTVCLEtBQWxCO0FBQ0g7O0FBRURWLEVBQUFBLGtCQUFrQixHQUFHO0FBQ2pCekgsSUFBQUEsR0FBRyxDQUFDa0ksS0FBSixDQUFXLFVBQVMsS0FBSy9HLElBQUssMEJBQTlCO0FBQ0g7O0FBRXdCLFFBQW5Cc0MsbUJBQW1CLEdBQUc7QUFDeEIsU0FBS2xDLFNBQUwsR0FBaUIsSUFBSThHLGlCQUFKLENBQWEsS0FBS2xILElBQWxCLENBQWpCO0FBQ0EsUUFBSW1ILGlCQUFpQixHQUFHLGtCQUF4Qjs7QUFDQSxVQUFNQyxLQUFLLEdBQUcsSUFBZDs7QUFFQSxTQUFLaEgsU0FBTCxDQUFlMkYsRUFBZixDQUFrQixPQUFsQixFQUEyQixVQUFTbkUsR0FBVCxFQUFjO0FBRXJDLFVBQUl3RixLQUFLLENBQUNoSCxTQUFOLElBQW1CZ0gsS0FBSyxDQUFDaEgsU0FBTixDQUFnQmlILFFBQXZDLEVBQWlEO0FBQzdDRCxRQUFBQSxLQUFLLENBQUNoSCxTQUFOLENBQWdCaUgsUUFBaEI7QUFDSDs7QUFDREYsTUFBQUEsaUJBQWlCLENBQUNsSSxPQUFsQjtBQUNILEtBTkQ7O0FBT0EsU0FBS21CLFNBQUwsQ0FBZTJGLEVBQWYsQ0FBa0IsT0FBbEIsRUFBMkIsVUFBU25FLEdBQVQsRUFBYztBQUVyQy9DLE1BQUFBLEdBQUcsQ0FBQzRILEtBQUosQ0FBVSxrQkFBVixFQUE4QjdFLEdBQTlCO0FBRUEsV0FBSytFLElBQUwsQ0FBVSxnQkFBVixFQUE0Qi9GLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjZSxHQUFkLEVBQW1CO0FBQUV0QyxRQUFBQSxHQUFHLEVBQUUsS0FBS1U7QUFBWixPQUFuQixDQUE1Qjs7QUFFQSxVQUFJLENBQUNtSCxpQkFBaUIsQ0FBQ0csVUFBdkIsRUFBbUM7QUFDL0JILFFBQUFBLGlCQUFpQixDQUFDeEYsTUFBbEIsQ0FBeUJDLEdBQUcsQ0FBQzhELE9BQTdCO0FBQ0g7QUFDSixLQVREOztBQVVBLFNBQUt0RixTQUFMLENBQWUyRixFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFVBQVN3QixjQUFULEVBQXlCO0FBQ2hELFdBQUtaLElBQUwsQ0FBVSxnQkFBVixFQUE0QlksY0FBNUI7QUFDSCxLQUZEOztBQUdBLFNBQUtuSCxTQUFMLENBQWUyRixFQUFmLENBQWtCLFlBQWxCLEVBQWdDLGdCQUFleUIsVUFBZixFQUEyQjtBQUV2RCxVQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQzlCLE9BQTdCLEVBQXNDO0FBQ2xDLFlBQUkwQixLQUFLLENBQUM3RyxpQkFBTixDQUF3QmtILFFBQXhCLENBQWlDRCxVQUFVLENBQUM5QixPQUE1QyxDQUFKLEVBQTBELENBRXpELENBRkQsTUFFTztBQUNIMEIsVUFBQUEsS0FBSyxDQUFDN0csaUJBQU4sQ0FBd0JpQixJQUF4QixDQUE2QmdHLFVBQVUsQ0FBQzlCLE9BQXhDOztBQUNBLGVBQUtpQixJQUFMLENBQVUscUJBQVYsRUFBaUNhLFVBQWpDO0FBQ0g7QUFDSjtBQUNKLEtBVkQ7O0FBWUEsUUFBSTtBQUNBM0ksTUFBQUEsR0FBRyxDQUFDc0MsSUFBSixDQUFVLGtDQUFpQyxLQUFLaEIsVUFBVyxLQUEzRDtBQUNBLFlBQU0sS0FBS0MsU0FBTCxDQUFlc0gsT0FBZixDQUF1QixLQUFLdkgsVUFBNUIsRUFBd0MsV0FBeEMsQ0FBTjtBQUNILEtBSEQsQ0FHRSxPQUFPOEIsQ0FBUCxFQUFVO0FBQ1JwRCxNQUFBQSxHQUFHLENBQUM0SCxLQUFKLENBQVUsa0NBQVYsRUFBOEN4RSxDQUE5QztBQUNBLFlBQU15RCxPQUFPLEdBQUcscUNBQXFDekQsQ0FBQyxDQUFDeUQsT0FBdkQ7QUFDQXlCLE1BQUFBLGlCQUFpQixDQUFDeEYsTUFBbEIsQ0FBeUIrRCxPQUF6QjtBQUNIOztBQUVELFdBQU95QixpQkFBaUIsQ0FBQzdCLE9BQXpCO0FBQ0g7O0FBcFptRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcmssIGV4ZWNTeW5jLCBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBzZXR1cCBsb2dnZXJcclxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuY29uc3QgbG9nID0gbG9nZ2VyKCdXb3JrZXJQcm9jZXNzJyk7XHJcblxyXG5pbXBvcnQgRGVidWdnZXIgZnJvbSAnLi4vbGliL2RlYnVnZ2VyJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuLyoqXHJcbiAqIFdvcmtlclByb2Nlc3MgcmVzcG9uc2libGUgZm9yIHNwYXduaW5nIGEgd29ya2VyIHByb2Nlc3MgdGhlIHRlc3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXJQcm9jZXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBpZCwgd29ya2VyUGF0aCwgZGVidWdNb2RlLCBkZWJ1Z1BvcnQsIG5hbWUgPSBudWxsLCBucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWUpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zdG9wcGVkQnlVc2VyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBkZWJ1Z01vZGU7XHJcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gZGVidWdQb3J0O1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93b3JrZXJQYXRoID0gd29ya2VyUGF0aDtcclxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG5wbUdSb290RXhlY3V0aW9uO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMgPSBbXTtcclxuICAgICAgICAvLyBob2xkIHRoZSByZW1vdGUgaW52b2NhdGlvbiBwcm9taXNlXHJcbiAgICAgICAgdGhpcy5fY2FsbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzID0ge307XHJcbiAgICB9XHJcbiAgICBhc3luYyBzdGFydCgpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHByb2Nlc3MuZW52LCB7XHJcbiAgICAgICAgICAgIE9YX1dPUktFUjogdHJ1ZSxcclxuICAgICAgICAgICAgREVCVUc6ICFpc05hTih0aGlzLl9kZWJ1Z1BvcnQpLFxyXG4gICAgICAgICAgICBOT19VUERBVEVfTk9USUZJRVI6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIHdvcmtlciBwcm9jZXNzICR7dGhpcy5fcGlkfS5gKTtcclxuICAgICAgICBsZXQgZm9ya09wdHMgPSB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcclxuICAgICAgICAgICAgZW52LFxyXG4gICAgICAgICAgICBleGVjQXJndjogW10sXHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgLy9zaWxlbnQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdQb3J0KSB7XHJcbiAgICAgICAgICAgIC8vIGFkZCAtLWluc3BlY3QtYnJrIGFyZ3VtZW50IGlmIGRlYnVnIHBvcnQgaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgIGZvcmtPcHRzLmV4ZWNBcmd2ID0gT2JqZWN0LmFzc2lnbihmb3JrT3B0cy5leGVjQXJndiwgWyctLWluc3BlY3QtYnJrPScgKyB0aGlzLl9kZWJ1Z1BvcnRdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHByaW50IG1vcmUgaW5mb3JtYXRpb24gZm9yIG5vZGVqcyBlcnJvcnNcclxuICAgICAgICBmb3JrT3B0cy5leGVjQXJndi5wdXNoKCctLXRyYWNlLXdhcm5pbmdzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoJ25wbSByb290IC1nJywge2N3ZDogcHJvY2Vzcy5jd2QoKX0sIGZ1bmN0aW9uIChlcnIsIHN0ZG91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGFyd2luIG5wbSByb290IGVycm9yOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoID0gc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjUmVzdWx0ID0gZXhlY1N5bmMoJ25wbSByb290IC1nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGVjUmVzdWx0ICYmIGV4ZWNSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggPSBleGVjUmVzdWx0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzLmVudlxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ya09wdHMuZW52Lk5PREVfUEFUSCA9IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbnBtIHJvb3QgZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvcmsgd29ya2VyXHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gZm9yayh0aGlzLl93b3JrZXJQYXRoLCBmb3JrT3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcclxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gZGVidWcgbW9kZSwgaW5pdGlhbGl6ZSBkZWJ1Z2dlciBhbmQgb25seSB0aGVuIHN0YXJ0IG1vZHVsZXMgJ2luaXQnXHJcblxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkUHJvYztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdGFydERlYnVnZ2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0b3BEZWJ1Z2dlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWdnZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RvcChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgdGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlciAmJiB0aGlzLl9kZWJ1Z2dlci5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ0NBTkNFTEVEJyA9PT0gc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5yZXN1bWVUZXJtaW5hdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiAnZXhpdCcsXHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMua2lsbCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAga2lsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkUHJvYy5raWxsKCdTSUdJTlQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdE94eWdlbihyaWQsIG9wdGlvbnMsIGNhcHMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnaW5pdCcsIHJpZCwgb3B0aW9ucywgY2Fwcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhZnRlclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBhZnRlclRpbWUgLSBiZWZvcmVUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUgKyAnICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnV29ya2VyIGluaXRpYWxpemVkIGluICcgKyBkdXJhdGlvbiArICcgbXMnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RhcnRTZXNzaW9uKCkge1xyXG4gICAgICAgIGxldCBzdGFydCA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5fbmFtZSArICcgJztcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnU2Vzc2lvbiBzdGFydGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5kU2Vzc2lvbihzdGF0dXMgPSBudWxsLCBkaXNwb3NlTW9kdWxlcyA9IHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2VuZFNlc3Npb24nLCBzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYWZ0ZXJUaW1lIC0gYmVmb3JlVGltZTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUgKyAnICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnU2Vzc2lvbiBlbmRlZCBpbiAnICsgZHVyYXRpb24gKyAnIG1zJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCAmJiB0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2Rpc3Bvc2UnLCBzdGF0dXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdleGl0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5raWxsKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVidWdnZXIgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWJ1Z2dlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSdW5uaW5nICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihydW5PcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52b2tlKCdydW4nLCBydW5PcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnROYW1lLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyc1tldmVudE5hbWVdID0gaGFuZGxlcjtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudE5hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgICAgIC8vIGlnbm9yZSBmaXJzdCBhcmd1bWVudCAtIGUuZy4gbWV0aG9kXHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsc1tjYWxsSWRdID0gZGVmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW52b2tlVGVzdEhvb2soaG9va05hbWUsIGhvb2tBcmdzKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2ludm9rZTpob29rJyxcclxuICAgICAgICAgICAgbWV0aG9kOiBob29rTmFtZSxcclxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgIGFyZ3M6IGhvb2tBcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc2VuZChtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Muc2VuZChtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5EaXNwb3NlZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fd2hlbk94eWdlbkluaXRpYWxpemVkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93aGVuTW9kdWxlc0Rpc3Bvc2VkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tDaGlsZFByb2NFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVDaGlsZE1lc3NhZ2UuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdlcnJvcicsIHRoaXMuX2hhbmRsZUNoaWxkRXJyb3IuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdleGl0JywgdGhpcy5faGFuZGxlQ2hpbGRFeGl0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignZGlzY29ubmVjdCcsIHRoaXMuX2hhbmRsZUNoaWxkRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdGhpcy5faGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ1NJR0lOVCcsIHRoaXMuX2hhbmRsZUNoaWxkU2lnSW50LmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZE1lc3NhZ2UobXNnKSB7XHJcbiAgICAgICAgaWYgKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlOnJlc3VsdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5jYWxsSWQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2NhbGxzLCBtc2cuY2FsbElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fY2FsbHNbbXNnLmNhbGxJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KG1zZy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUobXNnLnJldHZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcG9ydGVyJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAobXNnLm1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlcG9ydGVyJywgeyBwaWQ6IHRoaXMuX3BpZCwgbWV0aG9kOiBtc2cubWV0aG9kLCBhcmdzOiBtc2cuYXJncyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdldmVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV29ya2VyRXZlbnQobXNnLm5hbWUsIG1zZy5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBPYmplY3QuYXNzaWduKG1zZywgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZVdvcmtlckV2ZW50KG5hbWUsIGFyZ3MpIHtcclxuICAgICAgICBpZiAobmFtZSAmJiB0aGlzLl9ldmVudEhhbmRsZXJzICYmIHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB0aHJvd24gYnkgd29ya2VyIGV2ZW50IGhhbmRsZXIgXCIke25hbWV9OicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEVycm9yKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24oeyBlcnJvciA6IGVycm9yIH0sIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEV4aXQoZXhpdENvZGUsIHNpZ25hbCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBmaW5pc2hlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfS5gKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlLCBzaWduYWwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkRGlzY29ubmVjdCgpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZGlzY29ubmVjdGVkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiB1bmNhdWdodCBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGU6IDEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkU2lnSW50KCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSByZWNlaXZlZCBTSUdJTlQgc2lnbmFsLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pbml0aWFsaXplRGVidWdnZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBuZXcgRGVidWdnZXIodGhpcy5fcGlkKTtcclxuICAgICAgICBsZXQgd2hlbkRlYnVnZ2VyUmVhZHkgPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBoYW5kbGUgZGVidWdnZXIgZXZlbnRzXHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ3JlYWR5JywgZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgZmlyc3QgYnJlYWtwb2ludCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IHRoZSBkZWJ1Z2dlclxyXG4gICAgICAgICAgICBpZiAoX3RoaXMuX2RlYnVnZ2VyICYmIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX2RlYnVnZ2VyLmNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xyXG5cclxuICAgICAgICAgICAgbG9nLmVycm9yKCdEZWJ1Z2dlciBlcnJvciA6JywgZXJyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6ZXJyb3InLCBPYmplY3QuYXNzaWduKGVyciwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgICAgIC8vIHJlamVjdCB0aGUgcHJvbWlzZSBvbmx5IGlmIHdlIGdvdCBhbiBlcnJvciByaWdodCBhZnRlciBfZGVidWdnZXIuY29ubmVjdCgpIGNhbGwgYmVsb3cgLSB3ZSBuZWVkIHRoaXMgdG8gaW5kaWNhdGUgZGVidWdnZXIgaW5pdGlhbGl6YXRpb24gZXJyb3JcclxuICAgICAgICAgICAgaWYgKCF3aGVuRGVidWdnZXJSZWFkeS5pc1Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrJywgZnVuY3Rpb24oYnJlYWtwb2ludERhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWJ1Z2dlcjpicmVhaycsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWtFcnJvcicsIGFzeW5jIGZ1bmN0aW9uKGJyZWFrRXJyb3IpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChicmVha0Vycm9yICYmIGJyZWFrRXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9icmVha3BvaW50RXJyb3JzLmluY2x1ZGVzKGJyZWFrRXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMucHVzaChicmVha0Vycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWtFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKGBDb25uZWN0aW5nIHRvIGRlYnVnZ2VyIG9uIHBvcnQgJHt0aGlzLl9kZWJ1Z1BvcnR9Li4uYCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNvbm5lY3QodGhpcy5fZGVidWdQb3J0LCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0Nhbm5vdCBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJywgZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQ2Fubm90IGNvbm5lY3QgdG8gdGhlIGRlYnVnZ2VyOiAnICsgZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gd2hlbkRlYnVnZ2VyUmVhZHkucHJvbWlzZTtcclxuICAgIH1cclxufSJdfQ==
492
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfZGVidWdnZXIiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0IiwiY29uc29sZSIsInRvU3RyaW5nIiwidHJpbSIsImUiLCJleGVjUmVzdWx0IiwiTk9ERV9QQVRIIiwiX2hvb2tDaGlsZFByb2NFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2luaXRpYWxpemVEZWJ1Z2dlciIsInN0b3BEZWJ1Z2dlciIsImNsb3NlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsInN0YXR1cyIsIl9wYXVzZWQiLCJkaXNhYmxlIiwicmVzdW1lVGVybWluYXRlIiwiaW52b2tlIiwiX3NlbmQiLCJ0eXBlIiwia2lsbCIsIl9yZXNldCIsImluaXRPeHlnZW4iLCJyaWQiLCJvcHRpb25zIiwiY2FwcyIsImJlZm9yZVRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImFmdGVyVGltZSIsImR1cmF0aW9uIiwic3RhcnRTZXNzaW9uIiwiZW5kU2Vzc2lvbiIsImRpc3Bvc2VNb2R1bGVzIiwiZGlzcG9zZSIsImRlYnVnZ2VyIiwiaXNSdW5uaW5nIiwiaXNJbml0aWFsaXplZCIsInJ1biIsInJ1bk9wdHMiLCJzdWJzY3JpYmUiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwiZXZlbnQiLCJtZXRob2QiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzaGlmdCIsImNhbGxJZCIsIm94dXRpbCIsImdlbmVyYXRlVW5pcXVlSWQiLCJwcm9taXNlIiwiaW52b2tlVGVzdEhvb2siLCJob29rTmFtZSIsImhvb2tBcmdzIiwibWVzc2FnZSIsInNlbmQiLCJfd2hlbk94eWdlbkRpc3Bvc2VkIiwiX3doZW5PeHlnZW5Jbml0aWFsaXplZCIsIl93aGVuTW9kdWxlc0Rpc3Bvc2VkIiwib24iLCJfaGFuZGxlQ2hpbGRNZXNzYWdlIiwiYmluZCIsIl9oYW5kbGVDaGlsZEVycm9yIiwiX2hhbmRsZUNoaWxkRXhpdCIsIl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QiLCJfaGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbiIsIl9oYW5kbGVDaGlsZFNpZ0ludCIsIm1zZyIsImhhc093blByb3BlcnR5IiwiZXJyb3IiLCJyZXR2YWwiLCJlbWl0IiwiX2hhbmRsZVdvcmtlckV2ZW50IiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJkZWJ1ZyIsImV4aXRDb2RlIiwic2lnbmFsIiwiRGVidWdnZXIiLCJ3aGVuRGVidWdnZXJSZWFkeSIsIl90aGlzIiwiY29udGludWUiLCJpc1Jlc29sdmVkIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwiaW5jbHVkZXMiLCJjb25uZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7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QUt0RixTQUFMLENBQWUyRixFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFVBQVN3QixjQUFULEVBQXlCO0FBQ2hELFdBQUtaLElBQUwsQ0FBVSxnQkFBVixFQUE0QlksY0FBNUI7QUFDSCxLQUZEOztBQUdBLFNBQUtuSCxTQUFMLENBQWUyRixFQUFmLENBQWtCLFlBQWxCLEVBQWdDLGdCQUFleUIsVUFBZixFQUEyQjtBQUV2RCxVQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQzlCLE9BQTdCLEVBQXNDO0FBQ2xDLFlBQUkwQixLQUFLLENBQUM3RyxpQkFBTixDQUF3QmtILFFBQXhCLENBQWlDRCxVQUFVLENBQUM5QixPQUE1QyxDQUFKLEVBQTBELENBRXpELENBRkQsTUFFTztBQUNIMEIsVUFBQUEsS0FBSyxDQUFDN0csaUJBQU4sQ0FBd0JpQixJQUF4QixDQUE2QmdHLFVBQVUsQ0FBQzlCLE9BQXhDOztBQUNBLGVBQUtpQixJQUFMLENBQVUscUJBQVYsRUFBaUNhLFVBQWpDO0FBQ0g7QUFDSjtBQUNKLEtBVkQ7O0FBWUEsUUFBSTtBQUNBM0ksTUFBQUEsR0FBRyxDQUFDc0MsSUFBSixDQUFVLGtDQUFpQyxLQUFLaEIsVUFBVyxLQUEzRDtBQUNBLFlBQU0sS0FBS0MsU0FBTCxDQUFlc0gsT0FBZixDQUF1QixLQUFLdkgsVUFBNUIsRUFBd0MsV0FBeEMsQ0FBTjtBQUNILEtBSEQsQ0FHRSxPQUFPOEIsQ0FBUCxFQUFVO0FBQ1JwRCxNQUFBQSxHQUFHLENBQUM0SCxLQUFKLENBQVUsa0NBQVYsRUFBOEN4RSxDQUE5QztBQUNBLFlBQU15RCxPQUFPLEdBQUcscUNBQXFDekQsQ0FBQyxDQUFDeUQsT0FBdkQ7QUFDQXlCLE1BQUFBLGlCQUFpQixDQUFDeEYsTUFBbEIsQ0FBeUIrRCxPQUF6QjtBQUNIOztBQUVELFdBQU95QixpQkFBaUIsQ0FBQzdCLE9BQXpCO0FBQ0g7O0FBcFptRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcmssIGV4ZWNTeW5jLCBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcblxuLy8gc2V0dXAgbG9nZ2VyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xpYi9sb2dnZXInO1xuY29uc3QgbG9nID0gbG9nZ2VyKCdXb3JrZXJQcm9jZXNzJyk7XG5cbmltcG9ydCBEZWJ1Z2dlciBmcm9tICcuLi9saWIvZGVidWdnZXInO1xuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XG5cbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vKipcbiAqIFdvcmtlclByb2Nlc3MgcmVzcG9uc2libGUgZm9yIHNwYXduaW5nIGEgd29ya2VyIHByb2Nlc3MgdGhlIHRlc3QgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtlclByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHBpZCwgd29ya2VyUGF0aCwgZGVidWdNb2RlLCBkZWJ1Z1BvcnQsIG5hbWUgPSBudWxsLCBucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0b3BwZWRCeVVzZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IGRlYnVnTW9kZTtcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gZGVidWdQb3J0O1xuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3dvcmtlclBhdGggPSB3b3JrZXJQYXRoO1xuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG5wbUdSb290RXhlY3V0aW9uO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzID0gW107XG4gICAgICAgIC8vIGhvbGQgdGhlIHJlbW90ZSBpbnZvY2F0aW9uIHByb21pc2VcbiAgICAgICAgdGhpcy5fY2FsbHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVycyA9IHt9O1xuICAgIH1cbiAgICBhc3luYyBzdGFydCgpIHtcbiAgICAgICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbihwcm9jZXNzLmVudiwge1xuICAgICAgICAgICAgT1hfV09SS0VSOiB0cnVlLFxuICAgICAgICAgICAgREVCVUc6ICFpc05hTih0aGlzLl9kZWJ1Z1BvcnQpLFxuICAgICAgICAgICAgTk9fVVBEQVRFX05PVElGSUVSOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyB3b3JrZXIgcHJvY2VzcyAke3RoaXMuX3BpZH0uYCk7XG4gICAgICAgIGxldCBmb3JrT3B0cyA9IHtcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGVudixcbiAgICAgICAgICAgIGV4ZWNBcmd2OiBbXSxcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vc2lsZW50OiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fZGVidWdQb3J0KSB7XG4gICAgICAgICAgICAvLyBhZGQgLS1pbnNwZWN0LWJyayBhcmd1bWVudCBpZiBkZWJ1ZyBwb3J0IGlzIHNwZWNpZmllZFxuICAgICAgICAgICAgZm9ya09wdHMuZXhlY0FyZ3YgPSBPYmplY3QuYXNzaWduKGZvcmtPcHRzLmV4ZWNBcmd2LCBbJy0taW5zcGVjdC1icms9JyArIHRoaXMuX2RlYnVnUG9ydF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJpbnQgbW9yZSBpbmZvcm1hdGlvbiBmb3Igbm9kZWpzIGVycm9yc1xuICAgICAgICBmb3JrT3B0cy5leGVjQXJndi5wdXNoKCctLXRyYWNlLXdhcm5pbmdzJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX25wbUdSb290RXhlY3V0aW9uKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBnbG9iYWxOcG1Nb2R1bGVzUGF0aDtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjKCducG0gcm9vdCAtZycsIHtjd2Q6IHByb2Nlc3MuY3dkKCl9LCBmdW5jdGlvbiAoZXJyLCBzdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGFyd2luIG5wbSByb290IGVycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCA9IHN0ZG91dC50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBleGVjU3luYygnbnBtIHJvb3QgLWcnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhlY1Jlc3VsdCAmJiBleGVjUmVzdWx0LnRvU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCA9IGV4ZWNSZXN1bHQudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoICYmXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzICYmXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzLmVudlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cy5lbnYuTk9ERV9QQVRIID0gZ2xvYmFsTnBtTW9kdWxlc1BhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCducG0gcm9vdCBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZvcmsgd29ya2VyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IGZvcmsodGhpcy5fd29ya2VyUGF0aCwgZm9ya09wdHMpO1xuXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGluIGRlYnVnIG1vZGUsIGluaXRpYWxpemUgZGVidWdnZXIgYW5kIG9ubHkgdGhlbiBzdGFydCBtb2R1bGVzICdpbml0J1xuXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZFByb2M7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnREZWJ1Z2dlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBzdG9wRGVidWdnZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnZ2VyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcChzdGF0dXMgPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyICYmIHRoaXMuX2RlYnVnZ2VyLl9wYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ0NBTkNFTEVEJyA9PT0gc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5yZXN1bWVUZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbmQoe1xuICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmtpbGwoKTtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICB9XG5cbiAgICBraWxsKCkge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Mua2lsbCgnU0lHSU5UJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0T3h5Z2VuKHJpZCwgb3B0aW9ucywgY2Fwcykge1xuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW52b2tlKCdpbml0JywgcmlkLCBvcHRpb25zLCBjYXBzKTtcblxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFmdGVyVGltZSAtIGJlZm9yZVRpbWU7XG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX25hbWUpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cuaW5mbyhzdGFydCArICdXb3JrZXIgaW5pdGlhbGl6ZWQgaW4gJyArIGR1cmF0aW9uICsgJyBtcycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnRTZXNzaW9uKCkge1xuICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuX25hbWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5fbmFtZSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhzdGFydCArICdTZXNzaW9uIHN0YXJ0ZWQnKTtcbiAgICB9XG5cbiAgICBhc3luYyBlbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZW5kU2Vzc2lvbicsIHN0YXR1cywgZGlzcG9zZU1vZHVsZXMpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFmdGVyVGltZSAtIGJlZm9yZVRpbWU7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9uYW1lICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnU2Vzc2lvbiBlbmRlZCBpbiAnICsgZHVyYXRpb24gKyAnIG1zJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGRlYnVnZ2VyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnZ2VyO1xuICAgIH1cblxuICAgIGdldCBpc1J1bm5pbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xuICAgIH1cblxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbml0aWFsaXplZDtcbiAgICB9XG5cbiAgICBhc3luYyBydW4ocnVuT3B0cykge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZva2UoJ3J1bicsIHJ1bk9wdHMpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnNbZXZlbnROYW1lXSA9IGhhbmRsZXI7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnROYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XG4gICAgICAgIGxldCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgLy8gaWdub3JlIGZpcnN0IGFyZ3VtZW50IC0gZS5nLiBtZXRob2RcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxJZCA9IG94dXRpbC5nZW5lcmF0ZVVuaXF1ZUlkKCk7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBjYWxsSWQ6IGNhbGxJZCxcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxzW2NhbGxJZF0gPSBkZWZlcigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGludm9rZVRlc3RIb29rKGhvb2tOYW1lLCBob29rQXJncykge1xuICAgICAgICBjb25zdCBjYWxsSWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnZva2U6aG9vaycsXG4gICAgICAgICAgICBtZXRob2Q6IGhvb2tOYW1lLFxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXG4gICAgICAgICAgICBhcmdzOiBob29rQXJnc1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxsc1tjYWxsSWRdLnByb21pc2U7XG4gICAgfVxuXG4gICAgX3NlbmQobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkUHJvYykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5zZW5kKG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnUG9ydCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5EaXNwb3NlZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5Jbml0aWFsaXplZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3doZW5Nb2R1bGVzRGlzcG9zZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2hvb2tDaGlsZFByb2NFdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdtZXNzYWdlJywgdGhpcy5faGFuZGxlQ2hpbGRNZXNzYWdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2Vycm9yJywgdGhpcy5faGFuZGxlQ2hpbGRFcnJvci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdleGl0JywgdGhpcy5faGFuZGxlQ2hpbGRFeGl0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzLl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCB0aGlzLl9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ1NJR0lOVCcsIHRoaXMuX2hhbmRsZUNoaWxkU2lnSW50LmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZE1lc3NhZ2UobXNnKSB7XG4gICAgICAgIGlmIChtc2cuZXZlbnQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAobXNnLmV2ZW50KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlOnJlc3VsdCc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuY2FsbElkICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9jYWxscywgbXNnLmNhbGxJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jYWxsc1ttc2cuY2FsbElkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChtc2cuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1zZy5yZXR2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcG9ydGVyJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVwb3J0ZXInLCB7IHBpZDogdGhpcy5fcGlkLCBtZXRob2Q6IG1zZy5tZXRob2QsIGFyZ3M6IG1zZy5hcmdzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2V2ZW50JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV29ya2VyRXZlbnQobXNnLm5hbWUsIG1zZy5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgT2JqZWN0LmFzc2lnbihtc2csIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xuICAgIH1cblxuICAgIGFzeW5jIF9oYW5kbGVXb3JrZXJFdmVudChuYW1lLCBhcmdzKSB7XG4gICAgICAgIGlmIChuYW1lICYmIHRoaXMuX2V2ZW50SGFuZGxlcnMgJiYgdGhpcy5fZXZlbnRIYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ldmVudEhhbmRsZXJzW25hbWVdLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcignRXJyb3IgdGhyb3duIGJ5IHdvcmtlciBldmVudCBoYW5kbGVyIFwiJHtuYW1lfTonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZEVycm9yKGVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSB0aHJvd24gYW4gZXJyb3I6ICR7ZXJyb3J9LmApO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNoaWxkRXhpdChleGl0Q29kZSwgc2lnbmFsKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBmaW5pc2hlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfS5gKTtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGUsIHNpZ25hbCB9KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlQ2hpbGREaXNjb25uZWN0KCkge1xuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZGlzY29ubmVjdGVkLmApO1xuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uKGVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSB0aHJvd24gYW4gdW5jYXVnaHQgZXJyb3I6ICR7ZXJyb3J9LmApO1xuICAgICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlOiAxIH0pO1xuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZFNpZ0ludCgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHJlY2VpdmVkIFNJR0lOVCBzaWduYWwuYCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2luaXRpYWxpemVEZWJ1Z2dlcigpIHtcbiAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBuZXcgRGVidWdnZXIodGhpcy5fcGlkKTtcbiAgICAgICAgbGV0IHdoZW5EZWJ1Z2dlclJlYWR5ID0gZGVmZXIoKTtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICAvLyBoYW5kbGUgZGVidWdnZXIgZXZlbnRzXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdyZWFkeScsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgLy8gcmVzdW1lIHRoZSBmaXJzdCBicmVha3BvaW50IHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgdGhlIGRlYnVnZ2VyXG4gICAgICAgICAgICBpZiAoX3RoaXMuX2RlYnVnZ2VyICYmIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3IgOicsIGVycik7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6ZXJyb3InLCBPYmplY3QuYXNzaWduKGVyciwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XG4gICAgICAgICAgICAvLyByZWplY3QgdGhlIHByb21pc2Ugb25seSBpZiB3ZSBnb3QgYW4gZXJyb3IgcmlnaHQgYWZ0ZXIgX2RlYnVnZ2VyLmNvbm5lY3QoKSBjYWxsIGJlbG93IC0gd2UgbmVlZCB0aGlzIHRvIGluZGljYXRlIGRlYnVnZ2VyIGluaXRpYWxpemF0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoIXdoZW5EZWJ1Z2dlclJlYWR5LmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrJywgZnVuY3Rpb24oYnJlYWtwb2ludERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWsnLCBicmVha3BvaW50RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWtFcnJvcicsIGFzeW5jIGZ1bmN0aW9uKGJyZWFrRXJyb3IpIHtcblxuICAgICAgICAgICAgaWYgKGJyZWFrRXJyb3IgJiYgYnJlYWtFcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9icmVha3BvaW50RXJyb3JzLmluY2x1ZGVzKGJyZWFrRXJyb3IubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMucHVzaChicmVha0Vycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCBicmVha0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQ29ubmVjdGluZyB0byBkZWJ1Z2dlciBvbiBwb3J0ICR7dGhpcy5fZGVidWdQb3J0fS4uLmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY29ubmVjdCh0aGlzLl9kZWJ1Z1BvcnQsICcxMjcuMC4wLjEnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdDYW5ub3QgY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcsIGUpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdDYW5ub3QgY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcgKyBlLm1lc3NhZ2U7XG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QobWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlbkRlYnVnZ2VyUmVhZHkucHJvbWlzZTtcbiAgICB9XG59Il19
@@ -178,4 +178,4 @@ function getStepFromFeature(feature, pickle, stepIndex, sourceLocation) {
178
178
 
179
179
  return targetStep;
180
180
  }
181
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL2N1Y3VtYmVyL0N1Y3VtYmVyRXZlbnRMaXN0ZW5lci5qcyJdLCJuYW1lcyI6WyJDdWN1bWJlckV2ZW50TGlzdGVuZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImV2ZW50QnJvYWRjYXN0ZXIiLCJmZWF0dXJlcyIsImdoZXJraW5Eb2NFdmVudHMiLCJhY2NlcHRlZFBpY2tsZXMiLCJjdXJyZW50UGlja2xlIiwiY3VycmVudEZlYXR1cmUiLCJjdXJyZW50RmVhdHVyZVVyaSIsInRlc3RDYXNlUHJlcGFyZWRFdmVudHMiLCJvbiIsIm9uR2hlcmtpbkRvY3VtZW50IiwiYmluZCIsIm9uUGlja2xlQWNjZXB0ZWQiLCJvblRlc3RDYXNlUHJlcGFyZWQiLCJvblRlc3RDYXNlU3RhcnRlZCIsIm9uVGVzdFN0ZXBTdGFydGVkIiwib25UZXN0U3RlcEZpbmlzaGVkIiwib25UZXN0Q2FzZUZpbmlzaGVkIiwib25UZXN0UnVuU3RhcnRlZCIsIm9uVGVzdFJ1bkZpbmlzaGVkIiwiZ2hlcmtpbkRvY0V2ZW50IiwicHVzaCIsInVyaSIsImRvYyIsImRvY3VtZW50IiwiZmVhdHVyZSIsImVtaXQiLCJwaWNrbGVFdmVudCIsInRlc3RDYXNlU3RhcnRlZEV2ZW50Iiwic2hpZnQiLCJmaW5kIiwiZ2RlIiwic2NlbmFyaW8iLCJwaWNrbGUiLCJ0ZXN0U3RlcFN0YXJ0ZWRFdmVudCIsInNvdXJjZUxvY2F0aW9uIiwidGVzdENhc2UiLCJjaGlsZHJlbiIsImNoaWxkIiwiY29tcGFyZVNjZW5hcmlvTGluZVdpdGhTb3VyY2VMaW5lIiwic3RlcCIsImdldFN0ZXBGcm9tRmVhdHVyZSIsImluZGV4IiwidGVzdENhc2VQcmVwYXJlZEV2ZW50Iiwic2NlbmFyaW9IYXNIb29rcyIsInN0ZXBzIiwiZmlsdGVyIiwidHlwZSIsImxlbmd0aCIsImFsbFN0ZXBzIiwiZm9yRWFjaCIsImlkeCIsImxpbmUiLCJhY3Rpb25Mb2NhdGlvbiIsImNvbHVtbiIsImhvb2siLCJsb2NhdGlvbiIsImtleXdvcmQiLCJ0ZXh0Iiwic3BsaWNlIiwidGVzdFN0ZXBGaW5pc2hlZEV2ZW50IiwicmVzdWx0IiwidGVzdENhc2VGaW5pc2hlZEV2ZW50IiwidGVzdFJ1blN0YXJ0ZWRFdmVudCIsInRlc3RSdW5GaW5pc2hlZEV2ZW50IiwiYXR0YWNoRXZlbnRMb2dnZXIiLCJFVkVOVFMiLCJlIiwieCIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiaW5kZXhPZiIsImV4YW1wbGVzIiwic29tZSIsImV4YW1wbGUiLCJ0YWJsZUJvZHkiLCJ0YWJsZUVudHJ5Iiwic3RlcEluZGV4IiwiY29tYmluZWRTdGVwcyIsImNvbmNhdCIsInRhcmdldFN0ZXAiLCJzdGVwTGluZSIsInBpY2tsZVN0ZXAiLCJzIiwibG9jYXRpb25zIiwibG9jIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVlBOztBQUVlLE1BQU1BLHFCQUFOLFNBQW9DQyxvQkFBcEMsQ0FBaUQ7QUFDNURDLEVBQUFBLFdBQVcsQ0FBRUMsZ0JBQUYsRUFBb0I7QUFDM0I7QUFFQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0IsRUFBeEI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLEVBQXZCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUtDLGNBQUwsR0FBc0IsSUFBdEI7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixJQUF6QjtBQUNBLFNBQUtDLHNCQUFMLEdBQThCLEVBQTlCO0FBR0FQLElBQUFBLGdCQUFnQixDQUNYUSxFQURMLENBQ1Esa0JBRFIsRUFDNEIsS0FBS0MsaUJBQUwsQ0FBdUJDLElBQXZCLENBQTRCLElBQTVCLENBRDVCLEVBRUtGLEVBRkwsQ0FFUSxpQkFGUixFQUUyQixLQUFLRyxnQkFBTCxDQUFzQkQsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FGM0IsRUFHS0YsRUFITCxDQUdRLG9CQUhSLEVBRzhCLEtBQUtJLGtCQUFMLENBQXdCRixJQUF4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QVosQ0FBaUJZLEdBQUcsSUFBSUEsR0FBRyxDQUFDbkMsSUFBSixLQUFhK0IsUUFBckMsQ0FBdkIsQ0FBbkI7O0FBRUEsUUFBSUMsVUFBSixFQUFnQjtBQUNaLGFBQU8sRUFBRSxHQUFHRixVQUFMO0FBQWlCeEIsUUFBQUEsSUFBSSxFQUFFMEIsVUFBVSxDQUFDMUI7QUFBbEMsT0FBUDtBQUNIO0FBQ0o7O0FBRUQsU0FBT3dCLFVBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxOS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqIFxyXG4gKiBCYXNlZCBvbjpcclxuICogQ29weXJpZ2h0IChjKSBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBMaWNlbnNlZCB1bmRlciBNSVQuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1Y3VtYmVyRXZlbnRMaXN0ZW5lciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvciAoZXZlbnRCcm9hZGNhc3Rlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmdoZXJraW5Eb2NFdmVudHMgPSBbXTtcclxuICAgICAgICB0aGlzLmFjY2VwdGVkUGlja2xlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBpY2tsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50ZXN0Q2FzZVByZXBhcmVkRXZlbnRzID0gW107XHJcbiAgICAgICAgLy8gYXR0YWNoRXZlbnRMb2dnZXIoZXZlbnRCcm9hZGNhc3RlcilcclxuXHJcbiAgICAgICAgZXZlbnRCcm9hZGNhc3RlclxyXG4gICAgICAgICAgICAub24oJ2doZXJraW4tZG9jdW1lbnQnLCB0aGlzLm9uR2hlcmtpbkRvY3VtZW50LmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgIC5vbigncGlja2xlLWFjY2VwdGVkJywgdGhpcy5vblBpY2tsZUFjY2VwdGVkLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgIC5vbigndGVzdC1jYXNlLXByZXBhcmVkJywgdGhpcy5vblRlc3RDYXNlUHJlcGFyZWQuYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCd0ZXN0LWNhc2Utc3RhcnRlZCcsIHRoaXMub25UZXN0Q2FzZVN0YXJ0ZWQuYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCd0ZXN0LXN0ZXAtc3RhcnRlZCcsIHRoaXMub25UZXN0U3RlcFN0YXJ0ZWQuYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCd0ZXN0LXN0ZXAtZmluaXNoZWQnLCB0aGlzLm9uVGVzdFN0ZXBGaW5pc2hlZC5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAub24oJ3Rlc3QtY2FzZS1maW5pc2hlZCcsIHRoaXMub25UZXN0Q2FzZUZpbmlzaGVkLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgIC5vbigndGVzdC1ydW4tc3RhcnRlZCcsIHRoaXMub25UZXN0UnVuU3RhcnRlZC5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAub24oJ3Rlc3QtcnVuLWZpbmlzaGVkJywgdGhpcy5vblRlc3RSdW5GaW5pc2hlZC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnaGVya2luRG9jRXZlbnQgPSB7XHJcbiAgICAvLyAgICAgdXJpOiBzdHJpbmcsXHJcbiAgICAvLyAgICAgZG9jdW1lbnQ6IHtcclxuICAgIC8vICAgICAgICAgdHlwZTogJ0doZXJraW5Eb2N1bWVudCcsXHJcbiAgICAvLyAgICAgICAgIGZlYXR1cmU6IHtcclxuICAgIC8vICAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcclxuICAgIC8vICAgICAgICAgICAgIHRhZ3M6IFt7IG5hbWU6IHN0cmluZyB9XSxcclxuICAgIC8vICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxyXG4gICAgLy8gICAgICAgICAgICAgbGFuZ3VhZ2U6IHN0cmluZyxcclxuICAgIC8vICAgICAgICAgICAgIGtleXdvcmQ6ICdGZWF0dXJlJyxcclxuICAgIC8vICAgICAgICAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgIC8vICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXHJcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW3tcclxuICAgIC8vICAgICAgICAgICAgICAgICB0eXBlOiAnU2NlbmFyaW8nLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRhZ3M6IFtdLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGtleXdvcmQ6ICdTY2VuYXJpbycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHN0ZXBzOiBbe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RlcCcsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiAnR2l2ZW4nIHwgJ1doZW4nIHwgJ1RoZW4nLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpbmdcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XVxyXG4gICAgLy8gICAgICAgICAgICAgfV1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH0sXHJcbiAgICAvLyAgICAgY29tbWVudHM6IFt7XHJcbiAgICAvLyAgICAgICAgIHR5cGU6ICdDb21tZW50JyxcclxuICAgIC8vICAgICAgICAgbG9jYXRpb246IHsgbGluZTogMCwgY29sdW1uOiAwIH0sXHJcbiAgICAvLyAgICAgICAgIHRleHQ6IHN0cmluZ1xyXG4gICAgLy8gICAgIH1dXHJcbiAgICAvLyB9XHJcbiAgICBvbkdoZXJraW5Eb2N1bWVudCAoZ2hlcmtpbkRvY0V2ZW50KSB7XHJcbiAgICAgICAgLy8gZW1pdCAnZmVhdHVyZTphZnRlcicgZXZlbnQgYmVmb3JlIHRoZSBuZXh0IGZlYXR1cmUgaXMgcHJvY2VlZGVkXHJcbiAgICAgICAgLyppZiAodGhpcy5jdXJyZW50RmVhdHVyZSkge1xyXG4gICAgICAgICAgICAvL2NvbnN0IGdoZXJraW5Eb2NFdmVudCA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5wb3AoKSAvLyBzZWUgLnB1c2goKSBpbiBgaGFuZGxlQmVmb3JlRmVhdHVyZSgpYFxyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2ZlYXR1cmU6YWZ0ZXInLCB0aGlzLmN1cnJlbnRGZWF0dXJlVXJpLCB0aGlzLmN1cnJlbnRGZWF0dXJlKVxyXG4gICAgICAgIH0qL1xyXG5cclxuICAgICAgICB0aGlzLmdoZXJraW5Eb2NFdmVudHMucHVzaChnaGVya2luRG9jRXZlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCB1cmkgPSBnaGVya2luRG9jRXZlbnQudXJpO1xyXG4gICAgICAgIGNvbnN0IGRvYyA9IGdoZXJraW5Eb2NFdmVudC5kb2N1bWVudDtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gZG9jLmZlYXR1cmU7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdCgnZmVhdHVyZTpyZWFkeScsIHVyaSwgZmVhdHVyZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcGlja2xlRXZlbnQgPSB7XHJcbiAgICAvLyAgICAgdXJpOiBzdHJpbmcsXHJcbiAgICAvLyAgICAgcGlja2xlOiB7XHJcbiAgICAvLyAgICAgICAgIHRhZ3M6IFt7IG5hbWU6IHN0cmluZyB9XSxcclxuICAgIC8vICAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgLy8gICAgICAgICBsb2NhdGlvbnM6IFt7IGxpbmU6IDAsIGNvbHVtbjogMCB9XSxcclxuICAgIC8vICAgICAgICAgc3RlcHM6IFt7XHJcbiAgICAvLyAgICAgICAgICAgICBsb2NhdGlvbnM6IFt7IGxpbmU6IDAsIGNvbHVtbjogMCB9XSxcclxuICAgIC8vICAgICAgICAgICAgIGtleXdvcmQ6ICdHaXZlbicgfCAnV2hlbicgfCAnVGhlbicsXHJcbiAgICAvLyAgICAgICAgICAgICB0ZXh0OiBzdHJpbmdcclxuICAgIC8vICAgICAgICAgfV1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICBvblBpY2tsZUFjY2VwdGVkIChwaWNrbGVFdmVudCkge1xyXG4gICAgICAgIC8vIGJlY2F1c2UgJ3BpY2tsZS1hY2NlcHRlZCcgZXZlbnRzIGFyZSBlbWl0dGVkIHRvZ2V0aGVyIGluIGZvckVhY2ggbG9vcFxyXG4gICAgICAgIHRoaXMuYWNjZXB0ZWRQaWNrbGVzLnB1c2gocGlja2xlRXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRlc3RDYXNlU3RhcnRlZEV2ZW50ID0ge1xyXG4gICAgLy8gICAgIHNvdXJjZUxvY2F0aW9uOiB7IHVyaTogc3RyaW5nLCBsaW5lOiAwIH1cclxuICAgIC8vIH1cclxuICAgIG9uVGVzdENhc2VTdGFydGVkICh0ZXN0Q2FzZVN0YXJ0ZWRFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IHBpY2tsZUV2ZW50ID0gdGhpcy5hY2NlcHRlZFBpY2tsZXMuc2hpZnQoKTtcclxuICAgICAgICBjb25zdCB1cmkgPSBwaWNrbGVFdmVudC51cmk7XHJcbiAgICAgICAgY29uc3QgZG9jID0gdGhpcy5naGVya2luRG9jRXZlbnRzLmZpbmQoZ2RlID0+IGdkZS51cmkgPT09IHVyaSkuZG9jdW1lbnQ7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IGRvYy5mZWF0dXJlO1xyXG4gICAgICAgIGNvbnN0IHNjZW5hcmlvID0gcGlja2xlRXZlbnQucGlja2xlO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRQaWNrbGUgPSBzY2VuYXJpbztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZlYXR1cmVVcmkgJiYgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSAhPT0gdXJpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmVhdHVyZTphZnRlcicsIHRoaXMuY3VycmVudEZlYXR1cmVVcmksIHRoaXMuY3VycmVudEZlYXR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlVXJpID0gdXJpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlID0gZmVhdHVyZTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdmZWF0dXJlOmJlZm9yZScsIHRoaXMuY3VycmVudEZlYXR1cmVVcmksIHRoaXMuY3VycmVudEZlYXR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghdGhpcy5jdXJyZW50RmVhdHVyZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlID0gZmVhdHVyZTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSA9IHVyaTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdmZWF0dXJlOmJlZm9yZScsIHRoaXMuY3VycmVudEZlYXR1cmVVcmksIHRoaXMuY3VycmVudEZlYXR1cmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzY2VuYXJpbzpiZWZvcmUnLCB1cmksIGZlYXR1cmUsIHNjZW5hcmlvKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0ZXN0U3RlcFN0YXJ0ZWRFdmVudCA9IHtcclxuICAgIC8vICAgICBpbmRleDogMCxcclxuICAgIC8vICAgICB0ZXN0Q2FzZToge1xyXG4gICAgLy8gICAgICAgICBzb3VyY2VMb2NhdGlvbjogeyB1cmk6IHN0cmluZywgbGluZTogMCB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgb25UZXN0U3RlcFN0YXJ0ZWQgKHRlc3RTdGVwU3RhcnRlZEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlTG9jYXRpb24gPSB0ZXN0U3RlcFN0YXJ0ZWRFdmVudC50ZXN0Q2FzZS5zb3VyY2VMb2NhdGlvbjtcclxuICAgICAgICBjb25zdCB1cmkgPSBzb3VyY2VMb2NhdGlvbi51cmk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5maW5kKGdkZSA9PiBnZGUudXJpID09PSB1cmkpLmRvY3VtZW50O1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBkb2MuZmVhdHVyZTtcclxuICAgICAgICBjb25zdCBzY2VuYXJpbyA9IGZlYXR1cmUuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNvbXBhcmVTY2VuYXJpb0xpbmVXaXRoU291cmNlTGluZShjaGlsZCwgc291cmNlTG9jYXRpb24pKTtcclxuICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZyb21GZWF0dXJlKGZlYXR1cmUsIHRoaXMuY3VycmVudFBpY2tsZSwgdGVzdFN0ZXBTdGFydGVkRXZlbnQuaW5kZXgsIHNvdXJjZUxvY2F0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmJlZm9yZScsIHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8sIHN0ZXAsIHNvdXJjZUxvY2F0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0ZXN0Q2FzZVByZXBhcmVkRXZlbnQgPSB7XHJcbiAgICAvLyAgICAgc291cmNlTG9jYXRpb246IHsgdXJpOiBzdHJpbmcsIGxpbmU6IDAgfVxyXG4gICAgLy8gICAgIHN0ZXBzOiBbXHJcbiAgICAvLyAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgIGFjdGlvbkxvY2F0aW9uOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdXJpOiBzdHJpbmdcclxuICAgIC8vICAgICAgICAgICAgICAgICBsaW5lOiAwXHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICBdXHJcbiAgICAvLyB9XHJcbiAgICBvblRlc3RDYXNlUHJlcGFyZWQgKHRlc3RDYXNlUHJlcGFyZWRFdmVudCkge1xyXG4gICAgICAgIHRoaXMudGVzdENhc2VQcmVwYXJlZEV2ZW50cy5wdXNoKHRlc3RDYXNlUHJlcGFyZWRFdmVudCk7XHJcbiAgICAgICAgY29uc3Qgc291cmNlTG9jYXRpb24gPSB0ZXN0Q2FzZVByZXBhcmVkRXZlbnQuc291cmNlTG9jYXRpb247XHJcbiAgICAgICAgY29uc3QgdXJpID0gc291cmNlTG9jYXRpb24udXJpO1xyXG5cclxuICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmdoZXJraW5Eb2NFdmVudHMuZmluZChnZGUgPT4gZ2RlLnVyaSA9PT0gdXJpKS5kb2N1bWVudDtcclxuICAgICAgICBjb25zdCBzY2VuYXJpbyA9IGRvYy5mZWF0dXJlLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjb21wYXJlU2NlbmFyaW9MaW5lV2l0aFNvdXJjZUxpbmUoY2hpbGQsIHNvdXJjZUxvY2F0aW9uKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjZW5hcmlvSGFzSG9va3MgPSBzY2VuYXJpby5zdGVwcy5maWx0ZXIoKHN0ZXApID0+IHN0ZXAudHlwZSA9PT0gJ0hvb2snKS5sZW5ndGggPiAwO1xyXG4gICAgICAgIGlmIChzY2VuYXJpb0hhc0hvb2tzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWxsU3RlcHMgPSB0ZXN0Q2FzZVByZXBhcmVkRXZlbnQuc3RlcHM7XHJcbiAgICAgICAgYWxsU3RlcHMuZm9yRWFjaCgoc3RlcCwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc3RlcC5zb3VyY2VMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5zb3VyY2VMb2NhdGlvbiA9IHsgbGluZTogc3RlcC5hY3Rpb25Mb2NhdGlvbi5saW5lLCBjb2x1bW46IDAsIHVyaTogc3RlcC5hY3Rpb25Mb2NhdGlvbi51cmkgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhvb2sgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0hvb2snLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBzdGVwLnNvdXJjZUxvY2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6ICdIb29rJyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJ1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHNjZW5hcmlvLnN0ZXBzLnNwbGljZShpZHgsIDAsIGhvb2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGVzdFN0ZXBGaW5pc2hlZEV2ZW50ID0ge1xyXG4gICAgLy8gICAgIGluZGV4OiAwLFxyXG4gICAgLy8gICAgIHJlc3VsdDogeyBkdXJhdGlvbjogMCwgc3RhdHVzOiBzdHJpbmcsIGV4Y2VwdGlvbj86IEVycm9yIH0sXHJcbiAgICAvLyAgICAgdGVzdENhc2U6IHtcclxuICAgIC8vICAgICAgICAgc291cmNlTG9jYXRpb246IHsgdXJpOiBzdHJpbmcsIGxpbmU6IDAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIG9uVGVzdFN0ZXBGaW5pc2hlZCAodGVzdFN0ZXBGaW5pc2hlZEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlTG9jYXRpb24gPSB0ZXN0U3RlcEZpbmlzaGVkRXZlbnQudGVzdENhc2Uuc291cmNlTG9jYXRpb247XHJcbiAgICAgICAgY29uc3QgdXJpID0gc291cmNlTG9jYXRpb24udXJpO1xyXG5cclxuICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmdoZXJraW5Eb2NFdmVudHMuZmluZChnZGUgPT4gZ2RlLnVyaSA9PT0gdXJpKS5kb2N1bWVudDtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gZG9jLmZlYXR1cmU7XHJcbiAgICAgICAgY29uc3Qgc2NlbmFyaW8gPSBmZWF0dXJlLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjb21wYXJlU2NlbmFyaW9MaW5lV2l0aFNvdXJjZUxpbmUoY2hpbGQsIHNvdXJjZUxvY2F0aW9uKSk7XHJcbiAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGcm9tRmVhdHVyZShmZWF0dXJlLCB0aGlzLmN1cnJlbnRQaWNrbGUsIHRlc3RTdGVwRmluaXNoZWRFdmVudC5pbmRleCwgc291cmNlTG9jYXRpb24pO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RTdGVwRmluaXNoZWRFdmVudC5yZXN1bHQ7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdCgnc3RlcDphZnRlcicsIHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8sIHN0ZXAsIHJlc3VsdCwgc291cmNlTG9jYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRlc3RDYXNlRmluaXNoZWRFdmVudCA9IHtcclxuICAgIC8vICAgICByZXN1bHQ6IHsgZHVyYXRpb246IDAsIHN0YXR1czogc3RyaW5nIH0sXHJcbiAgICAvLyAgICAgc291cmNlTG9jYXRpb246IHsgdXJpOiBzdHJpbmcsIGxpbmU6IDAgfVxyXG4gICAgLy8gfVxyXG4gICAgb25UZXN0Q2FzZUZpbmlzaGVkICh0ZXN0Q2FzZUZpbmlzaGVkRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBzb3VyY2VMb2NhdGlvbiA9IHRlc3RDYXNlRmluaXNoZWRFdmVudC5zb3VyY2VMb2NhdGlvbjtcclxuICAgICAgICBjb25zdCB1cmkgPSBzb3VyY2VMb2NhdGlvbi51cmk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5maW5kKGdkZSA9PiBnZGUudXJpID09PSB1cmkpLmRvY3VtZW50O1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBkb2MuZmVhdHVyZTtcclxuICAgICAgICBjb25zdCBzY2VuYXJpbyA9IGZlYXR1cmUuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNvbXBhcmVTY2VuYXJpb0xpbmVXaXRoU291cmNlTGluZShjaGlsZCwgc291cmNlTG9jYXRpb24pKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzY2VuYXJpbzphZnRlcicsIHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8sIHNvdXJjZUxvY2F0aW9uKTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGlja2xlID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvblRlc3RSdW5TdGFydGVkICh0ZXN0UnVuU3RhcnRlZEV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCd0ZXN0OnN0YXJ0Jyk7XHJcbiAgICB9XHJcbiAgICAvLyB0ZXN0UnVuRmluaXNoZWRFdmVudCA9IHtcclxuICAgIC8vICAgICByZXN1bHQ6IHsgZHVyYXRpb246IDQwMDQsIHN1Y2Nlc3M6IHRydWUgfVxyXG4gICAgLy8gfVxyXG4gICAgb25UZXN0UnVuRmluaXNoZWQgKHRlc3RSdW5GaW5pc2hlZEV2ZW50KSB7XHJcbiAgICAgICAgLy8gZW1pdCAnZmVhdHVyZTphZnRlcicgZXZlbnQgYmVmb3JlIHRoZSBuZXh0IGZlYXR1cmUgaXMgcHJvY2VlZGVkXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZlYXR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdmZWF0dXJlOmFmdGVyJywgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSwgdGhpcy5jdXJyZW50RmVhdHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCd0ZXN0OmVuZCcsIHRlc3RSdW5GaW5pc2hlZEV2ZW50LnJlc3VsdCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG5mdW5jdGlvbiBhdHRhY2hFdmVudExvZ2dlciAoZXZlbnRCcm9hZGNhc3Rlcikge1xyXG4gICAgLy8gZm9yIGRlYnVnZ2luZyBwdXJwb3NlZFxyXG4gICAgLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY3VjdW1iZXIvY3VjdW1iZXItanMvYmxvYi92NC4xLjAvc3JjL2Zvcm1hdHRlci9ldmVudF9wcm90b2NvbF9mb3JtYXR0ZXIuanNcclxuICAgIGNvbnN0IEVWRU5UUyA9IFtcclxuICAgICAgICAnc291cmNlJyxcclxuICAgICAgICAnYXR0YWNobWVudCcsXHJcbiAgICAgICAgJ2doZXJraW4tZG9jdW1lbnQnLFxyXG4gICAgICAgICdwaWNrbGUnLFxyXG4gICAgICAgICdwaWNrbGUtYWNjZXB0ZWQnLFxyXG4gICAgICAgICdwaWNrbGUtcmVqZWN0ZWQnLFxyXG4gICAgICAgICd0ZXN0LXJ1bi1zdGFydGVkJyxcclxuICAgICAgICAndGVzdC1jYXNlLXByZXBhcmVkJyxcclxuICAgICAgICAndGVzdC1jYXNlLXN0YXJ0ZWQnLFxyXG4gICAgICAgICd0ZXN0LXN0ZXAtc3RhcnRlZCcsXHJcbiAgICAgICAgJ3Rlc3Qtc3RlcC1hdHRhY2htZW50JyxcclxuICAgICAgICAndGVzdC1zdGVwLWZpbmlzaGVkJyxcclxuICAgICAgICAndGVzdC1jYXNlLWZpbmlzaGVkJyxcclxuICAgICAgICAndGVzdC1ydW4tZmluaXNoZWQnXHJcbiAgICBdO1xyXG4gICAgRVZFTlRTLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgZXZlbnRCcm9hZGNhc3Rlci5vbihlLCB4ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1xcbi0tLS0tJyArIGUgKyAnIC0tLS0tXFxuJyArIEpTT04uc3RyaW5naWZ5KHgsIG51bGwsIDIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVNjZW5hcmlvTGluZVdpdGhTb3VyY2VMaW5lIChzY2VuYXJpbywgc291cmNlTG9jYXRpb24pIHtcclxuICAgIGlmIChzY2VuYXJpby50eXBlLmluZGV4T2YoJ1NjZW5hcmlvT3V0bGluZScpID4gLTEpIHtcclxuICAgICAgICByZXR1cm4gc2NlbmFyaW8uZXhhbXBsZXMuc29tZSgoZXhhbXBsZSkgPT4gZXhhbXBsZS50YWJsZUJvZHkuc29tZSgodGFibGVFbnRyeSkgPT4gdGFibGVFbnRyeS5sb2NhdGlvbi5saW5lID09PSBzb3VyY2VMb2NhdGlvbi5saW5lKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBzY2VuYXJpby5sb2NhdGlvbi5saW5lID09PSBzb3VyY2VMb2NhdGlvbi5saW5lO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RlcEZyb21GZWF0dXJlIChmZWF0dXJlLCBwaWNrbGUsIHN0ZXBJbmRleCwgc291cmNlTG9jYXRpb24pIHtcclxuICAgIGxldCBjb21iaW5lZFN0ZXBzID0gW107XHJcbiAgICBmZWF0dXJlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUuaW5kZXhPZignU2NlbmFyaW8nKSA+IC0xICYmICFjb21wYXJlU2NlbmFyaW9MaW5lV2l0aFNvdXJjZUxpbmUoY2hpbGQsIHNvdXJjZUxvY2F0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbWJpbmVkU3RlcHMgPSBjb21iaW5lZFN0ZXBzLmNvbmNhdChjaGlsZC5zdGVwcyk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHRhcmdldFN0ZXAgPSBjb21iaW5lZFN0ZXBzW3N0ZXBJbmRleF07XHJcblxyXG4gICAgaWYgKHRhcmdldFN0ZXAudHlwZSA9PT0gJ1N0ZXAnKSB7XHJcbiAgICAgICAgY29uc3Qgc3RlcExpbmUgPSB0YXJnZXRTdGVwLmxvY2F0aW9uLmxpbmU7XHJcbiAgICAgICAgY29uc3QgcGlja2xlU3RlcCA9IHBpY2tsZS5zdGVwcy5maW5kKHMgPT4gcy5sb2NhdGlvbnMuc29tZShsb2MgPT4gbG9jLmxpbmUgPT09IHN0ZXBMaW5lKSk7XHJcblxyXG4gICAgICAgIGlmIChwaWNrbGVTdGVwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRhcmdldFN0ZXAsIHRleHQ6IHBpY2tsZVN0ZXAudGV4dCB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0U3RlcDtcclxufVxyXG4iXX0=
181
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL2N1Y3VtYmVyL0N1Y3VtYmVyRXZlbnRMaXN0ZW5lci5qcyJdLCJuYW1lcyI6WyJDdWN1bWJlckV2ZW50TGlzdGVuZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImV2ZW50QnJvYWRjYXN0ZXIiLCJmZWF0dXJlcyIsImdoZXJraW5Eb2NFdmVudHMiLCJhY2NlcHRlZFBpY2tsZXMiLCJjdXJyZW50UGlja2xlIiwiY3VycmVudEZlYXR1cmUiLCJjdXJyZW50RmVhdHVyZVVyaSIsInRlc3RDYXNlUHJlcGFyZWRFdmVudHMiLCJvbiIsIm9uR2hlcmtpbkRvY3VtZW50IiwiYmluZCIsIm9uUGlja2xlQWNjZXB0ZWQiLCJvblRlc3RDYXNlUHJlcGFyZWQiLCJvblRlc3RDYXNlU3RhcnRlZCIsIm9uVGVzdFN0ZXBTdGFydGVkIiwib25UZXN0U3RlcEZpbmlzaGVkIiwib25UZXN0Q2FzZUZpbmlzaGVkIiwib25UZXN0UnVuU3RhcnRlZCIsIm9uVGVzdFJ1bkZpbmlzaGVkIiwiZ2hlcmtpbkRvY0V2ZW50IiwicHVzaCIsInVyaSIsImRvYyIsImRvY3VtZW50IiwiZmVhdHVyZSIsImVtaXQiLCJwaWNrbGVFdmVudCIsInRlc3RDYXNlU3RhcnRlZEV2ZW50Iiwic2hpZnQiLCJmaW5kIiwiZ2RlIiwic2NlbmFyaW8iLCJwaWNrbGUiLCJ0ZXN0U3RlcFN0YXJ0ZWRFdmVudCIsInNvdXJjZUxvY2F0aW9uIiwidGVzdENhc2UiLCJjaGlsZHJlbiIsImNoaWxkIiwiY29tcGFyZVNjZW5hcmlvTGluZVdpdGhTb3VyY2VMaW5lIiwic3RlcCIsImdldFN0ZXBGcm9tRmVhdHVyZSIsImluZGV4IiwidGVzdENhc2VQcmVwYXJlZEV2ZW50Iiwic2NlbmFyaW9IYXNIb29rcyIsInN0ZXBzIiwiZmlsdGVyIiwidHlwZSIsImxlbmd0aCIsImFsbFN0ZXBzIiwiZm9yRWFjaCIsImlkeCIsImxpbmUiLCJhY3Rpb25Mb2NhdGlvbiIsImNvbHVtbiIsImhvb2siLCJsb2NhdGlvbiIsImtleXdvcmQiLCJ0ZXh0Iiwic3BsaWNlIiwidGVzdFN0ZXBGaW5pc2hlZEV2ZW50IiwicmVzdWx0IiwidGVzdENhc2VGaW5pc2hlZEV2ZW50IiwidGVzdFJ1blN0YXJ0ZWRFdmVudCIsInRlc3RSdW5GaW5pc2hlZEV2ZW50IiwiYXR0YWNoRXZlbnRMb2dnZXIiLCJFVkVOVFMiLCJlIiwieCIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiaW5kZXhPZiIsImV4YW1wbGVzIiwic29tZSIsImV4YW1wbGUiLCJ0YWJsZUJvZHkiLCJ0YWJsZUVudHJ5Iiwic3RlcEluZGV4IiwiY29tYmluZWRTdGVwcyIsImNvbmNhdCIsInRhcmdldFN0ZXAiLCJzdGVwTGluZSIsInBpY2tsZVN0ZXAiLCJzIiwibG9jYXRpb25zIiwibG9jIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVlBOztBQUVlLE1BQU1BLHFCQUFOLFNBQW9DQyxvQkFBcEMsQ0FBaUQ7QUFDNURDLEVBQUFBLFdBQVcsQ0FBRUMsZ0JBQUYsRUFBb0I7QUFDM0I7QUFFQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0IsRUFBeEI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLEVBQXZCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUtDLGNBQUwsR0FBc0IsSUFBdEI7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixJQUF6QjtBQUNBLFNBQUtDLHNCQUFMLEdBQThCLEVBQTlCO0FBR0FQLElBQUFBLGdCQUFnQixDQUNYUSxFQURMLENBQ1Esa0JBRFIsRUFDNEIsS0FBS0MsaUJBQUwsQ0FBdUJDLElBQXZCLENBQTRCLElBQTVCLENBRDVCLEVBRUtGLEVBRkwsQ0FFUSxpQkFGUixFQUUyQixLQUFLRyxnQkFBTCxDQUFzQkQsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FGM0IsRUFHS0YsRUFITCxDQUdRLG9CQUhSLEVBRzhCLEtBQUtJLGtCQUFMLENBQXdCRixJQUF4QixDQUE2QixJQUE3QixDQUg5QixFQUlLRixFQUpMLENBSVEsbUJBSlIsRUFJNkIsS0FBS0ssaUJBQUwsQ0FBdUJILElBQXZCLENBQTRCLElBQTVCLENBSjdCLEVBS0tGLEVBTEwsQ0FLUSxtQkFMUixFQUs2QixLQUFLTSxpQkFBTCxDQUF1QkosSUFBdkIsQ0FBNEIsSUFBNUIsQ0FMN0IsRUFNS0YsRUFOTCxDQU1RLG9CQU5SLEVBTThCLEtBQUtPLGtCQUFMLENBQXdCTCxJQUF4QixDQUE2QixJQUE3QixDQU45QixFQU9LRixFQVBMLENBT1Esb0JBUFIsRUFPOEIsS0FBS1Esa0JBQUwsQ0FBd0JOLElBQXhCLENBQTZCLElBQTdCLENBUDlCLEVBUUtGLEVBUkwsQ0FRUSxrQkFSUixFQVE0QixLQUFLUyxnQkFBTCxDQUFzQlAsSUFBdEIsQ0FBMkIsSUFBM0IsQ0FSNUIsRUFTS0YsRUFUTCxDQVNRLG1CQVRSLEVBUzZCLEtBQUtVLGlCQUFMLENBQXVCUixJQUF2QixDQUE0QixJQUE1QixDQVQ3QjtBQVVIOztBQW1DREQsRUFBQUEsaUJBQWlCLENBQUVVLGVBQUYsRUFBbUI7QUFPaEMsU0FBS2pCLGdCQUFMLENBQXNCa0IsSUFBdEIsQ0FBMkJELGVBQTNCO0FBRUEsVUFBTUUsR0FBRyxHQUFHRixlQUFlLENBQUNFLEdBQTVCO0FBQ0EsVUFBTUMsR0FBRyxHQUFHSCxlQUFlLENBQUNJLFFBQTVCO0FBQ0EsVUFBTUMsT0FBTyxHQUFHRixHQUFHLENBQUNFLE9BQXBCO0FBRUEsU0FBS0MsSUFBTCxDQUFVLGVBQVYsRUFBMkJKLEdBQTNCLEVBQWdDRyxPQUFoQztBQUNIOztBQWVEYixFQUFBQSxnQkFBZ0IsQ0FBRWUsV0FBRixFQUFlO0FBRTNCLFNBQUt2QixlQUFMLENBQXFCaUIsSUFBckIsQ0FBMEJNLFdBQTFCO0FBQ0g7O0FBS0RiLEVBQUFBLGlCQUFpQixDQUFFYyxvQkFBRixFQUF3QjtBQUNyQyxVQUFNRCxXQUFXLEdBQUcsS0FBS3ZCLGVBQUwsQ0FBcUJ5QixLQUFyQixFQUFwQjtBQUNBLFVBQU1QLEdBQUcsR0FBR0ssV0FBVyxDQUFDTCxHQUF4QjtBQUNBLFVBQU1DLEdBQUcsR0FBRyxLQUFLcEIsZ0JBQUwsQ0FBc0IyQixJQUF0QixDQUEyQkMsR0FBRyxJQUFJQSxHQUFHLENBQUNULEdBQUosS0FBWUEsR0FBOUMsRUFBbURFLFFBQS9EO0FBQ0EsVUFBTUMsT0FBTyxHQUFHRixHQUFHLENBQUNFLE9BQXBCO0FBQ0EsVUFBTU8sUUFBUSxHQUFHTCxXQUFXLENBQUNNLE1BQTdCO0FBRUEsU0FBSzVCLGFBQUwsR0FBcUIyQixRQUFyQjs7QUFFQSxRQUFJLEtBQUt6QixpQkFBTCxJQUEwQixLQUFLQSxpQkFBTCxLQUEyQmUsR0FBekQsRUFBOEQ7QUFDMUQsV0FBS0ksSUFBTCxDQUFVLGVBQVYsRUFBMkIsS0FBS25CLGlCQUFoQyxFQUFtRCxLQUFLRCxjQUF4RDtBQUNBLFdBQUtDLGlCQUFMLEdBQXlCZSxHQUF6QjtBQUNBLFdBQUtoQixjQUFMLEdBQXNCbUIsT0FBdEI7QUFDQSxXQUFLQyxJQUFMLENBQVUsZ0JBQVYsRUFBNEIsS0FBS25CLGlCQUFqQyxFQUFvRCxLQUFLRCxjQUF6RDtBQUNILEtBTEQsTUFNSyxJQUFJLENBQUMsS0FBS0EsY0FBVixFQUEwQjtBQUMzQixXQUFLQSxjQUFMLEdBQXNCbUIsT0FBdEI7QUFDQSxXQUFLbEIsaUJBQUwsR0FBeUJlLEdBQXpCO0FBQ0EsV0FBS0ksSUFBTCxDQUFVLGdCQUFWLEVBQTRCLEtBQUtuQixpQkFBakMsRUFBb0QsS0FBS0QsY0FBekQ7QUFDSDs7QUFFRCxTQUFLb0IsSUFBTCxDQUFVLGlCQUFWLEVBQTZCSixHQUE3QixFQUFrQ0csT0FBbEMsRUFBMkNPLFFBQTNDO0FBQ0g7O0FBUURqQixFQUFBQSxpQkFBaUIsQ0FBRW1CLG9CQUFGLEVBQXdCO0FBQ3JDLFVBQU1DLGNBQWMsR0FBR0Qsb0JBQW9CLENBQUNFLFFBQXJCLENBQThCRCxjQUFyRDtBQUNBLFVBQU1iLEdBQUcsR0FBR2EsY0FBYyxDQUFDYixHQUEzQjtBQUVBLFVBQU1DLEdBQUcsR0FBRyxLQUFLcEIsZ0JBQUwsQ0FBc0IyQixJQUF0QixDQUEyQkMsR0FBRyxJQUFJQSxHQUFHLENBQUNULEdBQUosS0FBWUEsR0FBOUMsRUFBbURFLFFBQS9EO0FBQ0EsVUFBTUMsT0FBTyxHQUFHRixHQUFHLENBQUNFLE9BQXBCO0FBQ0EsVUFBTU8sUUFBUSxHQUFHUCxPQUFPLENBQUNZLFFBQVIsQ0FBaUJQLElBQWpCLENBQXVCUSxLQUFELElBQVdDLGlDQUFpQyxDQUFDRCxLQUFELEVBQVFILGNBQVIsQ0FBbEUsQ0FBakI7QUFDQSxVQUFNSyxJQUFJLEdBQUdDLGtCQUFrQixDQUFDaEIsT0FBRCxFQUFVLEtBQUtwQixhQUFmLEVBQThCNkIsb0JBQW9CLENBQUNRLEtBQW5ELEVBQTBEUCxjQUExRCxDQUEvQjtBQUVBLFNBQUtULElBQUwsQ0FBVSxhQUFWLEVBQXlCSixHQUF6QixFQUE4QkcsT0FBOUIsRUFBdUNPLFFBQXZDLEVBQWlEUSxJQUFqRCxFQUF1REwsY0FBdkQ7QUFDSDs7QUFhRHRCLEVBQUFBLGtCQUFrQixDQUFFOEIscUJBQUYsRUFBeUI7QUFDdkMsU0FBS25DLHNCQUFMLENBQTRCYSxJQUE1QixDQUFpQ3NCLHFCQUFqQztBQUNBLFVBQU1SLGNBQWMsR0FBR1EscUJBQXFCLENBQUNSLGNBQTdDO0FBQ0EsVUFBTWIsR0FBRyxHQUFHYSxjQUFjLENBQUNiLEdBQTNCO0FBRUEsVUFBTUMsR0FBRyxHQUFHLEtBQUtwQixnQkFBTCxDQUFzQjJCLElBQXRCLENBQTJCQyxHQUFHLElBQUlBLEdBQUcsQ0FBQ1QsR0FBSixLQUFZQSxHQUE5QyxFQUFtREUsUUFBL0Q7QUFDQSxVQUFNUSxRQUFRLEdBQUdULEdBQUcsQ0FBQ0UsT0FBSixDQUFZWSxRQUFaLENBQXFCUCxJQUFyQixDQUEyQlEsS0FBRCxJQUFXQyxpQ0FBaUMsQ0FBQ0QsS0FBRCxFQUFRSCxjQUFSLENBQXRFLENBQWpCO0FBRUEsVUFBTVMsZ0JBQWdCLEdBQUdaLFFBQVEsQ0FBQ2EsS0FBVCxDQUFlQyxNQUFmLENBQXVCTixJQUFELElBQVVBLElBQUksQ0FBQ08sSUFBTCxLQUFjLE1BQTlDLEVBQXNEQyxNQUF0RCxHQUErRCxDQUF4Rjs7QUFDQSxRQUFJSixnQkFBSixFQUFzQjtBQUNsQjtBQUNIOztBQUNELFVBQU1LLFFBQVEsR0FBR04scUJBQXFCLENBQUNFLEtBQXZDO0FBQ0FJLElBQUFBLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQixDQUFDVixJQUFELEVBQU9XLEdBQVAsS0FBZTtBQUM1QixVQUFJLENBQUNYLElBQUksQ0FBQ0wsY0FBVixFQUEwQjtBQUN0QkssUUFBQUEsSUFBSSxDQUFDTCxjQUFMLEdBQXNCO0FBQUVpQixVQUFBQSxJQUFJLEVBQUVaLElBQUksQ0FBQ2EsY0FBTCxDQUFvQkQsSUFBNUI7QUFBa0NFLFVBQUFBLE1BQU0sRUFBRSxDQUExQztBQUE2Q2hDLFVBQUFBLEdBQUcsRUFBRWtCLElBQUksQ0FBQ2EsY0FBTCxDQUFvQi9CO0FBQXRFLFNBQXRCO0FBQ0EsY0FBTWlDLElBQUksR0FBRztBQUNUUixVQUFBQSxJQUFJLEVBQUUsTUFERztBQUVUUyxVQUFBQSxRQUFRLEVBQUVoQixJQUFJLENBQUNMLGNBRk47QUFHVHNCLFVBQUFBLE9BQU8sRUFBRSxNQUhBO0FBSVRDLFVBQUFBLElBQUksRUFBRTtBQUpHLFNBQWI7QUFNQTFCLFFBQUFBLFFBQVEsQ0FBQ2EsS0FBVCxDQUFlYyxNQUFmLENBQXNCUixHQUF0QixFQUEyQixDQUEzQixFQUE4QkksSUFBOUI7QUFDSDtBQUNKLEtBWEQ7QUFZSDs7QUFTRHZDLEVBQUFBLGtCQUFrQixDQUFFNEMscUJBQUYsRUFBeUI7QUFDdkMsVUFBTXpCLGNBQWMsR0FBR3lCLHFCQUFxQixDQUFDeEIsUUFBdEIsQ0FBK0JELGNBQXREO0FBQ0EsVUFBTWIsR0FBRyxHQUFHYSxjQUFjLENBQUNiLEdBQTNCO0FBRUEsVUFBTUMsR0FBRyxHQUFHLEtBQUtwQixnQkFBTCxDQUFzQjJCLElBQXRCLENBQTJCQyxHQUFHLElBQUlBLEdBQUcsQ0FBQ1QsR0FBSixLQUFZQSxHQUE5QyxFQUFtREUsUUFBL0Q7QUFDQSxVQUFNQyxPQUFPLEdBQUdGLEdBQUcsQ0FBQ0UsT0FBcEI7QUFDQSxVQUFNTyxRQUFRLEdBQUdQLE9BQU8sQ0FBQ1ksUUFBUixDQUFpQlAsSUFBakIsQ0FBdUJRLEtBQUQsSUFBV0MsaUNBQWlDLENBQUNELEtBQUQsRUFBUUgsY0FBUixDQUFsRSxDQUFqQjtBQUNBLFVBQU1LLElBQUksR0FBR0Msa0JBQWtCLENBQUNoQixPQUFELEVBQVUsS0FBS3BCLGFBQWYsRUFBOEJ1RCxxQkFBcUIsQ0FBQ2xCLEtBQXBELEVBQTJEUCxjQUEzRCxDQUEvQjtBQUNBLFVBQU0wQixNQUFNLEdBQUdELHFCQUFxQixDQUFDQyxNQUFyQztBQUVBLFNBQUtuQyxJQUFMLENBQVUsWUFBVixFQUF3QkosR0FBeEIsRUFBNkJHLE9BQTdCLEVBQXNDTyxRQUF0QyxFQUFnRFEsSUFBaEQsRUFBc0RxQixNQUF0RCxFQUE4RDFCLGNBQTlEO0FBQ0g7O0FBTURsQixFQUFBQSxrQkFBa0IsQ0FBRTZDLHFCQUFGLEVBQXlCO0FBQ3ZDLFVBQU0zQixjQUFjLEdBQUcyQixxQkFBcUIsQ0FBQzNCLGNBQTdDO0FBQ0EsVUFBTWIsR0FBRyxHQUFHYSxjQUFjLENBQUNiLEdBQTNCO0FBRUEsVUFBTUMsR0FBRyxHQUFHLEtBQUtwQixnQkFBTCxDQUFzQjJCLElBQXRCLENBQTJCQyxHQUFHLElBQUlBLEdBQUcsQ0FBQ1QsR0FBSixLQUFZQSxHQUE5QyxFQUFtREUsUUFBL0Q7QUFDQSxVQUFNQyxPQUFPLEdBQUdGLEdBQUcsQ0FBQ0UsT0FBcEI7QUFDQSxVQUFNTyxRQUFRLEdBQUdQLE9BQU8sQ0FBQ1ksUUFBUixDQUFpQlAsSUFBakIsQ0FBdUJRLEtBQUQsSUFBV0MsaUNBQWlDLENBQUNELEtBQUQsRUFBUUgsY0FBUixDQUFsRSxDQUFqQjtBQUVBLFNBQUtULElBQUwsQ0FBVSxnQkFBVixFQUE0QkosR0FBNUIsRUFBaUNHLE9BQWpDLEVBQTBDTyxRQUExQyxFQUFvREcsY0FBcEQ7QUFFQSxTQUFLOUIsYUFBTCxHQUFxQixJQUFyQjtBQUNIOztBQUVEYSxFQUFBQSxnQkFBZ0IsQ0FBRTZDLG1CQUFGLEVBQXVCO0FBQ25DLFNBQUtyQyxJQUFMLENBQVUsWUFBVjtBQUNIOztBQUlEUCxFQUFBQSxpQkFBaUIsQ0FBRTZDLG9CQUFGLEVBQXdCO0FBRXJDLFFBQUksS0FBSzFELGNBQVQsRUFBeUI7QUFDckIsV0FBS29CLElBQUwsQ0FBVSxlQUFWLEVBQTJCLEtBQUtuQixpQkFBaEMsRUFBbUQsS0FBS0QsY0FBeEQ7QUFDQSxXQUFLQSxjQUFMLEdBQXNCLElBQXRCO0FBQ0g7O0FBRUQsU0FBS29CLElBQUwsQ0FBVSxVQUFWLEVBQXNCc0Msb0JBQW9CLENBQUNILE1BQTNDO0FBQ0g7O0FBbE8yRDs7OztBQXNPaEUsU0FBU0ksaUJBQVQsQ0FBNEJoRSxnQkFBNUIsRUFBOEM7QUFHMUMsUUFBTWlFLE1BQU0sR0FBRyxDQUNYLFFBRFcsRUFFWCxZQUZXLEVBR1gsa0JBSFcsRUFJWCxRQUpXLEVBS1gsaUJBTFcsRUFNWCxpQkFOVyxFQU9YLGtCQVBXLEVBUVgsb0JBUlcsRUFTWCxtQkFUVyxFQVVYLG1CQVZXLEVBV1gsc0JBWFcsRUFZWCxvQkFaVyxFQWFYLG9CQWJXLEVBY1gsbUJBZFcsQ0FBZjtBQWdCQUEsRUFBQUEsTUFBTSxDQUFDaEIsT0FBUCxDQUFlaUIsQ0FBQyxJQUFJO0FBQ2hCbEUsSUFBQUEsZ0JBQWdCLENBQUNRLEVBQWpCLENBQW9CMEQsQ0FBcEIsRUFBdUJDLENBQUMsSUFBSTtBQUN4QkMsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksWUFBWUgsQ0FBWixHQUFnQixVQUFoQixHQUE2QkksSUFBSSxDQUFDQyxTQUFMLENBQWVKLENBQWYsRUFBa0IsSUFBbEIsRUFBd0IsQ0FBeEIsQ0FBekM7QUFDSCxLQUZEO0FBR0gsR0FKRDtBQUtIOztBQUVNLFNBQVM3QixpQ0FBVCxDQUE0Q1AsUUFBNUMsRUFBc0RHLGNBQXRELEVBQXNFO0FBQ3pFLE1BQUlILFFBQVEsQ0FBQ2UsSUFBVCxDQUFjMEIsT0FBZCxDQUFzQixpQkFBdEIsSUFBMkMsQ0FBQyxDQUFoRCxFQUFtRDtBQUMvQyxXQUFPekMsUUFBUSxDQUFDMEMsUUFBVCxDQUFrQkMsSUFBbEIsQ0FBd0JDLE9BQUQsSUFBYUEsT0FBTyxDQUFDQyxTQUFSLENBQWtCRixJQUFsQixDQUF3QkcsVUFBRCxJQUFnQkEsVUFBVSxDQUFDdEIsUUFBWCxDQUFvQkosSUFBcEIsS0FBNkJqQixjQUFjLENBQUNpQixJQUFuRixDQUFwQyxDQUFQO0FBQ0gsR0FGRCxNQUVPO0FBQ0gsV0FBT3BCLFFBQVEsQ0FBQ3dCLFFBQVQsQ0FBa0JKLElBQWxCLEtBQTJCakIsY0FBYyxDQUFDaUIsSUFBakQ7QUFDSDtBQUNKOztBQUVNLFNBQVNYLGtCQUFULENBQTZCaEIsT0FBN0IsRUFBc0NRLE1BQXRDLEVBQThDOEMsU0FBOUMsRUFBeUQ1QyxjQUF6RCxFQUF5RTtBQUM1RSxNQUFJNkMsYUFBYSxHQUFHLEVBQXBCO0FBQ0F2RCxFQUFBQSxPQUFPLENBQUNZLFFBQVIsQ0FBaUJhLE9BQWpCLENBQTBCWixLQUFELElBQVc7QUFDaEMsUUFBSUEsS0FBSyxDQUFDUyxJQUFOLENBQVcwQixPQUFYLENBQW1CLFVBQW5CLElBQWlDLENBQUMsQ0FBbEMsSUFBdUMsQ0FBQ2xDLGlDQUFpQyxDQUFDRCxLQUFELEVBQVFILGNBQVIsQ0FBN0UsRUFBc0c7QUFDbEc7QUFDSDs7QUFDRDZDLElBQUFBLGFBQWEsR0FBR0EsYUFBYSxDQUFDQyxNQUFkLENBQXFCM0MsS0FBSyxDQUFDTyxLQUEzQixDQUFoQjtBQUNILEdBTEQ7QUFNQSxRQUFNcUMsVUFBVSxHQUFHRixhQUFhLENBQUNELFNBQUQsQ0FBaEM7O0FBRUEsTUFBSUcsVUFBVSxDQUFDbkMsSUFBWCxLQUFvQixNQUF4QixFQUFnQztBQUM1QixVQUFNb0MsUUFBUSxHQUFHRCxVQUFVLENBQUMxQixRQUFYLENBQW9CSixJQUFyQztBQUNBLFVBQU1nQyxVQUFVLEdBQUduRCxNQUFNLENBQUNZLEtBQVAsQ0FBYWYsSUFBYixDQUFrQnVELENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxTQUFGLENBQVlYLElBQVosQ0FBaUJZLEdBQUcsSUFBSUEsR0FBRyxDQUFDbkMsSUFBSixLQUFhK0IsUUFBckMsQ0FBdkIsQ0FBbkI7O0FBRUEsUUFBSUMsVUFBSixFQUFnQjtBQUNaLGFBQU8sRUFBRSxHQUFHRixVQUFMO0FBQWlCeEIsUUFBQUEsSUFBSSxFQUFFMEIsVUFBVSxDQUFDMUI7QUFBbEMsT0FBUDtBQUNIO0FBQ0o7O0FBRUQsU0FBT3dCLFVBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTktcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKiBcbiAqIEJhc2VkIG9uOlxuICogQ29weXJpZ2h0IChjKSBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBMaWNlbnNlZCB1bmRlciBNSVQuXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VjdW1iZXJFdmVudExpc3RlbmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvciAoZXZlbnRCcm9hZGNhc3Rlcikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSB7fTtcbiAgICAgICAgdGhpcy5naGVya2luRG9jRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuYWNjZXB0ZWRQaWNrbGVzID0gW107XG4gICAgICAgIHRoaXMuY3VycmVudFBpY2tsZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmUgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlVXJpID0gbnVsbDtcbiAgICAgICAgdGhpcy50ZXN0Q2FzZVByZXBhcmVkRXZlbnRzID0gW107XG4gICAgICAgIC8vIGF0dGFjaEV2ZW50TG9nZ2VyKGV2ZW50QnJvYWRjYXN0ZXIpXG5cbiAgICAgICAgZXZlbnRCcm9hZGNhc3RlclxuICAgICAgICAgICAgLm9uKCdnaGVya2luLWRvY3VtZW50JywgdGhpcy5vbkdoZXJraW5Eb2N1bWVudC5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgLm9uKCdwaWNrbGUtYWNjZXB0ZWQnLCB0aGlzLm9uUGlja2xlQWNjZXB0ZWQuYmluZCh0aGlzKSlcbiAgICAgICAgICAgIC5vbigndGVzdC1jYXNlLXByZXBhcmVkJywgdGhpcy5vblRlc3RDYXNlUHJlcGFyZWQuYmluZCh0aGlzKSlcbiAgICAgICAgICAgIC5vbigndGVzdC1jYXNlLXN0YXJ0ZWQnLCB0aGlzLm9uVGVzdENhc2VTdGFydGVkLmJpbmQodGhpcykpXG4gICAgICAgICAgICAub24oJ3Rlc3Qtc3RlcC1zdGFydGVkJywgdGhpcy5vblRlc3RTdGVwU3RhcnRlZC5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgLm9uKCd0ZXN0LXN0ZXAtZmluaXNoZWQnLCB0aGlzLm9uVGVzdFN0ZXBGaW5pc2hlZC5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgLm9uKCd0ZXN0LWNhc2UtZmluaXNoZWQnLCB0aGlzLm9uVGVzdENhc2VGaW5pc2hlZC5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgLm9uKCd0ZXN0LXJ1bi1zdGFydGVkJywgdGhpcy5vblRlc3RSdW5TdGFydGVkLmJpbmQodGhpcykpXG4gICAgICAgICAgICAub24oJ3Rlc3QtcnVuLWZpbmlzaGVkJywgdGhpcy5vblRlc3RSdW5GaW5pc2hlZC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyBnaGVya2luRG9jRXZlbnQgPSB7XG4gICAgLy8gICAgIHVyaTogc3RyaW5nLFxuICAgIC8vICAgICBkb2N1bWVudDoge1xuICAgIC8vICAgICAgICAgdHlwZTogJ0doZXJraW5Eb2N1bWVudCcsXG4gICAgLy8gICAgICAgICBmZWF0dXJlOiB7XG4gICAgLy8gICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnLFxuICAgIC8vICAgICAgICAgICAgIHRhZ3M6IFt7IG5hbWU6IHN0cmluZyB9XSxcbiAgICAvLyAgICAgICAgICAgICBsb2NhdGlvbjogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAvLyAgICAgICAgICAgICBsYW5ndWFnZTogc3RyaW5nLFxuICAgIC8vICAgICAgICAgICAgIGtleXdvcmQ6ICdGZWF0dXJlJyxcbiAgICAvLyAgICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgLy8gICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW3tcbiAgICAvLyAgICAgICAgICAgICAgICAgdHlwZTogJ1NjZW5hcmlvJyxcbiAgICAvLyAgICAgICAgICAgICAgICAgdGFnczogW10sXG4gICAgLy8gICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgIC8vICAgICAgICAgICAgICAgICBrZXl3b3JkOiAnU2NlbmFyaW8nLFxuICAgIC8vICAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgLy8gICAgICAgICAgICAgICAgIHN0ZXBzOiBbe1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0ZXAnLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IHsgbGluZTogMCwgY29sdW1uOiAwIH0sXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiAnR2l2ZW4nIHwgJ1doZW4nIHwgJ1RoZW4nLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nXG4gICAgLy8gICAgICAgICAgICAgICAgIH1dXG4gICAgLy8gICAgICAgICAgICAgfV1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgY29tbWVudHM6IFt7XG4gICAgLy8gICAgICAgICB0eXBlOiAnQ29tbWVudCcsXG4gICAgLy8gICAgICAgICBsb2NhdGlvbjogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAvLyAgICAgICAgIHRleHQ6IHN0cmluZ1xuICAgIC8vICAgICB9XVxuICAgIC8vIH1cbiAgICBvbkdoZXJraW5Eb2N1bWVudCAoZ2hlcmtpbkRvY0V2ZW50KSB7XG4gICAgICAgIC8vIGVtaXQgJ2ZlYXR1cmU6YWZ0ZXInIGV2ZW50IGJlZm9yZSB0aGUgbmV4dCBmZWF0dXJlIGlzIHByb2NlZWRlZFxuICAgICAgICAvKmlmICh0aGlzLmN1cnJlbnRGZWF0dXJlKSB7XG4gICAgICAgICAgICAvL2NvbnN0IGdoZXJraW5Eb2NFdmVudCA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5wb3AoKSAvLyBzZWUgLnB1c2goKSBpbiBgaGFuZGxlQmVmb3JlRmVhdHVyZSgpYFxuICAgICAgICAgICAgdGhpcy5lbWl0KCdmZWF0dXJlOmFmdGVyJywgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSwgdGhpcy5jdXJyZW50RmVhdHVyZSlcbiAgICAgICAgfSovXG5cbiAgICAgICAgdGhpcy5naGVya2luRG9jRXZlbnRzLnB1c2goZ2hlcmtpbkRvY0V2ZW50KTtcblxuICAgICAgICBjb25zdCB1cmkgPSBnaGVya2luRG9jRXZlbnQudXJpO1xuICAgICAgICBjb25zdCBkb2MgPSBnaGVya2luRG9jRXZlbnQuZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBkb2MuZmVhdHVyZTtcblxuICAgICAgICB0aGlzLmVtaXQoJ2ZlYXR1cmU6cmVhZHknLCB1cmksIGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8vIHBpY2tsZUV2ZW50ID0ge1xuICAgIC8vICAgICB1cmk6IHN0cmluZyxcbiAgICAvLyAgICAgcGlja2xlOiB7XG4gICAgLy8gICAgICAgICB0YWdzOiBbeyBuYW1lOiBzdHJpbmcgfV0sXG4gICAgLy8gICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgLy8gICAgICAgICBsb2NhdGlvbnM6IFt7IGxpbmU6IDAsIGNvbHVtbjogMCB9XSxcbiAgICAvLyAgICAgICAgIHN0ZXBzOiBbe1xuICAgIC8vICAgICAgICAgICAgIGxvY2F0aW9uczogW3sgbGluZTogMCwgY29sdW1uOiAwIH1dLFxuICAgIC8vICAgICAgICAgICAgIGtleXdvcmQ6ICdHaXZlbicgfCAnV2hlbicgfCAnVGhlbicsXG4gICAgLy8gICAgICAgICAgICAgdGV4dDogc3RyaW5nXG4gICAgLy8gICAgICAgICB9XVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIG9uUGlja2xlQWNjZXB0ZWQgKHBpY2tsZUV2ZW50KSB7XG4gICAgICAgIC8vIGJlY2F1c2UgJ3BpY2tsZS1hY2NlcHRlZCcgZXZlbnRzIGFyZSBlbWl0dGVkIHRvZ2V0aGVyIGluIGZvckVhY2ggbG9vcFxuICAgICAgICB0aGlzLmFjY2VwdGVkUGlja2xlcy5wdXNoKHBpY2tsZUV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyB0ZXN0Q2FzZVN0YXJ0ZWRFdmVudCA9IHtcbiAgICAvLyAgICAgc291cmNlTG9jYXRpb246IHsgdXJpOiBzdHJpbmcsIGxpbmU6IDAgfVxuICAgIC8vIH1cbiAgICBvblRlc3RDYXNlU3RhcnRlZCAodGVzdENhc2VTdGFydGVkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGlja2xlRXZlbnQgPSB0aGlzLmFjY2VwdGVkUGlja2xlcy5zaGlmdCgpO1xuICAgICAgICBjb25zdCB1cmkgPSBwaWNrbGVFdmVudC51cmk7XG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5maW5kKGdkZSA9PiBnZGUudXJpID09PSB1cmkpLmRvY3VtZW50O1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gZG9jLmZlYXR1cmU7XG4gICAgICAgIGNvbnN0IHNjZW5hcmlvID0gcGlja2xlRXZlbnQucGlja2xlO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFBpY2tsZSA9IHNjZW5hcmlvO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGZWF0dXJlVXJpICYmIHRoaXMuY3VycmVudEZlYXR1cmVVcmkgIT09IHVyaSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdmZWF0dXJlOmFmdGVyJywgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSwgdGhpcy5jdXJyZW50RmVhdHVyZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGZWF0dXJlVXJpID0gdXJpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZSA9IGZlYXR1cmU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2ZlYXR1cmU6YmVmb3JlJywgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSwgdGhpcy5jdXJyZW50RmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY3VycmVudEZlYXR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZlYXR1cmUgPSBmZWF0dXJlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZVVyaSA9IHVyaTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmVhdHVyZTpiZWZvcmUnLCB0aGlzLmN1cnJlbnRGZWF0dXJlVXJpLCB0aGlzLmN1cnJlbnRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgnc2NlbmFyaW86YmVmb3JlJywgdXJpLCBmZWF0dXJlLCBzY2VuYXJpbyk7XG4gICAgfVxuXG4gICAgLy8gdGVzdFN0ZXBTdGFydGVkRXZlbnQgPSB7XG4gICAgLy8gICAgIGluZGV4OiAwLFxuICAgIC8vICAgICB0ZXN0Q2FzZToge1xuICAgIC8vICAgICAgICAgc291cmNlTG9jYXRpb246IHsgdXJpOiBzdHJpbmcsIGxpbmU6IDAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIG9uVGVzdFN0ZXBTdGFydGVkICh0ZXN0U3RlcFN0YXJ0ZWRFdmVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2VMb2NhdGlvbiA9IHRlc3RTdGVwU3RhcnRlZEV2ZW50LnRlc3RDYXNlLnNvdXJjZUxvY2F0aW9uO1xuICAgICAgICBjb25zdCB1cmkgPSBzb3VyY2VMb2NhdGlvbi51cmk7XG5cbiAgICAgICAgY29uc3QgZG9jID0gdGhpcy5naGVya2luRG9jRXZlbnRzLmZpbmQoZ2RlID0+IGdkZS51cmkgPT09IHVyaSkuZG9jdW1lbnQ7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBkb2MuZmVhdHVyZTtcbiAgICAgICAgY29uc3Qgc2NlbmFyaW8gPSBmZWF0dXJlLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjb21wYXJlU2NlbmFyaW9MaW5lV2l0aFNvdXJjZUxpbmUoY2hpbGQsIHNvdXJjZUxvY2F0aW9uKSk7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRnJvbUZlYXR1cmUoZmVhdHVyZSwgdGhpcy5jdXJyZW50UGlja2xlLCB0ZXN0U3RlcFN0YXJ0ZWRFdmVudC5pbmRleCwgc291cmNlTG9jYXRpb24pO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnc3RlcDpiZWZvcmUnLCB1cmksIGZlYXR1cmUsIHNjZW5hcmlvLCBzdGVwLCBzb3VyY2VMb2NhdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGVzdENhc2VQcmVwYXJlZEV2ZW50ID0ge1xuICAgIC8vICAgICBzb3VyY2VMb2NhdGlvbjogeyB1cmk6IHN0cmluZywgbGluZTogMCB9XG4gICAgLy8gICAgIHN0ZXBzOiBbXG4gICAgLy8gICAgICAgICB7XG4gICAgLy8gICAgICAgICAgICAgYWN0aW9uTG9jYXRpb246IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdXJpOiBzdHJpbmdcbiAgICAvLyAgICAgICAgICAgICAgICAgbGluZTogMFxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgXVxuICAgIC8vIH1cbiAgICBvblRlc3RDYXNlUHJlcGFyZWQgKHRlc3RDYXNlUHJlcGFyZWRFdmVudCkge1xuICAgICAgICB0aGlzLnRlc3RDYXNlUHJlcGFyZWRFdmVudHMucHVzaCh0ZXN0Q2FzZVByZXBhcmVkRXZlbnQpO1xuICAgICAgICBjb25zdCBzb3VyY2VMb2NhdGlvbiA9IHRlc3RDYXNlUHJlcGFyZWRFdmVudC5zb3VyY2VMb2NhdGlvbjtcbiAgICAgICAgY29uc3QgdXJpID0gc291cmNlTG9jYXRpb24udXJpO1xuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5maW5kKGdkZSA9PiBnZGUudXJpID09PSB1cmkpLmRvY3VtZW50O1xuICAgICAgICBjb25zdCBzY2VuYXJpbyA9IGRvYy5mZWF0dXJlLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjb21wYXJlU2NlbmFyaW9MaW5lV2l0aFNvdXJjZUxpbmUoY2hpbGQsIHNvdXJjZUxvY2F0aW9uKSk7XG5cbiAgICAgICAgY29uc3Qgc2NlbmFyaW9IYXNIb29rcyA9IHNjZW5hcmlvLnN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gc3RlcC50eXBlID09PSAnSG9vaycpLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmIChzY2VuYXJpb0hhc0hvb2tzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsU3RlcHMgPSB0ZXN0Q2FzZVByZXBhcmVkRXZlbnQuc3RlcHM7XG4gICAgICAgIGFsbFN0ZXBzLmZvckVhY2goKHN0ZXAsIGlkeCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdGVwLnNvdXJjZUxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgc3RlcC5zb3VyY2VMb2NhdGlvbiA9IHsgbGluZTogc3RlcC5hY3Rpb25Mb2NhdGlvbi5saW5lLCBjb2x1bW46IDAsIHVyaTogc3RlcC5hY3Rpb25Mb2NhdGlvbi51cmkgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBob29rID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSG9vaycsXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBzdGVwLnNvdXJjZUxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkOiAnSG9vaycsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzY2VuYXJpby5zdGVwcy5zcGxpY2UoaWR4LCAwLCBob29rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdGVzdFN0ZXBGaW5pc2hlZEV2ZW50ID0ge1xuICAgIC8vICAgICBpbmRleDogMCxcbiAgICAvLyAgICAgcmVzdWx0OiB7IGR1cmF0aW9uOiAwLCBzdGF0dXM6IHN0cmluZywgZXhjZXB0aW9uPzogRXJyb3IgfSxcbiAgICAvLyAgICAgdGVzdENhc2U6IHtcbiAgICAvLyAgICAgICAgIHNvdXJjZUxvY2F0aW9uOiB7IHVyaTogc3RyaW5nLCBsaW5lOiAwIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICBvblRlc3RTdGVwRmluaXNoZWQgKHRlc3RTdGVwRmluaXNoZWRFdmVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2VMb2NhdGlvbiA9IHRlc3RTdGVwRmluaXNoZWRFdmVudC50ZXN0Q2FzZS5zb3VyY2VMb2NhdGlvbjtcbiAgICAgICAgY29uc3QgdXJpID0gc291cmNlTG9jYXRpb24udXJpO1xuXG4gICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2hlcmtpbkRvY0V2ZW50cy5maW5kKGdkZSA9PiBnZGUudXJpID09PSB1cmkpLmRvY3VtZW50O1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gZG9jLmZlYXR1cmU7XG4gICAgICAgIGNvbnN0IHNjZW5hcmlvID0gZmVhdHVyZS5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY29tcGFyZVNjZW5hcmlvTGluZVdpdGhTb3VyY2VMaW5lKGNoaWxkLCBzb3VyY2VMb2NhdGlvbikpO1xuICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZyb21GZWF0dXJlKGZlYXR1cmUsIHRoaXMuY3VycmVudFBpY2tsZSwgdGVzdFN0ZXBGaW5pc2hlZEV2ZW50LmluZGV4LCBzb3VyY2VMb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RTdGVwRmluaXNoZWRFdmVudC5yZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmFmdGVyJywgdXJpLCBmZWF0dXJlLCBzY2VuYXJpbywgc3RlcCwgcmVzdWx0LCBzb3VyY2VMb2NhdGlvbik7XG4gICAgfVxuXG4gICAgLy8gdGVzdENhc2VGaW5pc2hlZEV2ZW50ID0ge1xuICAgIC8vICAgICByZXN1bHQ6IHsgZHVyYXRpb246IDAsIHN0YXR1czogc3RyaW5nIH0sXG4gICAgLy8gICAgIHNvdXJjZUxvY2F0aW9uOiB7IHVyaTogc3RyaW5nLCBsaW5lOiAwIH1cbiAgICAvLyB9XG4gICAgb25UZXN0Q2FzZUZpbmlzaGVkICh0ZXN0Q2FzZUZpbmlzaGVkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc291cmNlTG9jYXRpb24gPSB0ZXN0Q2FzZUZpbmlzaGVkRXZlbnQuc291cmNlTG9jYXRpb247XG4gICAgICAgIGNvbnN0IHVyaSA9IHNvdXJjZUxvY2F0aW9uLnVyaTtcblxuICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmdoZXJraW5Eb2NFdmVudHMuZmluZChnZGUgPT4gZ2RlLnVyaSA9PT0gdXJpKS5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IGRvYy5mZWF0dXJlO1xuICAgICAgICBjb25zdCBzY2VuYXJpbyA9IGZlYXR1cmUuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNvbXBhcmVTY2VuYXJpb0xpbmVXaXRoU291cmNlTGluZShjaGlsZCwgc291cmNlTG9jYXRpb24pKTtcblxuICAgICAgICB0aGlzLmVtaXQoJ3NjZW5hcmlvOmFmdGVyJywgdXJpLCBmZWF0dXJlLCBzY2VuYXJpbywgc291cmNlTG9jYXRpb24pO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFBpY2tsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgb25UZXN0UnVuU3RhcnRlZCAodGVzdFJ1blN0YXJ0ZWRFdmVudCkge1xuICAgICAgICB0aGlzLmVtaXQoJ3Rlc3Q6c3RhcnQnKTtcbiAgICB9XG4gICAgLy8gdGVzdFJ1bkZpbmlzaGVkRXZlbnQgPSB7XG4gICAgLy8gICAgIHJlc3VsdDogeyBkdXJhdGlvbjogNDAwNCwgc3VjY2VzczogdHJ1ZSB9XG4gICAgLy8gfVxuICAgIG9uVGVzdFJ1bkZpbmlzaGVkICh0ZXN0UnVuRmluaXNoZWRFdmVudCkge1xuICAgICAgICAvLyBlbWl0ICdmZWF0dXJlOmFmdGVyJyBldmVudCBiZWZvcmUgdGhlIG5leHQgZmVhdHVyZSBpcyBwcm9jZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZlYXR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmVhdHVyZTphZnRlcicsIHRoaXMuY3VycmVudEZlYXR1cmVVcmksIHRoaXMuY3VycmVudEZlYXR1cmUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmVhdHVyZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXQoJ3Rlc3Q6ZW5kJywgdGVzdFJ1bkZpbmlzaGVkRXZlbnQucmVzdWx0KTtcbiAgICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuZnVuY3Rpb24gYXR0YWNoRXZlbnRMb2dnZXIgKGV2ZW50QnJvYWRjYXN0ZXIpIHtcbiAgICAvLyBmb3IgZGVidWdnaW5nIHB1cnBvc2VkXG4gICAgLy8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY3VjdW1iZXIvY3VjdW1iZXItanMvYmxvYi92NC4xLjAvc3JjL2Zvcm1hdHRlci9ldmVudF9wcm90b2NvbF9mb3JtYXR0ZXIuanNcbiAgICBjb25zdCBFVkVOVFMgPSBbXG4gICAgICAgICdzb3VyY2UnLFxuICAgICAgICAnYXR0YWNobWVudCcsXG4gICAgICAgICdnaGVya2luLWRvY3VtZW50JyxcbiAgICAgICAgJ3BpY2tsZScsXG4gICAgICAgICdwaWNrbGUtYWNjZXB0ZWQnLFxuICAgICAgICAncGlja2xlLXJlamVjdGVkJyxcbiAgICAgICAgJ3Rlc3QtcnVuLXN0YXJ0ZWQnLFxuICAgICAgICAndGVzdC1jYXNlLXByZXBhcmVkJyxcbiAgICAgICAgJ3Rlc3QtY2FzZS1zdGFydGVkJyxcbiAgICAgICAgJ3Rlc3Qtc3RlcC1zdGFydGVkJyxcbiAgICAgICAgJ3Rlc3Qtc3RlcC1hdHRhY2htZW50JyxcbiAgICAgICAgJ3Rlc3Qtc3RlcC1maW5pc2hlZCcsXG4gICAgICAgICd0ZXN0LWNhc2UtZmluaXNoZWQnLFxuICAgICAgICAndGVzdC1ydW4tZmluaXNoZWQnXG4gICAgXTtcbiAgICBFVkVOVFMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgZXZlbnRCcm9hZGNhc3Rlci5vbihlLCB4ID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdcXG4tLS0tLScgKyBlICsgJyAtLS0tLVxcbicgKyBKU09OLnN0cmluZ2lmeSh4LCBudWxsLCAyKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVNjZW5hcmlvTGluZVdpdGhTb3VyY2VMaW5lIChzY2VuYXJpbywgc291cmNlTG9jYXRpb24pIHtcbiAgICBpZiAoc2NlbmFyaW8udHlwZS5pbmRleE9mKCdTY2VuYXJpb091dGxpbmUnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBzY2VuYXJpby5leGFtcGxlcy5zb21lKChleGFtcGxlKSA9PiBleGFtcGxlLnRhYmxlQm9keS5zb21lKCh0YWJsZUVudHJ5KSA9PiB0YWJsZUVudHJ5LmxvY2F0aW9uLmxpbmUgPT09IHNvdXJjZUxvY2F0aW9uLmxpbmUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2NlbmFyaW8ubG9jYXRpb24ubGluZSA9PT0gc291cmNlTG9jYXRpb24ubGluZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGVwRnJvbUZlYXR1cmUgKGZlYXR1cmUsIHBpY2tsZSwgc3RlcEluZGV4LCBzb3VyY2VMb2NhdGlvbikge1xuICAgIGxldCBjb21iaW5lZFN0ZXBzID0gW107XG4gICAgZmVhdHVyZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZS5pbmRleE9mKCdTY2VuYXJpbycpID4gLTEgJiYgIWNvbXBhcmVTY2VuYXJpb0xpbmVXaXRoU291cmNlTGluZShjaGlsZCwgc291cmNlTG9jYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29tYmluZWRTdGVwcyA9IGNvbWJpbmVkU3RlcHMuY29uY2F0KGNoaWxkLnN0ZXBzKTtcbiAgICB9KTtcbiAgICBjb25zdCB0YXJnZXRTdGVwID0gY29tYmluZWRTdGVwc1tzdGVwSW5kZXhdO1xuXG4gICAgaWYgKHRhcmdldFN0ZXAudHlwZSA9PT0gJ1N0ZXAnKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBMaW5lID0gdGFyZ2V0U3RlcC5sb2NhdGlvbi5saW5lO1xuICAgICAgICBjb25zdCBwaWNrbGVTdGVwID0gcGlja2xlLnN0ZXBzLmZpbmQocyA9PiBzLmxvY2F0aW9ucy5zb21lKGxvYyA9PiBsb2MubGluZSA9PT0gc3RlcExpbmUpKTtcblxuICAgICAgICBpZiAocGlja2xlU3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4udGFyZ2V0U3RlcCwgdGV4dDogcGlja2xlU3RlcC50ZXh0IH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0U3RlcDtcbn1cbiJdfQ==
@@ -274,4 +274,4 @@ class CucumberReporter {
274
274
  }
275
275
 
276
276
  exports.default = CucumberReporter;
277
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL2N1Y3VtYmVyL0N1Y3VtYmVyUmVwb3J0ZXIuanMiXSwibmFtZXMiOlsiQ3VjdW1iZXJSZXBvcnRlciIsImNvbnN0cnVjdG9yIiwicnVubmVySWQiLCJvcHRpb25zIiwiY3VjdW1iZXJFdmVudExpc3RlbmVyIiwib3h5Z2VuRXZlbnRMaXN0ZW5lciIsInJlcG9ydERpc3BhdGNoZXIiLCJ0ZXN0SG9va3MiLCJzdWl0ZXMiLCJjdXJyZW50U3RlcCIsImN1cnJlbnRDYXNlIiwib25CZWZvcmVGZWF0dXJlIiwiYmluZCIsIm9uQWZ0ZXJGZWF0dXJlIiwib25CZWZvcmVTY2VuYXJpbyIsIm9uQWZ0ZXJTY2VuYXJpbyIsIm9uQmVmb3JlU3RlcCIsIm9uQWZ0ZXJTdGVwIiwib25UZXN0RW5kIiwib25CZWZvcmVPeHlnZW5Db21tYW5kIiwib25BZnRlck94eWdlbkNvbW1hbmQiLCJvbk94eWdlbkxvZyIsImhvb2tFdmVudHMiLCJvbiIsImUiLCJyZXN1bHQiLCJzdGVwcyIsInB1c2giLCJsb2ciLCJsb2dzIiwidGltZSIsImxldmVsIiwidG9VcHBlckNhc2UiLCJtc2ciLCJtZXNzYWdlIiwic3JjIiwib25Mb2dFbnRyeSIsInVyaSIsImZlYXR1cmUiLCJsb2NhdGlvbiIsImxpbmUiLCJzdWl0ZVJlc3VsdCIsIlRlc3RTdWl0ZVJlc3VsdCIsIm5hbWUiLCJ0YWdzIiwic2ltcGxpZnlDdWN1bWJlclRhZ3MiLCJzdGFydFRpbWUiLCJveHV0aWwiLCJnZXRUaW1lU3RhbXAiLCJiZWZvcmVTdWl0ZSIsIm9uU3VpdGVTdGFydCIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInN0YXR1cyIsImRldGVybWluZVN1aXRlU3RhdHVzIiwiYWZ0ZXJTdWl0ZSIsIm9uU3VpdGVFbmQiLCJzY2VuYXJpbyIsInN1aXRlSWQiLCJjYXNlTG9jYXRpb24iLCJsb2NhdGlvbnMiLCJsZW5ndGgiLCJjYXNlSWQiLCJjYXNlcyIsImNhc2VSZXN1bHQiLCJUZXN0Q2FzZVJlc3VsdCIsIm9uQmVmb3JlQ2FzZSIsImJlZm9yZUNhc2UiLCJvbkNhc2VTdGFydCIsInNvdXJjZUxvY2F0aW9uIiwiZmluZCIsIngiLCJkZXRlcm1pbmVDYXNlU3RhdHVzIiwicmVzdWx0U3RvcmUiLCJoYXIiLCJvbkFmdGVyQ2FzZSIsImFmdGVyQ2FzZSIsIm9uQ2FzZUVuZCIsInN0ZXAiLCJzdGVwUmVzdWx0IiwiVGVzdFN0ZXBSZXN1bHQiLCJ0ZXh0IiwiYmVmb3JlU3RlcCIsIm9uU3RlcFN0YXJ0Iiwic3RlcExvY2F0aW9uIiwiZXhjZXB0aW9uIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsImN1Y3VtYmVyTG9jYXRpb24iLCJhZnRlclN0ZXAiLCJvblN0ZXBFbmQiLCJoYXNGYWlsZWRTdGVwIiwic29tZSIsIlN0YXR1cyIsIkZBSUxFRCIsIlBBU1NFRCIsImhhc0ZhaWxlZENhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJzaW1wbGVUYWdzIiwidGFnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVlLE1BQU1BLGdCQUFOLENBQXVCO0FBQ2xDQyxFQUFBQSxXQUFXLENBQUNDLFFBQUQsRUFBV0MsT0FBWCxFQUFvQkMscUJBQXBCLEVBQTJDQyxtQkFBM0MsRUFBZ0VDLGdCQUFoRSxFQUFrRkMsU0FBbEYsRUFBNkY7QUFDcEcsU0FBS0wsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLTSxNQUFMLEdBQWMsRUFBZDtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsU0FBS04scUJBQUwsR0FBNkJBLHFCQUE3QjtBQUNBLFNBQUtDLG1CQUFMLEdBQTJCQSxtQkFBM0I7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QkEsZ0JBQXhCO0FBQ0EsU0FBS0gsT0FBTCxHQUFlQSxPQUFmO0FBRUEsU0FBS1EsZUFBTCxHQUF1QixLQUFLQSxlQUFMLENB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eEQsV0FBVyxDQUFDc0IsS0FBWixDQUFrQjhCLElBQWxCLENBQXVCdEIsQ0FBQyxJQUFJQSxDQUFDLENBQUNsQixNQUFGLEtBQWF5QyxnQkFBT0MsTUFBaEQsQ0FBdEI7O0FBQ0EsUUFBSUUsYUFBSixFQUFtQjtBQUNmLGFBQU9ILGdCQUFPQyxNQUFkO0FBQ0g7O0FBQ0QsV0FBT0QsZ0JBQU9FLE1BQWQ7QUFDSDs7QUFHRG5ELEVBQUFBLG9CQUFvQixDQUFDRCxJQUFELEVBQU87QUFDdkIsUUFBSSxDQUFDc0QsS0FBSyxDQUFDQyxPQUFOLENBQWN2RCxJQUFkLENBQUQsSUFBd0JBLElBQUksQ0FBQ2lCLE1BQUwsSUFBZSxDQUEzQyxFQUE4QztBQUMxQyxhQUFPakIsSUFBUDtBQUNIOztBQUNELFVBQU13RCxVQUFVLEdBQUcsRUFBbkI7O0FBQ0EsU0FBSyxJQUFJQyxHQUFULElBQWdCekQsSUFBaEIsRUFBc0I7QUFDbEJ3RCxNQUFBQSxVQUFVLENBQUN6RSxJQUFYLENBQWdCMEUsR0FBRyxDQUFDMUQsSUFBcEI7QUFDSDs7QUFDRCxXQUFPeUQsVUFBUDtBQUNIOztBQXhQaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFN1aXRlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3N1aXRlLXJlc3VsdCc7XHJcbmltcG9ydCBUZXN0Q2FzZVJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9jYXNlLXJlc3VsdCc7XHJcbmltcG9ydCBUZXN0U3RlcFJlc3VsdCBmcm9tICcuLi8uLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vLi4vbW9kZWwvc3RhdHVzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi8uLi9saWIvdXRpbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi8uLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1Y3VtYmVyUmVwb3J0ZXIge1xyXG4gICAgY29uc3RydWN0b3IocnVubmVySWQsIG9wdGlvbnMsIGN1Y3VtYmVyRXZlbnRMaXN0ZW5lciwgb3h5Z2VuRXZlbnRMaXN0ZW5lciwgcmVwb3J0RGlzcGF0Y2hlciwgdGVzdEhvb2tzKSB7XHJcbiAgICAgICAgdGhpcy5ydW5uZXJJZCA9IHJ1bm5lcklkO1xyXG4gICAgICAgIHRoaXMuc3VpdGVzID0ge307XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FzZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdWN1bWJlckV2ZW50TGlzdGVuZXIgPSBjdWN1bWJlckV2ZW50TGlzdGVuZXI7XHJcbiAgICAgICAgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyID0gb3h5Z2VuRXZlbnRMaXN0ZW5lcjtcclxuICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIgPSByZXBvcnREaXNwYXRjaGVyO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcblxyXG4gICAgICAgIHRoaXMub25CZWZvcmVGZWF0dXJlID0gdGhpcy5vbkJlZm9yZUZlYXR1cmUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uQWZ0ZXJGZWF0dXJlID0gdGhpcy5vbkFmdGVyRmVhdHVyZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVTY2VuYXJpbyA9IHRoaXMub25CZWZvcmVTY2VuYXJpby5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclNjZW5hcmlvID0gdGhpcy5vbkFmdGVyU2NlbmFyaW8uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uQmVmb3JlU3RlcCA9IHRoaXMub25CZWZvcmVTdGVwLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkFmdGVyU3RlcCA9IHRoaXMub25BZnRlclN0ZXAuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uVGVzdEVuZCA9IHRoaXMub25UZXN0RW5kLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZU94eWdlbkNvbW1hbmQgPSB0aGlzLm9uQmVmb3JlT3h5Z2VuQ29tbWFuZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25BZnRlck94eWdlbkNvbW1hbmQgPSB0aGlzLm9uQWZ0ZXJPeHlnZW5Db21tYW5kLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbk94eWdlbkxvZyA9IHRoaXMub25PeHlnZW5Mb2cuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZXN0SG9va3MgPSB0ZXN0SG9va3M7XHJcblxyXG4gICAgICAgIHRoaXMuaG9va0V2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGhvb2tFdmVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5jdWN1bWJlckV2ZW50TGlzdGVuZXIub24oJ2ZlYXR1cmU6YmVmb3JlJywgdGhpcy5vbkJlZm9yZUZlYXR1cmUpO1xyXG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyLm9uKCdmZWF0dXJlOmFmdGVyJywgdGhpcy5vbkFmdGVyRmVhdHVyZSk7XHJcbiAgICAgICAgdGhpcy5jdWN1bWJlckV2ZW50TGlzdGVuZXIub24oJ3NjZW5hcmlvOmJlZm9yZScsIHRoaXMub25CZWZvcmVTY2VuYXJpbyk7XHJcbiAgICAgICAgdGhpcy5jdWN1bWJlckV2ZW50TGlzdGVuZXIub24oJ3NjZW5hcmlvOmFmdGVyJywgdGhpcy5vbkFmdGVyU2NlbmFyaW8pO1xyXG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyLm9uKCdzdGVwOmJlZm9yZScsIHRoaXMub25CZWZvcmVTdGVwKTtcclxuICAgICAgICB0aGlzLmN1Y3VtYmVyRXZlbnRMaXN0ZW5lci5vbignc3RlcDphZnRlcicsIHRoaXMub25BZnRlclN0ZXApO1xyXG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyLm9uKCd0ZXN0OmVuZCcsIHRoaXMub25UZXN0RW5kKTtcclxuXHJcbiAgICAgICAgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLm9uKCdjb21tYW5kOmJlZm9yZScsIHRoaXMub25CZWZvcmVPeHlnZW5Db21tYW5kKTtcclxuICAgICAgICB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIub24oJ2NvbW1hbmQ6YWZ0ZXInLCB0aGlzLm9uQWZ0ZXJPeHlnZW5Db21tYW5kKTtcclxuICAgICAgICB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIub24oJ2xvZycsIHRoaXMub25PeHlnZW5Mb2cpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmVmb3JlT3h5Z2VuQ29tbWFuZChlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZnRlck94eWdlbkNvbW1hbmQoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwICYmIGUucmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5zdGVwcyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuc3RlcHMucHVzaChlLnJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uT3h5Z2VuTG9nKGxvZykge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDYXNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50Q2FzZS5sb2dzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYXNlLmxvZ3MgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYXNlLmxvZ3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aW1lOiBsb2cudGltZSxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwudG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBzcmM6IGxvZy5zcmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25Mb2dFbnRyeSAmJiB0eXBlb2YgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uTG9nRW50cnkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uTG9nRW50cnkobG9nLnRpbWUsIGxvZy5sZXZlbCwgbG9nLm1lc3NhZ2UsIGxvZy5zcmMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUZlYXR1cmUodXJpLCBmZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBgJHt1cml9OiR7ZmVhdHVyZS5sb2NhdGlvbi5saW5lfWA7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSB0aGlzLnN1aXRlc1tsb2NhdGlvbl0gPSBuZXcgVGVzdFN1aXRlUmVzdWx0KCk7XHJcbiAgICAgICAgc3VpdGVSZXN1bHQubmFtZSA9IGZlYXR1cmUubmFtZTtcclxuICAgICAgICBzdWl0ZVJlc3VsdC50YWdzID0gdGhpcy5zaW1wbGlmeUN1Y3VtYmVyVGFncyhmZWF0dXJlLnRhZ3MpO1xyXG4gICAgICAgIHN1aXRlUmVzdWx0LmxvY2F0aW9uID0gbG9jYXRpb247XHJcbiAgICAgICAgc3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG5cclxuICAgICAgICAvLyBjYWxsIHRlc3QgaG9vayBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlc3RIb29rcy5iZWZvcmVTdWl0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnRlc3RIb29rcy5iZWZvcmVTdWl0ZSh0aGlzLnJ1bm5lcklkLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNhbGwgcmVwb3J0IGdlbmVyYXRvclxyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZVN0YXJ0ICYmIHR5cGVvZiB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZVN0YXJ0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN1aXRlU3RhcnQodGhpcy5ydW5uZXJJZCwgdXJpLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBvbkFmdGVyRmVhdHVyZSh1cmksIGZlYXR1cmUpIHtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGAke3VyaX06JHtmZWF0dXJlLmxvY2F0aW9uLmxpbmV9YDtcclxuICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IHRoaXMuc3VpdGVzW2xvY2F0aW9uXTtcclxuICAgICAgICBpZiAoIXN1aXRlUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9kZWxldGUgdGhpcy5zdWl0ZXNbbG9jYXRpb25dXHJcbiAgICAgICAgc3VpdGVSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBzdWl0ZVJlc3VsdC5kdXJhdGlvbiA9IHN1aXRlUmVzdWx0LmVuZFRpbWUgLSBzdWl0ZVJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gdGhpcy5kZXRlcm1pbmVTdWl0ZVN0YXR1cyhzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgLy8gY2FsbCB0ZXN0IGhvb2sgaWYgZGVmaW5lZFxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXN0SG9va3MuYWZ0ZXJTdWl0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnRlc3RIb29rcy5hZnRlclN1aXRlKHRoaXMucnVubmVySWQsIHN1aXRlUmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2FsbCByZXBvcnQgZ2VuZXJhdG9yXHJcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN1aXRlRW5kICYmIHR5cGVvZiB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZUVuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZUVuZCh0aGlzLnJ1bm5lcklkLCB1cmksIHN1aXRlUmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25CZWZvcmVTY2VuYXJpbyh1cmksIGZlYXR1cmUsIHNjZW5hcmlvKSB7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVJZCA9IGAke3VyaX06JHtmZWF0dXJlLmxvY2F0aW9uLmxpbmV9YDtcclxuICAgICAgICBjb25zdCBjYXNlTG9jYXRpb24gPSBzY2VuYXJpby5sb2NhdGlvbnMubGVuZ3RoID4gMCA/IHNjZW5hcmlvLmxvY2F0aW9uc1swXSA6IHsgbGluZTogMSB9O1xyXG4gICAgICAgIGNvbnN0IGNhc2VJZCA9IGAke3VyaX06JHtjYXNlTG9jYXRpb24ubGluZX1gO1xyXG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbc3VpdGVJZF07XHJcbiAgICAgICAgY29uc3QgY2FzZXMgPSBzdWl0ZVJlc3VsdC5jYXNlcztcclxuICAgICAgICBjb25zdCBjYXNlUmVzdWx0ID0gdGhpcy5jdXJyZW50Q2FzZSA9IG5ldyBUZXN0Q2FzZVJlc3VsdCgpO1xyXG4gICAgICAgIGNhc2VSZXN1bHQubmFtZSA9IHNjZW5hcmlvLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC50YWdzID0gdGhpcy5zaW1wbGlmeUN1Y3VtYmVyVGFncyhzY2VuYXJpby50YWdzKTtcclxuICAgICAgICBjYXNlUmVzdWx0LmxvY2F0aW9uID0gY2FzZUlkO1xyXG4gICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIGNhc2VzLnB1c2goY2FzZVJlc3VsdCk7XHJcblxyXG4gICAgICAgIC8vIGNhbGwgb3h5Z2VuIG9uQmVmb3JlQ2FzZSBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIub25CZWZvcmVDYXNlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5vbkJlZm9yZUNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNhbGwgdGVzdCBob29rIGlmIGRlZmluZWRcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVzdEhvb2tzLmJlZm9yZUNhc2UgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXN0SG9va3MuYmVmb3JlQ2FzZSh0aGlzLnJ1bm5lcklkLCBzY2VuYXJpbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNhbGwgcmVwb3J0IGdlbmVyYXRvclxyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25DYXNlU3RhcnQgJiYgdHlwZW9mIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vbkNhc2VTdGFydCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25DYXNlU3RhcnQodGhpcy5ydW5uZXJJZCwgdXJpLCBjYXNlSWQsIHNjZW5hcmlvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25BZnRlclNjZW5hcmlvKHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8sIHNvdXJjZUxvY2F0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVJZCA9IGAke3VyaX06JHtmZWF0dXJlLmxvY2F0aW9uLmxpbmV9YDtcclxuICAgICAgICBjb25zdCBjYXNlSWQgPSBgJHt1cml9OiR7c291cmNlTG9jYXRpb24ubGluZX1gO1xyXG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbc3VpdGVJZF07XHJcbiAgICAgICAgY29uc3QgY2FzZXMgPSBzdWl0ZVJlc3VsdC5jYXNlcztcclxuICAgICAgICBjb25zdCBjYXNlUmVzdWx0ID0gY2FzZXMuZmluZCh4ID0+IHgubG9jYXRpb24gPT09IGNhc2VJZCk7XHJcbiAgICAgICAgaWYgKCFjYXNlUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIGNhc2VSZXN1bHQuZHVyYXRpb24gPSBjYXNlUmVzdWx0LmVuZFRpbWUgLSBjYXNlUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IHRoaXMuZGV0ZXJtaW5lQ2FzZVN0YXR1cyhjYXNlUmVzdWx0KTtcclxuICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIucmVzdWx0U3RvcmUgJiYgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLnJlc3VsdFN0b3JlLmxvZ3MgPyB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIucmVzdWx0U3RvcmUubG9ncyA6IFtdO1xyXG4gICAgICAgIGNhc2VSZXN1bHQuaGFyID0gdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLnJlc3VsdFN0b3JlICYmIHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5yZXN1bHRTdG9yZS5oYXIgPyB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIucmVzdWx0U3RvcmUuaGFyIDogbnVsbDtcclxuXHJcbiAgICAgICAgLy8gY2FsbCBveHlnZW4gb25BZnRlckNhc2UgaWYgZGVmaW5lZFxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLm9uQWZ0ZXJDYXNlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5vbkFmdGVyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2FsbCB0ZXN0IGhvb2sgaWYgZGVmaW5lZFxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXN0SG9va3MuYWZ0ZXJDYXNlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVzdEhvb2tzLmFmdGVyQ2FzZSh0aGlzLnJ1bm5lcklkLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2FsbCByZXBvcnQgZ2VuZXJhdG9yXHJcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vbkNhc2VFbmQgJiYgdHlwZW9mIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vbkNhc2VFbmQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uQ2FzZUVuZCh0aGlzLnJ1bm5lcklkLCB1cmksIGNhc2VJZCwgY2FzZVJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmVmb3JlU3RlcCh1cmksIGZlYXR1cmUsIHNjZW5hcmlvLCBzdGVwLCBzb3VyY2VMb2NhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSWQgPSBgJHt1cml9OiR7ZmVhdHVyZS5sb2NhdGlvbi5saW5lfWA7XHJcbiAgICAgICAgY29uc3QgY2FzZUlkID0gYCR7dXJpfToke3NvdXJjZUxvY2F0aW9uLmxpbmV9YDtcclxuICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IHRoaXMuc3VpdGVzW3N1aXRlSWRdO1xyXG4gICAgICAgIGNvbnN0IGNhc2VzID0gc3VpdGVSZXN1bHQuY2FzZXM7XHJcbiAgICAgICAgY29uc3QgY2FzZVJlc3VsdCA9IGNhc2VzLmZpbmQoeCA9PiB4LmxvY2F0aW9uID09PSBjYXNlSWQpO1xyXG4gICAgICAgIGNvbnN0IHN0ZXBSZXN1bHQgPSB0aGlzLmN1cnJlbnRTdGVwID0gbmV3IFRlc3RTdGVwUmVzdWx0KCk7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5zdGVwcy5wdXNoKHN0ZXBSZXN1bHQpO1xyXG5cclxuICAgICAgICBzdGVwUmVzdWx0Lm5hbWUgPSBzdGVwLnRleHQ7XHJcbiAgICAgICAgc3RlcFJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgc3RlcFJlc3VsdC5sb2NhdGlvbiA9IGAke3VyaX06JHtzdGVwLmxvY2F0aW9uLmxpbmV9YDtcclxuICAgICAgICAvLyBjYWxsIHRlc3QgaG9vayBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlc3RIb29rcy5iZWZvcmVTdGVwID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVzdEhvb2tzLmJlZm9yZVN0ZXAodGhpcy5ydW5uZXJJZCwgc3RlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNhbGwgcmVwb3J0IGdlbmVyYXRvclxyXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdGVwU3RhcnQgJiYgdHlwZW9mIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN0ZXBTdGFydCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdGVwU3RhcnQodGhpcy5ydW5uZXJJZCwgc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTdGVwKHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8sIHN0ZXAsIHJlc3VsdCwgc291cmNlTG9jYXRpb24pIHtcclxuICAgICAgICBjb25zdCBzdWl0ZUlkID0gYCR7dXJpfToke2ZlYXR1cmUubG9jYXRpb24ubGluZX1gO1xyXG4gICAgICAgIGNvbnN0IGNhc2VJZCA9IGAke3VyaX06JHtzb3VyY2VMb2NhdGlvbi5saW5lfWA7XHJcbiAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSB0aGlzLnN1aXRlc1tzdWl0ZUlkXTtcclxuICAgICAgICBjb25zdCBjYXNlcyA9IHN1aXRlUmVzdWx0LmNhc2VzO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBjYXNlcy5maW5kKHggPT4geC5sb2NhdGlvbiA9PT0gY2FzZUlkKTtcclxuICAgICAgICBjb25zdCBzdGVwTG9jYXRpb24gPSBgJHt1cml9OiR7c3RlcC5sb2NhdGlvbi5saW5lfWA7XHJcbiAgICAgICAgY29uc3Qgc3RlcFJlc3VsdCA9IGNhc2VSZXN1bHQuc3RlcHMuZmluZCh4ID0+IHgubG9jYXRpb24gPT09IHN0ZXBMb2NhdGlvbik7XHJcblxyXG4gICAgICAgIHN0ZXBSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBzdGVwUmVzdWx0LmR1cmF0aW9uID0gc3RlcFJlc3VsdC5lbmRUaW1lIC0gc3RlcFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgc3RlcFJlc3VsdC5zdGF0dXMgPSByZXN1bHQuc3RhdHVzO1xyXG4gICAgICAgIC8vIGdldCBmYWlsdXJlIGRldGFpbHMgaWYgZXJyb3Igd2FzIHRocm93biBpbiB0aGUgc3RlcFxyXG4gICAgICAgIGlmIChyZXN1bHQuZXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IocmVzdWx0LmV4Y2VwdGlvbik7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwICYmIHRoaXMuY3VycmVudFN0ZXAubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBSZXN1bHQuZmFpbHVyZS5jdWN1bWJlckxvY2F0aW9uID0gdGhpcy5jdXJyZW50U3RlcC5sb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjYWxsIHRlc3QgaG9vayBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlc3RIb29rcy5hZnRlclN0ZXAgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXN0SG9va3MuYWZ0ZXJTdGVwKHRoaXMucnVubmVySWQsIHN0ZXBSZXN1bHQsIHJlc3VsdC5leGNlcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjYWxsIHJlcG9ydCBnZW5lcmF0b3JcclxuICAgICAgICBpZiAodGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uU3RlcEVuZCAmJiB0eXBlb2YgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uU3RlcEVuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdGVwRW5kKHRoaXMucnVubmVySWQsIHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblRlc3RFbmQocmVzdWx0KSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRldGVybWluZUNhc2VTdGF0dXMoY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN0ZXAgPSBjYXNlUmVzdWx0LnN0ZXBzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgaWYgKGhhc0ZhaWxlZFN0ZXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGVybWluZVN1aXRlU3RhdHVzKHN1aXRlUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkQ2FzZSA9IHN1aXRlUmVzdWx0LmNhc2VzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgaWYgKGhhc0ZhaWxlZENhc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJlbW92ZXMgYWxsIHVubmVjZXNzYXJ5IG1ldGFkYXRhIGZyb20gQ3VjdW1iZXIgdGFncywgcmV0dXJuaW5nIGEgc2ltcGxlIGFycmF5IG9mIHRhZyBuYW1lc1xyXG4gICAgc2ltcGxpZnlDdWN1bWJlclRhZ3ModGFncykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0YWdzKSB8fCB0YWdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0YWdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaW1wbGVUYWdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIHRhZ3MpIHtcclxuICAgICAgICAgICAgc2ltcGxlVGFncy5wdXNoKHRhZy5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNpbXBsZVRhZ3M7XHJcbiAgICB9XHJcbn0iXX0=
277
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL2N1Y3VtYmVyL0N1Y3VtYmVyUmVwb3J0ZXIuanMiXSwibmFtZXMiOlsiQ3VjdW1iZXJSZXBvcnRlciIsImNvbnN0cnVjdG9yIiwicnVubmVySWQiLCJvcHRpb25zIiwiY3VjdW1iZXJFdmVudExpc3RlbmVyIiwib3h5Z2VuRXZlbnRMaXN0ZW5lciIsInJlcG9ydERpc3BhdGNoZXIiLCJ0ZXN0SG9va3MiLCJzdWl0ZXMiLCJjdXJyZW50U3RlcCIsImN1cnJlbnRDYXNlIiwib25CZWZvcmVGZWF0dXJlIiwiYmluZCIsIm9uQWZ0ZXJGZWF0dXJlIiwib25CZWZvcmVTY2VuYXJpbyIsIm9uQWZ0ZXJTY2VuYXJpbyIsIm9uQmVmb3JlU3RlcCIsIm9uQWZ0ZXJTdGVwIiwib25UZXN0RW5kIiwib25CZWZvcmVPeHlnZW5Db21tYW5kIiwib25BZnRlck94eWdlbkNvbW1hbmQiLCJvbk94eWdlbkxvZyIsImhvb2tFdmVudHMiLCJvbiIsImUiLCJyZXN1bHQiLCJzdGVwcyIsInB1c2giLCJsb2ciLCJsb2dzIiwidGltZSIsImxldmVsIiwidG9VcHBlckNhc2UiLCJtc2ciLCJtZXNzYWdlIiwic3JjIiwib25Mb2dFbnRyeSIsInVyaSIsImZlYXR1cmUiLCJsb2NhdGlvbiIsImxpbmUiLCJzdWl0ZVJlc3VsdCIsIlRlc3RTdWl0ZVJlc3VsdCIsIm5hbWUiLCJ0YWdzIiwic2ltcGxpZnlDdWN1bWJlclRhZ3MiLCJzdGFydFRpbWUiLCJveHV0aWwiLCJnZXRUaW1lU3RhbXAiLCJiZWZvcmVTdWl0ZSIsIm9uU3VpdGVTdGFydCIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInN0YXR1cyIsImRldGVybWluZVN1aXRlU3RhdHVzIiwiYWZ0ZXJTdWl0ZSIsIm9uU3VpdGVFbmQiLCJzY2VuYXJpbyIsInN1aXRlSWQiLCJjYXNlTG9jYXRpb24iLCJsb2NhdGlvbnMiLCJsZW5ndGgiLCJjYXNlSWQiLCJjYXNlcyIsImNhc2VSZXN1bHQiLCJUZXN0Q2FzZVJlc3VsdCIsIm9uQmVmb3JlQ2FzZSIsImJlZm9yZUNhc2UiLCJvbkNhc2VTdGFydCIsInNvdXJjZUxvY2F0aW9uIiwiZmluZCIsIngiLCJkZXRlcm1pbmVDYXNlU3RhdHVzIiwicmVzdWx0U3RvcmUiLCJoYXIiLCJvbkFmdGVyQ2FzZSIsImFmdGVyQ2FzZSIsIm9uQ2FzZUVuZCIsInN0ZXAiLCJzdGVwUmVzdWx0IiwiVGVzdFN0ZXBSZXN1bHQiLCJ0ZXh0IiwiYmVmb3JlU3RlcCIsIm9uU3RlcFN0YXJ0Iiwic3RlcExvY2F0aW9uIiwiZXhjZXB0aW9uIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsImN1Y3VtYmVyTG9jYXRpb24iLCJhZnRlclN0ZXAiLCJvblN0ZXBFbmQiLCJoYXNGYWlsZWRTdGVwIiwic29tZSIsIlN0YXR1cyIsIkZBSUxFRCIsIlBBU1NFRCIsImhhc0ZhaWxlZENhc2UiLCJBcnJheSIsImlzQXJyYXkiLCJzaW1wbGVUYWdzIiwidGFnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVlLE1BQU1BLGdCQUFOLENBQXVCO0FBQ2xDQyxFQUFBQSxXQUFXLENBQUNDLFFBQUQsRUFBV0MsT0FBWCxFQUFvQkMscUJBQXBCLEVBQTJDQyxtQkFBM0MsRUFBZ0VDLGdCQUFoRSxFQUFrRkMsU0FBbEYsRUFBNkY7QUFDcEcsU0FBS0wsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLTSxNQUFMLEdBQWMsRUFBZDtBQUNBLFNBQUtDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsU0FBS04scUJBQUwsR0FBNkJBLHFCQUE3QjtBQUNBLFNBQUtDLG1CQUFMLEdBQTJCQSxtQkFBM0I7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QkEsZ0JBQXhCO0FBQ0EsU0FBS0gsT0FBTCxHQUFlQSxPQUFmO0FBRUEsU0FBS1EsZUFBTCxHQUF1QixLQUFLQSxlQUFMLENB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eEQsV0FBVyxDQUFDc0IsS0FBWixDQUFrQjhCLElBQWxCLENBQXVCdEIsQ0FBQyxJQUFJQSxDQUFDLENBQUNsQixNQUFGLEtBQWF5QyxnQkFBT0MsTUFBaEQsQ0FBdEI7O0FBQ0EsUUFBSUUsYUFBSixFQUFtQjtBQUNmLGFBQU9ILGdCQUFPQyxNQUFkO0FBQ0g7O0FBQ0QsV0FBT0QsZ0JBQU9FLE1BQWQ7QUFDSDs7QUFHRG5ELEVBQUFBLG9CQUFvQixDQUFDRCxJQUFELEVBQU87QUFDdkIsUUFBSSxDQUFDc0QsS0FBSyxDQUFDQyxPQUFOLENBQWN2RCxJQUFkLENBQUQsSUFBd0JBLElBQUksQ0FBQ2lCLE1BQUwsSUFBZSxDQUEzQyxFQUE4QztBQUMxQyxhQUFPakIsSUFBUDtBQUNIOztBQUNELFVBQU13RCxVQUFVLEdBQUcsRUFBbkI7O0FBQ0EsU0FBSyxJQUFJQyxHQUFULElBQWdCekQsSUFBaEIsRUFBc0I7QUFDbEJ3RCxNQUFBQSxVQUFVLENBQUN6RSxJQUFYLENBQWdCMEUsR0FBRyxDQUFDMUQsSUFBcEI7QUFDSDs7QUFDRCxXQUFPeUQsVUFBUDtBQUNIOztBQXhQaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVGVzdFN1aXRlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3N1aXRlLXJlc3VsdCc7XG5pbXBvcnQgVGVzdENhc2VSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvY2FzZS1yZXN1bHQnO1xuaW1wb3J0IFRlc3RTdGVwUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3N0ZXAtcmVzdWx0JztcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vLi4vbW9kZWwvc3RhdHVzJztcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vLi4vbGliL3V0aWwnO1xuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uLy4uL2Vycm9ycy9oZWxwZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDdWN1bWJlclJlcG9ydGVyIHtcbiAgICBjb25zdHJ1Y3RvcihydW5uZXJJZCwgb3B0aW9ucywgY3VjdW1iZXJFdmVudExpc3RlbmVyLCBveHlnZW5FdmVudExpc3RlbmVyLCByZXBvcnREaXNwYXRjaGVyLCB0ZXN0SG9va3MpIHtcbiAgICAgICAgdGhpcy5ydW5uZXJJZCA9IHJ1bm5lcklkO1xuICAgICAgICB0aGlzLnN1aXRlcyA9IHt9O1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FzZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyID0gY3VjdW1iZXJFdmVudExpc3RlbmVyO1xuICAgICAgICB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIgPSBveHlnZW5FdmVudExpc3RlbmVyO1xuICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIgPSByZXBvcnREaXNwYXRjaGVyO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMub25CZWZvcmVGZWF0dXJlID0gdGhpcy5vbkJlZm9yZUZlYXR1cmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkFmdGVyRmVhdHVyZSA9IHRoaXMub25BZnRlckZlYXR1cmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkJlZm9yZVNjZW5hcmlvID0gdGhpcy5vbkJlZm9yZVNjZW5hcmlvLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25BZnRlclNjZW5hcmlvID0gdGhpcy5vbkFmdGVyU2NlbmFyaW8uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkJlZm9yZVN0ZXAgPSB0aGlzLm9uQmVmb3JlU3RlcC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQWZ0ZXJTdGVwID0gdGhpcy5vbkFmdGVyU3RlcC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uVGVzdEVuZCA9IHRoaXMub25UZXN0RW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25CZWZvcmVPeHlnZW5Db21tYW5kID0gdGhpcy5vbkJlZm9yZU94eWdlbkNvbW1hbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkFmdGVyT3h5Z2VuQ29tbWFuZCA9IHRoaXMub25BZnRlck94eWdlbkNvbW1hbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbk94eWdlbkxvZyA9IHRoaXMub25PeHlnZW5Mb2cuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnRlc3RIb29rcyA9IHRlc3RIb29rcztcblxuICAgICAgICB0aGlzLmhvb2tFdmVudHMoKTtcbiAgICB9XG5cbiAgICBob29rRXZlbnRzKCkge1xuICAgICAgICB0aGlzLmN1Y3VtYmVyRXZlbnRMaXN0ZW5lci5vbignZmVhdHVyZTpiZWZvcmUnLCB0aGlzLm9uQmVmb3JlRmVhdHVyZSk7XG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyLm9uKCdmZWF0dXJlOmFmdGVyJywgdGhpcy5vbkFmdGVyRmVhdHVyZSk7XG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyLm9uKCdzY2VuYXJpbzpiZWZvcmUnLCB0aGlzLm9uQmVmb3JlU2NlbmFyaW8pO1xuICAgICAgICB0aGlzLmN1Y3VtYmVyRXZlbnRMaXN0ZW5lci5vbignc2NlbmFyaW86YWZ0ZXInLCB0aGlzLm9uQWZ0ZXJTY2VuYXJpbyk7XG4gICAgICAgIHRoaXMuY3VjdW1iZXJFdmVudExpc3RlbmVyLm9uKCdzdGVwOmJlZm9yZScsIHRoaXMub25CZWZvcmVTdGVwKTtcbiAgICAgICAgdGhpcy5jdWN1bWJlckV2ZW50TGlzdGVuZXIub24oJ3N0ZXA6YWZ0ZXInLCB0aGlzLm9uQWZ0ZXJTdGVwKTtcbiAgICAgICAgdGhpcy5jdWN1bWJlckV2ZW50TGlzdGVuZXIub24oJ3Rlc3Q6ZW5kJywgdGhpcy5vblRlc3RFbmQpO1xuXG4gICAgICAgIHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5vbignY29tbWFuZDpiZWZvcmUnLCB0aGlzLm9uQmVmb3JlT3h5Z2VuQ29tbWFuZCk7XG4gICAgICAgIHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5vbignY29tbWFuZDphZnRlcicsIHRoaXMub25BZnRlck94eWdlbkNvbW1hbmQpO1xuICAgICAgICB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIub24oJ2xvZycsIHRoaXMub25PeHlnZW5Mb2cpO1xuICAgIH1cblxuICAgIG9uQmVmb3JlT3h5Z2VuQ29tbWFuZChlKSB7XG4gICAgfVxuXG4gICAgb25BZnRlck94eWdlbkNvbW1hbmQoZSkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiBlLnJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwLnN0ZXBzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5zdGVwcyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5zdGVwcy5wdXNoKGUucmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3h5Z2VuTG9nKGxvZykge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2FzZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDYXNlLmxvZ3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYXNlLmxvZ3MgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhc2UubG9ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0aW1lOiBsb2cudGltZSxcbiAgICAgICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcbiAgICAgICAgICAgICAgICBzcmM6IGxvZy5zcmNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25Mb2dFbnRyeSAmJiB0eXBlb2YgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uTG9nRW50cnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vbkxvZ0VudHJ5KGxvZy50aW1lLCBsb2cubGV2ZWwsIGxvZy5tZXNzYWdlLCBsb2cuc3JjKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmVmb3JlRmVhdHVyZSh1cmksIGZlYXR1cmUpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBgJHt1cml9OiR7ZmVhdHVyZS5sb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbbG9jYXRpb25dID0gbmV3IFRlc3RTdWl0ZVJlc3VsdCgpO1xuICAgICAgICBzdWl0ZVJlc3VsdC5uYW1lID0gZmVhdHVyZS5uYW1lO1xuICAgICAgICBzdWl0ZVJlc3VsdC50YWdzID0gdGhpcy5zaW1wbGlmeUN1Y3VtYmVyVGFncyhmZWF0dXJlLnRhZ3MpO1xuICAgICAgICBzdWl0ZVJlc3VsdC5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICBzdWl0ZVJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG5cbiAgICAgICAgLy8gY2FsbCB0ZXN0IGhvb2sgaWYgZGVmaW5lZFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVzdEhvb2tzLmJlZm9yZVN1aXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnRlc3RIb29rcy5iZWZvcmVTdWl0ZSh0aGlzLnJ1bm5lcklkLCBzdWl0ZVJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsbCByZXBvcnQgZ2VuZXJhdG9yXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZVN0YXJ0ICYmIHR5cGVvZiB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZVN0YXJ0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZVN0YXJ0KHRoaXMucnVubmVySWQsIHVyaSwgc3VpdGVSZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBvbkFmdGVyRmVhdHVyZSh1cmksIGZlYXR1cmUpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBgJHt1cml9OiR7ZmVhdHVyZS5sb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbbG9jYXRpb25dO1xuICAgICAgICBpZiAoIXN1aXRlUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWxldGUgdGhpcy5zdWl0ZXNbbG9jYXRpb25dXG4gICAgICAgIHN1aXRlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgIHN1aXRlUmVzdWx0LmR1cmF0aW9uID0gc3VpdGVSZXN1bHQuZW5kVGltZSAtIHN1aXRlUmVzdWx0LnN0YXJ0VGltZTtcbiAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gdGhpcy5kZXRlcm1pbmVTdWl0ZVN0YXR1cyhzdWl0ZVJlc3VsdCk7XG4gICAgICAgIC8vIGNhbGwgdGVzdCBob29rIGlmIGRlZmluZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlc3RIb29rcy5hZnRlclN1aXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnRlc3RIb29rcy5hZnRlclN1aXRlKHRoaXMucnVubmVySWQsIHN1aXRlUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIHJlcG9ydCBnZW5lcmF0b3JcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN1aXRlRW5kICYmIHR5cGVvZiB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdWl0ZUVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uU3VpdGVFbmQodGhpcy5ydW5uZXJJZCwgdXJpLCBzdWl0ZVJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkJlZm9yZVNjZW5hcmlvKHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8pIHtcbiAgICAgICAgY29uc3Qgc3VpdGVJZCA9IGAke3VyaX06JHtmZWF0dXJlLmxvY2F0aW9uLmxpbmV9YDtcbiAgICAgICAgY29uc3QgY2FzZUxvY2F0aW9uID0gc2NlbmFyaW8ubG9jYXRpb25zLmxlbmd0aCA+IDAgPyBzY2VuYXJpby5sb2NhdGlvbnNbMF0gOiB7IGxpbmU6IDEgfTtcbiAgICAgICAgY29uc3QgY2FzZUlkID0gYCR7dXJpfToke2Nhc2VMb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbc3VpdGVJZF07XG4gICAgICAgIGNvbnN0IGNhc2VzID0gc3VpdGVSZXN1bHQuY2FzZXM7XG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSB0aGlzLmN1cnJlbnRDYXNlID0gbmV3IFRlc3RDYXNlUmVzdWx0KCk7XG4gICAgICAgIGNhc2VSZXN1bHQubmFtZSA9IHNjZW5hcmlvLm5hbWU7XG4gICAgICAgIGNhc2VSZXN1bHQudGFncyA9IHRoaXMuc2ltcGxpZnlDdWN1bWJlclRhZ3Moc2NlbmFyaW8udGFncyk7XG4gICAgICAgIGNhc2VSZXN1bHQubG9jYXRpb24gPSBjYXNlSWQ7XG4gICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICBjYXNlcy5wdXNoKGNhc2VSZXN1bHQpO1xuXG4gICAgICAgIC8vIGNhbGwgb3h5Z2VuIG9uQmVmb3JlQ2FzZSBpZiBkZWZpbmVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLm9uQmVmb3JlQ2FzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLm9uQmVmb3JlQ2FzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2FsbCB0ZXN0IGhvb2sgaWYgZGVmaW5lZFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGVzdEhvb2tzLmJlZm9yZUNhc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMudGVzdEhvb2tzLmJlZm9yZUNhc2UodGhpcy5ydW5uZXJJZCwgc2NlbmFyaW8pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgcmVwb3J0IGdlbmVyYXRvclxuICAgICAgICBpZiAodGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uQ2FzZVN0YXJ0ICYmIHR5cGVvZiB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25DYXNlU3RhcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vbkNhc2VTdGFydCh0aGlzLnJ1bm5lcklkLCB1cmksIGNhc2VJZCwgc2NlbmFyaW8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25BZnRlclNjZW5hcmlvKHVyaSwgZmVhdHVyZSwgc2NlbmFyaW8sIHNvdXJjZUxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN1aXRlSWQgPSBgJHt1cml9OiR7ZmVhdHVyZS5sb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IGNhc2VJZCA9IGAke3VyaX06JHtzb3VyY2VMb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbc3VpdGVJZF07XG4gICAgICAgIGNvbnN0IGNhc2VzID0gc3VpdGVSZXN1bHQuY2FzZXM7XG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBjYXNlcy5maW5kKHggPT4geC5sb2NhdGlvbiA9PT0gY2FzZUlkKTtcbiAgICAgICAgaWYgKCFjYXNlUmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gY2FzZVJlc3VsdC5lbmRUaW1lIC0gY2FzZVJlc3VsdC5zdGFydFRpbWU7XG4gICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gdGhpcy5kZXRlcm1pbmVDYXNlU3RhdHVzKGNhc2VSZXN1bHQpO1xuICAgICAgICBjYXNlUmVzdWx0LmxvZ3MgPSB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIucmVzdWx0U3RvcmUgJiYgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLnJlc3VsdFN0b3JlLmxvZ3MgPyB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIucmVzdWx0U3RvcmUubG9ncyA6IFtdO1xuICAgICAgICBjYXNlUmVzdWx0LmhhciA9IHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5yZXN1bHRTdG9yZSAmJiB0aGlzLm94eWdlbkV2ZW50TGlzdGVuZXIucmVzdWx0U3RvcmUuaGFyID8gdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLnJlc3VsdFN0b3JlLmhhciA6IG51bGw7XG5cbiAgICAgICAgLy8gY2FsbCBveHlnZW4gb25BZnRlckNhc2UgaWYgZGVmaW5lZFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3h5Z2VuRXZlbnRMaXN0ZW5lci5vbkFmdGVyQ2FzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5veHlnZW5FdmVudExpc3RlbmVyLm9uQWZ0ZXJDYXNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjYWxsIHRlc3QgaG9vayBpZiBkZWZpbmVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXN0SG9va3MuYWZ0ZXJDYXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnRlc3RIb29rcy5hZnRlckNhc2UodGhpcy5ydW5uZXJJZCwgY2FzZVJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FsbCByZXBvcnQgZ2VuZXJhdG9yXG4gICAgICAgIGlmICh0aGlzLnJlcG9ydERpc3BhdGNoZXIub25DYXNlRW5kICYmIHR5cGVvZiB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25DYXNlRW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25DYXNlRW5kKHRoaXMucnVubmVySWQsIHVyaSwgY2FzZUlkLCBjYXNlUmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmVmb3JlU3RlcCh1cmksIGZlYXR1cmUsIHNjZW5hcmlvLCBzdGVwLCBzb3VyY2VMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBzdWl0ZUlkID0gYCR7dXJpfToke2ZlYXR1cmUubG9jYXRpb24ubGluZX1gO1xuICAgICAgICBjb25zdCBjYXNlSWQgPSBgJHt1cml9OiR7c291cmNlTG9jYXRpb24ubGluZX1gO1xuICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IHRoaXMuc3VpdGVzW3N1aXRlSWRdO1xuICAgICAgICBjb25zdCBjYXNlcyA9IHN1aXRlUmVzdWx0LmNhc2VzO1xuICAgICAgICBjb25zdCBjYXNlUmVzdWx0ID0gY2FzZXMuZmluZCh4ID0+IHgubG9jYXRpb24gPT09IGNhc2VJZCk7XG4gICAgICAgIGNvbnN0IHN0ZXBSZXN1bHQgPSB0aGlzLmN1cnJlbnRTdGVwID0gbmV3IFRlc3RTdGVwUmVzdWx0KCk7XG4gICAgICAgIGNhc2VSZXN1bHQuc3RlcHMucHVzaChzdGVwUmVzdWx0KTtcblxuICAgICAgICBzdGVwUmVzdWx0Lm5hbWUgPSBzdGVwLnRleHQ7XG4gICAgICAgIHN0ZXBSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICBzdGVwUmVzdWx0LmxvY2F0aW9uID0gYCR7dXJpfToke3N0ZXAubG9jYXRpb24ubGluZX1gO1xuICAgICAgICAvLyBjYWxsIHRlc3QgaG9vayBpZiBkZWZpbmVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50ZXN0SG9va3MuYmVmb3JlU3RlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy50ZXN0SG9va3MuYmVmb3JlU3RlcCh0aGlzLnJ1bm5lcklkLCBzdGVwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIHJlcG9ydCBnZW5lcmF0b3JcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN0ZXBTdGFydCAmJiB0eXBlb2YgdGhpcy5yZXBvcnREaXNwYXRjaGVyLm9uU3RlcFN0YXJ0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydERpc3BhdGNoZXIub25TdGVwU3RhcnQodGhpcy5ydW5uZXJJZCwgc3RlcFJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFmdGVyU3RlcCh1cmksIGZlYXR1cmUsIHNjZW5hcmlvLCBzdGVwLCByZXN1bHQsIHNvdXJjZUxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN1aXRlSWQgPSBgJHt1cml9OiR7ZmVhdHVyZS5sb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IGNhc2VJZCA9IGAke3VyaX06JHtzb3VyY2VMb2NhdGlvbi5saW5lfWA7XG4gICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gdGhpcy5zdWl0ZXNbc3VpdGVJZF07XG4gICAgICAgIGNvbnN0IGNhc2VzID0gc3VpdGVSZXN1bHQuY2FzZXM7XG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBjYXNlcy5maW5kKHggPT4geC5sb2NhdGlvbiA9PT0gY2FzZUlkKTtcbiAgICAgICAgY29uc3Qgc3RlcExvY2F0aW9uID0gYCR7dXJpfToke3N0ZXAubG9jYXRpb24ubGluZX1gO1xuICAgICAgICBjb25zdCBzdGVwUmVzdWx0ID0gY2FzZVJlc3VsdC5zdGVwcy5maW5kKHggPT4geC5sb2NhdGlvbiA9PT0gc3RlcExvY2F0aW9uKTtcblxuICAgICAgICBzdGVwUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgIHN0ZXBSZXN1bHQuZHVyYXRpb24gPSBzdGVwUmVzdWx0LmVuZFRpbWUgLSBzdGVwUmVzdWx0LnN0YXJ0VGltZTtcbiAgICAgICAgc3RlcFJlc3VsdC5zdGF0dXMgPSByZXN1bHQuc3RhdHVzO1xuICAgICAgICAvLyBnZXQgZmFpbHVyZSBkZXRhaWxzIGlmIGVycm9yIHdhcyB0aHJvd24gaW4gdGhlIHN0ZXBcbiAgICAgICAgaWYgKHJlc3VsdC5leGNlcHRpb24pIHtcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IocmVzdWx0LmV4Y2VwdGlvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiB0aGlzLmN1cnJlbnRTdGVwLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgc3RlcFJlc3VsdC5mYWlsdXJlLmN1Y3VtYmVyTG9jYXRpb24gPSB0aGlzLmN1cnJlbnRTdGVwLmxvY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgdGVzdCBob29rIGlmIGRlZmluZWRcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRlc3RIb29rcy5hZnRlclN0ZXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMudGVzdEhvb2tzLmFmdGVyU3RlcCh0aGlzLnJ1bm5lcklkLCBzdGVwUmVzdWx0LCByZXN1bHQuZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIHJlcG9ydCBnZW5lcmF0b3JcbiAgICAgICAgaWYgKHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN0ZXBFbmQgJiYgdHlwZW9mIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN0ZXBFbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucmVwb3J0RGlzcGF0Y2hlci5vblN0ZXBFbmQodGhpcy5ydW5uZXJJZCwgc3RlcFJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRlc3RFbmQocmVzdWx0KSB7XG5cbiAgICB9XG5cbiAgICBkZXRlcm1pbmVDYXNlU3RhdHVzKGNhc2VSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkU3RlcCA9IGNhc2VSZXN1bHQuc3RlcHMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcbiAgICAgICAgaWYgKGhhc0ZhaWxlZFN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xuICAgIH1cblxuICAgIGRldGVybWluZVN1aXRlU3RhdHVzKHN1aXRlUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZENhc2UgPSBzdWl0ZVJlc3VsdC5jYXNlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xuICAgICAgICBpZiAoaGFzRmFpbGVkQ2FzZSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0YXR1cy5QQVNTRUQ7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlcyBhbGwgdW5uZWNlc3NhcnkgbWV0YWRhdGEgZnJvbSBDdWN1bWJlciB0YWdzLCByZXR1cm5pbmcgYSBzaW1wbGUgYXJyYXkgb2YgdGFnIG5hbWVzXG4gICAgc2ltcGxpZnlDdWN1bWJlclRhZ3ModGFncykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFncykgfHwgdGFncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2ltcGxlVGFncyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0YWcgb2YgdGFncykge1xuICAgICAgICAgICAgc2ltcGxlVGFncy5wdXNoKHRhZy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2ltcGxlVGFncztcbiAgICB9XG59Il19