oxygen-cli 1.40.2-beta.1 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/CHANGELOG.md +1755 -1742
  2. package/LICENSE +672 -672
  3. package/README.md +37 -37
  4. package/build/core/OxygenCore.js +1 -1
  5. package/build/core/OxygenEvents.js +1 -1
  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 +1 -1
  19. package/build/lib/cli.js +1 -1
  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 +1 -1
  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 +1 -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-mongo.js +82 -82
  126. package/build/ox_modules/module-pdf.js +35 -35
  127. package/build/ox_modules/module-proxy.js +77 -77
  128. package/build/ox_modules/module-serial.js +55 -55
  129. package/build/ox_modules/module-shell.js +52 -33
  130. package/build/ox_modules/module-soap.js +72 -72
  131. package/build/ox_modules/module-twilio.js +41 -41
  132. package/build/ox_modules/module-utils.js +91 -91
  133. package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
  134. package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
  135. package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
  136. package/build/ox_modules/module-web/commands/assertExist.js +17 -17
  137. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
  138. package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
  139. package/build/ox_modules/module-web/commands/assertText.js +21 -21
  140. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
  141. package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
  142. package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
  143. package/build/ox_modules/module-web/commands/assertValue.js +20 -20
  144. package/build/ox_modules/module-web/commands/back.js +16 -16
  145. package/build/ox_modules/module-web/commands/clear.js +18 -18
  146. package/build/ox_modules/module-web/commands/click.js +25 -25
  147. package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
  148. package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
  149. package/build/ox_modules/module-web/commands/debug.js +15 -15
  150. package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
  151. package/build/ox_modules/module-web/commands/deselect.js +22 -22
  152. package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
  153. package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
  154. package/build/ox_modules/module-web/commands/execute.js +24 -24
  155. package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
  156. package/build/ox_modules/module-web/commands/findElement.js +19 -19
  157. package/build/ox_modules/module-web/commands/findElements.js +22 -22
  158. package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
  159. package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
  160. package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
  161. package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
  162. package/build/ox_modules/module-web/commands/getCookies.js +13 -13
  163. package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
  164. package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
  165. package/build/ox_modules/module-web/commands/getHTML.js +17 -17
  166. package/build/ox_modules/module-web/commands/getSource.js +16 -16
  167. package/build/ox_modules/module-web/commands/getText.js +18 -18
  168. package/build/ox_modules/module-web/commands/getTitle.js +12 -12
  169. package/build/ox_modules/module-web/commands/getUrl.js +16 -16
  170. package/build/ox_modules/module-web/commands/getValue.js +18 -18
  171. package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
  172. package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
  173. package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
  174. package/build/ox_modules/module-web/commands/index.js +1 -1
  175. package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
  176. package/build/ox_modules/module-web/commands/isChecked.js +18 -18
  177. package/build/ox_modules/module-web/commands/isExist.js +19 -19
  178. package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
  179. package/build/ox_modules/module-web/commands/isSelected.js +23 -23
  180. package/build/ox_modules/module-web/commands/isVisible.js +19 -19
  181. package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
  182. package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
  183. package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
  184. package/build/ox_modules/module-web/commands/mock.js +20 -20
  185. package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
  186. package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
  187. package/build/ox_modules/module-web/commands/newWindow.js +16 -16
  188. package/build/ox_modules/module-web/commands/open.js +16 -16
  189. package/build/ox_modules/module-web/commands/pause.js +15 -15
  190. package/build/ox_modules/module-web/commands/point.js +21 -21
  191. package/build/ox_modules/module-web/commands/pointJS.js +15 -15
  192. package/build/ox_modules/module-web/commands/refresh.js +15 -15
  193. package/build/ox_modules/module-web/commands/rightClick.js +17 -17
  194. package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
  195. package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
  196. package/build/ox_modules/module-web/commands/select.js +23 -23
  197. package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
  198. package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
  199. package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
  200. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
  201. package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
  202. package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
  203. package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
  204. package/build/ox_modules/module-web/commands/type.js +20 -20
  205. package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
  206. package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
  207. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
  208. package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
  209. package/build/ox_modules/module-web/commands/verifyText.js +21 -21
  210. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
  211. package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
  212. package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
  213. package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
  214. package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
  215. package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
  216. package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
  217. package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
  218. package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
  219. package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
  220. package/build/ox_modules/module-web/commands/waitForText.js +20 -20
  221. package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
  222. package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
  223. package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
  224. package/build/ox_modules/module-web.js +94 -94
  225. package/build/ox_modules/module-win/commands/assertText.js +17 -17
  226. package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
  227. package/build/ox_modules/module-win/commands/assertValue.js +14 -14
  228. package/build/ox_modules/module-win/commands/back.js +11 -11
  229. package/build/ox_modules/module-win/commands/clear.js +13 -13
  230. package/build/ox_modules/module-win/commands/click.js +13 -13
  231. package/build/ox_modules/module-win/commands/clickLong.js +14 -14
  232. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
  233. package/build/ox_modules/module-win/commands/findElement.js +15 -15
  234. package/build/ox_modules/module-win/commands/findElements.js +15 -15
  235. package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
  236. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
  237. package/build/ox_modules/module-win/commands/getLocation.js +14 -14
  238. package/build/ox_modules/module-win/commands/getSource.js +12 -12
  239. package/build/ox_modules/module-win/commands/getText.js +14 -14
  240. package/build/ox_modules/module-win/commands/getValue.js +14 -14
  241. package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
  242. package/build/ox_modules/module-win/commands/index.js +1 -1
  243. package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
  244. package/build/ox_modules/module-win/commands/isChecked.js +14 -14
  245. package/build/ox_modules/module-win/commands/isClickable.js +14 -14
  246. package/build/ox_modules/module-win/commands/isExist.js +15 -15
  247. package/build/ox_modules/module-win/commands/isSelected.js +14 -14
  248. package/build/ox_modules/module-win/commands/isVisible.js +15 -15
  249. package/build/ox_modules/module-win/commands/open.js +13 -13
  250. package/build/ox_modules/module-win/commands/pause.js +12 -12
  251. package/build/ox_modules/module-win/commands/rightClick.js +13 -13
  252. package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
  253. package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
  254. package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
  255. package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
  256. package/build/ox_modules/module-win/commands/tap.js +13 -13
  257. package/build/ox_modules/module-win/commands/type.js +16 -16
  258. package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
  259. package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
  260. package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
  261. package/build/ox_modules/module-win.js +47 -47
  262. package/build/ox_modules/utils.js +8 -8
  263. package/build/ox_reporters/excel/template.json +48 -48
  264. package/build/ox_reporters/html/index.ejs +163 -163
  265. package/build/ox_reporters/html/summary.ejs +77 -77
  266. package/build/ox_reporters/html/tests-details.ejs +134 -134
  267. package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
  268. package/build/ox_reporters/reporter-excel.js +1 -1
  269. package/build/ox_reporters/reporter-html.js +1 -1
  270. package/build/ox_reporters/reporter-json.js +1 -1
  271. package/build/ox_reporters/reporter-junit.js +1 -1
  272. package/build/ox_reporters/reporter-pdf.js +1 -1
  273. package/build/ox_reporters/reporter-rp.js +73 -42
  274. package/build/ox_reporters/reporter-xml.js +1 -1
  275. package/build/ox_services/service-devtools/submodule-network.js +1 -1
  276. package/build/ox_services/service-devtools.js +1 -1
  277. package/build/reporter/FileReporterBase.js +1 -1
  278. package/build/reporter/ReportAggregator.js +1 -1
  279. package/build/reporter/ReporterBase.js +1 -1
  280. package/build/reporter/WebSocketReporter.js +1 -1
  281. package/build/runners/WorkerProcess.js +1 -1
  282. package/build/runners/cucumber/CucumberEventListener.js +1 -1
  283. package/build/runners/cucumber/CucumberReporter.js +1 -1
  284. package/build/runners/cucumber/CucumberWorker.js +1 -1
  285. package/build/runners/cucumber/index.js +1 -1
  286. package/build/runners/cucumber/worker.js +1 -1
  287. package/build/runners/index.js +1 -1
  288. package/build/runners/oxygen/OxygenWorker.js +1 -1
  289. package/build/runners/oxygen/index.js +1 -1
  290. package/build/runners/oxygen/worker.js +1 -1
  291. package/config/default.json +6 -6
  292. package/package.json +139 -139
  293. package/types/index.d.ts +70 -70
  294. package/types/module-eyes.d.ts +39 -39
  295. package/types/module-http.d.ts +163 -163
  296. package/types/module-log.d.ts +34 -34
  297. package/types/module-mob.d.ts +966 -966
  298. package/types/module-pdf.d.ts +40 -40
  299. package/types/module-proxy.d.ts +100 -100
  300. package/types/module-shell.d.ts +24 -24
  301. package/types/module-utils.d.ts +99 -99
  302. package/types/module-web.d.ts +1053 -1053
  303. package/types/module-win.d.ts +352 -352
  304. package/types/oxygen.d.ts +53 -53
  305. package/log.txt +0 -1614
  306. package/reports/2025-06-08_231627/report.html +0 -440
  307. package/reports/2025-06-09_223615/report.html +0 -440
  308. package/transpiled/mongodb/etc/prepare.js +0 -18
  309. package/transpiled/mongodb/lib/admin.js +0 -182
  310. package/transpiled/mongodb/lib/beta.js +0 -26
  311. package/transpiled/mongodb/lib/bson.js +0 -220
  312. package/transpiled/mongodb/lib/bulk/common.js +0 -1041
  313. package/transpiled/mongodb/lib/bulk/ordered.js +0 -76
  314. package/transpiled/mongodb/lib/bulk/unordered.js +0 -102
  315. package/transpiled/mongodb/lib/change_stream.js +0 -517
  316. package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +0 -329
  317. package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +0 -779
  318. package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +0 -95
  319. package/transpiled/mongodb/lib/client-side-encryption/errors.js +0 -171
  320. package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +0 -98
  321. package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +0 -34
  322. package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +0 -186
  323. package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +0 -29
  324. package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +0 -58
  325. package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +0 -505
  326. package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +0 -63
  327. package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +0 -167
  328. package/transpiled/mongodb/lib/cmap/auth/gssapi.js +0 -207
  329. package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +0 -193
  330. package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +0 -181
  331. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +0 -101
  332. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +0 -81
  333. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +0 -174
  334. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +0 -59
  335. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +0 -58
  336. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +0 -138
  337. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +0 -42
  338. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +0 -71
  339. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +0 -34
  340. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +0 -111
  341. package/transpiled/mongodb/lib/cmap/auth/plain.js +0 -43
  342. package/transpiled/mongodb/lib/cmap/auth/providers.js +0 -22
  343. package/transpiled/mongodb/lib/cmap/auth/scram.js +0 -318
  344. package/transpiled/mongodb/lib/cmap/auth/x509.js +0 -61
  345. package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +0 -266
  346. package/transpiled/mongodb/lib/cmap/commands.js +0 -605
  347. package/transpiled/mongodb/lib/cmap/connect.js +0 -418
  348. package/transpiled/mongodb/lib/cmap/connection.js +0 -673
  349. package/transpiled/mongodb/lib/cmap/connection_pool.js +0 -688
  350. package/transpiled/mongodb/lib/cmap/connection_pool_events.js +0 -254
  351. package/transpiled/mongodb/lib/cmap/errors.js +0 -128
  352. package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +0 -278
  353. package/transpiled/mongodb/lib/cmap/metrics.js +0 -67
  354. package/transpiled/mongodb/lib/cmap/stream_description.js +0 -74
  355. package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +0 -196
  356. package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +0 -19
  357. package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +0 -144
  358. package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +0 -278
  359. package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +0 -376
  360. package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +0 -49
  361. package/transpiled/mongodb/lib/collection.js +0 -852
  362. package/transpiled/mongodb/lib/connection_string.js +0 -1452
  363. package/transpiled/mongodb/lib/constants.js +0 -162
  364. package/transpiled/mongodb/lib/cursor/abstract_cursor.js +0 -1082
  365. package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +0 -227
  366. package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +0 -136
  367. package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +0 -69
  368. package/transpiled/mongodb/lib/cursor/find_cursor.js +0 -476
  369. package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +0 -48
  370. package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +0 -46
  371. package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +0 -30
  372. package/transpiled/mongodb/lib/cursor/run_command_cursor.js +0 -125
  373. package/transpiled/mongodb/lib/db.js +0 -467
  374. package/transpiled/mongodb/lib/deps.js +0 -174
  375. package/transpiled/mongodb/lib/encrypter.js +0 -129
  376. package/transpiled/mongodb/lib/error.js +0 -1550
  377. package/transpiled/mongodb/lib/explain.js +0 -122
  378. package/transpiled/mongodb/lib/gridfs/download.js +0 -369
  379. package/transpiled/mongodb/lib/gridfs/index.js +0 -240
  380. package/transpiled/mongodb/lib/gridfs/upload.js +0 -446
  381. package/transpiled/mongodb/lib/index.js +0 -975
  382. package/transpiled/mongodb/lib/mongo_client.js +0 -626
  383. package/transpiled/mongodb/lib/mongo_client_auth_providers.js +0 -98
  384. package/transpiled/mongodb/lib/mongo_logger.js +0 -812
  385. package/transpiled/mongodb/lib/mongo_types.js +0 -71
  386. package/transpiled/mongodb/lib/operations/aggregate.js +0 -129
  387. package/transpiled/mongodb/lib/operations/bulk_write.js +0 -48
  388. package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +0 -96
  389. package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +0 -409
  390. package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +0 -5
  391. package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +0 -144
  392. package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +0 -228
  393. package/transpiled/mongodb/lib/operations/collections.js +0 -49
  394. package/transpiled/mongodb/lib/operations/command.js +0 -102
  395. package/transpiled/mongodb/lib/operations/count.js +0 -60
  396. package/transpiled/mongodb/lib/operations/create_collection.js +0 -109
  397. package/transpiled/mongodb/lib/operations/delete.js +0 -134
  398. package/transpiled/mongodb/lib/operations/distinct.js +0 -77
  399. package/transpiled/mongodb/lib/operations/drop.js +0 -102
  400. package/transpiled/mongodb/lib/operations/estimated_document_count.js +0 -47
  401. package/transpiled/mongodb/lib/operations/execute_operation.js +0 -251
  402. package/transpiled/mongodb/lib/operations/find.js +0 -197
  403. package/transpiled/mongodb/lib/operations/find_and_modify.js +0 -191
  404. package/transpiled/mongodb/lib/operations/get_more.js +0 -84
  405. package/transpiled/mongodb/lib/operations/indexes.js +0 -197
  406. package/transpiled/mongodb/lib/operations/insert.js +0 -138
  407. package/transpiled/mongodb/lib/operations/is_capped.js +0 -44
  408. package/transpiled/mongodb/lib/operations/kill_cursors.js +0 -58
  409. package/transpiled/mongodb/lib/operations/list_collections.js +0 -66
  410. package/transpiled/mongodb/lib/operations/list_databases.js +0 -56
  411. package/transpiled/mongodb/lib/operations/operation.js +0 -88
  412. package/transpiled/mongodb/lib/operations/options_operation.js +0 -44
  413. package/transpiled/mongodb/lib/operations/profiling_level.js +0 -42
  414. package/transpiled/mongodb/lib/operations/remove_user.js +0 -35
  415. package/transpiled/mongodb/lib/operations/rename.js +0 -48
  416. package/transpiled/mongodb/lib/operations/run_command.js +0 -64
  417. package/transpiled/mongodb/lib/operations/search_indexes/create.js +0 -41
  418. package/transpiled/mongodb/lib/operations/search_indexes/drop.js +0 -51
  419. package/transpiled/mongodb/lib/operations/search_indexes/update.js +0 -40
  420. package/transpiled/mongodb/lib/operations/set_profiling_level.js +0 -70
  421. package/transpiled/mongodb/lib/operations/stats.js +0 -39
  422. package/transpiled/mongodb/lib/operations/update.js +0 -218
  423. package/transpiled/mongodb/lib/operations/validate_collection.js +0 -49
  424. package/transpiled/mongodb/lib/read_concern.js +0 -92
  425. package/transpiled/mongodb/lib/read_preference.js +0 -215
  426. package/transpiled/mongodb/lib/resource_management.js +0 -74
  427. package/transpiled/mongodb/lib/sdam/common.js +0 -53
  428. package/transpiled/mongodb/lib/sdam/events.js +0 -177
  429. package/transpiled/mongodb/lib/sdam/monitor.js +0 -656
  430. package/transpiled/mongodb/lib/sdam/server.js +0 -463
  431. package/transpiled/mongodb/lib/sdam/server_description.js +0 -196
  432. package/transpiled/mongodb/lib/sdam/server_selection.js +0 -283
  433. package/transpiled/mongodb/lib/sdam/server_selection_events.js +0 -112
  434. package/transpiled/mongodb/lib/sdam/srv_polling.js +0 -139
  435. package/transpiled/mongodb/lib/sdam/topology.js +0 -833
  436. package/transpiled/mongodb/lib/sdam/topology_description.js +0 -447
  437. package/transpiled/mongodb/lib/sessions.js +0 -988
  438. package/transpiled/mongodb/lib/sort.js +0 -123
  439. package/transpiled/mongodb/lib/timeout.js +0 -349
  440. package/transpiled/mongodb/lib/transactions.js +0 -149
  441. package/transpiled/mongodb/lib/utils.js +0 -1502
  442. package/transpiled/mongodb/lib/write_concern.js +0 -115
@@ -1,28 +1,28 @@
1
- /*
2
- * Copyright (C) 2015-present CloudBeat Limited
3
- *
4
- * This program is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 3 of the License, or
7
- * (at your option) any later version.
1
+ /*
2
+ * Copyright (C) 2015-present CloudBeat Limited
3
+ *
4
+ * This program is free software: you can redistribute it and/or modify
5
+ * it under the terms of the GNU General Public License as published by
6
+ * the Free Software Foundation, either version 3 of the License, or
7
+ * (at your option) any later version.
8
8
  */
9
9
  'use strict';
10
- /**
11
- * @name win
12
- * @description Provides methods for Windows native applications automation.
13
- * @sample **Locators:**
14
- *
15
- * * `/XPATH` - Locates element using an XPath 1.0 expression.
16
- * * `~AccessibilityId` - Locates element by its Accessibility ID. Attribute name in inspect.exe - AutomationId.
17
- * * `name=NAME` - Locates element by its name. Attribute name in inspect.exe - Name.
18
- * * `id=ID` - Locates element by its ID. Attribute name in inspect.exe - RuntimeID.
19
- *
20
- * **Pattern arguments:**
21
- *
22
- * Commands which expect a string matching pattern in their arguments, support following patterns unless specified otherwise:
23
- *
24
- * * `regex:PATTERN` - Match using regular expression.
25
- * * `PATTERN` - Verbatim matching.
10
+ /**
11
+ * @name win
12
+ * @description Provides methods for Windows native applications automation.
13
+ * @sample **Locators:**
14
+ *
15
+ * * `/XPATH` - Locates element using an XPath 1.0 expression.
16
+ * * `~AccessibilityId` - Locates element by its Accessibility ID. Attribute name in inspect.exe - AutomationId.
17
+ * * `name=NAME` - Locates element by its name. Attribute name in inspect.exe - Name.
18
+ * * `id=ID` - Locates element by its ID. Attribute name in inspect.exe - RuntimeID.
19
+ *
20
+ * **Pattern arguments:**
21
+ *
22
+ * Commands which expect a string matching pattern in their arguments, support following patterns unless specified otherwise:
23
+ *
24
+ * * `regex:PATTERN` - Match using regular expression.
25
+ * * `PATTERN` - Verbatim matching.
26
26
  */
27
27
 
28
28
  Object.defineProperty(exports, "__esModule", {
@@ -86,31 +86,31 @@ class WindowsModule extends _WebDriverModule.default {
86
86
  get name() {
87
87
  return MODULE_NAME;
88
88
  }
89
- /**
90
- * @function getDriver
91
- * @summary Returns the underlying WDIO driver.
92
- * @return {Object} WDIO driver.
89
+ /**
90
+ * @function getDriver
91
+ * @summary Returns the underlying WDIO driver.
92
+ * @return {Object} WDIO driver.
93
93
  */
94
94
 
95
95
 
96
96
  getDriver() {
97
97
  return super.getDriver();
98
98
  }
99
- /**
100
- * @function getCapabilities
101
- * @summary Returns currently defined capabilities.
102
- * @return {Object} Current capabilities object.
99
+ /**
100
+ * @function getCapabilities
101
+ * @summary Returns currently defined capabilities.
102
+ * @return {Object} Current capabilities object.
103
103
  */
104
104
 
105
105
 
106
106
  getCapabilities() {
107
107
  return this.caps || super.getCapabilities();
108
108
  }
109
- /**
110
- * @function init
111
- * @summary Initializes a new Appium session.
112
- * @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
113
- * @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
109
+ /**
110
+ * @function init
111
+ * @summary Initializes a new Appium session.
112
+ * @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
113
+ * @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
114
114
  */
115
115
 
116
116
 
@@ -225,9 +225,9 @@ class WindowsModule extends _WebDriverModule.default {
225
225
  await _utils.default.overwriteWdioCommands(this.driver);
226
226
  super.init(this.driver);
227
227
  }
228
- /**
229
- * @function dispose
230
- * @summary Ends the current session.
228
+ /**
229
+ * @function dispose
230
+ * @summary Ends the current session.
231
231
  */
232
232
 
233
233
 
@@ -252,11 +252,11 @@ class WindowsModule extends _WebDriverModule.default {
252
252
  super.dispose();
253
253
  }
254
254
  }
255
- /**
256
- * @summary Opens new transaction.
257
- * @description The transaction will persist till a new one is opened. Transaction names must be unique.
258
- * @function transaction
259
- * @param {String} name - The transaction name.
255
+ /**
256
+ * @summary Opens new transaction.
257
+ * @description The transaction will persist till a new one is opened. Transaction names must be unique.
258
+ * @function transaction
259
+ * @param {String} name - The transaction name.
260
260
  */
261
261
 
262
262
 
@@ -271,8 +271,8 @@ class WindowsModule extends _WebDriverModule.default {
271
271
  name = name.slice(0, 512);
272
272
  global._lastTransactionName = name;
273
273
  }
274
- /*
275
- * Private
274
+ /*
275
+ * Private
276
276
  */
277
277
 
278
278
 
@@ -372,4 +372,4 @@ class WindowsModule extends _WebDriverModule.default {
372
372
  }
373
373
 
374
374
  exports.default = WindowsModule;
375
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJtb2RVdGlscyIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJ0b1VwcGVyQ2FzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJkZWxldGVTZXNzaW9uIiwid2FybiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUSxLQUFSLEVBQWMsT0FBZCxFQUFzQixPQUF0QixFQUE4QixRQUE5QixFQUF1QyxVQUF2QyxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFDbkQsTUFBTUMsd0JBQXdCLEdBQUc7QUFDN0JDLEVBQUFBLFVBQVUsRUFBRSwrQ0FEaUI7QUFFN0JDLEVBQUFBLFVBQVUsRUFBRSwyQ0FGaUI7QUFHN0JDLEVBQUFBLE9BQU8sRUFBRSxvQ0FIb0I7QUFJN0JDLEVBQUFBLEtBQUssRUFBRSxvQ0FKc0I7QUFLN0JDLEVBQUFBLE9BQU8sRUFBRSxtREFMb0I7QUFNN0JDLEVBQUFBLFdBQVcsRUFBRTtBQU5nQixDQUFqQzs7QUFTZSxNQUFNQyxhQUFOLFNBQTRCQyx3QkFBNUIsQ0FBNEM7QUFDdkRDLEVBQUFB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QUFFRDlGLEVBQUFBLG9CQUFvQixHQUFHO0FBQ25CLFNBQUtELE9BQUwsQ0FBYW9HLGNBQWIsR0FBOEIsS0FBS04sZUFBbkM7QUFDQSxTQUFLOUYsT0FBTCxDQUFhcUcsWUFBYixHQUE0QjdDLGVBQVM2QyxZQUFyQztBQUNBLFNBQUtyRyxPQUFMLENBQWFzRyxVQUFiLEdBQTBCOUMsZUFBUzhDLFVBQW5DO0FBQ0EsU0FBS3RHLE9BQUwsQ0FBYXVHLFdBQWIsR0FBMkIvQyxlQUFTK0MsV0FBcEM7QUFDQSxTQUFLdkcsT0FBTCxDQUFhd0csZUFBYixHQUErQmhELGVBQVNnRCxlQUF4QztBQUNBLFNBQUt4RyxPQUFMLENBQWF5RyxnQkFBYixHQUFnQ2pELGVBQVNpRCxnQkFBekM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsa0JBQWIsR0FBa0NsRCxlQUFTa0Qsa0JBQTNDO0FBQ0EsU0FBSzFHLE9BQUwsQ0FBYTJHLHNCQUFiLEdBQXNDbkQsZUFBU21ELHNCQUEvQztBQUNBLFNBQUszRyxPQUFMLENBQWE0RyxjQUFiLEdBQThCcEQsZUFBU29ELGNBQXZDO0FBQ0EsU0FBSzVHLE9BQUwsQ0FBYTZHLDRCQUFiLEdBQTRDckQsZUFBU3FELDRCQUFyRDtBQUNBLFNBQUs3RyxPQUFMLENBQWE4RyxvQkFBYixHQUFvQ3RELGVBQVNzRCxvQkFBN0M7QUFDQSxTQUFLOUcsT0FBTCxDQUFhK0csK0JBQWIsR0FBK0N2RCxlQUFTdUQsK0JBQXhEO0FBQ0EsU0FBSy9HLE9BQUwsQ0FBYWdILGtCQUFiLEdBQWtDeEQsZUFBU3dELGtCQUEzQztBQUNBLFNBQUtoSCxPQUFMLENBQWFpSCwwQkFBYixHQUEwQ3pELGVBQVN5RCwwQkFBbkQ7QUFDQSxTQUFLakgsT0FBTCxDQUFha0gscUJBQWIsR0FBcUMxRCxlQUFTMEQscUJBQTlDO0FBQ0g7O0FBelNzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyoqXG4gKiBAbmFtZSB3aW5cbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cbiAqIEBzYW1wbGUgKipMb2NhdG9yczoqKiAgXG4gKiAgIFxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXG4gKiAgKiBgfkFjY2Vzc2liaWxpdHlJZGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSUQuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gQXV0b21hdGlvbklkLlxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gTmFtZS5cbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcbiAqICBcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcbiAqICBcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYSBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIHBhdHRlcm5zIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxuICogIFxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxuICogICogYFBBVFRFUk5gIC0gVmVyYmF0aW0gbWF0Y2hpbmcuXG4gKi9cblxuaW1wb3J0IFVSTCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcbmltcG9ydCBtb2RVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xuXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xuY29uc3QgREVGQVVMVF9BUFBJVU1fVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWInO1xuY29uc3QgREVGQVVMVF9BUFAgPSAnUm9vdCc7XG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xuICAgIENhbGN1bGF0b3I6ICdNaWNyb3NvZnQuV2luZG93c0NhbGN1bGF0b3JfOHdla3liM2Q4YmJ3ZSFBcHAnLFxuICAgIEFsYXJtQ2xvY2s6ICdNaWNyb3NvZnQuV2luZG93c0FsYXJtc184d2VreWIzZDhiYndlIUFwcCcsXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxuICAgIFBhaW50OiAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFxtc3BhaW50LmV4ZScsXG4gICAgUGFpbnQzRDogJ01pY3Jvc29mdC5NU1BhaW50Xzh3ZWt5YjNkOGJid2UhTWljcm9zb2Z0Lk1TUGFpbnQnLFxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcbiAgICB9XG5cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXG4gICAgICovXG4gICAgZ2V0RHJpdmVyKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGdldENhcGFiaWxpdGllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXG4gICAgICovXG4gICAgYXN5bmMgaW5pdChjYXBzLCBhcHBpdW1VcmwpIHtcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlb3BlblNlc3Npb24gIT09IGZhbHNlKSB7IC8vIHRydWUgb3IgZmFsc2UgaWYgZXhwbGlzaXRseSBzZXQuIHRydWUgb24gbnVsbCBvciB1bmRlZmluZWQuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcbiAgICAgICAgdGhpcy5jYXBzID0ge307XG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2Fwcykge1xuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYXBwKSB7XG4gICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gREVGQVVMVF9BUFA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBDYXBWYWwgPSB0aGlzLmNhcHMuYXBwO1xuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcbiAgICAgICAgICAgIGNvbnN0IGFwcE5hbWVzID0gT2JqZWN0LmtleXMoV0lORE9XU19TVEFOREFSRF9BUFBfSURTKTtcbiAgICAgICAgICAgIGlmIChhcHBOYW1lcy5pbmNsdWRlcyhhcHBDYXBWYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA9ICdXaW5kb3dzJztcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBkZXZpY2VOYW1lIGZvciBXaW5BcHBEcml2ZXJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBwbGF0Zm9ybVZlcnNpb24gZm9yIFdpbkFwcERyaXZlclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSAnMS4wJztcbiAgICAgICAgfVxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKGFwcGl1bVVybCk7XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcblxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3ZGlvT3B0cyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxuICAgICAgICAgICAgcG9ydDogcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XG5cbiAgICAgICAgYXdhaXQgbW9kVXRpbHMub3ZlcndyaXRlV2Rpb0NvbW1hbmRzKHRoaXMuZHJpdmVyKTtcblxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICAgKi9cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XG5cbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFByaXZhdGVcbiAgICAgKi9cblxuICAgIF9pc0FjdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2dzKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcbiAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSB7XG4gICAgICAgIGlmICghbG9jYXRvcilcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBgLy8qW0BpZD1cIiR7bG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKX1cIl1gO1xuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xuXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xuICAgIH1cblxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xuICAgIH1cbn1cblxuIl19
375
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJtb2RVdGlscyIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJ0b1VwcGVyQ2FzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJkZWxldGVTZXNzaW9uIiwid2FybiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLE1BQXBCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUSxLQUFSLEVBQWMsT0FBZCxFQUFzQixPQUF0QixFQUE4QixRQUE5QixFQUF1QyxVQUF2QyxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFDbkQsTUFBTUMsd0JBQXdCLEdBQUc7QUFDN0JDLEVBQUFBLFVBQVUsRUFBRSwrQ0FEaUI7QUFFN0JDLEVBQUFBLFVBQVUsRUFBRSwyQ0FGaUI7QUFHN0JDLEVBQUFBLE9BQU8sRUFBRSxvQ0FIb0I7QUFJN0JDLEVBQUFBLEtBQUssRUFBRSxvQ0FKc0I7QUFLN0JDLEVBQUFBLE9BQU8sRUFBRSxtREFMb0I7QUFNN0JDLEVBQUFBLFdBQVcsRUFBRTtBQU5nQixDQUFqQzs7QUFTZSxNQUFNQyxhQUFOLFNBQTRCQyx3QkFBNUIsQ0FBNEM7QUFDdkRDLEVBQUFB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QUFFRDlGLEVBQUFBLG9CQUFvQixHQUFHO0FBQ25CLFNBQUtELE9BQUwsQ0FBYW9HLGNBQWIsR0FBOEIsS0FBS04sZUFBbkM7QUFDQSxTQUFLOUYsT0FBTCxDQUFhcUcsWUFBYixHQUE0QjdDLGVBQVM2QyxZQUFyQztBQUNBLFNBQUtyRyxPQUFMLENBQWFzRyxVQUFiLEdBQTBCOUMsZUFBUzhDLFVBQW5DO0FBQ0EsU0FBS3RHLE9BQUwsQ0FBYXVHLFdBQWIsR0FBMkIvQyxlQUFTK0MsV0FBcEM7QUFDQSxTQUFLdkcsT0FBTCxDQUFhd0csZUFBYixHQUErQmhELGVBQVNnRCxlQUF4QztBQUNBLFNBQUt4RyxPQUFMLENBQWF5RyxnQkFBYixHQUFnQ2pELGVBQVNpRCxnQkFBekM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsa0JBQWIsR0FBa0NsRCxlQUFTa0Qsa0JBQTNDO0FBQ0EsU0FBSzFHLE9BQUwsQ0FBYTJHLHNCQUFiLEdBQXNDbkQsZUFBU21ELHNCQUEvQztBQUNBLFNBQUszRyxPQUFMLENBQWE0RyxjQUFiLEdBQThCcEQsZUFBU29ELGNBQXZDO0FBQ0EsU0FBSzVHLE9BQUwsQ0FBYTZHLDRCQUFiLEdBQTRDckQsZUFBU3FELDRCQUFyRDtBQUNBLFNBQUs3RyxPQUFMLENBQWE4RyxvQkFBYixHQUFvQ3RELGVBQVNzRCxvQkFBN0M7QUFDQSxTQUFLOUcsT0FBTCxDQUFhK0csK0JBQWIsR0FBK0N2RCxlQUFTdUQsK0JBQXhEO0FBQ0EsU0FBSy9HLE9BQUwsQ0FBYWdILGtCQUFiLEdBQWtDeEQsZUFBU3dELGtCQUEzQztBQUNBLFNBQUtoSCxPQUFMLENBQWFpSCwwQkFBYixHQUEwQ3pELGVBQVN5RCwwQkFBbkQ7QUFDQSxTQUFLakgsT0FBTCxDQUFha0gscUJBQWIsR0FBcUMxRCxlQUFTMEQscUJBQTlDO0FBQ0g7O0FBelNzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2luXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogICBcclxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICAqIGB+QWNjZXNzaWJpbGl0eUlkYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBBdXRvbWF0aW9uSWQuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lLiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIE5hbWUuXHJcbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcclxuICogIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqICBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqICBcclxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICovXHJcblxyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQVBQID0gJ1Jvb3QnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xyXG4gICAgQ2FsY3VsYXRvcjogJ01pY3Jvc29mdC5XaW5kb3dzQ2FsY3VsYXRvcl84d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBBbGFybUNsb2NrOiAnTWljcm9zb2Z0LldpbmRvd3NBbGFybXNfOHdla3liM2Q4YmJ3ZSFBcHAnLFxyXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxyXG4gICAgUGFpbnQ6ICdDOlxcXFxXaW5kb3dzXFxcXFN5c3RlbTMyXFxcXG1zcGFpbnQuZXhlJyxcclxuICAgIFBhaW50M0Q6ICdNaWNyb3NvZnQuTVNQYWludF84d2VreWIzZDhiYndlIU1pY3Jvc29mdC5NU1BhaW50JyxcclxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IERFRkFVTFRfQVBQO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwQ2FwVmFsID0gdGhpcy5jYXBzLmFwcDtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcclxuICAgICAgICAgICAgY29uc3QgYXBwTmFtZXMgPSBPYmplY3Qua2V5cyhXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMpO1xyXG4gICAgICAgICAgICBpZiAoYXBwTmFtZXMuaW5jbHVkZXMoYXBwQ2FwVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMucGxhdGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPSAnV2luZG93cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGRldmljZU5hbWUgZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmRldmljZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1WZXJzaW9uIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9ICcxLjAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UoYXBwaXVtVXJsKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcblxyXG4gICAgICAgIGF3YWl0IG1vZFV0aWxzLm92ZXJ3cml0ZVdkaW9Db21tYW5kcyh0aGlzLmRyaXZlcik7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXHJcbiAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgNTEyKTtcclxuXHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0b3IgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
@@ -6,13 +6,13 @@ var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
6
 
7
7
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
8
 
9
- /*
10
- * Copyright (C) 2015-present CloudBeat Limited
11
- *
12
- * This program is free software: you can redistribute it and/or modify
13
- * it under the terms of the GNU General Public License as published by
14
- * the Free Software Foundation, either version 3 of the License, or
15
- * (at your option) any later version.
9
+ /*
10
+ * Copyright (C) 2015-present CloudBeat Limited
11
+ *
12
+ * This program is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * (at your option) any later version.
16
16
  */
17
17
  const errHelper = require('../errors/helper');
18
18
 
@@ -447,4 +447,4 @@ module.exports = {
447
447
  }
448
448
  }
449
449
  };
450
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJ2MSIsInByb3ZpZGVycyIsIlBFUkZFQ1RPIiwiQlJPV1NFUlNUQUNLIiwiU0FVQ0VMQUJTIiwiTEFNQkRBVEVTVCIsIlRFU1RJTkdCT1QiLCJjb250ZXh0TGlzdCIsImFuZHJvaWQiLCJpb3MiLCJoeWJyaWQiLCJ3ZWIiLCJjbWRzVG9PdmVyd3JpdGUiLCJpc0VsZW1lbnROb3RGb3VuZCIsImVsIiwicmVzdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtYXRjaFBhdHRlcm4iLCJ2YWwiLCJwYXR0ZXJuIiwiZ2xvYlRvUmVnZXgiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZWdleCIsImluZGV4T2YiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0ZXN0IiwiZmxhZ3MiLCJnZXRFbGVtZW50IiwibG9jYXRvciIsIndhaXRGb3JWaXNpYmxlIiwidGltZW91dCIsInRocm93RXhjZXB0aW9uIiwic2V0VGltZW91dEltcGxpY2l0IiwiY2FsbCIsImNvbnN0cnVjdG9yIiwibmFtZSIsImhlbHBlcnMiLCJnZXRXZGlvTG9jYXRvciIsImRyaXZlciIsIiQiLCJlbGVtZW50Tm90Rm91bmQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVMRU1FTlRfTk9UX0ZPVU5EIiwid2FpdEZvckRpc3BsYXllZCIsIndhaXRGb3JUaW1lb3V0IiwiZSIsImluY2x1ZGVzIiwiRUxFTUVOVF9OT1RfVklTSUJMRSIsImdldEVsZW1lbnRzIiwiZWxzIiwiJCQiLCJlbGVtZW50c05vdEZvdW5kIiwiZ2V0Q2hpbGRFbGVtZW50IiwicGFyZW50RWxlbWVudCIsIlNDUklQVF9FUlJPUiIsImdldENoaWxkRWxlbWVudHMiLCJzZWxlbml1bVRpbWVvdXQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0IiwidGltZW91dHMiLCJjYXBhYmlsaXRpZXMiLCJicm93c2VyTmFtZSIsImdldFRpbWVvdXRzIiwic3RvcFVybCIsImNvbnNvbGUiLCJsb2ciLCJpbXBsaWNpdCIsIl9wcmV2SW1wbGljaXRUaW1lb3V0IiwicGFnZUxvYWQiLCJfcHJldlBhZ2VMb2FkVGltZW91dCIsInNldFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudCIsImFyZyIsInVuZGVmaW5lZCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImFsb3dlZENvbnRleHRzIiwiY29udGV4dCIsImdldENvbnRleHQiLCJpc1dlYiIsInN1YnN0ciIsImdldExvZ1R5cGVzIiwicHJvdmlkZXIiLCJkZXRlcm1pbmVQcm92aWRlciIsIndkaW9PcHRzIiwiaG9zdG5hbWUiLCJoYXNDaXJjdWxhckRlcGVuZGVuY3kiLCJvYmoiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwiYXNzZXJ0Q2lyY3VsYXIiLCJDSVJDVUxBUl9FUlJPUiIsIm5ld1ZpZGVvQXR0YWNobWVudCIsImZpbGVOYW1lIiwidmlkZW9VcmwiLCJpZCIsInR5cGUiLCJzdWJ0eXBlIiwiX3VybCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImNtZCIsIm92ZXJ3cml0ZUNvbW1hbmQiLCJvcmlnRnVuYyIsImFwcGx5Iiwic2xpY2UiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7QUFVQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFF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VUFBVUUsUUFBVixFQUFvQjtBQUNuRCxlQUFPQSxRQUFRLENBQUNDLEtBQVQsQ0FBZXJDLFNBQWYsRUFBMEIsR0FBR3NDLEtBQUgsQ0FBUy9FLElBQVQsQ0FBY2dGLFNBQWQsRUFBeUIsQ0FBekIsQ0FBMUIsQ0FBUDtBQUNILE9BRkssRUFFSCxJQUZHLENBQU47QUFHSDtBQUNKO0FBaGFZLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gICAgUEVSRkVDVE86ICdwZXJmZWN0bycsXG4gICAgQlJPV1NFUlNUQUNLOiAnYnJvd3NlcnN0YWNrJyxcbiAgICBTQVVDRUxBQlM6ICdzYXVjZScsXG4gICAgTEFNQkRBVEVTVDogJ2xhbWJkYScsXG4gICAgVEVTVElOR0JPVDogJ3Rlc3Rpbmdib3QnXG59O1xuXG5jb25zdCBjb250ZXh0TGlzdCA9IHtcbiAgICBhbmRyb2lkOiAnYW5kcm9pZCcsXG4gICAgaW9zOiAnaW9zJyxcbiAgICBoeWJyaWQ6ICdoeWJyaWQnLFxuICAgIHdlYjogJ3dlYidcbn07XG5cbmNvbnN0IGNtZHNUb092ZXJ3cml0ZSA9IFsnJCQnLCAnJCcsJ2FkZFZhbHVlJywnY2xlYXJWYWx1ZScsJ2NsaWNrJywnZG91YmxlQ2xpY2snLCdkcmFnQW5kRHJvcCcsJ2dldEF0dHJpYnV0ZScsJ2dldENTU1Byb3BlcnR5JywnZ2V0Q29tcHV0ZWRMYWJlbCcsJ2dldENvbXB1dGVkUm9sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEhUTUwnLCdnZXRMb2NhdGlvbicsJ2dldFByb3BlcnR5JywnZ2V0U2l6ZScsJ2dldFRhZ05hbWUnLCdnZXRUZXh0JywnZ2V0VmFsdWUnLCdpc0NsaWNrYWJsZScsJ2lzRGlzcGxheWVkJywnaXNEaXNwbGF5ZWRJblZpZXdwb3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAnaXNFbmFibGVkJywnaXNFcXVhbCcsJ2lzRXhpc3RpbmcnLCdpc0ZvY3VzZWQnLCdpc1NlbGVjdGVkJywnbW92ZVRvJywnbmV4dEVsZW1lbnQnLCdwYXJlbnRFbGVtZW50JywncHJldmlvdXNFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAncmVhY3QkJCcsJ3JlYWN0JCcsJ3NhdmVTY3JlZW5zaG90Jywnc2Nyb2xsSW50b1ZpZXcnLCdzZWxlY3RCeUF0dHJpYnV0ZScsJ3NlbGVjdEJ5SW5kZXgnLCdzZWxlY3RCeVZpc2libGVUZXh0Jywnc2V0VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFkb3ckJCcsJ3NoYWRvdyQnLCd0b3VjaEFjdGlvbicsJ3dhaXRGb3JDbGlja2FibGUnLCd3YWl0Rm9yRGlzcGxheWVkJywnd2FpdEZvckVuYWJsZWQnLCd3YWl0Rm9yRXhpc3QnLCd3YWl0VW50aWwnXTtcblxuY29uc3QgaXNFbGVtZW50Tm90Rm91bmQgPSAoZWwpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgICBlbC5lcnJvciAmJiAoXG4gICAgICAgIGVsLmVycm9yLmVycm9yID09PSAnbm8gc3VjaCBlbGVtZW50JyB8fFxuICAgICAgICAoZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgd2luLnJpZ2h0Q2xpY2sgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdubyBzdWNoIGVsZW1lbnQnKSB8fFxuICAgICAgICBlbC5lcnJvci5tZXNzYWdlICYmIC8qIHdpbmFwcGRyaXZlciAqLyBlbC5lcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQnKSkpXG4gICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBtYXRjaFBhdHRlcm46IGZ1bmN0aW9uKHZhbCwgcGF0dGVybikge1xuICAgICAgICBpZiAoIXZhbCAmJiAhcGF0dGVybikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2xvYlRvUmVnZXggPSByZXF1aXJlKCdnbG9iLXRvLXJlZ2V4cCcpO1xuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcblxuICAgICAgICB2YXIgcmVnZXg7XG4gICAgICAgIGlmIChwYXR0ZXJuLmluZGV4T2YoJ3JlZ2V4OicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIHJlZ3VsYXItZXhwcmVzc2lvblxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyaW5nKCdyZWdleDonLmxlbmd0aCksICdnJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXhpOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXItZXhwcmVzc2lvblxuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4uc3Vic3RyaW5nKCdyZWdleGk6Jy5sZW5ndGgpLCAnaWcnKTtcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdleGFjdDonKSA9PSAwIHx8IHBhdHRlcm4gPT09ICcnKSB7ICAvLyBtYXRjaCBhIHN0cmluZyBleGFjdGx5LCB2ZXJiYXRpbVxuICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4uc3Vic3RyaW5nKCdleGFjdDonLmxlbmd0aCkgPT09IHZhbDtcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLmluZGV4T2YoJ2dsb2I6JykgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIGFnYWluc3QgYSBjYXNlLWluc2Vuc2l0aXZlIFwiZ2xvYlwiIHBhdHRlcm5cbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybi5zdWJzdHJpbmcoJ2dsb2I6Jy5sZW5ndGgpLCB7IGZsYWdzOiAnaWcnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcbiAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIHByZWZpeCBzYW1lIGFzIGdsb2IgbWF0Y2hpbmdcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybiwgeyBmbGFnczogJ2lnJyB9KTtcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RWxlbWVudDogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgd2FpdEZvclZpc2libGUsIHRpbWVvdXQsIHRocm93RXhjZXB0aW9uID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWw7XG4gICAgICAgIGlmIChsb2NhdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IgJiYgbG9jYXRvci5jb25zdHJ1Y3Rvci5uYW1lID09PSAnRWxlbWVudCcpIHtcbiAgICAgICAgICAgIGVsID0gbG9jYXRvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvY2F0b3IgPSB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcik7XG4gICAgICAgICAgICBlbCA9IGF3YWl0IHRoaXMuZHJpdmVyLiQobG9jYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGVsLndhaXRGb3JEaXNwbGF5ZWQoeyB0aW1lb3V0OnRpbWVvdXQgPyB0aW1lb3V0IDogdGhpcy53YWl0Rm9yVGltZW91dH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uICYmIGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX1ZJU0lCTEUsIGBFbGVtZW50IG5vdCB2aXNpYmxlOiAke2xvY2F0b3J9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocm93RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbDtcbiAgICB9LFxuXG4gICAgZ2V0RWxlbWVudHM6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHRpbWVvdXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVscyA9IFtdO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbHMgPSBhd2FpdCB0aGlzLmRyaXZlci4kJCh0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50c05vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVscztcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRFbGVtZW50OiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCBwYXJlbnRFbGVtZW50LCB3YWl0Rm9yVmlzaWJsZSwgdGltZW91dCkge1xuICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xuXG4gICAgICAgIGlmICghKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC4kKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gcGFyZW50RWxlbWVudCwgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBlbCA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJChsb2NhdG9yKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcbiAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YWl0Rm9yVmlzaWJsZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDogdGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZS5tZXNzYWdlICYmIGUubWVzc2FnZS5pbmNsdWRlcygnc3RpbGwgbm90IGRpc3BsYXllZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWw7XG4gICAgfSxcblxuICAgIGdldENoaWxkRWxlbWVudHM6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHBhcmVudEVsZW1lbnQsIHRpbWVvdXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYXRvciA9IHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKTtcblxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVscyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZWxzID0gYXdhaXQgcGFyZW50RWxlbWVudC4kJChsb2NhdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHNOb3RGb3VuZCA9IGlzRWxlbWVudE5vdEZvdW5kKGVscyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudHNOb3RGb3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxzO1xuICAgIH0sXG5cbiAgICBzZXRUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRyaXZlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGB0aW1lb3V0IG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgdGltZW91dCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgKiAxMDAwfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpbWVvdXRzO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJlxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID09PSAnTWljcm9zb2Z0RWRnZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIG9uIEVkZ2VcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5nZXRUaW1lb3V0cykge1xuICAgICAgICAgICAgLy8gY2hyb21lID49IDc1XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsLmluY2x1ZGVzKCdwZXJmZWN0b21vYmlsZS5jb20nKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGltZW91dHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmFpbHMgb24gcGVyZmVjdG8gbW9iaWxlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2dldFRpbWVvdXRzIGVycm9yJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cykge1xuICAgICAgICAgICAgLy8gY2hyb21lID49IDcyICYmIGNocm9tZSA8IDc1XG4gICAgICAgICAgICB0aW1lb3V0cyA9IHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5pbXBsaWNpdCkge1xuICAgICAgICAgICAgdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCA9IHRpbWVvdXRzLmltcGxpY2l0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5wYWdlTG9hZCkge1xuICAgICAgICAgICAgdGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCA9IHRpbWVvdXRzLnBhZ2VMb2FkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xuICAgICAgICAgICAgICAgIC8vIGJyb3dzZXJOYW1lICdkZWZhdWx0JyBvbiBhbmRyb2lkIFxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aW1lb3V0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlc3RvcmVUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fcHJldkltcGxpY2l0VGltZW91dCAmJiB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy5fcHJldkltcGxpY2l0VGltZW91dCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCAmJiB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ3BhZ2VMb2FkJzogdGhpcy5fcHJldlBhZ2VMb2FkVGltZW91dCB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XG4gICAgICAgIGlmIChhcmcgPT09IHVuZGVmaW5lZCB8fCBhcmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIGlzIHJlcXVpcmVkLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudFN0cmluZzogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgc3RyaW5nLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcbiAgICAgICAgaWYgKCFhcmcgfHwgdHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZihhcmcpICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLlwiKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3NlcnRBcmd1bWVudEJvb2w6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT0gdHlwZW9mKHRydWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgdHJ1ZSBvciBmYWxzZS5cIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZihhcmcpICE9IHR5cGVvZih0cnVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGFzc2VydEFyZ3VtZW50VGltZW91dDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XG4gICAgICAgIGlmIChhcmcgJiYgKHR5cGVvZihhcmcpICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlci5cIik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udGV4dExpc3Q6IGNvbnRleHRMaXN0LFxuXG4gICAgYXNzZXJ0Q29udGV4dDogYXN5bmMgZnVuY3Rpb24oLi4uYWxvd2VkQ29udGV4dHMpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRDb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IGlzV2ViID0gKGNvbnRleHQgJiYgKGNvbnRleHQuaW5kZXhPZignV0VCVklFVycpID4gLTEgfHwgY29udGV4dC5pbmRleE9mKCdDSFJPTUlVTScpID4gLTEpKTtcblxuICAgICAgICBpZiAoaXNXZWIpIHtcbiAgICAgICAgICAgIGlmIChhbG93ZWRDb250ZXh0cy5pbmNsdWRlcyhjb250ZXh0TGlzdC53ZWIpIHx8IGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0Lmh5YnJpZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgY29udGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LmFuZHJvaWQpIHx8IGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LmlvcykpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUsIGFsbCBpcyBva1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgY29udGV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFdkaW9Mb2NhdG9yOiBmdW5jdGlvbihsb2NhdG9yKSB7XG4gICAgICAgIGlmICghbG9jYXRvcilcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApIHtcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIFhQYXRoIGluc3RlYWQgb2YgQ1NTIGZvciBicm93c2VyIHRlc3RzLCBzaW5jZSBJRCBjYW4gY29udGFpbiBpbGxlZ2FsIGNoYXJhY3RlcnNcbiAgICAgICAgICAgIC8vIGFuZCBlc2NhcGluZyBkb2Vzbid0IHdvcmsgcmVsaWFibHkgb3IgaW4gaWRlbnRpY2FsIG1hbm5lciBpbiBhbGwgYnJvd3NlclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcyAmJiB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYC8vKltAaWQ9XCIke2xvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCl9XCJdYDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICc9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY3NzPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGFnPScpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICc8JyArIGxvY2F0b3Iuc3Vic3RyKCd0YWc9Jy5sZW5ndGgpICsgJyAvPic7XG5cbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XG4gICAgfSxcblxuICAgIGdldExvZ1R5cGVzOiBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ID09PSAnTkFUSVZFX0FQUCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2xvZ2NhdCcsICdidWdyZXBvcnQnLCAnc2VydmVyJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWydicm93c2VyJywgJ2RyaXZlciddO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHByb3ZpZGVyOiBwcm92aWRlcnMsXG5cbiAgICBkZXRlcm1pbmVQcm92aWRlcjogZnVuY3Rpb24od2Rpb09wdHMpIHtcbiAgICAgICAgaWYgKCF3ZGlvT3B0cyB8fCAhd2Rpb09wdHMuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSB8fCAod2Rpb09wdHMuaG9zdG5hbWUgJiYgd2Rpb09wdHMuaG9zdG5hbWUuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5QRVJGRUNUTztcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10pIHtcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuQlJPV1NFUlNUQUNLO1xuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlNBVUNFTEFCUztcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygnbGFtYmRhdGVzdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLkxBTUJEQVRFU1Q7XG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5URVNUSU5HQk9UO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIGhhc0NpcmN1bGFyRGVwZW5kZW5jeTogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKFN0cmluZyhlKS5pbmNsdWRlcygnQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGFzc2VydENpcmN1bGFyOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgY29uc3QgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5ID0gdGhpcy5oYXNDaXJjdWxhckRlcGVuZGVuY3kob2JqKTtcbiAgICAgICAgaWYgKGhhc0NpcmN1bGFyRGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5DSVJDVUxBUl9FUlJPUiwgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXdWaWRlb0F0dGFjaG1lbnQ6IChmaWxlTmFtZSwgdmlkZW9VcmwpID0+ICh7XG4gICAgICAgIGlkOiB2MSgpLFxuICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgdHlwZTogJ3ZpZGVvJyxcbiAgICAgICAgc3VidHlwZTogJ3NjcmVlbmNhc3QnLFxuICAgICAgICBfdXJsOiB2aWRlb1VybCxcbiAgICB9KSxcblxuICAgIG92ZXJ3cml0ZVdkaW9Db21tYW5kczogYXN5bmMgZnVuY3Rpb24oZHJpdmVyKSB7XG4gICAgICAgIC8vIGlmIGVsZW1lbnQgY29tbWFuZCBpcyBpbnZva2VkIGRpcmVjdGx5IGZyb20gdXNlciBzY3JpcHQgYW5kIGVycm9yIGhhcHBlbnMsXG4gICAgICAgIC8vIGl0IHdvbid0IGJlIGNhdWdodCBhbmQgd2lsbCBsZWFkIHRvIHVuaGFuZGxlZFJlamVjdGlvbiAoc2luY2UgaXQncyBleGVjdXRlZCBpbiBhc3luYyBtYW5uZXIgd2l0aG91dCBhd2FpdGluZykgYW5kIHRlc3QgcmVzdWx0cyB3aWxsIGJlIGxvc3QuXG5cbiAgICAgICAgLy8gZS5nLlxuICAgICAgICAvLyB2YXIgZWwgPSB3ZWIuZmluZEVsZW1lbnQoJ2lkPWZvbycpO1xuICAgICAgICAvLyBlbC5jbGljaygpOyAvLyBpZiBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIHRoZW4gY2xpY2sgd2lsbCB0aHJvdyBldmVudHVhbGx5XG5cbiAgICAgICAgLy8gdGhlcmVmb3JlIHdlIHdyYXAgYWxsIHdkaW8gY29tbWFuZHMgdG8gbWFrZSB0aGVtIGV4ZWN1dGUgc3luY2hyb25vdXNseS5cbiAgICAgICAgLy8gUC5TLiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZGlzYWxsb3cgdXNlcnMgZnJvbSB1c2luZyB3ZGlvIGVsZW1lbnQgY29tbWFuZHMgZGlyZWN0bHkgc2luY2UgdGhleSBhcmUgbm90IGRpc3BsYXllZCBpbiBsb2dzIG9yIHJlc3VsdHMuXG4gICAgICAgIC8vIGJ1dCB3ZSBoYXZlIG5vIHdheSBkZXRlcm1pbmluZyB3aGV0aGVyIGNvbW1hbmQgd2FzIGV4ZWN1dGVkIGZyb20gdXNlciBzY3JpcHQgb3IgZnJvbSBveHlnZW4gaW50ZXJuYWxzLi4uXG5cbiAgICAgICAgZm9yIChsZXQgY21kIG9mIGNtZHNUb092ZXJ3cml0ZSkge1xuICAgICAgICAgICAgYXdhaXQgZHJpdmVyLm92ZXJ3cml0ZUNvbW1hbmQoY21kLCBmdW5jdGlvbiAob3JpZ0Z1bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ0Z1bmMuYXBwbHkodW5kZWZpbmVkLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIl19
450
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL3V0aWxzLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJ2MSIsInByb3ZpZGVycyIsIlBFUkZFQ1RPIiwiQlJPV1NFUlNUQUNLIiwiU0FVQ0VMQUJTIiwiTEFNQkRBVEVTVCIsIlRFU1RJTkdCT1QiLCJjb250ZXh0TGlzdCIsImFuZHJvaWQiLCJpb3MiLCJoeWJyaWQiLCJ3ZWIiLCJjbWRzVG9PdmVyd3JpdGUiLCJpc0VsZW1lbnROb3RGb3VuZCIsImVsIiwicmVzdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtYXRjaFBhdHRlcm4iLCJ2YWwiLCJwYXR0ZXJuIiwiZ2xvYlRvUmVnZXgiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZWdleCIsImluZGV4T2YiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0ZXN0IiwiZmxhZ3MiLCJnZXRFbGVtZW50IiwibG9jYXRvciIsIndhaXRGb3JWaXNpYmxlIiwidGltZW91dCIsInRocm93RXhjZXB0aW9uIiwic2V0VGltZW91dEltcGxpY2l0IiwiY2FsbCIsImNvbnN0cnVjdG9yIiwibmFtZSIsImhlbHBlcnMiLCJnZXRXZGlvTG9jYXRvciIsImRyaXZlciIsIiQiLCJlbGVtZW50Tm90Rm91bmQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIkVMRU1FTlRfTk9UX0ZPVU5EIiwid2FpdEZvckRpc3BsYXllZCIsIndhaXRGb3JUaW1lb3V0IiwiZSIsImluY2x1ZGVzIiwiRUxFTUVOVF9OT1RfVklTSUJMRSIsImdldEVsZW1lbnRzIiwiZWxzIiwiJCQiLCJlbGVtZW50c05vdEZvdW5kIiwiZ2V0Q2hpbGRFbGVtZW50IiwicGFyZW50RWxlbWVudCIsIlNDUklQVF9FUlJPUiIsImdldENoaWxkRWxlbWVudHMiLCJzZWxlbml1bVRpbWVvdXQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0IiwidGltZW91dHMiLCJjYXBhYmlsaXRpZXMiLCJicm93c2VyTmFtZSIsImdldFRpbWVvdXRzIiwic3RvcFVybCIsImNvbnNvbGUiLCJsb2ciLCJpbXBsaWNpdCIsIl9wcmV2SW1wbGljaXRUaW1lb3V0IiwicGFnZUxvYWQiLCJfcHJldlBhZ2VMb2FkVGltZW91dCIsInNldFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudCIsImFyZyIsInVuZGVmaW5lZCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImFsb3dlZENvbnRleHRzIiwiY29udGV4dCIsImdldENvbnRleHQiLCJpc1dlYiIsInN1YnN0ciIsImdldExvZ1R5cGVzIiwicHJvdmlkZXIiLCJkZXRlcm1pbmVQcm92aWRlciIsIndkaW9PcHRzIiwiaG9zdG5hbWUiLCJoYXNDaXJjdWxhckRlcGVuZGVuY3kiLCJvYmoiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RyaW5nIiwiYXNzZXJ0Q2lyY3VsYXIiLCJDSVJDVUxBUl9FUlJPUiIsIm5ld1ZpZGVvQXR0YWNobWVudCIsImZpbGVOYW1lIiwidmlkZW9VcmwiLCJpZCIsInR5cGUiLCJzdWJ0eXBlIiwiX3VybCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImNtZCIsIm92ZXJ3cml0ZUNvbW1hbmQiLCJvcmlnRnVuYyIsImFwcGx5Iiwic2xpY2UiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7QUFVQTs7OztBQVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFF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VUFBVUUsUUFBVixFQUFvQjtBQUNuRCxlQUFPQSxRQUFRLENBQUNDLEtBQVQsQ0FBZXJDLFNBQWYsRUFBMEIsR0FBR3NDLEtBQUgsQ0FBUy9FLElBQVQsQ0FBY2dGLFNBQWQsRUFBeUIsQ0FBekIsQ0FBMUIsQ0FBUDtBQUNILE9BRkssRUFFSCxJQUZHLENBQU47QUFHSDtBQUNKO0FBaGFZLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG5jb25zdCBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmNvbnN0IHsgdjEgfSA9IHJlcXVpcmUoJ3V1aWQnKTtcclxuXHJcbmNvbnN0IHByb3ZpZGVycyA9IHtcclxuICAgIFBFUkZFQ1RPOiAncGVyZmVjdG8nLFxyXG4gICAgQlJPV1NFUlNUQUNLOiAnYnJvd3NlcnN0YWNrJyxcclxuICAgIFNBVUNFTEFCUzogJ3NhdWNlJyxcclxuICAgIExBTUJEQVRFU1Q6ICdsYW1iZGEnLFxyXG4gICAgVEVTVElOR0JPVDogJ3Rlc3Rpbmdib3QnXHJcbn07XHJcblxyXG5jb25zdCBjb250ZXh0TGlzdCA9IHtcclxuICAgIGFuZHJvaWQ6ICdhbmRyb2lkJyxcclxuICAgIGlvczogJ2lvcycsXHJcbiAgICBoeWJyaWQ6ICdoeWJyaWQnLFxyXG4gICAgd2ViOiAnd2ViJ1xyXG59O1xyXG5cclxuY29uc3QgY21kc1RvT3ZlcndyaXRlID0gWyckJCcsICckJywnYWRkVmFsdWUnLCdjbGVhclZhbHVlJywnY2xpY2snLCdkb3VibGVDbGljaycsJ2RyYWdBbmREcm9wJywnZ2V0QXR0cmlidXRlJywnZ2V0Q1NTUHJvcGVydHknLCdnZXRDb21wdXRlZExhYmVsJywnZ2V0Q29tcHV0ZWRSb2xlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRIVE1MJywnZ2V0TG9jYXRpb24nLCdnZXRQcm9wZXJ0eScsJ2dldFNpemUnLCdnZXRUYWdOYW1lJywnZ2V0VGV4dCcsJ2dldFZhbHVlJywnaXNDbGlja2FibGUnLCdpc0Rpc3BsYXllZCcsJ2lzRGlzcGxheWVkSW5WaWV3cG9ydCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAnaXNFbmFibGVkJywnaXNFcXVhbCcsJ2lzRXhpc3RpbmcnLCdpc0ZvY3VzZWQnLCdpc1NlbGVjdGVkJywnbW92ZVRvJywnbmV4dEVsZW1lbnQnLCdwYXJlbnRFbGVtZW50JywncHJldmlvdXNFbGVtZW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFjdCQkJywncmVhY3QkJywnc2F2ZVNjcmVlbnNob3QnLCdzY3JvbGxJbnRvVmlldycsJ3NlbGVjdEJ5QXR0cmlidXRlJywnc2VsZWN0QnlJbmRleCcsJ3NlbGVjdEJ5VmlzaWJsZVRleHQnLCdzZXRWYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhZG93JCQnLCdzaGFkb3ckJywndG91Y2hBY3Rpb24nLCd3YWl0Rm9yQ2xpY2thYmxlJywnd2FpdEZvckRpc3BsYXllZCcsJ3dhaXRGb3JFbmFibGVkJywnd2FpdEZvckV4aXN0Jywnd2FpdFVudGlsJ107XHJcblxyXG5jb25zdCBpc0VsZW1lbnROb3RGb3VuZCA9IChlbCkgPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgaWYgKFxyXG4gICAgICAgIGVsLmVycm9yICYmIChcclxuICAgICAgICBlbC5lcnJvci5lcnJvciA9PT0gJ25vIHN1Y2ggZWxlbWVudCcgfHxcclxuICAgICAgICAoZWwuZXJyb3IubWVzc2FnZSAmJiAvKiB3aW5hcHBkcml2ZXIgd2luLnJpZ2h0Q2xpY2sgKi8gZWwuZXJyb3IubWVzc2FnZS5zdGFydHNXaXRoKCdubyBzdWNoIGVsZW1lbnQnKSB8fFxyXG4gICAgICAgIGVsLmVycm9yLm1lc3NhZ2UgJiYgLyogd2luYXBwZHJpdmVyICovIGVsLmVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aCgnQW4gZWxlbWVudCBjb3VsZCBub3QgYmUgbG9jYXRlZCcpKSlcclxuICAgICkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBtYXRjaFBhdHRlcm46IGZ1bmN0aW9uKHZhbCwgcGF0dGVybikge1xyXG4gICAgICAgIGlmICghdmFsICYmICFwYXR0ZXJuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsb2JUb1JlZ2V4ID0gcmVxdWlyZSgnZ2xvYi10by1yZWdleHAnKTtcclxuICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcclxuXHJcbiAgICAgICAgdmFyIHJlZ2V4O1xyXG4gICAgICAgIGlmIChwYXR0ZXJuLmluZGV4T2YoJ3JlZ2V4OicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB1c2luZyBhIHJlZ3VsYXItZXhwcmVzc2lvblxyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybi5zdWJzdHJpbmcoJ3JlZ2V4OicubGVuZ3RoKSwgJ2cnKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uaW5kZXhPZigncmVnZXhpOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2ggdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXItZXhwcmVzc2lvblxyXG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybi5zdWJzdHJpbmcoJ3JlZ2V4aTonLmxlbmd0aCksICdpZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdleGFjdDonKSA9PSAwIHx8IHBhdHRlcm4gPT09ICcnKSB7ICAvLyBtYXRjaCBhIHN0cmluZyBleGFjdGx5LCB2ZXJiYXRpbVxyXG4gICAgICAgICAgICByZXR1cm4gcGF0dGVybi5zdWJzdHJpbmcoJ2V4YWN0OicubGVuZ3RoKSA9PT0gdmFsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybi5pbmRleE9mKCdnbG9iOicpID09IDApIHsgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBhZ2FpbnN0IGEgY2FzZS1pbnNlbnNpdGl2ZSBcImdsb2JcIiBwYXR0ZXJuXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybi5zdWJzdHJpbmcoJ2dsb2I6Jy5sZW5ndGgpLCB7IGZsYWdzOiAnaWcnIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWwpO1xyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBwcmVmaXggc2FtZSBhcyBnbG9iIG1hdGNoaW5nXHJcbiAgICAgICAgICAgIHJlZ2V4ID0gZ2xvYlRvUmVnZXgocGF0dGVybiwgeyBmbGFnczogJ2lnJyB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0LCB0aHJvd0V4Y2VwdGlvbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5zZXRUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzLCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbDtcclxuICAgICAgICBpZiAobG9jYXRvciAmJiBsb2NhdG9yLmNvbnN0cnVjdG9yICYmIGxvY2F0b3IuY29uc3RydWN0b3IubmFtZSA9PT0gJ0VsZW1lbnQnKSB7XHJcbiAgICAgICAgICAgIGVsID0gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG4gICAgICAgICAgICBlbCA9IGF3YWl0IHRoaXMuZHJpdmVyLiQobG9jYXRvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbGVtZW50Tm90Rm91bmQgPSBpc0VsZW1lbnROb3RGb3VuZChlbCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnROb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTEVNRU5UX05PVF9GT1VORCwgYFVuYWJsZSB0byBmaW5kIGVsZW1lbnQ6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3YWl0Rm9yVmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZWwud2FpdEZvckRpc3BsYXllZCh7IHRpbWVvdXQ6dGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uICYmIGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocm93RXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVsZW1lbnRzOiBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZWxzID0gW107XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHRoaXMuZHJpdmVyLiQkKHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBhd2FpdCBtb2R1bGUuZXhwb3J0cy5yZXN0b3JlVGltZW91dEltcGxpY2l0LmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWxzO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDaGlsZEVsZW1lbnQ6IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHBhcmVudEVsZW1lbnQsIHdhaXRGb3JWaXNpYmxlLCB0aW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMuc2V0VGltZW91dEltcGxpY2l0LmNhbGwodGhpcywgdGltZW91dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhdG9yID0gdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yKGxvY2F0b3IpO1xyXG5cclxuICAgICAgICBpZiAoIShwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVsZW1lbnQuJCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gcGFyZW50RWxlbWVudCwgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbCA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJChsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudE5vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWwpO1xyXG4gICAgICAgIGlmIChlbGVtZW50Tm90Rm91bmQpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX0ZPVU5ELCBgVW5hYmxlIHRvIGZpbmQgZWxlbWVudDogJHtsb2NhdG9yfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdhaXRGb3JWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBlbC53YWl0Rm9yRGlzcGxheWVkKHsgdGltZW91dDogdGltZW91dCA/IHRpbWVvdXQgOiB0aGlzLndhaXRGb3JUaW1lb3V0fSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbW9kdWxlLmV4cG9ydHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0aWxsIG5vdCBkaXNwbGF5ZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfVklTSUJMRSwgYEVsZW1lbnQgbm90IHZpc2libGU6ICR7bG9jYXRvcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Q2hpbGRFbGVtZW50czogYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgcGFyZW50RWxlbWVudCwgdGltZW91dCkge1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzLnNldFRpbWVvdXRJbXBsaWNpdC5jYWxsKHRoaXMsIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYXRvciA9IHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvcihsb2NhdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKCEocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LiQkKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBwYXJlbnRFbGVtZW50LCBtdXN0IGJlIGEgdmFsaWQgZWxlbWVudCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGVscyA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGVscyA9IGF3YWl0IHBhcmVudEVsZW1lbnQuJCQobG9jYXRvcik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c05vdEZvdW5kID0gaXNFbGVtZW50Tm90Rm91bmQoZWxzKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRzTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG1vZHVsZS5leHBvcnRzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbHM7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFRpbWVvdXRJbXBsaWNpdDogYXN5bmMgZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kcml2ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ICogMTAwMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYHRpbWVvdXQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgKiAxMDAwfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAmJiB0aW1lb3V0ID4gdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGB0aW1lb3V0IG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCAqIDEwMDB9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGltZW91dHM7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmXHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9PT0gJ01pY3Jvc29mdEVkZ2UnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgb24gRWRnZVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5nZXRUaW1lb3V0cykge1xyXG4gICAgICAgICAgICAvLyBjaHJvbWUgPj0gNzVcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuc3RvcFVybCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5zdG9wVXJsLmluY2x1ZGVzKCdwZXJmZWN0b21vYmlsZS5jb20nKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dHMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaW1lb3V0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmYWlscyBvbiBwZXJmZWN0byBtb2JpbGVcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRUaW1lb3V0cyBlcnJvcicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLnRpbWVvdXRzKSB7XHJcbiAgICAgICAgICAgIC8vIGNocm9tZSA+PSA3MiAmJiBjaHJvbWUgPCA3NVxyXG4gICAgICAgICAgICB0aW1lb3V0cyA9IHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy50aW1lb3V0cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5pbXBsaWNpdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ID0gdGltZW91dHMuaW1wbGljaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aW1lb3V0cyAmJiB0aW1lb3V0cy5wYWdlTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmV2UGFnZUxvYWRUaW1lb3V0ID0gdGltZW91dHMucGFnZUxvYWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlci5zZXRUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMgJiYgdGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBicm93c2VyTmFtZSAnZGVmYXVsdCcgb24gYW5kcm9pZCBcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3BhZ2VMb2FkJzogdGltZW91dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHtcclxuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc3RvcmVUaW1lb3V0SW1wbGljaXQ6IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2SW1wbGljaXRUaW1lb3V0ICYmIHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMuX3ByZXZJbXBsaWNpdFRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2UGFnZUxvYWRUaW1lb3V0ICYmIHRoaXMuZHJpdmVyLnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdwYWdlTG9hZCc6IHRoaXMuX3ByZXZQYWdlTG9hZFRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyA9PT0gdW5kZWZpbmVkIHx8IGFyZyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBpcyByZXF1aXJlZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudFN0cmluZzogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIHN0cmluZy5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZyB8fCB0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCJJbnZhbGlkIGFyZ3VtZW50IC0gJ1wiICsgbmFtZSArIFwiJyBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50TnVtYmVyOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlOiBmdW5jdGlvbihhcmcsIG5hbWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInIHx8IGFyZyA8IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRBcmd1bWVudEJvb2w6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPSB0eXBlb2YodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiSW52YWxpZCBhcmd1bWVudCAtICdcIiArIG5hbWUgKyBcIicgc2hvdWxkIGJlIHRydWUgb3IgZmFsc2UuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw6IGZ1bmN0aW9uKGFyZywgbmFtZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoYXJnKSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKGFyZykgIT0gdHlwZW9mKHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSB0cnVlIG9yIGZhbHNlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFzc2VydEFyZ3VtZW50VGltZW91dDogZnVuY3Rpb24oYXJnLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiAodHlwZW9mKGFyZykgIT09ICdudW1iZXInIHx8IGFyZyA8IDApKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIkludmFsaWQgYXJndW1lbnQgLSAnXCIgKyBuYW1lICsgXCInIHNob3VsZCBiZSBhIG5vbiBuZWdhdGl2ZSBudW1iZXIuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY29udGV4dExpc3Q6IGNvbnRleHRMaXN0LFxyXG5cclxuICAgIGFzc2VydENvbnRleHQ6IGFzeW5jIGZ1bmN0aW9uKC4uLmFsb3dlZENvbnRleHRzKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRDb250ZXh0KCk7XHJcbiAgICAgICAgY29uc3QgaXNXZWIgPSAoY29udGV4dCAmJiAoY29udGV4dC5pbmRleE9mKCdXRUJWSUVXJykgPiAtMSB8fCBjb250ZXh0LmluZGV4T2YoJ0NIUk9NSVVNJykgPiAtMSkpO1xyXG5cclxuICAgICAgICBpZiAoaXNXZWIpIHtcclxuICAgICAgICAgICAgaWYgKGFsb3dlZENvbnRleHRzLmluY2x1ZGVzKGNvbnRleHRMaXN0LndlYikgfHwgYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuaHlicmlkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBhbGwgaXMgb2tcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBjb250ZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuYW5kcm9pZCkgfHwgYWxvd2VkQ29udGV4dHMuaW5jbHVkZXMoY29udGV4dExpc3QuaW9zKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlLCBhbGwgaXMgb2tcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBjb250ZXh0Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFdkaW9Mb2NhdG9yOiBmdW5jdGlvbihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG9jYXRvciA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBYUGF0aCBpbnN0ZWFkIG9mIENTUyBmb3IgYnJvd3NlciB0ZXN0cywgc2luY2UgSUQgY2FuIGNvbnRhaW4gaWxsZWdhbCBjaGFyYWN0ZXJzXHJcbiAgICAgICAgICAgIC8vIGFuZCBlc2NhcGluZyBkb2Vzbid0IHdvcmsgcmVsaWFibHkgb3IgaW4gaWRlbnRpY2FsIG1hbm5lciBpbiBhbGwgYnJvd3NlclxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzICYmIHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyMnICsgbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAnW25hbWU9XCInICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ1wiXSc7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluay1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yLnN1YnN0cignY3NzPScubGVuZ3RoKTsgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgY3NzLCBqdXN0IHJlbW92ZSBjc3M9IHByZWZpeFxyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGFnPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJzwnICsgbG9jYXRvci5zdWJzdHIoJ3RhZz0nLmxlbmd0aCkgKyAnIC8+JztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExvZ1R5cGVzOiBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgPT09ICdOQVRJVkVfQVBQJykge1xyXG4gICAgICAgICAgICByZXR1cm4gWydsb2djYXQnLCAnYnVncmVwb3J0JywgJ3NlcnZlciddO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbJ2Jyb3dzZXInLCAnZHJpdmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBwcm92aWRlcjogcHJvdmlkZXJzLFxyXG5cclxuICAgIGRldGVybWluZVByb3ZpZGVyOiBmdW5jdGlvbih3ZGlvT3B0cykge1xyXG4gICAgICAgIGlmICghd2Rpb09wdHMgfHwgIXdkaW9PcHRzLmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSB8fCAod2Rpb09wdHMuaG9zdG5hbWUgJiYgd2Rpb09wdHMuaG9zdG5hbWUuaW5jbHVkZXMoJ3BlcmZlY3RvbW9iaWxlLmNvbScpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJzLlBFUkZFQ1RPO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuQlJPV1NFUlNUQUNLO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5TQVVDRUxBQlM7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ZGlvT3B0cy5ob3N0bmFtZS5pbmNsdWRlcygnbGFtYmRhdGVzdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnMuTEFNQkRBVEVTVDtcclxuICAgICAgICB9IGVsc2UgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVycy5URVNUSU5HQk9UO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc0NpcmN1bGFyRGVwZW5kZW5jeTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9iaik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoU3RyaW5nKGUpLmluY2x1ZGVzKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBhc3NlcnRDaXJjdWxhcjogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgY29uc3QgaGFzQ2lyY3VsYXJEZXBlbmRlbmN5ID0gdGhpcy5oYXNDaXJjdWxhckRlcGVuZGVuY3kob2JqKTtcclxuICAgICAgICBpZiAoaGFzQ2lyY3VsYXJEZXBlbmRlbmN5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQ0lSQ1VMQVJfRVJST1IsIGhhc0NpcmN1bGFyRGVwZW5kZW5jeSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBuZXdWaWRlb0F0dGFjaG1lbnQ6IChmaWxlTmFtZSwgdmlkZW9VcmwpID0+ICh7XHJcbiAgICAgICAgaWQ6IHYxKCksXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgdHlwZTogJ3ZpZGVvJyxcclxuICAgICAgICBzdWJ0eXBlOiAnc2NyZWVuY2FzdCcsXHJcbiAgICAgICAgX3VybDogdmlkZW9VcmwsXHJcbiAgICB9KSxcclxuXHJcbiAgICBvdmVyd3JpdGVXZGlvQ29tbWFuZHM6IGFzeW5jIGZ1bmN0aW9uKGRyaXZlcikge1xyXG4gICAgICAgIC8vIGlmIGVsZW1lbnQgY29tbWFuZCBpcyBpbnZva2VkIGRpcmVjdGx5IGZyb20gdXNlciBzY3JpcHQgYW5kIGVycm9yIGhhcHBlbnMsXHJcbiAgICAgICAgLy8gaXQgd29uJ3QgYmUgY2F1Z2h0IGFuZCB3aWxsIGxlYWQgdG8gdW5oYW5kbGVkUmVqZWN0aW9uIChzaW5jZSBpdCdzIGV4ZWN1dGVkIGluIGFzeW5jIG1hbm5lciB3aXRob3V0IGF3YWl0aW5nKSBhbmQgdGVzdCByZXN1bHRzIHdpbGwgYmUgbG9zdC5cclxuXHJcbiAgICAgICAgLy8gZS5nLlxyXG4gICAgICAgIC8vIHZhciBlbCA9IHdlYi5maW5kRWxlbWVudCgnaWQ9Zm9vJyk7XHJcbiAgICAgICAgLy8gZWwuY2xpY2soKTsgLy8gaWYgZWxlbWVudCBpcyBub3QgdmlzaWJsZSB0aGVuIGNsaWNrIHdpbGwgdGhyb3cgZXZlbnR1YWxseVxyXG5cclxuICAgICAgICAvLyB0aGVyZWZvcmUgd2Ugd3JhcCBhbGwgd2RpbyBjb21tYW5kcyB0byBtYWtlIHRoZW0gZXhlY3V0ZSBzeW5jaHJvbm91c2x5LlxyXG4gICAgICAgIC8vIFAuUy4gaXQgd291bGQgYmUgYmV0dGVyIHRvIGRpc2FsbG93IHVzZXJzIGZyb20gdXNpbmcgd2RpbyBlbGVtZW50IGNvbW1hbmRzIGRpcmVjdGx5IHNpbmNlIHRoZXkgYXJlIG5vdCBkaXNwbGF5ZWQgaW4gbG9ncyBvciByZXN1bHRzLlxyXG4gICAgICAgIC8vIGJ1dCB3ZSBoYXZlIG5vIHdheSBkZXRlcm1pbmluZyB3aGV0aGVyIGNvbW1hbmQgd2FzIGV4ZWN1dGVkIGZyb20gdXNlciBzY3JpcHQgb3IgZnJvbSBveHlnZW4gaW50ZXJuYWxzLi4uXHJcblxyXG4gICAgICAgIGZvciAobGV0IGNtZCBvZiBjbWRzVG9PdmVyd3JpdGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgZHJpdmVyLm92ZXJ3cml0ZUNvbW1hbmQoY21kLCBmdW5jdGlvbiAob3JpZ0Z1bmMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnRnVuYy5hcHBseSh1bmRlZmluZWQsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XHJcbiAgICAgICAgICAgIH0sIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuIl19
@@ -1,48 +1,48 @@
1
- [{
2
- "header": "Suite Name",
3
- "value": "${suite.name}"
4
- },
5
- {
6
- "header": "Suite Iteration",
7
- "value": "${suite.iteration}"
8
- },
9
- {
10
- "header": "Suite Status",
11
- "value": "${suite.status}"
12
- },
13
- {
14
- "header": "Case Name",
15
- "value": "${case.name}"
16
- },
17
- {
18
- "header": "Case Iteration",
19
- "value": "${case.iteration}"
20
- },
21
- {
22
- "header": "Case Status",
23
- "value": "${case.status}"
24
- },
25
- {
26
- "header": "Failure Step",
27
- "value": "${failure.step}"
28
- },
29
- {
30
- "header": "Failure Type",
31
- "value": "${failure.type}"
32
- },
33
- {
34
- "header": "Failure Message",
35
- "value": "${failure.message}"
36
- },
37
- {
38
- "header": "Failure Location",
39
- "value": "${failure.location}"
40
- },
41
- {
42
- "header": "",
43
- "value": "${param.all}"
44
- },
45
- {
46
- "header": "",
47
- "value": "${var.all}"
48
- }]
1
+ [{
2
+ "header": "Suite Name",
3
+ "value": "${suite.name}"
4
+ },
5
+ {
6
+ "header": "Suite Iteration",
7
+ "value": "${suite.iteration}"
8
+ },
9
+ {
10
+ "header": "Suite Status",
11
+ "value": "${suite.status}"
12
+ },
13
+ {
14
+ "header": "Case Name",
15
+ "value": "${case.name}"
16
+ },
17
+ {
18
+ "header": "Case Iteration",
19
+ "value": "${case.iteration}"
20
+ },
21
+ {
22
+ "header": "Case Status",
23
+ "value": "${case.status}"
24
+ },
25
+ {
26
+ "header": "Failure Step",
27
+ "value": "${failure.step}"
28
+ },
29
+ {
30
+ "header": "Failure Type",
31
+ "value": "${failure.type}"
32
+ },
33
+ {
34
+ "header": "Failure Message",
35
+ "value": "${failure.message}"
36
+ },
37
+ {
38
+ "header": "Failure Location",
39
+ "value": "${failure.location}"
40
+ },
41
+ {
42
+ "header": "",
43
+ "value": "${param.all}"
44
+ },
45
+ {
46
+ "header": "",
47
+ "value": "${var.all}"
48
+ }]