oxygen-cli 1.37.9 → 1.38.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 (304) hide show
  1. package/CHANGELOG.md +1687 -1687
  2. package/LICENSE +672 -672
  3. package/README.md +37 -37
  4. package/build/core/OxygenCore.js +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 +2 -1
  19. package/build/lib/cli.js +12 -2
  20. package/build/lib/debugger.js +1 -1
  21. package/build/lib/img-merge.js +1 -1
  22. package/build/lib/launcher.js +1 -1
  23. package/build/lib/logger.js +43 -43
  24. package/build/lib/moduleRequire.js +1 -1
  25. package/build/lib/parallel-launcher.js +1 -1
  26. package/build/lib/param-manager.js +1 -1
  27. package/build/lib/param-reader-csv.js +1 -1
  28. package/build/lib/param-reader-excel.js +1 -1
  29. package/build/lib/param-reader-json.js +1 -1
  30. package/build/lib/text-to-image.js +1 -1
  31. package/build/lib/util.js +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-pdf.js +35 -35
  126. package/build/ox_modules/module-proxy.js +77 -77
  127. package/build/ox_modules/module-serial.js +55 -55
  128. package/build/ox_modules/module-shell.js +25 -25
  129. package/build/ox_modules/module-soap.js +72 -72
  130. package/build/ox_modules/module-twilio.js +41 -41
  131. package/build/ox_modules/module-utils.js +91 -91
  132. package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
  133. package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
  134. package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
  135. package/build/ox_modules/module-web/commands/assertExist.js +17 -17
  136. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
  137. package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
  138. package/build/ox_modules/module-web/commands/assertText.js +21 -21
  139. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
  140. package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
  141. package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
  142. package/build/ox_modules/module-web/commands/assertValue.js +20 -20
  143. package/build/ox_modules/module-web/commands/back.js +16 -16
  144. package/build/ox_modules/module-web/commands/clear.js +18 -18
  145. package/build/ox_modules/module-web/commands/click.js +25 -25
  146. package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
  147. package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
  148. package/build/ox_modules/module-web/commands/debug.js +15 -15
  149. package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
  150. package/build/ox_modules/module-web/commands/deselect.js +22 -22
  151. package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
  152. package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
  153. package/build/ox_modules/module-web/commands/execute.js +24 -24
  154. package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
  155. package/build/ox_modules/module-web/commands/findElement.js +19 -19
  156. package/build/ox_modules/module-web/commands/findElements.js +22 -22
  157. package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
  158. package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
  159. package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
  160. package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
  161. package/build/ox_modules/module-web/commands/getCookies.js +13 -13
  162. package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
  163. package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
  164. package/build/ox_modules/module-web/commands/getHTML.js +17 -17
  165. package/build/ox_modules/module-web/commands/getSource.js +16 -16
  166. package/build/ox_modules/module-web/commands/getText.js +18 -18
  167. package/build/ox_modules/module-web/commands/getTitle.js +12 -12
  168. package/build/ox_modules/module-web/commands/getUrl.js +16 -16
  169. package/build/ox_modules/module-web/commands/getValue.js +18 -18
  170. package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
  171. package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
  172. package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
  173. package/build/ox_modules/module-web/commands/index.js +1 -1
  174. package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
  175. package/build/ox_modules/module-web/commands/isChecked.js +18 -18
  176. package/build/ox_modules/module-web/commands/isExist.js +19 -19
  177. package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
  178. package/build/ox_modules/module-web/commands/isSelected.js +23 -23
  179. package/build/ox_modules/module-web/commands/isVisible.js +19 -19
  180. package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
  181. package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
  182. package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
  183. package/build/ox_modules/module-web/commands/mock.js +20 -20
  184. package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
  185. package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
  186. package/build/ox_modules/module-web/commands/newWindow.js +16 -16
  187. package/build/ox_modules/module-web/commands/open.js +16 -16
  188. package/build/ox_modules/module-web/commands/pause.js +15 -15
  189. package/build/ox_modules/module-web/commands/point.js +21 -21
  190. package/build/ox_modules/module-web/commands/pointJS.js +15 -15
  191. package/build/ox_modules/module-web/commands/refresh.js +15 -15
  192. package/build/ox_modules/module-web/commands/rightClick.js +17 -17
  193. package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
  194. package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
  195. package/build/ox_modules/module-web/commands/select.js +23 -23
  196. package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
  197. package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
  198. package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
  199. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
  200. package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
  201. package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
  202. package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
  203. package/build/ox_modules/module-web/commands/type.js +20 -20
  204. package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
  205. package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
  206. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
  207. package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
  208. package/build/ox_modules/module-web/commands/verifyText.js +21 -21
  209. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
  210. package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
  211. package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
  212. package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
  213. package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
  214. package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
  215. package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
  216. package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
  217. package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
  218. package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
  219. package/build/ox_modules/module-web/commands/waitForText.js +20 -20
  220. package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
  221. package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
  222. package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
  223. package/build/ox_modules/module-web.js +94 -94
  224. package/build/ox_modules/module-win/commands/assertText.js +17 -17
  225. package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
  226. package/build/ox_modules/module-win/commands/assertValue.js +14 -14
  227. package/build/ox_modules/module-win/commands/back.js +11 -11
  228. package/build/ox_modules/module-win/commands/clear.js +13 -13
  229. package/build/ox_modules/module-win/commands/click.js +13 -13
  230. package/build/ox_modules/module-win/commands/clickLong.js +14 -14
  231. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
  232. package/build/ox_modules/module-win/commands/findElement.js +15 -15
  233. package/build/ox_modules/module-win/commands/findElements.js +15 -15
  234. package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
  235. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
  236. package/build/ox_modules/module-win/commands/getLocation.js +14 -14
  237. package/build/ox_modules/module-win/commands/getSource.js +12 -12
  238. package/build/ox_modules/module-win/commands/getText.js +14 -14
  239. package/build/ox_modules/module-win/commands/getValue.js +14 -14
  240. package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
  241. package/build/ox_modules/module-win/commands/index.js +1 -1
  242. package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
  243. package/build/ox_modules/module-win/commands/isChecked.js +14 -14
  244. package/build/ox_modules/module-win/commands/isClickable.js +14 -14
  245. package/build/ox_modules/module-win/commands/isExist.js +15 -15
  246. package/build/ox_modules/module-win/commands/isSelected.js +14 -14
  247. package/build/ox_modules/module-win/commands/isVisible.js +15 -15
  248. package/build/ox_modules/module-win/commands/open.js +13 -13
  249. package/build/ox_modules/module-win/commands/pause.js +12 -12
  250. package/build/ox_modules/module-win/commands/rightClick.js +13 -13
  251. package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
  252. package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
  253. package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
  254. package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
  255. package/build/ox_modules/module-win/commands/tap.js +13 -13
  256. package/build/ox_modules/module-win/commands/type.js +16 -16
  257. package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
  258. package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
  259. package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
  260. package/build/ox_modules/module-win.js +47 -47
  261. package/build/ox_modules/utils.js +8 -8
  262. package/build/ox_reporters/excel/template.json +48 -48
  263. package/build/ox_reporters/html/index.ejs +163 -163
  264. package/build/ox_reporters/html/summary.ejs +77 -77
  265. package/build/ox_reporters/html/tests-details.ejs +134 -134
  266. package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
  267. package/build/ox_reporters/reporter-excel.js +1 -1
  268. package/build/ox_reporters/reporter-html.js +1 -1
  269. package/build/ox_reporters/reporter-json.js +1 -1
  270. package/build/ox_reporters/reporter-junit.js +1 -1
  271. package/build/ox_reporters/reporter-pdf.js +1 -1
  272. package/build/ox_reporters/reporter-rp.js +1 -1
  273. package/build/ox_reporters/reporter-xml.js +1 -1
  274. package/build/ox_services/service-devtools/submodule-network.js +1 -1
  275. package/build/ox_services/service-devtools.js +1 -1
  276. package/build/reporter/FileReporterBase.js +1 -1
  277. package/build/reporter/ReportAggregator.js +1 -1
  278. package/build/reporter/ReporterBase.js +1 -1
  279. package/build/reporter/WebSocketReporter.js +136 -0
  280. package/build/runners/WorkerProcess.js +1 -1
  281. package/build/runners/cucumber/CucumberEventListener.js +1 -1
  282. package/build/runners/cucumber/CucumberReporter.js +1 -1
  283. package/build/runners/cucumber/CucumberWorker.js +1 -1
  284. package/build/runners/cucumber/index.js +1 -1
  285. package/build/runners/cucumber/worker.js +1 -1
  286. package/build/runners/index.js +1 -1
  287. package/build/runners/oxygen/OxygenWorker.js +1 -1
  288. package/build/runners/oxygen/index.js +1 -1
  289. package/build/runners/oxygen/worker.js +1 -1
  290. package/config/default.json +6 -6
  291. package/package.json +137 -136
  292. package/types/index.d.ts +70 -70
  293. package/types/module-eyes.d.ts +39 -39
  294. package/types/module-http.d.ts +163 -163
  295. package/types/module-log.d.ts +34 -34
  296. package/types/module-mob.d.ts +966 -966
  297. package/types/module-pdf.d.ts +40 -40
  298. package/types/module-proxy.d.ts +100 -100
  299. package/types/module-shell.d.ts +24 -24
  300. package/types/module-utils.d.ts +99 -99
  301. package/types/module-web.d.ts +1053 -1053
  302. package/types/module-win.d.ts +352 -352
  303. package/types/oxygen.d.ts +53 -53
  304. package/log.txt +0 -1614
@@ -904,4 +904,4 @@ class OxygenRunner extends _events.EventEmitter {
904
904
  }
905
905
 
906
906
  exports.default = OxygenRunner;
907
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJ2MSIsInJlcXVpcmUiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl9jdXJyZW50Q2FzZVJlc3VsdElkIiwidW5kZWZpbmVkIiwiX2N1cnJlbnRTdWl0ZVJlc3VsdElkIiwiX2N1cnJlbnRTdGVwUmVzdWx0SWQiLCJfd2hlbkRpc3Bvc2VkIiwiZ2V0SWQiLCJpbml0IiwiY2FwcyIsInJlcG9ydGVyIiwiRXJyb3IiLCJfY3dkIiwiY3dkIiwicHJvY2VzcyIsIl9yZXBvcnRlciIsIl9pc0luaXRpYWxpemVkIiwib3B0RW52IiwiZW52IiwiZW52cyIsIk9iamVjdCIsImtleXMiLCJlbnZWYXJzIiwiX2VudiIsInRlc3RBdHRyaWJ1dGVzIiwiX3N1aXRlcyIsImRlYnVnUG9ydElkZSIsImRlYnVnUG9ydCIsIl9kZWJ1Z1BvcnQiLCJzY3JpcHRDb250ZW50TGluZU9mZnNldCIsImxvY2FsVGltZSIsIl9zdGFydFdvcmtlclByb2Nlc3MiLCJfd29ya2VyX0luaXRPeHlnZW4iLCJkaXNwb3NlIiwic3RhdHVzIiwic3RvcERlYnVnZ2VyIiwiaXNSdW5uaW5nIiwic3RvcCIsImUiLCJjb25zb2xlIiwid2FybiIsIl9yZXNldEdsb2JhbFZhcmlhYmxlcyIsInJ1biIsIm9uUnVubmVyU3RhcnQiLCJlcnJvciIsInJlc3VsdCIsIl9ydW5UZXN0IiwiZmFpbHVyZSIsIm9uUnVubmVyRW5kIiwia2lsbCIsImRlYnVnQ29udGludWUiLCJkZWJ1Z2dlciIsImNvbnRpbnVlIiwidXBkYXRlQnJlYWtwb2ludHMiLCJmaWxlUGF0aCIsInNldEJyZWFrcG9pbnRzQWN0aXZlIiwicHJvbWlzZXMiLCJ0c0JyZWFrcG9pbnRzIiwiZ2V0QnJlYWtwb2ludHMiLCJzdWl0ZXNCcmVha3BvaW50cyIsInN1aXRlQnAiLCJpbmNsdWRlcyIsImFjdHVhbEN1cnJlbnRCcCIsInJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlIiwidXNlclNldEJwIiwic2V0QnJlYWtwb2ludCIsInByb21pc2VBbGxQcm9taXNlIiwiYWxsIiwidGhlbiIsInZhbHVlIiwiZGVidWciLCJicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIiwicmVwbENsb3NlIiwiX3NlbmQiLCJldmVudCIsIm5hbWUiLCJyZXBsU2VuZCIsImNtZCIsImNvbnRlbnQiLCJyZXBsU3RhcnQiLCJpbnZva2UiLCJjbGVhckJyZWFrcG9pbnQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwiZ2V0VGltZVN0YW1wIiwiU3RhdHVzIiwiUEFTU0VEIiwiX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2siLCJzdWl0ZVJlc3VsdCIsIl9ydW5TdWl0ZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsImhhc0ZhaWxlZFN1aXRlcyIsInNvbWUiLCJzdWl0ZUl0ZXJhdGlvbnMiLCJ4IiwiRkFJTEVEIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rIiwicGF0aCIsIml0ZXJhdGlvbkNvdW50Iiwic2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzIiwicmVSdW5PbkZhaWx1cmUiLCJyZVJ1bk9uRmFpbGVkIiwibWF4UmVydW5zIiwicmVSdW5Db3VudCIsInJlUnVuRGVsYXkiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJpZCIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsIml0ZXJhdGlvbk51bSIsIl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayIsIm9uU3VpdGVTdGFydCIsImNhc2VJdGVyYXRpb24iLCJzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyIsImNhc2VSZXN1bHRJZCIsIm9uQ2FzZVN0YXJ0IiwiY2FzZVJlc3VsdCIsIl9ydW5DYXNlIiwic2xlZXAiLCJvbkNhc2VFbmQiLCJvbkl0ZXJhdGlvbkVuZCIsIldBUk5JTkciLCJfd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayIsIm9uU3VpdGVFbmQiLCJwYXJhbXMiLCJyZVJ1biIsInBhcmFtTWFuYWdlciIsInJlYWRQcmV2IiwiXyIsImV4dGVuZCIsImdldFZhbHVlcyIsImkiLCJfd29ya2VyX2NhbGxCZWZvcmVDYXNlSG9vayIsIlRlc3RDYXNlUmVzdWx0IiwibG9jYXRpb24iLCJyZWFkTmV4dCIsIl93b3JrZXJfc3RhcnRTZXNzaW9uIiwicmVzdWx0U3RvcmUiLCJjb250ZXh0IiwibW9kdWxlQ2FwcyIsIl93b3JrZXJfUnVuIiwiX3Byb2Nlc3NUZXN0UmVzdWx0cyIsInN0ZXBzIiwibG9ncyIsImhhciIsImF0dHJpYnV0ZXMiLCJhdHRhY2htZW50cyIsImZhaWxlZFN0ZXBzIiwiZmluZCIsIndhcm5pbmdTdGVwcyIsImlzRW1wdHkiLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rIiwiZGlzcG9zZU94eWdlbk1vZHVsZXMiLCJhdXRvRGlzcG9zZSIsIl93b3JrZXJfZW5kU2Vzc2lvbiIsIl93aGVuVGVzdENhc2VGaW5pc2hlZCIsInJlamVjdCIsInNjcmlwdE5hbWUiLCJzY3JpcHRQYXRoIiwidmFycyIsInRlc3QiLCJjYXNlIiwiaXRlcmF0aW9uIiwicG9GaWxlIiwicG8iLCJpbml0T3h5Z2VuIiwic3RhcnRTZXNzaW9uIiwiZGlzcG9zZU1vZHVsZXMiLCJlbmRTZXNzaW9uIiwiaW52b2tlVGVzdEhvb2siLCJvbkxvZ0VudHJ5Iiwid29ya2VyUGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJXb3JrZXJQcm9jZXNzIiwic3RhcnQiLCJfaG9va1dvcmtlckV2ZW50cyIsInN0YXJ0RGVidWdnZXIiLCJfaG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzIiwiX3RoaXMiLCJzdWJzY3JpYmUiLCJfaGFuZGxlQmVmb3JlQ29tbWFuZCIsImJpbmQiLCJfaGFuZGxlQWZ0ZXJDb21tYW5kIiwib24iLCJwYXlsb2FkIiwiZXhpdERvbmUiLCJlbWl0IiwiZXhpdENvZGUiLCJwcm9taXNlIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJtc2ciLCJsZXZlbCIsImluZm8iLCJlcnIiLCJ0aW1lIiwic3JjIiwic3VpdGVJZCIsImNhc2VJZCIsInN0ZXBJZCIsInN0YWNrIiwibWV0aG9kIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwib25TdGVwU3RhcnQiLCJtb2R1bGUiLCJvblN0ZXBFbmQiLCJfZW1pdEl0ZXJhdGlvbkVuZCIsInRzIiwidGMiLCJzdWl0ZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25OdW0iLCJjYXNlSXRlcmF0aW9uUmVzdWx0IiwiX3N0YXR1cyIsIl9lbWl0VGVzdEVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUE7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFuQkEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLGNBQVAsQ0FBWjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxNQUF2QjtBQUNBLE1BQU1DLFVBQVUsR0FBRyxDQUFuQjs7QUFFQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBU0MsT0FBTyxDQUFDLE1BQUQsQ0FBdEI7O0FBa0JBLE1BQU1DLE1BQU0sR0FBR0MsRUFBRSxJQUFJLElBQUlDLE9BQUosQ0FBWUMsT0FBTyxJQUFJQyxVQUFVLENBQUNELE9BQUQsRUFBVUYsRUFBVixDQUFqQyxDQUFyQjs7QUFFQSxNQUFNSSxvQkFBb0IsR0FBSUMsTUFBRCxJQUFZO0FBQ3JDLFFBQU1DLE1BQU0sR0FBRyxFQUFmOztBQUVBLE1BQ0lELE1BQU0sSUFDTkUsS0FBSyxDQUFDQyxPQUFOLENBQWNILE1BQWQsQ0FEQSxJQUVBQSxNQUFNLENBQUNJLE1BQVAsR0FBZ0IsQ0FIcEIsRUFJRTtBQUNFSixJQUFBQSxNQUFNLENBQUNLLEdBQVAsQ0FBWUMsS0FBRCxJQUFXO0FBQ2xCLFVBQ0lBLEtBQUssSUFDTEEsS0FBSyxDQUFDQyxLQUROLElBRUFMLEtBQUssQ0FBQ0MsT0FBTixDQUFjRyxLQUFLLENBQUNDLEtBQXBCLENBRkEsSUFHQUQsS0FBSyxDQUFDQyxLQUFOLENBQVlILE1BQVosR0FBcUIsQ0FKekIsRUFLRTtBQUNFRSxRQUFBQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUYsR0FBWixDQUFpQkcsSUFBRCxJQUFVO0FBQ3RCLGNBQ0lBLElBQUksSUFDSkEsSUFBSSxDQUFDQyxXQURMLElBRUFQLEtBQUssQ0FBQ0MsT0FBTixDQUFjSyxJQUFJLENBQUND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LFVBQVYsRUFBc0JySixNQUF0QjtBQUNIOztBQWp6QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xuLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xpYi9sb2dnZXInO1xuY29uc3QgbG9nID0gbG9nZ2VyKCdPeHlnZW5SdW5uZXInKTtcbmNvbnN0IERFRkFVTFRfSVNTVUVSID0gJ3VzZXInO1xuY29uc3QgTUFYX1JFUlVOUyA9IDI7XG5cbmNvbnN0IHsgdjEgfSA9IHJlcXVpcmUoJ3V1aWQnKTtcblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBfICBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgVGVzdFN1aXRlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL3N1aXRlLXJlc3VsdCc7XG5pbXBvcnQgVGVzdENhc2VSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvY2FzZS1yZXN1bHQnO1xuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi8uLi9tb2RlbC9zdGF0dXMnO1xuaW1wb3J0IG94dXRpbCBmcm9tICcuLi8uLi9saWIvdXRpbCc7XG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XG5pbXBvcnQgT3h5Z2VuRXJyb3IgZnJvbSAnLi4vLi4vZXJyb3JzL094eWdlbkVycm9yJztcbmltcG9ydCBQYXJhbWV0ZXJNYW5hZ2VyIGZyb20gJy4uLy4uL2xpYi9wYXJhbS1tYW5hZ2VyLmpzJztcbmltcG9ydCBXb3JrZXJQcm9jZXNzIGZyb20gJy4uL1dvcmtlclByb2Nlc3MnO1xuXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcblxuY29uc3QgZ2V0U3VpdGVzQnJlYWtwb2ludHMgPSAoc3VpdGVzKSA9PiB7XG4gICAgY29uc3QgcmV0dmFsID0gW107XG5cbiAgICBpZiAoXG4gICAgICAgIHN1aXRlcyAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcbiAgICAgICAgc3VpdGVzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZS5jYXNlcykgJiZcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5tYXAoKGNhemUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwucHVzaChicmVha3BvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXR2YWw7XG59O1xuXG5jb25zdCByZW1vdmVCcmVha3BvaW50RnJvbVN1aXRlcyA9IChzdWl0ZXMsIHJlbW92ZUJyZWFrcG9pbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICAgIHN1aXRlcyAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcbiAgICAgICAgc3VpdGVzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShzdWl0ZS5jYXNlcykgJiZcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5tYXAoKGNhemUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5maWxlID09PSByZW1vdmVCcmVha3BvaW50LmZpbGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5saW5lID09PSByZW1vdmVCcmVha3BvaW50LmxpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5SdW5uZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gY2xhc3MgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuX2lkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWU7XG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyB0byBpdGVyYXRlIHRocm91Z2ggdGVzdCBjYXNlcyBhbmQgdGVzdCBzdWl0ZSBpdGVyYXRpb25zXG4gICAgICAgIHRoaXMuX3N1aXRlO1xuICAgICAgICB0aGlzLl9lbnZWYXJzID0ge307ICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRlc3RcbiAgICAgICAgdGhpcy5fdmFycyA9IHt9OyAgICAgLy8gdXNlci1kZWZpbmVkIHZhcmlhYmxlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgc2NyaXB0c1xuICAgICAgICB0aGlzLl9jYXBzID0ge307IC8vIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHRoYXQgYXJlIHBhc3NlZCB0byBlYWNoIG1vZHVsZVxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90ZXN0S2lsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gMztcbiAgICAgICAgdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwUmVzdWx0SWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8vIHByb21pc2VzXG4gICAgICAgIHRoaXMuX3doZW5EaXNwb3NlZCA9IGRlZmVyKCk7XG4gICAgfVxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kc1xuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgZ2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KG9wdGlvbnMsIGNhcHMgPSB7fSwgcmVwb3J0ZXIpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB0ZXN0IHN1aXRlIGlzIGRlZmluZWRcbiAgICAgICAgaWYgKCFvcHRpb25zLnN1aXRlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbml0aWFsaXphdGlvbiBmYWlsZWQgLSBubyB0ZXN0IHN1aXRlcyBhcmUgZGVmaW5lZC4gWW91IG11c3QgZGVmaW5lIFwic3VpdGVzXCIgcHJvcGVydHkgaW4gT3h5Z2VuIG9wdGlvbnMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5fY3dkID0gdGhpcy5fb3B0aW9ucy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgPSByZXBvcnRlcjtcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBtZXJnZSBjdXJyZW50IGFuZCB0ZXN0IGNvbmZpZ3VyYXRpb24gYmFzZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgICAgICBsZXQgb3B0RW52ID0ge307XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnYpIHtcbiAgICAgICAgICAgICAgICAvLyAnZW52JyBvcHRpb24gbWlnaHQgYmUgZGVmaW5lZCBlaXRoZXIgYXMgYSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCBvciBhcyBhbiBvYmplY3QgdGhhdCBsaXN0cyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgLy8gaWYgJ2VudicgaXMgYSBzdHJpbmcsIHRoZW4gcmVzb2x2ZSB0aGUgYWN0dWFsIHZhcmlhYmxlcyBmcm9tICdlbnZzJyBvYmplY3RcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygb3B0aW9ucy5lbnZzID09PSAnb2JqZWN0JyAmJiBvcHRpb25zLmVudnNbb3B0aW9ucy5lbnZdKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52c1tvcHRpb25zLmVudl07XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgJ2VudicgaXMgYW4gb2JqZWN0LCB1c2UgdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIGl0XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuZW52ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmVudikpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0RW52ID0gb3B0aW9ucy5lbnY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnZWYXJzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52VmFycykpIHtcbiAgICAgICAgICAgICAgICBvcHRFbnYgPSB7IC4uLm9wdEVudiwgLi4ub3B0aW9ucy5lbnZWYXJzIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFzc2lnbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgdGhpcy5fZW52ID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2VudixcbiAgICAgICAgICAgICAgICAuLi5vcHRFbnZcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0gb3B0aW9ucy50ZXN0QXR0cmlidXRlcyB8fCB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7IC4uLmNhcHMgfTsgLy8gYXNzaWduIGNhcHMgZm9yIGxhdGVyIHVzZVxuICAgICAgICB0aGlzLl9zdWl0ZXMgPSBbIC4uLm9wdGlvbnMuc3VpdGVzIF07XG4gICAgICAgIC8vIHNldCB1cCBkZWJ1Z2dpbmcgb3B0aW9uc1xuICAgICAgICAvLyBUT0RPOiB0aGlzIG5lZWRzIHRvIGJlIHJlaW1wbGVtZW50ZWQuIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgKGluaXRpYWxpemVEZWJ1Z2dlcikgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBPeHlnZW5cbiAgICAgICAgLy8gYW5kIGFkZGVkIHRvIElERSBpbnN0ZWFkLiBJLmUuIHRoZSBvbmx5IHRoaW5nIG94eWdlbiBzaG91bGQgZG8gaXMgdG8gbGF1bmNoIHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggdGhlIGRlYnVnZ2luZyBzd2l0Y2guXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9ICBvcHRpb25zLmRlYnVnUG9ydElkZSB8fCBvcHRpb25zLmRlYnVnUG9ydCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQgfHwgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgbnVsbDtcbiAgICAgICAgb3B0aW9ucy5zY3JpcHRDb250ZW50TGluZU9mZnNldCA9IHRoaXMuX3NjcmlwdENvbnRlbnRMaW5lT2Zmc2V0O1xuICAgICAgICB0aGlzLl9sb2NhbFRpbWUgPSAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmxvY2FsVGltZSkgfHwgdGhpcy5fbG9jYWxUaW1lO1xuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydFdvcmtlclByb2Nlc3MoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX0luaXRPeHlnZW4oKTtcbiAgICB9XG5cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fd29ya2VyICYmIGF3YWl0IHRoaXMuX3dvcmtlci5zdG9wRGVidWdnZXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmlzUnVubmluZykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdG9wKHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGVuIGRpc3Bvc2luZyBSdW5uZXInLCBlKTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnMgZHVyaW5nIHRoZSBkaXNwb3NlXG4gICAgICAgICAgICBsb2cud2FybignRXJyb3Igd2hlbiBkaXNwb3NpbmcgUnVubmVyOicsIGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ0NBTkNFTEVEJykge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRHbG9iYWxWYXJpYWJsZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJ1bigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6aW5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbml0aWFsaXphdGlvbiBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LCB3YWl0IGZvciAnaW5pdGlhbGl6ZWQnIGV2ZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc1J1bm5pbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByZXZpb3VzIHRlc3QgaXMgc3RpbGwgcnVubmluZywgd2FpdCBmb3IgJ3Rlc3QtZW5kZWQnIGV2ZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25SdW5uZXJTdGFydCh0aGlzLl9pZCwgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2Fwcyk7XG5cbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5UZXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZXJyb3IgJiYgcmVzdWx0ICYmIHJlc3VsdC5mYWlsdXJlKSB7XG4gICAgICAgICAgICBlcnJvciA9IHJlc3VsdC5mYWlsdXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25SdW5uZXJFbmQodGhpcy5faWQsIHJlc3VsdCwgZXJyb3IpO1xuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGtpbGwoc3RhdHVzID0gbnVsbCkge1xuICAgICAgICB0aGlzLl90ZXN0S2lsbGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5raWxsKHN0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1Z0NvbnRpbnVlKCkge1xuICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlcikge1xuICAgICAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLmNvbnRpbnVlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVCcmVha3BvaW50cyhicmVha3BvaW50cywgZmlsZVBhdGgpIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRzQnJlYWtwb2ludHMgPSB0aGlzLl93b3JrZXIuZGVidWdnZXIuZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlc0JyZWFrcG9pbnRzID0gZ2V0U3VpdGVzQnJlYWtwb2ludHModGhpcy5fc3VpdGVzKTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBicmVha3BvaW50cyBmcm9tIHN1aXRlcy9jYXNlcyB0cmVlXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3VpdGVCcCBvZiBzdWl0ZXNCcmVha3BvaW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRzLmluY2x1ZGVzKHN1aXRlQnAubGluZSkgJiYgIGZpbGVQYXRoID09PSBzdWl0ZUJwLmZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzKHRoaXMuX3N1aXRlcywgc3VpdGVCcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZGVsZXRlZCBicmVha3BvaW50c1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGFjdHVhbEN1cnJlbnRCcCBvZiB0c0JyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludHMuaW5jbHVkZXMoYWN0dWFsQ3VycmVudEJwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludEJ5VmFsdWUoZmlsZVBhdGgsIGFjdHVhbEN1cnJlbnRCcCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYWRkIG5ldyBicmVha3BvaW50c1xuICAgICAgICAgICAgICAgIGZvciAodmFyIHVzZXJTZXRCcCBvZiBicmVha3BvaW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRzQnJlYWtwb2ludHMuaW5jbHVkZXModXNlclNldEJwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlUGF0aCwgdXNlclNldEJwKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XG5cbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ3VwZGF0ZUJyZWFrcG9pbnRzKCkgZG9uZS4nKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgPSB0aGlzLl93b3JrZXIuZGVidWdnZXIuZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvbWlzZUFsbFByb21pc2UgOiBwcm9taXNlQWxsUHJvbWlzZSwgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA6IGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3InLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHJlcGxDbG9zZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXG4gICAgICAgICAgICBuYW1lOiAncmVwbF9zdG9wJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyByZXBsU2VuZChjbWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLl9zZW5kKHtcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXG4gICAgICAgICAgICBuYW1lOiAncmVwbF9ldmFsJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyByZXBsU3RhcnQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2UoJ3JlcGxTdGFydCcpO1xuICAgIH1cblxuICAgIHNldEJyZWFrcG9pbnQobGluZSkge1xuICAgICAgICAvKlxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl9zdWl0ZSAmJiB0aGlzLl9zdWl0ZS50ZXN0Y2FzZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRjID0gdGhpcy5fc3VpdGUudGVzdGNhc2VzW3RjaW5kZXhdO1xuICAgICAgICAgICAgbG9nLmRlYnVnKCdveHlnZW4uc2V0QnJlYWtwb2ludDogJyArIChsaW5lICsgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQpKTtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50KHRjLm5hbWUsIGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCk7XG4gICAgICAgIH0qL1xuICAgIH1cblxuICAgIGNsZWFyQnJlYWtwb2ludChsaW5lKSB7XG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmRlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY2xlYXJCcmVha3BvaW50KGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCwgbnVsbCk7XG4gICAgICAgIH0qL1xuICAgIH1cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgYXN5bmMgX3J1blRlc3QoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XG4gICAgICAgIHJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuUEFTU0VEO1xuICAgICAgICByZXN1bHQuc3VpdGVzID0gW107XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIC8vIGNhbGwgYmVmb3JlVGVzdCBob29rXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBzdWl0ZXNcbiAgICAgICAgICAgIGZvciAobGV0IHN1aXRlIG9mIHRoaXMuX3N1aXRlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5fcnVuU3VpdGUoc3VpdGUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcbiAgICAgICAgcmVzdWx0LmR1cmF0aW9uID0gcmVzdWx0LmVuZFRpbWUgLSByZXN1bHQuc3RhcnRUaW1lO1xuXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHJlc3VsdC5zdWl0ZXMuc29tZShzdWl0ZUl0ZXJhdGlvbnMgPT4ge1xuICAgICAgICAgICAgaWYgKHN1aXRlSXRlcmF0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1aXRlSXRlcmF0aW9ucykgJiYgc3VpdGVJdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSBoYXNGYWlsZWRTdWl0ZXMgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcbiAgICAgICAgcmVzdWx0LmVudmlyb25tZW50ID0geyAuLi50aGlzLl9lbnYgfTtcbiAgICAgICAgLy8gY29tYmluZSB0ZXN0IGRlZmluZWQgY2FwcyBhbmQgcGVyIG1vZHVsZSBjYXBhYmlsaXRpZXMsIHRoYXQgd2VyZSBwYXNzZWQgYnkgdXNlciBpbiBlYWNoIG1vZHVsZSdzIGluaXQgZnVuY3Rpb25cbiAgICAgICAgcmVzdWx0LmNhcGFiaWxpdGllcyA9IHsgLi4udGhpcy5fY2FwcywgLi4udGhpcy5fbW9kQ2FwcyB9OyAgICAvLyBhc3NpZ24gYSBjb3B5IG9mIF9jYXBzIG9iamVjdFxuICAgICAgICByZXN1bHQub3B0aW9ucyA9IHsgLi4udGhpcy5fb3B0aW9ucyB9OyAgLy8gYXNzaWduIGEgY29weSBvZiBfb3B0aW9ucyBvYmplY3RcblxuICAgICAgICAvLyBpZiBlcnJvciBvY2N1cmVkLCBhZGQgaXQgdG8gdGhlIHN1bW1hcnlcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlclRlc3RIb29rKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgX3J1blN1aXRlKHN1aXRlKSB7XG4gICAgICAgIGlmICghc3VpdGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignc3VpdGUgaXMgbnVsbCBpbiBfcnVuU3VpdGUoKSEhIScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlnbm9yZSBzdWl0ZSB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5IHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFzdWl0ZS5uYW1lICYmICFzdWl0ZS5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGFsd2F5cyBzcGVjaWZ5IHN1aXRlLml0ZXJhdGlvbkNvdW50XG4gICAgICAgIGlmICghc3VpdGUuaXRlcmF0aW9uQ291bnQpIHtcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgIGlmIChzdWl0ZS5pdGVyYXRpb25Db3VudCA+IDEpIHtcbiAgICAgICAgICAgIHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZVJ1bk9uRmFpbHVyZSA9IHRoaXMuX29wdGlvbnMucmVSdW5PbkZhaWxlZCB8fCBmYWxzZTtcbiAgICAgICAgY29uc3QgbWF4UmVydW5zID0gdGhpcy5fb3B0aW9ucy5yZVJ1bkNvdW50IHx8IE1BWF9SRVJVTlM7XG4gICAgICAgIGNvbnN0IHJlUnVuRGVsYXkgPSB0aGlzLl9vcHRpb25zLnJlUnVuRGVsYXk7XG4gICAgICAgIC8vIHNpbmdsZSBzdWl0ZSBtaWdodCBwcm9kdWNlIG11bHRpcGxlIHJlc3VsdHMsIGJhc2VkIG9uIGFtb3VudCBvZiBkZWZpbmVkIGl0ZXJhdGlvbnNcbiAgICAgICAgY29uc3Qgc3VpdGVJdGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XG4gICAgICAgICAgICBpZiAoc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25TdGFydCh0aGlzLl9pZCwgc3VpdGVJdGVyYXRpb24sICdTdWl0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBuZXcgVGVzdFN1aXRlUmVzdWx0KCk7XG4gICAgICAgICAgICBzdWl0ZUl0ZXJhdGlvbnMucHVzaChzdWl0ZVJlc3VsdCk7XG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pZCA9IHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkID0gdjEoKTtcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0Lm5hbWUgPSBzdWl0ZS5uYW1lIHx8IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoc3VpdGUucGF0aCk7XG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW0gPSBzdWl0ZUl0ZXJhdGlvbjtcbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5QQVNTRUQ7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayhzdWl0ZSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblN1aXRlU3RhcnQodGhpcy5faWQsIHN1aXRlUmVzdWx0LmlkLCBzdWl0ZVJlc3VsdCk7XG4gICAgICAgICAgICBmb3IgKGxldCBjYXplIG9mIHN1aXRlLmNhc2VzKSB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGNhc2VzIHdpdGggbWlzc2luZyBtYW5kYXRvcnkgJ3BhdGgnIHByb3BlcnR5IFxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWNhemUubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXplLm5hbWUgPSBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhemUucGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5pdGVyYXRpb25Db3VudCkge1xuICAgICAgICAgICAgICAgICAgICBjYXplLml0ZXJhdGlvbkNvdW50ID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZUl0ZXJhdGlvbj0xOyBjYXNlSXRlcmF0aW9uIDw9IGNhemUuaXRlcmF0aW9uQ291bnQ7IGNhc2VJdGVyYXRpb24rKykge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2F6ZSAmJiBjYXplLml0ZXJhdGlvbkNvdW50ICYmIGNhemUuaXRlcmF0aW9uQ291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvblN0YXJ0KHRoaXMuX2lkLCBjYXNlSXRlcmF0aW9uLCAnQ2FzZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNhc2UgcmVzdWx0IGlkXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhc2VSZXN1bHRJZCA9IHRoaXMuX2N1cnJlbnRDYXNlUmVzdWx0SWQgPSB2MSgpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXBvcnQgY2FzZSBzdGFydCBldmVudFxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkNhc2VTdGFydCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQuaWQgLypzdWl0ZS51cmkgfHwgc3VpdGUuaWQqLywgY2FzZVJlc3VsdElkIC8qY2F6ZS51cmkgfHwgY2F6ZS5pZCB8fCBjYXplLnBhdGgqLywgY2F6ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vbGV0IHJlUnVuQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2FzZVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgLy8gcnVuIG9yIHJlLXJ1biB0aGUgY3VycmVudCB0ZXN0IGNhc2VcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcmVSdW5Db3VudCA9IDA7IHJlUnVuQ291bnQgPCBtYXhSZXJ1bnM7IHJlUnVuQ291bnQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdCA9IGF3YWl0IHRoaXMuX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWNhc2VSZXN1bHQgfHwgY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpICYmICFyZVJ1bk9uRmFpbHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdCAmJiBjYXNlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlUnVuRGVsYXkgJiYgcmVSdW5Db3VudCA8IG1heFJlcnVucyAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBveHV0aWwuc2xlZXAocmVSdW5EZWxheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5pZCA9IGNhc2VSZXN1bHRJZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwb3J0IGNhc2UgZW5kIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZUVuZCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQuaWQgLypzdWl0ZS51cmkgfHwgc3VpdGUuaWQqLywgY2FzZVJlc3VsdElkIC8qY2F6ZS51cmkgfHwgY2F6ZS5pZCovLCBjYXNlUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvbkVuZCh0aGlzLl9pZCwgY2FzZVJlc3VsdCwgJ0Nhc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY2FzZSByZXN1bHQgdG8gdGhlIHN1aXRlIHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5jYXNlcy5wdXNoKGNhc2VSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0ZXN0IGNhc2UgaXRlcmF0aW9uIGhhcyBmYWlsZWQsIHRoZW4gbWFyayB0aGUgZW50aXJlIHRlc3QgY2FzZSBhcyBmYWlsZWQsIFxuICAgICAgICAgICAgICAgICAgICAvLyBzdG9wIGl0ZXJhdGluZyBvdmVyIGl0IGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHRlc3QgY2FzZVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1aXRlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5kdXJhdGlvbiA9IHN1aXRlUmVzdWx0LmVuZFRpbWUgLSBzdWl0ZVJlc3VsdC5zdGFydFRpbWU7XG5cbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkl0ZXJhdGlvbkVuZCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQsICdTdWl0ZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyU3VpdGVIb29rKHN1aXRlLCBzdWl0ZVJlc3VsdCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblN1aXRlRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdC5pZCwgc3VpdGVSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnM7XG4gICAgfVxuXG4gICAgYXN5bmMgX3J1bkNhc2Uoc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCByZVJ1bkNvdW50ID0gMCkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVSdW4gPSByZVJ1bkNvdW50ID4gMDtcbiAgICAgICAgLy8gZ2V0IHRlc3Qgc3VpdGUncyBwYXJhbWV0ZXJzIGlmIGRlZmluZWRcbiAgICAgICAgLy8gZ2V0IHRoZW0gZmlyc3QgYW5kIHRoZW4gb3ZlcnJpZGUgd2l0aCB0ZXN0IGNhc2UgbGV2ZWwgcGFyYW1ldGVycyBpZiBkZWZpbmVkXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIpIHtcbiAgICAgICAgICAgIGlmIChyZVJ1bikge1xuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXy5leHRlbmQocGFyYW1zLCBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0VmFsdWVzKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWQgdGVzdCBjYXNlJ3MgbmV4dCBsaW5lcyBvZiBwYXJhbWV0ZXJzIGlmIHBhcmFtZXRlciBtYW5hZ2VyIGlzIGRlZmluZWRcbiAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcbiAgICAgICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXy5leHRlbmQocGFyYW1zLCBjYXplLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiBjYXplLmJyZWFrcG9pbnRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGk8IGNhemUuYnJlYWtwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxuICAgICAgICAgICAgICAgIGxldCBsaW5lID0gY2F6ZS5icmVha3BvaW50c1tpXS5saW5lO1xuICAgICAgICAgICAgICAgIGxldCBmaWxlID0gY2F6ZS5icmVha3BvaW50c1tpXS5maWxlO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQoZmlsZSwgbGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVDYXNlSG9vayhjYXplKTtcbiAgICAgICAgY29uc3QgY2FzZVJlc3VsdCA9IG5ldyBUZXN0Q2FzZVJlc3VsdCgpO1xuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XG4gICAgICAgIGNhc2VSZXN1bHQubG9jYXRpb24gPSBjYXplLnBhdGg7XG4gICAgICAgIGNhc2VSZXN1bHQuaXRlcmF0aW9uTnVtID0gY2FzZUl0ZXJhdGlvbjtcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcblxuICAgICAgICAvLyB0cnkgdG8gaW5pdGlhbGl6ZSBPeHlnZW4gYW5kIGhhbmRsZSBhbnkgcG9zc2libGUgZXJyb3JcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0ICghKHRoaXMuX3dvcmtlcikgJiYgdGhpcy5fd29ya2VyX0luaXRPeHlnZW4oKSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX0luaXRPeHlnZW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXJ0VGltZSA9IGNhc2VSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuZHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcblxuICAgICAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2F6ZS5wYXJhbU1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdGFydCBuZXcgdGVzdCBzZXNzaW9uXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9zdGFydFNlc3Npb24oKTtcbiAgICAgICAgLy8gcnVuIHRoZSB0ZXN0IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBhbmQgaGFuZGxlIGFueSBwb3NzaWJsZSBlcnJvclxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBtb2R1bGVDYXBzLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgY29udGV4dCwgZXJyb3IsIG1vZHVsZUNhcHMgfSk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gY2FzZVJlc3VsdC5lbmRUaW1lIC0gY2FzZVJlc3VsdC5zdGFydFRpbWU7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGVwcyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLnN0ZXBzID8gcmVzdWx0U3RvcmUuc3RlcHMgOiBbXTtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQubG9ncyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmxvZ3MgPyByZXN1bHRTdG9yZS5sb2dzIDogW107XG4gICAgICAgICAgICBjYXNlUmVzdWx0LmhhciA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmhhciA/IHJlc3VsdFN0b3JlLmhhciA6IG51bGw7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LnRlc3RBdHRyaWJ1dGVzID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuYXR0cmlidXRlcyA/IHJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMgOiBudWxsO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID8gcmVzdWx0U3RvcmUuYXR0YWNobWVudHMgOiBudWxsO1xuXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGVzdCBjYXNlIGl0ZXJhdGlvbiBzdGF0dXMgLSBtYXJrIGl0IGFzIGZhaWxlZCBpZiBhbnkgc3RlcCBoYXMgZmFpbGVkXG4gICAgICAgICAgICB2YXIgZmFpbGVkU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLkZBSUxFRH0pO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzdGVwcyB3aXRoIFdhcm5pbmcgc3RhdHVzXG4gICAgICAgICAgICB2YXIgd2FybmluZ1N0ZXBzID0gXy5maW5kKGNhc2VSZXN1bHQuc3RlcHMsIHtzdGF0dXM6IFN0YXR1cy5XQVJOSU5HfSk7XG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IF8uaXNFbXB0eShmYWlsZWRTdGVwcykgJiYgIWVycm9yID8gU3RhdHVzLlBBU1NFRCA6IFN0YXR1cy5GQUlMRUQ7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmZhaWx1cmUgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGVwcyA9IG94dXRpbC5tYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQoY2FzZVJlc3VsdC5zdGVwcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghXy5pc0VtcHR5KHdhcm5pbmdTdGVwcykpIHtcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIGNhc2VSZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ193b3JrZXJfUnVuKCkgdGhyb3duIGFuIGVycm9yOicsIGUpO1xuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc3Bvc2VPeHlnZW5Nb2R1bGVzID0gdHlwZW9mIHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgIT09ICdib29sZWFuJyB8fCB0aGlzLl9vcHRpb25zLmF1dG9EaXNwb3NlID09PSB0cnVlO1xuICAgICAgICAvLyBlbmQgc2Vzc2lvbiBhbmQgZGlzcG9zZSBPeHlnZW4gbW9kdWxlcyBpZiByZXF1aXJlZFxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfZW5kU2Vzc2lvbihjYXNlUmVzdWx0LnN0YXR1cywgZGlzcG9zZU94eWdlbk1vZHVsZXMpO1xuXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XG4gICAgICAgICAgICBjYXplLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9SdW4oc3VpdGUsIGNhemUsIHN1aXRlSXRlcmF0aW9uLCBjYXNlSXRlcmF0aW9uLCBwYXJhbXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlciBpcyBudWxsIGJ1dCBub3Qgc3VwcG9zZSB0byEnKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3doZW5UZXN0Q2FzZUZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQucmVqZWN0KG5ldyBFcnJvcignX3dvcmtlciBpcyBudWxsJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3RcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dvcmtlci5ydW4oe1xuICAgICAgICAgICAgc2NyaXB0TmFtZTogY2F6ZS5uYW1lLFxuICAgICAgICAgICAgc2NyaXB0UGF0aDogY2F6ZS5wYXRoLFxuICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgICAgIGVudjogdGhpcy5fZW52LFxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuX2NhcHMsXG4gICAgICAgICAgICAgICAgdmFyczogdGhpcy5fdmFycyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0aGlzLl9hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIHRlc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY2F6ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBjYXNlSXRlcmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdWl0ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvRmlsZTogdGhpcy5fb3B0aW9ucy5wbyB8fCBudWxsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfd29ya2VyX0luaXRPeHlnZW4oKSB7XG4gICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmluaXRPeHlnZW4odGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpKTtcbiAgICB9XG5cbiAgICBhc3luYyBfd29ya2VyX3N0YXJ0U2Vzc2lvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuc3RhcnRTZXNzaW9uKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnRTZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfd29ya2VyX2VuZFNlc3Npb24oc3RhdHVzID0gbnVsbCwgZGlzcG9zZU1vZHVsZXMgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmVuZFNlc3Npb24pIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5lbmRTZXNzaW9uKHN0YXR1cywgZGlzcG9zZU1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcyAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVUZXN0JywgW3RoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlVGVzdFwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcyAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVTdWl0ZScsIFtzdWl0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVTdWl0ZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlQ2FzZUhvb2soY2F6ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2JlZm9yZUNhc2UnLCBbY2F6ZV0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZUNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rKHJlc3VsdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyVGVzdCcsIFt0aGlzLl9pZCwgcmVzdWx0XSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayhzdWl0ZSwgcmVzdWx0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJTdWl0ZScsIFtzdWl0ZSwgcmVzdWx0XSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2soY2F6ZSwgcmVzdWx0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYWZ0ZXJDYXNlJywgW2NhemUsIHJlc3VsdF0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3N0YXJ0V29ya2VyUHJvY2VzcygpIHtcbiAgICAgICAgY29uc3Qgd29ya2VyUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICd3b3JrZXIuanMnKTtcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbmV3IFdvcmtlclByb2Nlc3ModGhpcy5faWQsIHdvcmtlclBhdGgsIHRoaXMuX2RlYnVnTW9kZSwgdGhpcy5fZGVidWdQb3J0LCAnT3h5Z2VuJywgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5faG9va1dvcmtlckV2ZW50cygpO1xuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnREZWJ1Z2dlcigpO1xuICAgICAgICB0aGlzLl9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKTtcbiAgICB9XG5cbiAgICBfaG9va1dvcmtlckV2ZW50cygpIHtcbiAgICAgICAgLy8gcHJlc2VydmUgdGhpcyBvYmplY3RcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmJlZm9yZScsIHRoaXMuX2hhbmRsZUJlZm9yZUNvbW1hbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX3dvcmtlci5zdWJzY3JpYmUoJ2NvbW1hbmQ6YWZ0ZXInLCB0aGlzLl9oYW5kbGVBZnRlckNvbW1hbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXJyb3InLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gcGF5bG9hZDtcbiAgICAgICAgICAgIGxvZy5lcnJvcignV29ya2VyIHByb2Nlc3MgZXJyb3I6ICcsIGVycm9yKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhpdERvbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3Rlc3QtZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF90aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl93b3JrZXIub24oJ2V4aXQnLCAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leGl0RG9uZSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCB7IGV4aXRDb2RlIH0gPSBwYXlsb2FkO1xuXG4gICAgICAgICAgICBpZiAoZXhpdENvZGUgJiYgZXhpdENvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIG9yIGlzIGJlaW5nIGRpc3Bvc2VkIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgZGllZCxcbiAgICAgICAgICAgICAgICAvLyB0aGVuIGVuZCB0aGUgdGVzdCBvciBkaXNwb3NhbCB3aXRoIGZhdGFsIGVycm9yXG4gICAgICAgICAgICAgICAgLy8gKGNoaWxkIHByb2Nlc3Mgbm90IHN1cHBvc2UgdG8gZGllIHdpdGggY29kZSA+IDApXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5faXNEaXNwb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IF90aGlzLl93aGVuRGlzcG9zZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLl9pc1J1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IF90aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZXhpdENvZGUgPT0gMTM0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdPdXQgb2YgbWVtb3J5IGVycm9yLiBNYWtlIHN1cmUgdGhhdCB5b3UgZG9uXFwndCBoYXZlIGFueSBtZW1vcnkgbGVha3MgaW4gdGhlIHRlc3Qgc2NyaXB0LicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgT3h5Z2VuRXJyb3IoYFdvcmtlciBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGU6ICR7ZXhpdENvZGV9LmApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIF90aGlzLl9yZXNldEdsb2JhbFZhcmlhYmxlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fd29ya2VyLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1zZykgPT4ge1xuICAgICAgICAgICAgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsb2cnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1zZy5sZXZlbCA9PT0gJ0RFQlVHJykge1xuICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcobXNnLm1zZyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdJTkZPJykge1xuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhtc2cubXNnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5sZXZlbCA9PT0gJ0VSUk9SJykge1xuICAgICAgICAgICAgICAgICAgICBsb2cuZXJyb3IobXNnLm1zZywgbXNnLmVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdXQVJOJykge1xuICAgICAgICAgICAgICAgICAgICBsb2cud2Fybihtc2cubXNnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsb2cnLCBtc2cudGltZSwgbXNnLmxldmVsLCBtc2cubXNnLCBtc2cuc3JjIHx8IERFRkFVTFRfSVNTVUVSKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgX3RoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkoXG4gICAgICAgICAgICAgICAgICAgIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlSWQ6IHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZUlkOiB0aGlzLl9jdXJyZW50Q2FzZVJlc3VsdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcElkOiB0aGlzLl9jdXJyZW50U3RlcFJlc3VsdElkLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsaW5lLXVwZGF0ZScpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5lbWl0KCdsaW5lLXVwZGF0ZScsIG1zZy5saW5lLCBtc2cuc3RhY2ssIG1zZy50aW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXN1bHQtdXBkYXRlJykge1xuICAgICAgICAgICAgICAgIGlmIChtc2cubWV0aG9kID09PSAnaW5pdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgnaW5pdC1kb25lJywgbXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnd29ya2VyRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3dvcmtlckVycm9yOicsIG1zZyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwb3NlKCdmYWlsZWQnKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmtpbGwoJ2ZhaWxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3JlcGwnKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuZW1pdCgncmVwbCcsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9ob29rV29ya2VyRGVidWdnZXJFdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWsnLCAoYnJlYWtwb2ludERhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnREYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWtFcnJvcicsIChicmVha0Vycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2JyZWFrcG9pbnRFcnJvcicsIGJyZWFrRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfaGFuZGxlQmVmb3JlQ29tbWFuZChlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwUmVzdWx0SWQgPSBlLmlkO1xuICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblN0ZXBTdGFydCh0aGlzLl9pZCwgdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQsIHRoaXMuX2N1cnJlbnRDYXNlUmVzdWx0SWQsIGUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1vZHVsZSAmJiBlLm1vZHVsZSA9PT0gJ2xvZycpIHtcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2JlZm9yZUNvbW1hbmQnLCBbZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZUNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfaGFuZGxlQWZ0ZXJDb21tYW5kKGUpIHtcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25TdGVwRW5kKHRoaXMuX2lkLCB0aGlzLl9jdXJyZW50U3VpdGVSZXN1bHRJZCwgdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCwgZS5yZXN1bHQpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGUgJiYgZS5tb2R1bGUgJiYgZS5tb2R1bGUgPT09ICdsb2cnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlckNvbW1hbmQnLCBbZS5yZXN1bHRdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcFJlc3VsdElkID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIF9yZXNldEdsb2JhbFZhcmlhYmxlcygpIHtcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xuICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdGVzdEtpbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xuICAgIH1cblxuICAgIF9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgbW9kdWxlQ2FwcywgY29udGV4dCA9IHt9LCBlcnJvciA9IG51bGwgfSkge1xuICAgICAgICAvLyBpZiB0ZXN0IHdhcyBraWxsZWQgYmVmb3JlIGFueSByZXN1bHRzIHdlcmUgZ2VuZXJhdGVkLCB0aGVuIGp1c3QgZmluYWxpemUgdGhlIHRlc3Qgd2l0aG91dCBwcm9jZXNzaW5nIHJlc3VsdHNcbiAgICAgICAgaWYgKHRoaXMuX3Rlc3RLaWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0b3JlICd2YXJzJyBwYXJ0IG9mIHRoZSBjb250ZXh0IGZvciBhIGxhdGVyIHVzZVxuICAgICAgICB0aGlzLl92YXJzID0gY29udGV4dC52YXJzIHx8IHRoaXMuX3ZhcnM7XG4gICAgICAgIC8vIHN0b3JlICdtb2RDYXBzJyBwYXJ0IG9mIHRoZSBjb250ZXh0IGZvciBhIGxhdGVyIHVzZVxuICAgICAgICB0aGlzLl9tb2RDYXBzID0geyAuLi50aGlzLl9tb2RDYXBzLCAuLi5tb2R1bGVDYXBzIHx8IHt9IH07XG4gICAgICAgIC8vIGNsZWFuIHVwIGNvbnRleHQgZnJvbSBpbnRlcm5hbCBlbGVtZW50cywgbm90IG5lZWQgaW4gdGhlIHJlcG9ydDpcbiAgICAgICAgLy8gcmVtb3ZlIGNhcHMgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXG4gICAgICAgIGlmIChjb250ZXh0LmNhcHMpXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5jYXBzO1xuICAgICAgICAvLyByZW1vdmUgZW52IGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxuICAgICAgICBpZiAoY29udGV4dC5lbnYpXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5lbnY7XG4gICAgICAgIC8vIHJlbW92ZSB0ZXN0IGZyb20gdGhlIGNvbnRleHQgYXMgaXQgYWxyZWFkeSBhcHBlYXJzIGluIFRlc3RSZXN1bHQgbm9kZVxuICAgICAgICBpZiAoY29udGV4dC50ZXN0KVxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQudGVzdDtcbiAgICB9XG5cbiAgICBfZW1pdEl0ZXJhdGlvbkVuZCh0cywgdGMsIHN1aXRlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uUmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZW1pdCgnaXRlcmF0aW9uLWVuZCcsIHtcbiAgICAgICAgICAgIHN0YXR1czogY2FzZUl0ZXJhdGlvblJlc3VsdC5fc3RhdHVzLFxuICAgICAgICAgICAgZmFpbHVyZTogY2FzZUl0ZXJhdGlvblJlc3VsdC5mYWlsdXJlIHx8IG51bGwsXG4gICAgICAgICAgICBjYXNlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRjLmlkIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogdGMubmFtZSxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb246IGNhc2VJdGVyYXRpb25OdW0sXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uQ291bnQ6IHRjLml0ZXJhdGlvbkNvdW50XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VpdGU6IHtcbiAgICAgICAgICAgICAgICBpZDogdHMuaWQgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICBuYW1lOiB0cy5uYW1lLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogc3VpdGVJdGVyYXRpb25OdW0sXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uQ291bnQ6IHRzLml0ZXJhdGlvbkNvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9lbWl0VGVzdEVuZChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVuZCcsIHJlc3VsdCk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCB7IFBhcmFtZXRlck1hbmFnZXIgfTsiXX0=
907
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9pbmRleC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJERUZBVUxUX0lTU1VFUiIsIk1BWF9SRVJVTlMiLCJ2MSIsInJlcXVpcmUiLCJzbm9vemUiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImdldFN1aXRlc0JyZWFrcG9pbnRzIiwic3VpdGVzIiwicmV0dmFsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWFwIiwic3VpdGUiLCJjYXNlcyIsImNhemUiLCJicmVha3BvaW50cyIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVtb3ZlQnJlYWtwb2ludEZyb21TdWl0ZXMiLCJyZW1vdmVCcmVha3BvaW50IiwiaWR4IiwiZmlsZSIsImxpbmUiLCJzcGxpY2UiLCJPeHlnZW5SdW5uZXIiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfaWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwiX2lzUnVubmluZyIsIl9pc0luaXRpYWxpemluZyIsIl9pc0Rpc3Bvc2luZyIsIl93b3JrZXIiLCJfZGVidWdNb2RlIiwiX3dvcmtlclByb2NMYXN0RXJyb3IiLCJfbnBtR1Jvb3RFeGVjdXRpb24iLCJucG1HUm9vdEV4ZWN1dGlvbiIsIl9zdWl0ZSIsIl9lbnZWYXJzIiwiX3ZhcnMiLCJfY2FwcyIsIl9tb2RDYXBzIiwiX2F0dHJpYnV0ZXMiLCJfb3B0aW9ucyIsIl9sb2NhbFRpbWUiLCJfdGVzdEtpbGxlZCIsIl9zY3JpcHRDb250ZW50TGluZU9mZnNldCIsIl9jdXJyZW50Q2FzZVJlc3VsdElkIiwidW5kZWZpbmVkIiwiX2N1cnJlbnRTdWl0ZVJlc3VsdElkIiwiX2N1cnJlbnRTdGVwUmVzdWx0SWQiLCJfd2hlbkRpc3Bvc2VkIiwiZ2V0SWQiLCJpbml0IiwiY2FwcyIsInJlcG9ydGVyIiwiRXJyb3IiLCJfY3dkIiwiY3dkIiwicHJvY2VzcyIsIl9yZXBvcnRlciIsIl9pc0luaXRpYWxpemVkIiwib3B0RW52IiwiZW52IiwiZW52cyIsIk9iamVjdCIsImtleXMiLCJlbnZWYXJzIiwiX2VudiIsInRlc3RBdHRyaWJ1dGVzIiwiX3N1aXRlcyIsImRlYnVnUG9ydElkZSIsImRlYnVnUG9ydCIsIl9kZWJ1Z1BvcnQiLCJzY3JpcHRDb250ZW50TGluZU9mZnNldCIsImxvY2FsVGltZSIsIl9zdGFydFdvcmtlclByb2Nlc3MiLCJfd29ya2VyX0luaXRPeHlnZW4iLCJkaXNwb3NlIiwic3RhdHVzIiwic3RvcERlYnVnZ2VyIiwiaXNSdW5uaW5nIiwic3RvcCIsImUiLCJjb25zb2xlIiwid2FybiIsIl9yZXNldEdsb2JhbFZhcmlhYmxlcyIsInJ1biIsIm9uUnVubmVyU3RhcnQiLCJlcnJvciIsInJlc3VsdCIsIl9ydW5UZXN0IiwiZmFpbHVyZSIsIm9uUnVubmVyRW5kIiwia2lsbCIsImRlYnVnQ29udGludWUiLCJkZWJ1Z2dlciIsImNvbnRpbnVlIiwidXBkYXRlQnJlYWtwb2ludHMiLCJmaWxlUGF0aCIsInNldEJyZWFrcG9pbnRzQWN0aXZlIiwicHJvbWlzZXMiLCJ0c0JyZWFrcG9pbnRzIiwiZ2V0QnJlYWtwb2ludHMiLCJzdWl0ZXNCcmVha3BvaW50cyIsInN1aXRlQnAiLCJpbmNsdWRlcyIsImFjdHVhbEN1cnJlbnRCcCIsInJlbW92ZUJyZWFrcG9pbnRCeVZhbHVlIiwidXNlclNldEJwIiwic2V0QnJlYWtwb2ludCIsInByb21pc2VBbGxQcm9taXNlIiwiYWxsIiwidGhlbiIsInZhbHVlIiwiZGVidWciLCJicmVha3BvaW50c0FmZXJNYW5pcHVsYXRpb25zIiwicmVwbENsb3NlIiwiX3NlbmQiLCJldmVudCIsIm5hbWUiLCJyZXBsU2VuZCIsImNtZCIsImNvbnRlbnQiLCJyZXBsU3RhcnQiLCJpbnZva2UiLCJjbGVhckJyZWFrcG9pbnQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwiZ2V0VGltZVN0YW1wIiwiU3RhdHVzIiwiUEFTU0VEIiwiX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2siLCJzdWl0ZVJlc3VsdCIsIl9ydW5TdWl0ZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsImhhc0ZhaWxlZFN1aXRlcyIsInNvbWUiLCJzdWl0ZUl0ZXJhdGlvbnMiLCJ4IiwiRkFJTEVEIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfd29ya2VyX2NhbGxBZnRlclRlc3RIb29rIiwicGF0aCIsIml0ZXJhdGlvbkNvdW50Iiwic2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzIiwicmVSdW5PbkZhaWx1cmUiLCJyZVJ1bk9uRmFpbGVkIiwibWF4UmVydW5zIiwicmVSdW5Db3VudCIsInJlUnVuRGVsYXkiLCJzdWl0ZUl0ZXJhdGlvbiIsIm9uSXRlcmF0aW9uU3RhcnQiLCJUZXN0U3VpdGVSZXN1bHQiLCJpZCIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsIml0ZXJhdGlvbk51bSIsIl93b3JrZXJfY2FsbEJlZm9yZVN1aXRlSG9vayIsIm9uU3VpdGVTdGFydCIsImNhc2VJdGVyYXRpb24iLCJzaG93Q2FzZUl0ZXJhdGlvbnNNZXNzYWdlcyIsImNhc2VSZXN1bHRJZCIsIm9uQ2FzZVN0YXJ0IiwiY2FzZVJlc3VsdCIsIl9ydW5DYXNlIiwic2xlZXAiLCJvbkNhc2VFbmQiLCJvbkl0ZXJhdGlvbkVuZCIsIldBUk5JTkciLCJfd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayIsIm9uU3VpdGVFbmQiLCJwYXJhbXMiLCJyZVJ1biIsInBhcmFtTWFuYWdlciIsInJlYWRQcmV2IiwiXyIsImV4dGVuZCIsImdldFZhbHVlcyIsImkiLCJfd29ya2VyX2NhbGxCZWZvcmVDYXNlSG9vayIsIlRlc3RDYXNlUmVzdWx0IiwibG9jYXRpb24iLCJyZWFkTmV4dCIsIl93b3JrZXJfc3RhcnRTZXNzaW9uIiwicmVzdWx0U3RvcmUiLCJjb250ZXh0IiwibW9kdWxlQ2FwcyIsIl93b3JrZXJfUnVuIiwiX3Byb2Nlc3NUZXN0UmVzdWx0cyIsInN0ZXBzIiwibG9ncyIsImhhciIsImF0dHJpYnV0ZXMiLCJhdHRhY2htZW50cyIsImZhaWxlZFN0ZXBzIiwiZmluZCIsIndhcm5pbmdTdGVwcyIsImlzRW1wdHkiLCJtYWtlVHJhbnNhY3Rpb25GYWlsZWRJZlN0ZXBGYWlsZWQiLCJfd29ya2VyX2NhbGxBZnRlckNhc2VIb29rIiwiZGlzcG9zZU94eWdlbk1vZHVsZXMiLCJhdXRvRGlzcG9zZSIsIl93b3JrZXJfZW5kU2Vzc2lvbiIsIl93aGVuVGVzdENhc2VGaW5pc2hlZCIsInJlamVjdCIsInNjcmlwdE5hbWUiLCJzY3JpcHRQYXRoIiwidmFycyIsInRlc3QiLCJjYXNlIiwiaXRlcmF0aW9uIiwicG9GaWxlIiwicG8iLCJpbml0T3h5Z2VuIiwic3RhcnRTZXNzaW9uIiwiZGlzcG9zZU1vZHVsZXMiLCJlbmRTZXNzaW9uIiwiaW52b2tlVGVzdEhvb2siLCJvbkxvZ0VudHJ5Iiwid29ya2VyUGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJXb3JrZXJQcm9jZXNzIiwic3RhcnQiLCJfaG9va1dvcmtlckV2ZW50cyIsInN0YXJ0RGVidWdnZXIiLCJfaG9va1dvcmtlckRlYnVnZ2VyRXZlbnRzIiwiX3RoaXMiLCJzdWJzY3JpYmUiLCJfaGFuZGxlQmVmb3JlQ29tbWFuZCIsImJpbmQiLCJfaGFuZGxlQWZ0ZXJDb21tYW5kIiwib24iLCJwYXlsb2FkIiwiZXhpdERvbmUiLCJlbWl0IiwiZXhpdENvZGUiLCJwcm9taXNlIiwiT3h5Z2VuRXJyb3IiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJtc2ciLCJsZXZlbCIsImluZm8iLCJlcnIiLCJ0aW1lIiwic3JjIiwic3VpdGVJZCIsImNhc2VJZCIsInN0ZXBJZCIsInN0YWNrIiwibWV0aG9kIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwib25TdGVwU3RhcnQiLCJtb2R1bGUiLCJvblN0ZXBFbmQiLCJfZW1pdEl0ZXJhdGlvbkVuZCIsInRzIiwidGMiLCJzdWl0ZUl0ZXJhdGlvbk51bSIsImNhc2VJdGVyYXRpb25OdW0iLCJjYXNlSXRlcmF0aW9uUmVzdWx0IiwiX3N0YXR1cyIsIl9lbWl0VGVzdEVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUE7O0FBT0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFuQkEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLGNBQVAsQ0FBWjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxNQUF2QjtBQUNBLE1BQU1DLFVBQVUsR0FBRyxDQUFuQjs7QUFFQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBU0MsT0FBTyxDQUFDLE1BQUQsQ0FBdEI7O0FBa0JBLE1BQU1DLE1BQU0sR0FBR0MsRUFBRSxJQUFJLElBQUlDLE9BQUosQ0FBWUMsT0FBTyxJQUFJQyxVQUFVLENBQUNELE9BQUQsRUFBVUYsRUFBVixDQUFqQyxDQUFyQjs7QUFFQSxNQUFNSSxvQkFBb0IsR0FBSUMsTUFBRCxJQUFZO0FBQ3JDLFFBQU1DLE1BQU0sR0FBRyxFQUFmOztBQUVBLE1BQ0lELE1BQU0sSUFDTkUsS0FBSyxDQUFDQyxPQUFOLENBQWNILE1BQWQsQ0FEQSxJQUVBQSxNQUFNLENBQUNJLE1BQVAsR0FBZ0IsQ0FIcEIsRUFJRTtBQUNFSixJQUFBQSxNQUFNLENBQUNLLEdBQVAsQ0FBWUMsS0FBRCxJQUFXO0FBQ2xCLFVBQ0lBLEtBQUssSUFDTEEsS0FBSyxDQUFDQyxLQUROLElBRUFMLEtBQUssQ0FBQ0MsT0FBTixDQUFjRyxLQUFLLENBQUNDLEtBQXBCLENBRkEsSUFHQUQsS0FBSyxDQUFDQyxLQUFOLENBQVlILE1BQVosR0FBcUIsQ0FKekIsRUFLRTtBQUNFRSxRQUFBQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUYsR0FBWixDQUFpQkcsSUFBRCxJQUFVO0FBQ3RCLGNBQ0lBLElBQUksSUFDSkEsSUFBSSxDQUFDQyxXQURMLElBRUFQLEtBQUssQ0FBQ0MsT0FBTixDQUFjSyxJQUFJLENBQUNDLFdBQW5CLENBRkEsSUFHQUQsSUFBSSxDQUFDQyxXQUFMLENBQWlCTCxNQUFqQixHQUEwQixDQUo5QixFQUtFO0FBQ0VJLFlBQUFBLElBQUksQ0FBQ0MsV0FBTCxDQUFpQkosR0FBakIsQ0FBc0JLLFVBQUQsSUFBZ0I7QUFDakNULGNBQUFBLE1BQU0sQ0FBQ1UsSUFBUCxDQUFZRCxVQUFaO0FBQ0gsYUFGRDtBQUdIO0FBQ0osU0FYRDtBQVlIO0FBQ0osS0FwQkQ7QUFxQkg7O0FBRUQsU0FBT1QsTUFBUDtBQUNILENBaENEOztBQWtDQSxNQUFNVywwQkFBMEIsR0FBRyxDQUFDWixNQUFELEVBQVNhLGdCQUFULEtBQThCO0FBQzdELE1BQ0liLE1BQU0sSUFDTkUsS0FBSyxDQUFDQyxPQUFOLENBQWNILE1BQWQsQ0FEQSxJQUVBQSxNQUFNLENBQUNJLE1BQVAsR0FBZ0IsQ0FIcEIsRUFJRTtBQUNFSixJQUFBQSxNQUFNLENBQUNLLEdBQVAsQ0FBWUMsS0FBRCxJQUFXO0FBQ2xCLFVBQ0lBLEtBQUssSUFDTEEsS0FBSyxDQUFDQyxLQUROLElBRUFMLEtBQUssQ0FBQ0MsT0FBTixDQUFjRyxLQUFLLENBQUNDLEtBQXBCLENBRkEsSUFHQUQsS0FBSyxDQUFDQyxLQUFOLENBQVlILE1BQVosR0FBcUIsQ0FKekIsRUFLRTtBQUNFRSxRQUFBQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUYsR0FBWixDQUFpQkcsSUFBRCxJQUFVO0FBQ3RCLGNBQ0lBLElBQUksSUFDSkEsSUFBSSxDQUFDQyxXQURMLElBRUFQLEtBQUssQ0FBQ0MsT0FBTixDQUFjSyxJQUFJLENBQUNDLFdBQW5CLENBRkEsSUFHQUQsSUFBSSxDQUFDQyxXQUFMLENBQWlCTCxNQUFqQixHQUEwQixDQUo5QixFQUtFO0FBQ0VJLFlBQUFBLElBQUksQ0FBQ0MsV0FBTCxDQUFpQkosR0FBakIsQ0FBcUIsQ0FBQ0ssVUFBRCxFQUFhSSxHQUFiLEtBQXFCO0FBQ3RDLGtCQUNJSixVQUFVLENBQUNLLElBQVgsS0FBb0JGLGdCQUFnQixDQUFDRSxJQUFyQyxJQUNBTCxVQUFVLENBQUNNLElBQVgsS0FBb0JILGdCQUFnQixDQUFDRyxJQUZ6QyxFQUdFO0FBQ0VSLGdCQUFBQSxJQUFJLENBQUNDLFdBQUwsQ0FBaUJRLE1BQWpCLENBQXdCSCxHQUF4QixFQUE2QixDQUE3QjtBQUNIO0FBQ0osYUFQRDtBQVFIO0FBQ0osU0FoQkQ7QUFpQkg7QUFDSixLQXpCRDtBQTBCSDtBQUNKLENBakNEOztBQW1DZSxNQUFNSSxZQUFOLFNBQTJCQyxvQkFBM0IsQ0FBd0M7QUFDbkRDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVO0FBQ2pCO0FBRUEsU0FBS0MsR0FBTCxHQUFXQyxjQUFPQyxnQkFBUCxFQUFYO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFNBQUtDLGVBQUwsR0FBdUIsS0FBdkI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEIsSUFBNUI7QUFFQSxTQUFLQyxrQkFBTCxHQUEwQixJQUExQjs7QUFDQSxRQUFJVixPQUFPLElBQUksT0FBT0EsT0FBTyxDQUFDVyxpQkFBZixLQUFxQyxXQUFwRCxFQUFpRTtBQUM3RCxXQUFLRCxrQkFBTCxHQUEwQlYsT0FBTyxDQUFDVyxpQkFBbEM7QUFDSDs7QUFHRCxTQUFLQyxNQUFMO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxFQUFiO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLEVBQWI7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixFQUFuQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixLQUFuQjtBQUNBLFNBQUtDLHdCQUFMLEdBQWdDLENBQWhDO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEJDLFNBQTVCO0FBQ0EsU0FBS0MscUJBQUwsR0FBNkJELFNBQTdCO0FBQ0EsU0FBS0Usb0JBQUwsR0FBNEJGLFNBQTVCO0FBRUEsU0FBS0csYUFBTCxHQUFxQixrQkFBckI7QUFDSDs7QUFJREMsRUFBQUEsS0FBSyxHQUFHO0FBQ0osV0FBTyxLQUFLMUIsR0FBWjtBQUNIOztBQUVTLFFBQUoyQixJQUFJLENBQUM1QixPQUFELEVBQVU2QixJQUFJLEdBQUcsRUFBakIsRUFBcUJDLFFBQXJCLEVBQStCO0FBRXJDLFFBQUksQ0FBQzlCLE9BQU8sQ0FBQ3JCLE1BQWIsRUFBcUI7QUFDakIsWUFBTSxJQUFJb0QsS0FBSixDQUFVLDBHQUFWLENBQU47QUFDSDs7QUFFRCxTQUFLYixRQUFMLEdBQWdCbEIsT0FBaEI7QUFDQSxTQUFLZ0MsSUFBTCxHQUFZLEtBQUtkLFFBQUwsQ0FBY2UsR0FBZCxJQUFxQkMsT0FBTyxDQUFDRCxHQUFSLEVBQWpDO0FBQ0EsU0FBS0UsU0FBTCxHQUFpQkwsUUFBakI7QUFDQSxTQUFLTSxjQUFMLEdBQXNCLElBQXRCOztBQUNBLFFBQUlwQyxPQUFKLEVBQWE7QUFFVCxVQUFJcUMsTUFBTSxHQUFHLEVBQWI7O0FBQ0EsVUFBSXJDLE9BQU8sQ0FBQ3NDLEdBQVosRUFBaUI7QUFHYixZQUFJLE9BQU90QyxPQUFPLENBQUNzQyxHQUFmLEtBQXVCLFFBQXZCLElBQW1DLE9BQU90QyxPQUFPLENBQUN1QyxJQUFmLEtBQXdCLFFBQTNELElBQXVFdkMsT0FBTyxDQUFDdUMsSUFBUixDQUFhdkMsT0FBTyxDQUFDc0MsR0FBckIsQ0FBM0UsRUFBc0c7QUFDbEdELFVBQUFBLE1BQU0sR0FBR3JDLE9BQU8sQ0FBQ3VDLElBQVIsQ0FBYXZDLE9BQU8sQ0FBQ3NDLEdBQXJCLENBQVQ7QUFFSCxTQUhELE1BS0ssSUFBSSxPQUFPdEMsT0FBTyxDQUFDc0MsR0FBZixLQUF1QixRQUF2QixJQUFtQ0UsTUFBTSxDQUFDQyxJQUFQLENBQVl6QyxPQUFPLENBQUNzQyxHQUFwQixDQUF2QyxFQUFpRTtBQUNsRUQsWUFBQUEsTUFBTSxHQUFHckMsT0FBTyxDQUFDc0MsR0FBakI7QUFDSDtBQUNKOztBQUVELFVBQUl0QyxPQUFPLENBQUMwQyxPQUFSLElBQW1CRixNQUFNLENBQUNDLElBQVAsQ0FBWXpDLE9BQU8sQ0FBQzBDLE9BQXBCLENBQXZCLEVBQXFEO0FBQ2pETCxRQUFBQSxNQUFNLEdBQUcsRUFBRSxHQUFHQSxNQUFMO0FBQWEsYUFBR3JDLE9BQU8sQ0FBQzBDO0FBQXhCLFNBQVQ7QUFDSDs7QUFHRCxXQUFLQyxJQUFMLEdBQVksRUFDUixHQUFHLEtBQUtBLElBREE7QUFFUixXQUFHTjtBQUZLLE9BQVo7QUFJQSxXQUFLcEIsV0FBTCxHQUFtQmpCLE9BQU8sQ0FBQzRDLGNBQVIsSUFBMEIsRUFBN0M7QUFDSDs7QUFFRCxTQUFLN0IsS0FBTCxHQUFhLEVBQUUsR0FBR2M7QUFBTCxLQUFiO0FBQ0EsU0FBS2dCLE9BQUwsR0FBZSxDQUFFLEdBQUc3QyxPQUFPLENBQUNyQixNQUFiLENBQWY7QUFJQSxTQUFLNkIsVUFBTCxHQUFtQlIsT0FBTyxDQUFDOEMsWUFBUixJQUF3QjlDLE9BQU8sQ0FBQytDLFNBQWhDLEdBQTRDLElBQTVDLEdBQW1ELEtBQXRFO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQmhELE9BQU8sQ0FBQytDLFNBQVIsSUFBcUIvQyxPQUFPLENBQUM4QyxZQUE3QixJQUE2QyxJQUEvRDtBQUNBOUMsSUFBQUEsT0FBTyxDQUFDaUQsdUJBQVIsR0FBa0MsS0FBSzVCLHdCQUF2QztBQUNBLFNBQUtGLFVBQUwsR0FBbUIsS0FBS0QsUUFBTCxJQUFpQixLQUFLQSxRQUFMLENBQWNnQyxTQUFoQyxJQUE4QyxLQUFLL0IsVUFBckU7QUFDQSxVQUFNLEtBQUtnQyxtQkFBTCxFQUFOO0FBQ0EsVUFBTSxLQUFLQyxrQkFBTCxFQUFOO0FBQ0g7O0FBRVksUUFBUEMsT0FBTyxDQUFDQyxNQUFNLEdBQUcsSUFBVixFQUFnQjtBQUN6QixTQUFLaEQsWUFBTCxHQUFvQixJQUFwQjs7QUFDQSxRQUFJO0FBQ0EsV0FBS0MsT0FBTCxLQUFnQixNQUFNLEtBQUtBLE9BQUwsQ0FBYWdELFlBQWIsRUFBdEI7O0FBQ0EsVUFBSSxLQUFLaEQsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFpRCxTQUFqQyxFQUE0QztBQUN4QyxjQUFNLEtBQUtqRCxPQUFMLENBQWFrRCxJQUFiLENBQWtCSCxNQUFsQixDQUFOO0FBQ0g7QUFDSixLQUxELENBS0UsT0FBT0ksQ0FBUCxFQUFVO0FBQ1JDLE1BQUFBLE9BQU8sQ0FBQzNGLEdBQVIsQ0FBWSw2QkFBWixFQUEyQzBGLENBQTNDO0FBRUExRixNQUFBQSxHQUFHLENBQUM0RixJQUFKLENBQVMsOEJBQVQsRUFBeUNGLENBQXpDO0FBQ0g7O0FBRUQsUUFBSUosTUFBTSxLQUFLLFVBQWYsRUFBMkI7QUFDdkIsV0FBS08scUJBQUw7QUFDSDtBQUNKOztBQUVRLFFBQUhDLEdBQUcsR0FBRztBQUNSLFFBQUksS0FBS3pELGVBQVQsRUFBMEI7QUFDdEIsWUFBTSxJQUFJMEIsS0FBSixDQUFVLHdFQUFWLENBQU47QUFDSDs7QUFDRCxRQUFJLEtBQUszQixVQUFULEVBQXFCO0FBQ2pCLFlBQU0sSUFBSTJCLEtBQUosQ0FBVSw2REFBVixDQUFOO0FBQ0g7O0FBQ0QsU0FBSzNCLFVBQUwsR0FBa0IsSUFBbEI7QUFFQSxVQUFNLEtBQUsrQixTQUFMLENBQWU0QixhQUFmLENBQTZCLEtBQUs5RCxHQUFsQyxFQUF1QyxLQUFLaUIsUUFBNUMsRUFBc0QsS0FBS0gsS0FBM0QsQ0FBTjtBQUVBLFFBQUlpRCxLQUFLLEdBQUcsSUFBWjtBQUNBLFFBQUlDLE1BQU0sR0FBRyxJQUFiOztBQUNBLFFBQUk7QUFDQUEsTUFBQUEsTUFBTSxHQUFHLE1BQU0sS0FBS0MsUUFBTCxFQUFmO0FBQ0gsS0FGRCxDQUdBLE9BQU9SLENBQVAsRUFBVTtBQUNOTSxNQUFBQSxLQUFLLEdBQUdOLENBQVI7QUFDSDs7QUFFRCxRQUFJLENBQUNNLEtBQUQsSUFBVUMsTUFBVixJQUFvQkEsTUFBTSxDQUFDRSxPQUEvQixFQUF3QztBQUNwQ0gsTUFBQUEsS0FBSyxHQUFHQyxNQUFNLENBQUNFLE9BQWY7QUFDSDs7QUFFRCxVQUFNLEtBQUtoQyxTQUFMLENBQWVpQyxXQUFmLENBQTJCLEtBQUtuRSxHQUFoQyxFQUFxQ2dFLE1BQXJDLEVBQTZDRCxLQUE3QyxDQUFOO0FBQ0EsU0FBSzVELFVBQUwsR0FBa0IsS0FBbEI7O0FBQ0EsUUFBSTRELEtBQUosRUFBVztBQUNQLFlBQU1BLEtBQU47QUFDSDs7QUFDRCxXQUFPQyxNQUFQO0FBQ0g7O0FBRVMsUUFBSkksSUFBSSxDQUFDZixNQUFNLEdBQUcsSUFBVixFQUFnQjtBQUN0QixTQUFLbEMsV0FBTCxHQUFtQixJQUFuQjs7QUFFQSxRQUFJLEtBQUtiLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhaUQsU0FBakMsRUFBNEM7QUFDeEMsWUFBTSxLQUFLakQsT0FBTCxDQUFhOEQsSUFBYixDQUFrQmYsTUFBbEIsQ0FBTjtBQUNIO0FBQ0o7O0FBRURnQixFQUFBQSxhQUFhLEdBQUc7QUFDWixRQUFJLEtBQUs5RCxVQUFMLElBQW1CLEtBQUtELE9BQTVCLEVBQXFDO0FBQ2pDLFdBQUtBLE9BQUwsQ0FBYWdFLFFBQWIsQ0FBc0JDLFFBQXRCO0FBQ0g7QUFDSjs7QUFFc0IsUUFBakJDLGlCQUFpQixDQUFDckYsV0FBRCxFQUFjc0YsUUFBZCxFQUF3QjtBQUMzQyxRQUFJO0FBRUEsVUFBSSxLQUFLbkUsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWFnRSxRQUE3QixJQUF5QyxLQUFLaEUsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQkksb0JBQW5FLEVBQXlGO0FBQ3JGLGNBQU0sS0FBS3BFLE9BQUwsQ0FBYWdFLFFBQWIsQ0FBc0JJLG9CQUF0QixDQUEyQyxLQUEzQyxDQUFOO0FBQ0gsT0FGRCxNQUVPO0FBQ0gsY0FBTXRHLE1BQU0sQ0FBQyxHQUFELENBQVo7QUFDQSxlQUFPLE1BQU0sS0FBS29HLGlCQUFMLENBQXVCckYsV0FBdkIsRUFBb0NzRixRQUFwQyxDQUFiO0FBQ0g7O0FBRUQsVUFBSSxLQUFLbEUsVUFBTCxJQUFtQixLQUFLRCxPQUFMLENBQWFnRSxRQUFwQyxFQUE4QztBQUMxQyxZQUFJSyxRQUFRLEdBQUcsRUFBZjs7QUFFQSxjQUFNQyxhQUFhLEdBQUcsS0FBS3RFLE9BQUwsQ0FBYWdFLFFBQWIsQ0FBc0JPLGNBQXRCLENBQXFDSixRQUFyQyxDQUF0Qjs7QUFDQSxjQUFNSyxpQkFBaUIsR0FBR3JHLG9CQUFvQixDQUFDLEtBQUttRSxPQUFOLENBQTlDOztBQUdBLGFBQUssSUFBSW1DLE9BQVQsSUFBb0JELGlCQUFwQixFQUF1QztBQUNuQyxjQUFJLENBQUMzRixXQUFXLENBQUM2RixRQUFaLENBQXFCRCxPQUFPLENBQUNyRixJQUE3QixDQUFELElBQXdDK0UsUUFBUSxLQUFLTSxPQUFPLENBQUN0RixJQUFqRSxFQUF1RTtBQUNuRUgsWUFBQUEsMEJBQTBCLENBQUMsS0FBS3NELE9BQU4sRUFBZW1DLE9BQWYsQ0FBMUI7QUFDSDtBQUNKOztBQUdELGFBQUssSUFBSUUsZUFBVCxJQUE0QkwsYUFBNUIsRUFBMkM7QUFDdkMsY0FBSSxDQUFDekYsV0FBVyxDQUFDNkYsUUFBWixDQUFxQkMsZUFBckIsQ0FBTCxFQUE0QztBQUN4Q04sWUFBQUEsUUFBUSxDQUFDdEYsSUFBVCxDQUFjLEtBQUtpQixPQUFMLENBQWFnRSxRQUFiLENBQXNCWSx1QkFBdEIsQ0FBOENULFFBQTlDLEVBQXdEUSxlQUF4RCxDQUFkO0FBQ0g7QUFDSjs7QUFHRCxhQUFLLElBQUlFLFNBQVQsSUFBc0JoRyxXQUF0QixFQUFtQztBQUMvQixjQUFJLENBQUN5RixhQUFhLENBQUNJLFFBQWQsQ0FBdUJHLFNBQXZCLENBQUwsRUFBd0M7QUFDcENSLFlBQUFBLFFBQVEsQ0FBQ3RGLElBQVQsQ0FBYyxLQUFLaUIsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQmMsYUFBdEIsQ0FBb0NYLFFBQXBDLEVBQThDVSxTQUE5QyxDQUFkO0FBQ0g7QUFDSjs7QUFFRCxZQUFJRSxpQkFBaUIsR0FBRyxNQUFNL0csT0FBTyxDQUFDZ0gsR0FBUixDQUFZWCxRQUFaLEVBQXNCWSxJQUF0QixDQUE0QkMsS0FBRCxJQUFXO0FBQ2hFLGlCQUFPQSxLQUFQO0FBQ0gsU0FGNkIsQ0FBOUI7QUFJQSxjQUFNLEtBQUtsRixPQUFMLENBQWFnRSxRQUFiLENBQXNCSSxvQkFBdEIsQ0FBMkMsSUFBM0MsQ0FBTjtBQUVBLGNBQU10RyxNQUFNLENBQUMsR0FBRCxDQUFaO0FBRUFMLFFBQUFBLEdBQUcsQ0FBQzBILEtBQUosQ0FBVSwyQkFBVjs7QUFFQSxjQUFNQyw0QkFBNEIsR0FBRyxLQUFLcEYsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQk8sY0FBdEIsQ0FBcUNKLFFBQXJDLENBQXJDOztBQUVBLGVBQU87QUFBRVksVUFBQUEsaUJBQWlCLEVBQUdBLGlCQUF0QjtBQUF5Q0ssVUFBQUEsNEJBQTRCLEVBQUdBO0FBQXhFLFNBQVA7QUFDSCxPQXhDRCxNQXdDTztBQUNILGVBQU8sSUFBUDtBQUNIO0FBQ0osS0FwREQsQ0FvREUsT0FBT2pDLENBQVAsRUFBVTtBQUNSMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLGdCQUFWLEVBQTRCTixDQUE1QjtBQUNIO0FBQ0o7O0FBRWMsUUFBVGtDLFNBQVMsR0FBRztBQUNkLFVBQU0sS0FBS3JGLE9BQUwsQ0FBYXNGLEtBQWIsQ0FBbUI7QUFDckJDLE1BQUFBLEtBQUssRUFBRSxNQURjO0FBRXJCQyxNQUFBQSxJQUFJLEVBQUU7QUFGZSxLQUFuQixDQUFOO0FBSUg7O0FBRWEsUUFBUkMsUUFBUSxDQUFDQyxHQUFELEVBQU07QUFDaEIsVUFBTSxLQUFLMUYsT0FBTCxDQUFhc0YsS0FBYixDQUFtQjtBQUNyQkMsTUFBQUEsS0FBSyxFQUFFLE1BRGM7QUFFckJDLE1BQUFBLElBQUksRUFBRSxXQUZlO0FBR3JCRyxNQUFBQSxPQUFPLEVBQUU7QUFDTEQsUUFBQUEsR0FBRyxFQUFFQTtBQURBO0FBSFksS0FBbkIsQ0FBTjtBQU9IOztBQUVjLFFBQVRFLFNBQVMsR0FBRztBQUNkLFVBQU0sS0FBSzVGLE9BQUwsQ0FBYTZGLE1BQWIsQ0FBb0IsV0FBcEIsQ0FBTjtBQUNIOztBQUVEZixFQUFBQSxhQUFhLENBQUMxRixJQUFELEVBQU8sQ0FPbkI7O0FBRUQwRyxFQUFBQSxlQUFlLENBQUMxRyxJQUFELEVBQU8sQ0FLckI7O0FBTWEsUUFBUnVFLFFBQVEsR0FBRztBQUNiLFVBQU1ELE1BQU0sR0FBRyxJQUFJcUMsbUJBQUosRUFBZjtBQUNBckMsSUFBQUEsTUFBTSxDQUFDc0MsU0FBUCxHQUFtQnJHLGNBQU9zRyxZQUFQLEVBQW5CO0FBQ0F2QyxJQUFBQSxNQUFNLENBQUNYLE1BQVAsR0FBZ0JtRCxnQkFBT0MsTUFBdkI7QUFDQXpDLElBQUFBLE1BQU0sQ0FBQ3RGLE1BQVAsR0FBZ0IsRUFBaEI7QUFDQSxRQUFJcUYsS0FBSyxHQUFHLElBQVo7QUFFQSxVQUFNLEtBQUsyQywwQkFBTCxFQUFOOztBQUNBLFFBQUk7QUFFQSxXQUFLLElBQUkxSCxLQUFULElBQWtCLEtBQUs0RCxPQUF2QixFQUFnQztBQUM1QixjQUFNK0QsV0FBVyxHQUFHLE1BQU0sS0FBS0MsU0FBTCxDQUFlNUgsS0FBZixDQUExQjtBQUNBZ0YsUUFBQUEsTUFBTSxDQUFDdEYsTUFBUCxDQUFjVyxJQUFkLENBQW1Cc0gsV0FBbkI7QUFDSDtBQUNKLEtBTkQsQ0FPQSxPQUFPbEQsQ0FBUCxFQUFVO0FBQ05NLE1BQUFBLEtBQUssR0FBR04sQ0FBUjtBQUNIOztBQUNETyxJQUFBQSxNQUFNLENBQUM2QyxPQUFQLEdBQWlCNUcsY0FBT3NHLFlBQVAsRUFBakI7QUFDQXZDLElBQUFBLE1BQU0sQ0FBQzhDLFFBQVAsR0FBa0I5QyxNQUFNLENBQUM2QyxPQUFQLEdBQWlCN0MsTUFBTSxDQUFDc0MsU0FBMUM7QUFFQSxVQUFNUyxlQUFlLEdBQUcvQyxNQUFNLENBQUN0RixNQUFQLENBQWNzSSxJQUFkLENBQW1CQyxlQUFlLElBQUk7QUFDMUQsVUFBSUEsZUFBZSxJQUFJckksS0FBSyxDQUFDQyxPQUFOLENBQWNvSSxlQUFkLENBQW5CLElBQXFEQSxlQUFlLENBQUNuSSxNQUFoQixHQUF5QixDQUFsRixFQUFxRjtBQUNqRixlQUFPbUksZUFBZSxDQUFDRCxJQUFoQixDQUFxQkUsQ0FBQyxJQUFJQSxDQUFDLENBQUM3RCxNQUFGLEtBQWFtRCxnQkFBT1csTUFBOUMsQ0FBUDtBQUNIO0FBQ0osS0FKdUIsQ0FBeEI7QUFNQW5ELElBQUFBLE1BQU0sQ0FBQ1gsTUFBUCxHQUFnQjBELGVBQWUsR0FBR1AsZ0JBQU9XLE1BQVYsR0FBbUJYLGdCQUFPQyxNQUF6RDtBQUNBekMsSUFBQUEsTUFBTSxDQUFDb0QsV0FBUCxHQUFxQixFQUFFLEdBQUcsS0FBSzFFO0FBQVYsS0FBckI7QUFFQXNCLElBQUFBLE1BQU0sQ0FBQ3FELFlBQVAsR0FBc0IsRUFBRSxHQUFHLEtBQUt2RyxLQUFWO0FBQWlCLFNBQUcsS0FBS0M7QUFBekIsS0FBdEI7QUFDQWlELElBQUFBLE1BQU0sQ0FBQ2pFLE9BQVAsR0FBaUIsRUFBRSxHQUFHLEtBQUtrQjtBQUFWLEtBQWpCOztBQUdBLFFBQUk4QyxLQUFKLEVBQVc7QUFDUEMsTUFBQUEsTUFBTSxDQUFDRSxPQUFQLEdBQWlCb0QsZ0JBQVlDLG1CQUFaLENBQWdDeEQsS0FBaEMsQ0FBakI7QUFDQUMsTUFBQUEsTUFBTSxDQUFDWCxNQUFQLEdBQWdCbUQsZ0JBQU9XLE1BQXZCO0FBQ0g7O0FBQ0QsVUFBTSxLQUFLSyx5QkFBTCxDQUErQnhELE1BQS9CLENBQU47QUFDQSxXQUFPQSxNQUFQO0FBQ0g7O0FBRWMsUUFBVDRDLFNBQVMsQ0FBQzVILEtBQUQsRUFBUTtBQUNuQixRQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNSakIsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLGlDQUFWO0FBQ0g7O0FBRUQsUUFBSSxDQUFDL0UsS0FBSyxDQUFDOEcsSUFBUCxJQUFlLENBQUM5RyxLQUFLLENBQUN5SSxJQUExQixFQUFnQztBQUM1QixhQUFPLEVBQVA7QUFDSDs7QUFFRCxRQUFJLENBQUN6SSxLQUFLLENBQUMwSSxjQUFYLEVBQTJCO0FBQ3ZCMUksTUFBQUEsS0FBSyxDQUFDMEksY0FBTixHQUF1QixDQUF2QjtBQUNIOztBQUNELFFBQUlDLDJCQUEyQixHQUFHLEtBQWxDOztBQUNBLFFBQUkzSSxLQUFLLENBQUMwSSxjQUFOLEdBQXVCLENBQTNCLEVBQThCO0FBQzFCQyxNQUFBQSwyQkFBMkIsR0FBRyxJQUE5QjtBQUNIOztBQUVELFVBQU1DLGNBQWMsR0FBRyxLQUFLM0csUUFBTCxDQUFjNEcsYUFBZCxJQUErQixLQUF0RDtBQUNBLFVBQU1DLFNBQVMsR0FBRyxLQUFLN0csUUFBTCxDQUFjOEcsVUFBZCxJQUE0QjlKLFVBQTlDO0FBQ0EsVUFBTStKLFVBQVUsR0FBRyxLQUFLL0csUUFBTCxDQUFjK0csVUFBakM7QUFFQSxVQUFNZixlQUFlLEdBQUcsRUFBeEI7O0FBQ0EsU0FBSyxJQUFJZ0IsY0FBYyxHQUFDLENBQXhCLEVBQTJCQSxjQUFjLElBQUlqSixLQUFLLENBQUMwSSxjQUFuRCxFQUFtRU8sY0FBYyxFQUFqRixFQUFxRjtBQUNqRixVQUFJTiwyQkFBSixFQUFpQztBQUM3QixjQUFNLEtBQUt6RixTQUFMLENBQWVnRyxnQkFBZixDQUFnQyxLQUFLbEksR0FBckMsRUFBMENpSSxjQUExQyxFQUEwRCxPQUExRCxDQUFOO0FBQ0g7O0FBQ0QsWUFBTXRCLFdBQVcsR0FBRyxJQUFJd0Isb0JBQUosRUFBcEI7QUFDQWxCLE1BQUFBLGVBQWUsQ0FBQzVILElBQWhCLENBQXFCc0gsV0FBckI7QUFDQUEsTUFBQUEsV0FBVyxDQUFDeUIsRUFBWixHQUFpQixLQUFLN0cscUJBQUwsR0FBNkJyRCxFQUFFLEVBQWhEO0FBQ0F5SSxNQUFBQSxXQUFXLENBQUNiLElBQVosR0FBbUI5RyxLQUFLLENBQUM4RyxJQUFOLElBQWM3RixjQUFPb0kscUJBQVAsQ0FBNkJySixLQUFLLENBQUN5SSxJQUFuQyxDQUFqQztBQUNBZCxNQUFBQSxXQUFXLENBQUNMLFNBQVosR0FBd0JyRyxjQUFPc0csWUFBUCxFQUF4QjtBQUNBSSxNQUFBQSxXQUFXLENBQUMyQixZQUFaLEdBQTJCTCxjQUEzQjtBQUNBdEIsTUFBQUEsV0FBVyxDQUFDdEQsTUFBWixHQUFxQm1ELGdCQUFPQyxNQUE1QjtBQUNBLFlBQU0sS0FBSzhCLDJCQUFMLENBQWlDdkosS0FBakMsQ0FBTjtBQUNBLFlBQU0sS0FBS2tELFNBQUwsQ0FBZXNHLFlBQWYsQ0FBNEIsS0FBS3hJLEdBQWpDLEVBQXNDMkcsV0FBVyxDQUFDeUIsRUFBbEQsRUFBc0R6QixXQUF0RCxDQUFOOztBQUNBLFdBQUssSUFBSXpILElBQVQsSUFBaUJGLEtBQUssQ0FBQ0MsS0FBdkIsRUFBOEI7QUFFMUIsWUFBSSxDQUFDQyxJQUFJLENBQUN1SSxJQUFWLEVBQWdCO0FBQ1o7QUFDSDs7QUFDRCxZQUFJLENBQUN2SSxJQUFJLENBQUM0RyxJQUFWLEVBQWdCO0FBQ1o1RyxVQUFBQSxJQUFJLENBQUM0RyxJQUFMLEdBQVk3RixjQUFPb0kscUJBQVAsQ0FBNkJuSixJQUFJLENBQUN1SSxJQUFsQyxDQUFaO0FBQ0g7O0FBQ0QsWUFBSSxDQUFDdkksSUFBSSxDQUFDd0ksY0FBVixFQUEwQjtBQUN0QnhJLFVBQUFBLElBQUksQ0FBQ3dJLGNBQUwsR0FBc0IsQ0FBdEI7QUFDSDs7QUFDRCxhQUFLLElBQUllLGFBQWEsR0FBQyxDQUF2QixFQUEwQkEsYUFBYSxJQUFJdkosSUFBSSxDQUFDd0ksY0FBaEQsRUFBZ0VlLGFBQWEsRUFBN0UsRUFBaUY7QUFFN0UsY0FBSUMsMEJBQTBCLEdBQUcsS0FBakM7O0FBQ0EsY0FBSXhKLElBQUksSUFBSUEsSUFBSSxDQUFDd0ksY0FBYixJQUErQnhJLElBQUksQ0FBQ3dJLGNBQUwsR0FBc0IsQ0FBekQsRUFBNEQ7QUFDeERnQixZQUFBQSwwQkFBMEIsR0FBRyxJQUE3QjtBQUNIOztBQUNELGNBQUlBLDBCQUFKLEVBQWdDO0FBQzVCLGtCQUFNLEtBQUt4RyxTQUFMLENBQWVnRyxnQkFBZixDQUFnQyxLQUFLbEksR0FBckMsRUFBMEN5SSxhQUExQyxFQUF5RCxNQUF6RCxDQUFOO0FBQ0g7O0FBRUQsZ0JBQU1FLFlBQVksR0FBRyxLQUFLdEgsb0JBQUwsR0FBNEJuRCxFQUFFLEVBQW5EO0FBRUEsZ0JBQU0sS0FBS2dFLFNBQUwsQ0FBZTBHLFdBQWYsQ0FBMkIsS0FBSzVJLEdBQWhDLEVBQXFDMkcsV0FBVyxDQUFDeUIsRUFBakQsRUFBK0VPLFlBQS9FLEVBQWtJekosSUFBbEksQ0FBTjtBQUVBLGNBQUkySixVQUFKOztBQUVBLGVBQUssSUFBSWQsVUFBVSxHQUFHLENBQXRCLEVBQXlCQSxVQUFVLEdBQUdELFNBQXRDLEVBQWlEQyxVQUFVLEVBQTNELEVBQStEO0FBQzNEYyxZQUFBQSxVQUFVLEdBQUcsTUFBTSxLQUFLQyxRQUFMLENBQWM5SixLQUFkLEVBQXFCRSxJQUFyQixFQUEyQitJLGNBQTNCLEVBQTJDUSxhQUEzQyxFQUEwRFYsVUFBMUQsQ0FBbkI7O0FBQ0EsZ0JBQUksQ0FBQyxDQUFDYyxVQUFELElBQWVBLFVBQVUsQ0FBQ3hGLE1BQVgsS0FBc0JtRCxnQkFBT1csTUFBN0MsS0FBd0QsQ0FBQ1MsY0FBN0QsRUFBNkU7QUFDekU7QUFDSCxhQUZELE1BR0ssSUFBSWlCLFVBQVUsSUFBSUEsVUFBVSxDQUFDeEYsTUFBWCxLQUFzQm1ELGdCQUFPVyxNQUEvQyxFQUF1RDtBQUN4RDtBQUNIOztBQUNELGdCQUFJYSxVQUFVLElBQUlELFVBQVUsR0FBR0QsU0FBUyxHQUFHLENBQTNDLEVBQThDO0FBQzFDLG9CQUFNN0gsY0FBTzhJLEtBQVAsQ0FBYWYsVUFBYixDQUFOO0FBQ0g7QUFDSjs7QUFDRGEsVUFBQUEsVUFBVSxDQUFDVCxFQUFYLEdBQWdCTyxZQUFoQjtBQUVBLGdCQUFNLEtBQUt6RyxTQUFMLENBQWU4RyxTQUFmLENBQXlCLEtBQUtoSixHQUE5QixFQUFtQzJHLFdBQVcsQ0FBQ3lCLEVBQS9DLEVBQTZFTyxZQUE3RSxFQUFtSEUsVUFBbkgsQ0FBTjs7QUFDQSxjQUFJSCwwQkFBSixFQUFnQztBQUM1QixrQkFBTSxLQUFLeEcsU0FBTCxDQUFlK0csY0FBZixDQUE4QixLQUFLakosR0FBbkMsRUFBd0M2SSxVQUF4QyxFQUFvRCxNQUFwRCxDQUFOO0FBQ0g7O0FBRURsQyxVQUFBQSxXQUFXLENBQUMxSCxLQUFaLENBQWtCSSxJQUFsQixDQUF1QndKLFVBQXZCOztBQUdBLGNBQUlBLFVBQVUsQ0FBQ3hGLE1BQVgsS0FBc0JtRCxnQkFBT1csTUFBakMsRUFBeUM7QUFDckNSLFlBQUFBLFdBQVcsQ0FBQ3RELE1BQVosR0FBcUJtRCxnQkFBT1csTUFBNUI7QUFDSCxXQUZELE1BR0ssSUFBSTBCLFVBQVUsQ0FBQ3hGLE1BQVgsS0FBc0JtRCxnQkFBTzBDLE9BQWpDLEVBQTBDO0FBQzNDdkMsWUFBQUEsV0FBVyxDQUFDdEQsTUFBWixHQUFxQm1ELGdCQUFPMEMsT0FBNUI7QUFDSDtBQUNKO0FBQ0o7O0FBQ0R2QyxNQUFBQSxXQUFXLENBQUNFLE9BQVosR0FBc0I1RyxjQUFPc0csWUFBUCxFQUF0QjtBQUNBSSxNQUFBQSxXQUFXLENBQUNHLFFBQVosR0FBdUJILFdBQVcsQ0FBQ0UsT0FBWixHQUFzQkYsV0FBVyxDQUFDTCxTQUF6RDs7QUFFQSxVQUFJcUIsMkJBQUosRUFBaUM7QUFDN0IsY0FBTSxLQUFLekYsU0FBTCxDQUFlK0csY0FBZixDQUE4QixLQUFLakosR0FBbkMsRUFBd0MyRyxXQUF4QyxFQUFxRCxPQUFyRCxDQUFOO0FBQ0g7O0FBRUQsWUFBTSxLQUFLd0MsMEJBQUwsQ0FBZ0NuSyxLQUFoQyxFQUF1QzJILFdBQXZDLENBQU47QUFDQSxZQUFNLEtBQUt6RSxTQUFMLENBQWVrSCxVQUFmLENBQTBCLEtBQUtwSixHQUEvQixFQUFvQzJHLFdBQVcsQ0FBQ3lCLEVBQWhELEVBQW9EekIsV0FBcEQsQ0FBTjtBQUNIOztBQUNELFdBQU9NLGVBQVA7QUFDSDs7QUFFYSxRQUFSNkIsUUFBUSxDQUFDOUosS0FBRCxFQUFRRSxJQUFSLEVBQWMrSSxjQUFkLEVBQThCUSxhQUE5QixFQUE2Q1YsVUFBVSxHQUFHLENBQTFELEVBQTZEO0FBQ3ZFLFVBQU1zQixNQUFNLEdBQUcsRUFBZjtBQUNBLFVBQU1DLEtBQUssR0FBR3ZCLFVBQVUsR0FBRyxDQUEzQjs7QUFHQSxRQUFJL0ksS0FBSyxDQUFDdUssWUFBVixFQUF3QjtBQUNwQixVQUFJRCxLQUFKLEVBQVc7QUFDUHRLLFFBQUFBLEtBQUssQ0FBQ3VLLFlBQU4sQ0FBbUJDLFFBQW5CO0FBQ0g7O0FBQ0RDLHNCQUFFQyxNQUFGLENBQVNMLE1BQVQsRUFBaUJySyxLQUFLLENBQUN1SyxZQUFOLENBQW1CSSxTQUFuQixFQUFqQjtBQUNIOztBQUVELFFBQUl6SyxJQUFJLENBQUNxSyxZQUFULEVBQXVCO0FBQ25CLFVBQUlELEtBQUosRUFBVztBQUNQcEssUUFBQUEsSUFBSSxDQUFDcUssWUFBTCxDQUFrQkMsUUFBbEI7QUFDSDs7QUFDREMsc0JBQUVDLE1BQUYsQ0FBU0wsTUFBVCxFQUFpQm5LLElBQUksQ0FBQ3FLLFlBQUwsQ0FBa0JJLFNBQWxCLEVBQWpCO0FBQ0g7O0FBR0QsUUFBSSxLQUFLcEosVUFBTCxJQUFtQixLQUFLRCxPQUF4QixJQUFtQyxLQUFLQSxPQUFMLENBQWFnRSxRQUFoRCxJQUE0RHBGLElBQUksQ0FBQ0MsV0FBckUsRUFBa0Y7QUFDOUUsV0FBSyxJQUFJeUssQ0FBQyxHQUFDLENBQVgsRUFBY0EsQ0FBQyxHQUFFMUssSUFBSSxDQUFDQyxXQUFMLENBQWlCTCxNQUFsQyxFQUEwQzhLLENBQUMsRUFBM0MsRUFBK0M7QUFFM0MsWUFBSWxLLElBQUksR0FBR1IsSUFBSSxDQUFDQyxXQUFMLENBQWlCeUssQ0FBakIsRUFBb0JsSyxJQUEvQjtBQUNBLFlBQUlELElBQUksR0FBR1AsSUFBSSxDQUFDQyxXQUFMLENBQWlCeUssQ0FBakIsRUFBb0JuSyxJQUEvQjtBQUVBLGNBQU0sS0FBS2EsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQmMsYUFBdEIsQ0FBb0MzRixJQUFwQyxFQUEwQ0MsSUFBMUMsQ0FBTjtBQUNIO0FBQ0o7O0FBQ0QsVUFBTSxLQUFLbUssMEJBQUwsQ0FBZ0MzSyxJQUFoQyxDQUFOO0FBQ0EsVUFBTTJKLFVBQVUsR0FBRyxJQUFJaUIsbUJBQUosRUFBbkI7QUFDQWpCLElBQUFBLFVBQVUsQ0FBQy9DLElBQVgsR0FBa0I1RyxJQUFJLENBQUM0RyxJQUF2QjtBQUNBK0MsSUFBQUEsVUFBVSxDQUFDa0IsUUFBWCxHQUFzQjdLLElBQUksQ0FBQ3VJLElBQTNCO0FBQ0FvQixJQUFBQSxVQUFVLENBQUNQLFlBQVgsR0FBMEJHLGFBQTFCO0FBQ0FJLElBQUFBLFVBQVUsQ0FBQ2QsVUFBWCxHQUF3QkEsVUFBeEI7O0FBR0EsUUFBSTtBQUNBLGFBQU8sQ0FBRSxLQUFLekgsT0FBUCxJQUFtQixLQUFLNkMsa0JBQUwsRUFBMUI7O0FBQ0EsVUFBSSxDQUFDLEtBQUs3QyxPQUFWLEVBQW1CO0FBQ2Y7QUFDSDtBQUNKLEtBTEQsQ0FLRSxPQUFPbUQsQ0FBUCxFQUFVO0FBQ1IxRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsdUNBQVYsRUFBbUROLENBQW5EO0FBQ0FvRixNQUFBQSxVQUFVLENBQUN2QyxTQUFYLEdBQXVCdUMsVUFBVSxDQUFDaEMsT0FBWCxHQUFxQjVHLGNBQU9zRyxZQUFQLEVBQTVDO0FBQ0FzQyxNQUFBQSxVQUFVLENBQUMvQixRQUFYLEdBQXNCLENBQXRCO0FBQ0ErQixNQUFBQSxVQUFVLENBQUMzRSxPQUFYLEdBQXFCb0QsZ0JBQVlDLG1CQUFaLENBQWdDOUQsQ0FBaEMsQ0FBckI7QUFDQW9GLE1BQUFBLFVBQVUsQ0FBQ3hGLE1BQVgsR0FBb0JtRCxnQkFBT1csTUFBM0I7O0FBRUEsVUFBSW5JLEtBQUssQ0FBQ3VLLFlBQVYsRUFBd0I7QUFDcEJ2SyxRQUFBQSxLQUFLLENBQUN1SyxZQUFOLENBQW1CUyxRQUFuQjtBQUNIOztBQUVELFVBQUk5SyxJQUFJLENBQUNxSyxZQUFULEVBQXVCO0FBQ25CckssUUFBQUEsSUFBSSxDQUFDcUssWUFBTCxDQUFrQlMsUUFBbEI7QUFDSDs7QUFFRCxhQUFPbkIsVUFBUDtBQUNIOztBQUVELFVBQU0sS0FBS29CLG9CQUFMLEVBQU47O0FBRUEsUUFBSTtBQUNBcEIsTUFBQUEsVUFBVSxDQUFDdkMsU0FBWCxHQUF1QnJHLGNBQU9zRyxZQUFQLEVBQXZCO0FBQ0EsWUFBTTtBQUFFMkQsUUFBQUEsV0FBRjtBQUFlQyxRQUFBQSxPQUFmO0FBQXdCQyxRQUFBQSxVQUF4QjtBQUFvQ3JHLFFBQUFBO0FBQXBDLFVBQThDLE1BQU0sS0FBS3NHLFdBQUwsQ0FBaUJyTCxLQUFqQixFQUF3QkUsSUFBeEIsRUFBOEIrSSxjQUE5QixFQUE4Q1EsYUFBOUMsRUFBNkRZLE1BQTdELENBQTFEOztBQUNBLFdBQUtpQixtQkFBTCxDQUF5QjtBQUFFSixRQUFBQSxXQUFGO0FBQWVDLFFBQUFBLE9BQWY7QUFBd0JwRyxRQUFBQSxLQUF4QjtBQUErQnFHLFFBQUFBO0FBQS9CLE9BQXpCOztBQUNBdkIsTUFBQUEsVUFBVSxDQUFDaEMsT0FBWCxHQUFxQjVHLGNBQU9zRyxZQUFQLEVBQXJCO0FBQ0FzQyxNQUFBQSxVQUFVLENBQUMvQixRQUFYLEdBQXNCK0IsVUFBVSxDQUFDaEMsT0FBWCxHQUFxQmdDLFVBQVUsQ0FBQ3ZDLFNBQXREO0FBQ0F1QyxNQUFBQSxVQUFVLENBQUNzQixPQUFYLEdBQXFCQSxPQUFyQjtBQUNBdEIsTUFBQUEsVUFBVSxDQUFDMEIsS0FBWCxHQUFtQkwsV0FBVyxJQUFJQSxXQUFXLENBQUNLLEtBQTNCLEdBQW1DTCxXQUFXLENBQUNLLEtBQS9DLEdBQXVELEVBQTFFO0FBQ0ExQixNQUFBQSxVQUFVLENBQUMyQixJQUFYLEdBQWtCTixXQUFXLElBQUlBLFdBQVcsQ0FBQ00sSUFBM0IsR0FBa0NOLFdBQVcsQ0FBQ00sSUFBOUMsR0FBcUQsRUFBdkU7QUFDQTNCLE1BQUFBLFVBQVUsQ0FBQzRCLEdBQVgsR0FBaUJQLFdBQVcsSUFBSUEsV0FBVyxDQUFDTyxHQUEzQixHQUFpQ1AsV0FBVyxDQUFDTyxHQUE3QyxHQUFtRCxJQUFwRTtBQUNBNUIsTUFBQUEsVUFBVSxDQUFDbEcsY0FBWCxHQUE0QnVILFdBQVcsSUFBSUEsV0FBVyxDQUFDUSxVQUEzQixHQUF3Q1IsV0FBVyxDQUFDUSxVQUFwRCxHQUFpRSxJQUE3RjtBQUNBN0IsTUFBQUEsVUFBVSxDQUFDOEIsV0FBWCxHQUF5QlQsV0FBVyxJQUFJQSxXQUFXLENBQUNTLFdBQTNCLEdBQXlDVCxXQUFXLENBQUNTLFdBQXJELEdBQW1FLElBQTVGOztBQUdBLFVBQUlDLFdBQVcsR0FBR25CLGdCQUFFb0IsSUFBRixDQUFPaEMsVUFBVSxDQUFDMEIsS0FBbEIsRUFBeUI7QUFBQ2xILFFBQUFBLE1BQU0sRUFBRW1ELGdCQUFPVztBQUFoQixPQUF6QixDQUFsQjs7QUFFQSxVQUFJMkQsWUFBWSxHQUFHckIsZ0JBQUVvQixJQUFGLENBQU9oQyxVQUFVLENBQUMwQixLQUFsQixFQUF5QjtBQUFDbEgsUUFBQUEsTUFBTSxFQUFFbUQsZ0JBQU8wQztBQUFoQixPQUF6QixDQUFuQjs7QUFDQUwsTUFBQUEsVUFBVSxDQUFDeEYsTUFBWCxHQUFvQm9HLGdCQUFFc0IsT0FBRixDQUFVSCxXQUFWLEtBQTBCLENBQUM3RyxLQUEzQixHQUFtQ3lDLGdCQUFPQyxNQUExQyxHQUFtREQsZ0JBQU9XLE1BQTlFOztBQUNBLFVBQUlwRCxLQUFKLEVBQVc7QUFDUDhFLFFBQUFBLFVBQVUsQ0FBQzNFLE9BQVgsR0FBcUJILEtBQXJCO0FBQ0E4RSxRQUFBQSxVQUFVLENBQUN4RixNQUFYLEdBQW9CbUQsZ0JBQU9XLE1BQTNCO0FBQ0EwQixRQUFBQSxVQUFVLENBQUMwQixLQUFYLEdBQW1CdEssY0FBTytLLGlDQUFQLENBQXlDbkMsVUFBVSxDQUFDMEIsS0FBcEQsQ0FBbkI7QUFDSCxPQUpELE1BS0ssSUFBSSxDQUFDZCxnQkFBRXNCLE9BQUYsQ0FBVUQsWUFBVixDQUFMLEVBQThCO0FBQy9CakMsUUFBQUEsVUFBVSxDQUFDeEYsTUFBWCxHQUFvQm1ELGdCQUFPMEMsT0FBM0I7QUFDSDs7QUFDRCxZQUFNLEtBQUsrQix5QkFBTCxDQUErQi9MLElBQS9CLEVBQXFDMkosVUFBckMsQ0FBTjtBQUNILEtBM0JELENBMkJFLE9BQU9wRixDQUFQLEVBQVU7QUFDUjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSxnQ0FBVixFQUE0Q04sQ0FBNUM7QUFDQW9GLE1BQUFBLFVBQVUsQ0FBQzNFLE9BQVgsR0FBcUJvRCxnQkFBWUMsbUJBQVosQ0FBZ0M5RCxDQUFoQyxDQUFyQjtBQUNBb0YsTUFBQUEsVUFBVSxDQUFDeEYsTUFBWCxHQUFvQm1ELGdCQUFPVyxNQUEzQjtBQUVIOztBQUNELFVBQU0rRCxvQkFBb0IsR0FBRyxPQUFPLEtBQUtqSyxRQUFMLENBQWNrSyxXQUFyQixLQUFxQyxTQUFyQyxJQUFrRCxLQUFLbEssUUFBTCxDQUFja0ssV0FBZCxLQUE4QixJQUE3RztBQUVBLFVBQU0sS0FBS0Msa0JBQUwsQ0FBd0J2QyxVQUFVLENBQUN4RixNQUFuQyxFQUEyQzZILG9CQUEzQyxDQUFOOztBQUVBLFFBQUlsTSxLQUFLLENBQUN1SyxZQUFWLEVBQXdCO0FBQ3BCdkssTUFBQUEsS0FBSyxDQUFDdUssWUFBTixDQUFtQlMsUUFBbkI7QUFDSDs7QUFFRCxRQUFJOUssSUFBSSxDQUFDcUssWUFBVCxFQUF1QjtBQUNuQnJLLE1BQUFBLElBQUksQ0FBQ3FLLFlBQUwsQ0FBa0JTLFFBQWxCO0FBQ0g7O0FBRUQsV0FBT25CLFVBQVA7QUFDSDs7QUFFZ0IsUUFBWHdCLFdBQVcsQ0FBQ3JMLEtBQUQsRUFBUUUsSUFBUixFQUFjK0ksY0FBZCxFQUE4QlEsYUFBOUIsRUFBNkNZLE1BQTdDLEVBQXFEO0FBQ2xFLFFBQUksQ0FBQyxLQUFLL0ksT0FBVixFQUFtQjtBQUNmdkMsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLHFDQUFWOztBQUVBLFVBQUksS0FBS3NILHFCQUFULEVBQWdDO0FBQzVCLGFBQUtBLHFCQUFMLENBQTJCQyxNQUEzQixDQUFrQyxJQUFJeEosS0FBSixDQUFVLGlCQUFWLENBQWxDO0FBQ0g7O0FBQ0Q7QUFDSDs7QUFFRCxXQUFPLE1BQU0sS0FBS3hCLE9BQUwsQ0FBYXVELEdBQWIsQ0FBaUI7QUFDMUIwSCxNQUFBQSxVQUFVLEVBQUVyTSxJQUFJLENBQUM0RyxJQURTO0FBRTFCMEYsTUFBQUEsVUFBVSxFQUFFdE0sSUFBSSxDQUFDdUksSUFGUztBQUcxQjBDLE1BQUFBLE9BQU8sRUFBRTtBQUNMZCxRQUFBQSxNQUFNLEVBQUVBLE1BREg7QUFFTGhILFFBQUFBLEdBQUcsRUFBRSxLQUFLSyxJQUZMO0FBR0xkLFFBQUFBLElBQUksRUFBRSxLQUFLZCxLQUhOO0FBSUwySyxRQUFBQSxJQUFJLEVBQUUsS0FBSzVLLEtBSk47QUFLTDZKLFFBQUFBLFVBQVUsRUFBRSxLQUFLMUosV0FMWjtBQU1MMEssUUFBQUEsSUFBSSxFQUFFO0FBQ0ZDLFVBQUFBLElBQUksRUFBRTtBQUNGN0YsWUFBQUEsSUFBSSxFQUFFNUcsSUFBSSxDQUFDNEcsSUFEVDtBQUVGOEYsWUFBQUEsU0FBUyxFQUFFbkQ7QUFGVCxXQURKO0FBS0Z6SixVQUFBQSxLQUFLLEVBQUU7QUFDSDhHLFlBQUFBLElBQUksRUFBRTlHLEtBQUssQ0FBQzhHLElBRFQ7QUFFSDhGLFlBQUFBLFNBQVMsRUFBRTNEO0FBRlI7QUFMTDtBQU5ELE9BSGlCO0FBb0IxQjRELE1BQUFBLE1BQU0sRUFBRSxLQUFLNUssUUFBTCxDQUFjNkssRUFBZCxJQUFvQjtBQXBCRixLQUFqQixDQUFiO0FBc0JIOztBQUV1QixRQUFsQjNJLGtCQUFrQixHQUFHO0FBQ3ZCLFdBQU8sS0FBSzdDLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFheUwsVUFBYixDQUF3QixLQUFLL0wsR0FBN0IsRUFBa0MsS0FBS2lCLFFBQXZDLEVBQWlELEtBQUtILEtBQXRELENBQXZCO0FBQ0g7O0FBRXlCLFFBQXBCbUosb0JBQW9CLEdBQUc7QUFDekIsUUFBSSxLQUFLM0osT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWEwTCxZQUFqQyxFQUErQztBQUMzQyxZQUFNLEtBQUsxTCxPQUFMLENBQWEwTCxZQUFiLEVBQU47QUFDSDtBQUNKOztBQUV1QixRQUFsQlosa0JBQWtCLENBQUMvSCxNQUFNLEdBQUcsSUFBVixFQUFnQjRJLGNBQWMsR0FBRyxJQUFqQyxFQUF1QztBQUMzRCxRQUFJLEtBQUszTCxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYTRMLFVBQWpDLEVBQTZDO0FBQ3pDLFlBQU0sS0FBSzVMLE9BQUwsQ0FBYTRMLFVBQWIsQ0FBd0I3SSxNQUF4QixFQUFnQzRJLGNBQWhDLENBQU47QUFDSDtBQUNKOztBQUUrQixRQUExQnZGLDBCQUEwQixHQUFHO0FBQy9CLFFBQUk7QUFDQSxVQUFJLFFBQVEsS0FBS3BHLE9BQWIsSUFBd0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBekMsRUFBeUQ7QUFDckQsY0FBTSxLQUFLN0wsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixZQUE1QixFQUEwQyxDQUFDLEtBQUtuTSxHQUFOLEVBQVcsS0FBS2lCLFFBQWhCLEVBQTBCLEtBQUtILEtBQS9CLENBQTFDLENBQU47QUFDSDtBQUNKLEtBSkQsQ0FLQSxPQUFPMkMsQ0FBUCxFQUFVO0FBQ04xRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsMkJBQVYsRUFBdUNOLENBQXZDO0FBQ0EsV0FBS3ZCLFNBQUwsS0FBa0IsTUFBTSxLQUFLQSxTQUFMLENBQWVrSyxVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLDhCQUE0QjNJLENBQXBFLEVBQXVFekYsY0FBdkUsQ0FBeEI7QUFDSDtBQUNKOztBQUVnQyxRQUEzQnVLLDJCQUEyQixDQUFDdkosS0FBRCxFQUFRO0FBQ3JDLFFBQUk7QUFDQSxVQUFJLFFBQVEsS0FBS3NCLE9BQWIsSUFBd0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBekMsRUFBeUQ7QUFDckQsY0FBTSxLQUFLN0wsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixhQUE1QixFQUEyQyxDQUFDbk4sS0FBRCxDQUEzQyxDQUFOO0FBQ0g7QUFDSixLQUpELENBS0EsT0FBT3lFLENBQVAsRUFBVTtBQUNOMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLDRCQUFWLEVBQXdDTixDQUF4QztBQUNBLFdBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFla0ssVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3QywrQkFBNkIzSSxDQUFyRSxFQUF3RXpGLGNBQXhFLENBQXhCO0FBQ0g7QUFDSjs7QUFFK0IsUUFBMUI2TCwwQkFBMEIsQ0FBQzNLLElBQUQsRUFBTztBQUNuQyxRQUFJO0FBQ0EsYUFBTyxLQUFLb0IsT0FBTCxJQUFnQixLQUFLQSxPQUFMLENBQWE2TCxjQUFiLENBQTRCLFlBQTVCLEVBQTBDLENBQUNqTixJQUFELENBQTFDLENBQXZCO0FBQ0gsS0FGRCxDQUdBLE9BQU91RSxDQUFQLEVBQVU7QUFDTjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSwyQkFBVixFQUF1Q04sQ0FBdkM7QUFDQSxXQUFLdkIsU0FBTCxLQUFrQixNQUFNLEtBQUtBLFNBQUwsQ0FBZWtLLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsOEJBQTRCM0ksQ0FBcEUsRUFBdUV6RixjQUF2RSxDQUF4QjtBQUNIO0FBQ0o7O0FBRThCLFFBQXpCd0oseUJBQXlCLENBQUN4RCxNQUFELEVBQVM7QUFDcEMsUUFBSTtBQUNBLGFBQU8sS0FBSzFELE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixXQUE1QixFQUF5QyxDQUFDLEtBQUtuTSxHQUFOLEVBQVdnRSxNQUFYLENBQXpDLENBQXZCO0FBQ0gsS0FGRCxDQUdBLE9BQU9QLENBQVAsRUFBVTtBQUNOMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLDBCQUFWLEVBQXNDTixDQUF0QztBQUNBLFdBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFla0ssVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3Qyw2QkFBMkIzSSxDQUFuRSxFQUFzRXpGLGNBQXRFLENBQXhCO0FBQ0g7QUFDSjs7QUFFK0IsUUFBMUJtTCwwQkFBMEIsQ0FBQ25LLEtBQUQsRUFBUWdGLE1BQVIsRUFBZ0I7QUFDNUMsUUFBSTtBQUNBLGFBQU8sS0FBSzFELE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixZQUE1QixFQUEwQyxDQUFDbk4sS0FBRCxFQUFRZ0YsTUFBUixDQUExQyxDQUF2QjtBQUNILEtBRkQsQ0FHQSxPQUFPUCxDQUFQLEVBQVU7QUFDTjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSwyQkFBVixFQUF1Q04sQ0FBdkM7QUFDQSxXQUFLdkIsU0FBTCxLQUFrQixNQUFNLEtBQUtBLFNBQUwsQ0FBZWtLLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsOEJBQTRCM0ksQ0FBcEUsRUFBdUV6RixjQUF2RSxDQUF4QjtBQUNIO0FBQ0o7O0FBRThCLFFBQXpCaU4seUJBQXlCLENBQUMvTCxJQUFELEVBQU84RSxNQUFQLEVBQWU7QUFDMUMsUUFBSTtBQUNBLGFBQU8sS0FBSzFELE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixXQUE1QixFQUF5QyxDQUFDak4sSUFBRCxFQUFPOEUsTUFBUCxDQUF6QyxDQUF2QjtBQUNILEtBRkQsQ0FHQSxPQUFPUCxDQUFQLEVBQVU7QUFDTjFGLE1BQUFBLEdBQUcsQ0FBQ2dHLEtBQUosQ0FBVSwwQkFBVixFQUFzQ04sQ0FBdEM7QUFDQSxXQUFLdkIsU0FBTCxLQUFrQixNQUFNLEtBQUtBLFNBQUwsQ0FBZWtLLFVBQWYsQ0FBMEIsSUFBMUIsRUFBZ0MsTUFBaEMsRUFBd0MsNkJBQTJCM0ksQ0FBbkUsRUFBc0V6RixjQUF0RSxDQUF4QjtBQUNIO0FBQ0o7O0FBRXdCLFFBQW5Ca0YsbUJBQW1CLEdBQUc7QUFDeEIsVUFBTW1KLFVBQVUsR0FBRzVFLGNBQUs2RSxJQUFMLENBQVVDLFNBQVYsRUFBcUIsV0FBckIsQ0FBbkI7O0FBQ0EsU0FBS2pNLE9BQUwsR0FBZSxJQUFJa00sc0JBQUosQ0FBa0IsS0FBS3hNLEdBQXZCLEVBQTRCcU0sVUFBNUIsRUFBd0MsS0FBSzlMLFVBQTdDLEVBQXlELEtBQUt3QyxVQUE5RCxFQUEwRSxRQUExRSxFQUFvRixLQUFLdEMsa0JBQXpGLENBQWY7QUFDQSxVQUFNLEtBQUtILE9BQUwsQ0FBYW1NLEtBQWIsRUFBTjs7QUFDQSxTQUFLQyxpQkFBTDs7QUFDQSxVQUFNLEtBQUtwTSxPQUFMLENBQWFxTSxhQUFiLEVBQU47O0FBQ0EsU0FBS0MseUJBQUw7QUFDSDs7QUFFREYsRUFBQUEsaUJBQWlCLEdBQUc7QUFFaEIsVUFBTUcsS0FBSyxHQUFHLElBQWQ7O0FBQ0EsU0FBS3ZNLE9BQUwsQ0FBYXdNLFNBQWIsQ0FBdUIsZ0JBQXZCLEVBQXlDLEtBQUtDLG9CQUFMLENBQTBCQyxJQUExQixDQUErQixJQUEvQixDQUF6Qzs7QUFDQSxTQUFLMU0sT0FBTCxDQUFhd00sU0FBYixDQUF1QixlQUF2QixFQUF3QyxLQUFLRyxtQkFBTCxDQUF5QkQsSUFBekIsQ0FBOEIsSUFBOUIsQ0FBeEM7O0FBQ0EsU0FBSzFNLE9BQUwsQ0FBYTRNLEVBQWIsQ0FBZ0IsT0FBaEIsRUFBMEJDLE9BQUQsSUFBYTtBQUNsQyxZQUFNO0FBQUVwSixRQUFBQTtBQUFGLFVBQVlvSixPQUFsQjtBQUNBcFAsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLHdCQUFWLEVBQW9DQSxLQUFwQzs7QUFFQSxVQUFJLEtBQUtxSixRQUFULEVBQW1CO0FBQ2YsYUFBS0MsSUFBTCxDQUFVLFlBQVYsRUFBd0J0SixLQUF4QjtBQUNILE9BRkQsTUFFTztBQUNIOEksUUFBQUEsS0FBSyxDQUFDck0sb0JBQU4sR0FBNkJ1RCxLQUE3QjtBQUNIO0FBQ0osS0FURDs7QUFVQSxTQUFLekQsT0FBTCxDQUFhNE0sRUFBYixDQUFnQixNQUFoQixFQUF5QkMsT0FBRCxJQUFhO0FBQ2pDLFdBQUtDLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQSxZQUFNO0FBQUVFLFFBQUFBO0FBQUYsVUFBZUgsT0FBckI7O0FBRUEsVUFBSUcsUUFBUSxJQUFJQSxRQUFRLEtBQUssQ0FBN0IsRUFBZ0M7QUFJNUIsWUFBSUMsT0FBTyxHQUFHLElBQWQ7O0FBQ0EsWUFBSVYsS0FBSyxDQUFDeE0sWUFBVixFQUF3QjtBQUNwQmtOLFVBQUFBLE9BQU8sR0FBR1YsS0FBSyxDQUFDcEwsYUFBaEI7QUFDSCxTQUZELE1BR0ssSUFBSW9MLEtBQUssQ0FBQzFNLFVBQVYsRUFBc0I7QUFDdkJvTixVQUFBQSxPQUFPLEdBQUdWLEtBQUssQ0FBQ3hCLHFCQUFoQjtBQUNIOztBQUNELFlBQUl0SCxLQUFLLEdBQUc4SSxLQUFLLENBQUNyTSxvQkFBTixJQUE4QixJQUExQzs7QUFDQSxZQUFJOE0sUUFBUSxJQUFJLEdBQWhCLEVBQXFCO0FBQ2pCdkosVUFBQUEsS0FBSyxHQUFHLElBQUl5SixvQkFBSixDQUFnQmxHLGdCQUFZbUcsU0FBWixDQUFzQkMsWUFBdEMsRUFBb0QsMEZBQXBELENBQVI7QUFDSCxTQUZELE1BR0ssSUFBSSxDQUFDM0osS0FBTCxFQUFZO0FBQ2JBLFVBQUFBLEtBQUssR0FBRyxJQUFJeUosb0JBQUosQ0FBaUIsb0NBQW1DRixRQUFTLEdBQTdELENBQVI7QUFDSDs7QUFFREMsUUFBQUEsT0FBTyxJQUFJQSxPQUFPLENBQUNqQyxNQUFSLENBQWV2SCxLQUFmLENBQVg7O0FBQ0E4SSxRQUFBQSxLQUFLLENBQUNqSixxQkFBTjtBQUNIO0FBQ0osS0ExQkQ7O0FBMkJBLFNBQUt0RCxPQUFMLENBQWE0TSxFQUFiLENBQWdCLFNBQWhCLEVBQTJCLE1BQU9TLEdBQVAsSUFBZTtBQUN0QyxVQUFJQSxHQUFHLENBQUM5SCxLQUFKLElBQWE4SCxHQUFHLENBQUM5SCxLQUFKLEtBQWMsS0FBL0IsRUFBc0M7QUFDbEMsWUFBSThILEdBQUcsQ0FBQ0MsS0FBSixLQUFjLE9BQWxCLEVBQTJCO0FBQ3ZCN1AsVUFBQUEsR0FBRyxDQUFDMEgsS0FBSixDQUFVa0ksR0FBRyxDQUFDQSxHQUFkO0FBQ0gsU0FGRCxNQUVPLElBQUlBLEdBQUcsQ0FBQ0MsS0FBSixLQUFjLE1BQWxCLEVBQTBCO0FBQzdCN1AsVUFBQUEsR0FBRyxDQUFDOFAsSUFBSixDQUFTRixHQUFHLENBQUNBLEdBQWI7QUFDSCxTQUZNLE1BRUEsSUFBSUEsR0FBRyxDQUFDQyxLQUFKLEtBQWMsT0FBbEIsRUFBMkI7QUFDOUI3UCxVQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVU0SixHQUFHLENBQUNBLEdBQWQsRUFBbUJBLEdBQUcsQ0FBQ0csR0FBdkI7QUFDSCxTQUZNLE1BRUEsSUFBSUgsR0FBRyxDQUFDQyxLQUFKLEtBQWMsTUFBbEIsRUFBMEI7QUFDN0I3UCxVQUFBQSxHQUFHLENBQUM0RixJQUFKLENBQVNnSyxHQUFHLENBQUNBLEdBQWI7QUFDSDs7QUFFRGQsUUFBQUEsS0FBSyxDQUFDUSxJQUFOLENBQVcsS0FBWCxFQUFrQk0sR0FBRyxDQUFDSSxJQUF0QixFQUE0QkosR0FBRyxDQUFDQyxLQUFoQyxFQUF1Q0QsR0FBRyxDQUFDQSxHQUEzQyxFQUFnREEsR0FBRyxDQUFDSyxHQUFKLElBQVdoUSxjQUEzRDs7QUFDQTZPLFFBQUFBLEtBQUssQ0FBQzNLLFNBQU4sS0FBbUIsTUFBTTJLLEtBQUssQ0FBQzNLLFNBQU4sQ0FBZ0JrSyxVQUFoQixDQUNyQnVCLEdBQUcsQ0FBQ0ksSUFEaUIsRUFDWEosR0FBRyxDQUFDQyxLQURPLEVBQ0FELEdBQUcsQ0FBQ0EsR0FESixFQUNTQSxHQUFHLENBQUNLLEdBQUosSUFBV2hRLGNBRHBCLEVBQ29DO0FBQ3JEaVEsVUFBQUEsT0FBTyxFQUFFLEtBQUsxTSxxQkFEdUM7QUFFckQyTSxVQUFBQSxNQUFNLEVBQUUsS0FBSzdNLG9CQUZ3QztBQUdyRDhNLFVBQUFBLE1BQU0sRUFBRSxLQUFLM007QUFId0MsU0FEcEMsQ0FBekI7QUFNSCxPQWxCRCxNQW1CSyxJQUFJbU0sR0FBRyxDQUFDOUgsS0FBSixJQUFhOEgsR0FBRyxDQUFDOUgsS0FBSixLQUFjLGFBQS9CLEVBQThDO0FBQy9DZ0gsUUFBQUEsS0FBSyxDQUFDUSxJQUFOLENBQVcsYUFBWCxFQUEwQk0sR0FBRyxDQUFDak8sSUFBOUIsRUFBb0NpTyxHQUFHLENBQUNTLEtBQXhDLEVBQStDVCxHQUFHLENBQUNJLElBQW5EO0FBQ0gsT0FGSSxNQUdBLElBQUlKLEdBQUcsQ0FBQzlILEtBQUosSUFBYThILEdBQUcsQ0FBQzlILEtBQUosS0FBYyxlQUEvQixFQUFnRDtBQUNqRCxZQUFJOEgsR0FBRyxDQUFDVSxNQUFKLEtBQWUsTUFBbkIsRUFBMkI7QUFDdkJ4QixVQUFBQSxLQUFLLENBQUNRLElBQU4sQ0FBVyxXQUFYLEVBQXdCTSxHQUF4QjtBQUNIO0FBQ0osT0FKSSxNQUtBLElBQUlBLEdBQUcsQ0FBQzlILEtBQUosSUFBYThILEdBQUcsQ0FBQzlILEtBQUosS0FBYyxhQUEvQixFQUE4QztBQUMvQ25DLFFBQUFBLE9BQU8sQ0FBQzNGLEdBQVIsQ0FBWSxjQUFaLEVBQTRCNFAsR0FBNUI7QUFDQSxjQUFNLEtBQUt2SyxPQUFMLENBQWEsUUFBYixDQUFOO0FBQ0EsY0FBTSxLQUFLZ0IsSUFBTCxDQUFVLFFBQVYsQ0FBTjtBQUNILE9BSkksTUFLQSxJQUFJdUosR0FBRyxDQUFDOUgsS0FBSixJQUFhOEgsR0FBRyxDQUFDOUgsS0FBSixLQUFjLE1BQS9CLEVBQXVDO0FBQ3hDZ0gsUUFBQUEsS0FBSyxDQUFDUSxJQUFOLENBQVcsTUFBWCxFQUFtQk0sR0FBbkI7QUFDSDtBQUNKLEtBcENEO0FBcUNIOztBQUVEZixFQUFBQSx5QkFBeUIsR0FBRztBQUN4QixRQUFJLENBQUMsS0FBS3RNLE9BQVYsRUFBbUI7QUFDZjtBQUNIOztBQUNELFNBQUtBLE9BQUwsQ0FBYWdFLFFBQWIsSUFBeUIsS0FBS2hFLE9BQUwsQ0FBYWdFLFFBQWIsQ0FBc0I0SSxFQUF0QixDQUF5QixnQkFBekIsRUFBNENvQixjQUFELElBQW9CO0FBQ3BGLFdBQUtqQixJQUFMLENBQVUsWUFBVixFQUF3QmlCLGNBQXhCO0FBQ0gsS0FGd0IsQ0FBekI7QUFJQSxTQUFLaE8sT0FBTCxDQUFhZ0UsUUFBYixJQUF5QixLQUFLaEUsT0FBTCxDQUFhZ0UsUUFBYixDQUFzQjRJLEVBQXRCLENBQXlCLHFCQUF6QixFQUFpRHFCLFVBQUQsSUFBZ0I7QUFDckYsV0FBS2xCLElBQUwsQ0FBVSxpQkFBVixFQUE2QmtCLFVBQTdCO0FBQ0gsS0FGd0IsQ0FBekI7QUFHSDs7QUFFeUIsUUFBcEJ4QixvQkFBb0IsQ0FBQ3RKLENBQUQsRUFBSTtBQUMxQixTQUFLakMsb0JBQUwsR0FBNEJpQyxDQUFDLENBQUMyRSxFQUE5QjtBQUNBLFNBQUtsRyxTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFlc00sV0FBZixDQUEyQixLQUFLeE8sR0FBaEMsRUFBcUMsS0FBS3VCLHFCQUExQyxFQUFpRSxLQUFLRixvQkFBdEUsRUFBNEZvQyxDQUE1RixDQUF4Qjs7QUFFQSxRQUFJO0FBQ0EsVUFBSUEsQ0FBQyxJQUFJQSxDQUFDLENBQUNnTCxNQUFQLElBQWlCaEwsQ0FBQyxDQUFDZ0wsTUFBRixLQUFhLEtBQWxDLEVBQXlDLENBRXhDLENBRkQsTUFFTztBQUNILGVBQU8sS0FBS25PLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixlQUE1QixFQUE2QyxDQUFDMUksQ0FBRCxDQUE3QyxDQUF2QjtBQUNIO0FBQ0osS0FORCxDQU9BLE9BQU9BLENBQVAsRUFBVTtBQUNOMUYsTUFBQUEsR0FBRyxDQUFDZ0csS0FBSixDQUFVLDhCQUFWLEVBQTBDTixDQUExQztBQUNBLFdBQUt2QixTQUFMLEtBQWtCLE1BQU0sS0FBS0EsU0FBTCxDQUFla0ssVUFBZixDQUEwQixJQUExQixFQUFnQyxNQUFoQyxFQUF3QyxpQ0FBK0IzSSxDQUF2RSxFQUEwRXpGLGNBQTFFLENBQXhCO0FBQ0g7QUFDSjs7QUFFd0IsUUFBbkJpUCxtQkFBbUIsQ0FBQ3hKLENBQUQsRUFBSTtBQUN6QixTQUFLdkIsU0FBTCxLQUFrQixNQUFNLEtBQUtBLFNBQUwsQ0FBZXdNLFNBQWYsQ0FBeUIsS0FBSzFPLEdBQTlCLEVBQW1DLEtBQUt1QixxQkFBeEMsRUFBK0QsS0FBS0Ysb0JBQXBFLEVBQTBGb0MsQ0FBQyxDQUFDTyxNQUE1RixDQUF4Qjs7QUFDQSxRQUFJO0FBQ0EsVUFBSVAsQ0FBQyxJQUFJQSxDQUFDLENBQUNnTCxNQUFQLElBQWlCaEwsQ0FBQyxDQUFDZ0wsTUFBRixLQUFhLEtBQWxDLEVBQXlDLENBRXhDLENBRkQsTUFFTztBQUNILGVBQU8sS0FBS25PLE9BQUwsSUFBZ0IsS0FBS0EsT0FBTCxDQUFhNkwsY0FBYixDQUE0QixjQUE1QixFQUE0QyxDQUFDMUksQ0FBQyxDQUFDTyxNQUFILENBQTVDLENBQXZCO0FBQ0g7QUFDSixLQU5ELENBT0EsT0FBT1AsQ0FBUCxFQUFVO0FBQ04xRixNQUFBQSxHQUFHLENBQUNnRyxLQUFKLENBQVUsNkJBQVYsRUFBeUNOLENBQXpDO0FBQ0EsV0FBS3ZCLFNBQUwsS0FBa0IsTUFBTSxLQUFLQSxTQUFMLENBQWVrSyxVQUFmLENBQTBCLElBQTFCLEVBQWdDLE1BQWhDLEVBQXdDLGdDQUE4QjNJLENBQXRFLEVBQXlFekYsY0FBekUsQ0FBeEI7QUFDSDs7QUFDRCxTQUFLd0Qsb0JBQUwsR0FBNEJGLFNBQTVCO0FBQ0g7O0FBRURzQyxFQUFBQSxxQkFBcUIsR0FBRztBQUNwQixTQUFLN0MsUUFBTCxHQUFnQixFQUFoQjtBQUNBLFNBQUtULE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS0gsVUFBTCxHQUFrQixLQUFsQjtBQUNBLFNBQUtFLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxTQUFLRCxlQUFMLEdBQXVCLEtBQXZCO0FBQ0EsU0FBS2UsV0FBTCxHQUFtQixLQUFuQjtBQUNBLFNBQUtNLGFBQUwsR0FBcUIsa0JBQXJCO0FBQ0g7O0FBRUQ2SSxFQUFBQSxtQkFBbUIsQ0FBQztBQUFFSixJQUFBQSxXQUFGO0FBQWVFLElBQUFBLFVBQWY7QUFBMkJELElBQUFBLE9BQU8sR0FBRyxFQUFyQztBQUF5Q3BHLElBQUFBLEtBQUssR0FBRztBQUFqRCxHQUFELEVBQTBEO0FBRXpFLFFBQUksS0FBSzVDLFdBQVQsRUFBc0I7QUFDbEIsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsUUFBSTRDLEtBQUosRUFBVztBQUNQLFdBQUtzSixJQUFMLENBQVUsWUFBVixFQUF3QnRKLEtBQXhCO0FBQ0g7O0FBRUQsU0FBS2xELEtBQUwsR0FBYXNKLE9BQU8sQ0FBQ3NCLElBQVIsSUFBZ0IsS0FBSzVLLEtBQWxDO0FBRUEsU0FBS0UsUUFBTCxHQUFnQixFQUFFLEdBQUcsS0FBS0EsUUFBVjtBQUFvQixVQUFHcUosVUFBVSxJQUFJLEVBQWpCO0FBQXBCLEtBQWhCO0FBR0EsUUFBSUQsT0FBTyxDQUFDdkksSUFBWixFQUNJLE9BQU91SSxPQUFPLENBQUN2SSxJQUFmO0FBRUosUUFBSXVJLE9BQU8sQ0FBQzlILEdBQVosRUFDSSxPQUFPOEgsT0FBTyxDQUFDOUgsR0FBZjtBQUVKLFFBQUk4SCxPQUFPLENBQUN1QixJQUFaLEVBQ0ksT0FBT3ZCLE9BQU8sQ0FBQ3VCLElBQWY7QUFDUDs7QUFFRGlELEVBQUFBLGlCQUFpQixDQUFDQyxFQUFELEVBQUtDLEVBQUwsRUFBU0MsaUJBQVQsRUFBNEJDLGdCQUE1QixFQUE4Q0MsbUJBQTlDLEVBQW1FO0FBQ2hGLFNBQUszQixJQUFMLENBQVUsZUFBVixFQUEyQjtBQUN2QmhLLE1BQUFBLE1BQU0sRUFBRTJMLG1CQUFtQixDQUFDQyxPQURMO0FBRXZCL0ssTUFBQUEsT0FBTyxFQUFFOEssbUJBQW1CLENBQUM5SyxPQUFwQixJQUErQixJQUZqQjtBQUd2QnlILE1BQUFBLElBQUksRUFBRTtBQUNGdkQsUUFBQUEsRUFBRSxFQUFFeUcsRUFBRSxDQUFDekcsRUFBSCxJQUFTLElBRFg7QUFFRnRDLFFBQUFBLElBQUksRUFBRStJLEVBQUUsQ0FBQy9JLElBRlA7QUFHRjhGLFFBQUFBLFNBQVMsRUFBRW1ELGdCQUhUO0FBSUZySCxRQUFBQSxjQUFjLEVBQUVtSCxFQUFFLENBQUNuSDtBQUpqQixPQUhpQjtBQVN2QjFJLE1BQUFBLEtBQUssRUFBRTtBQUNIb0osUUFBQUEsRUFBRSxFQUFFd0csRUFBRSxDQUFDeEcsRUFBSCxJQUFTLElBRFY7QUFFSHRDLFFBQUFBLElBQUksRUFBRThJLEVBQUUsQ0FBQzlJLElBRk47QUFHSDhGLFFBQUFBLFNBQVMsRUFBRWtELGlCQUhSO0FBSUhwSCxRQUFBQSxjQUFjLEVBQUVrSCxFQUFFLENBQUNsSDtBQUpoQjtBQVRnQixLQUEzQjtBQWdCSDs7QUFFRHdILEVBQUFBLFlBQVksQ0FBQ2xMLE1BQUQsRUFBUztBQUNqQixTQUFLcUosSUFBTCxDQUFVLFVBQVYsRUFBc0JySixNQUF0QjtBQUNIOztBQWp6QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvciAqL1xyXG4vKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignT3h5Z2VuUnVubmVyJyk7XHJcbmNvbnN0IERFRkFVTFRfSVNTVUVSID0gJ3VzZXInO1xyXG5jb25zdCBNQVhfUkVSVU5TID0gMjtcclxuXHJcbmNvbnN0IHsgdjEgfSA9IHJlcXVpcmUoJ3V1aWQnKTtcclxuXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBfICBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuXHJcbmltcG9ydCBUZXN0U3VpdGVSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvc3VpdGUtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RDYXNlUmVzdWx0IGZyb20gJy4uLy4uL21vZGVsL2Nhc2UtcmVzdWx0JztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgU3RhdHVzIGZyb20gJy4uLy4uL21vZGVsL3N0YXR1cyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeHlnZW5FcnJvciBmcm9tICcuLi8uLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgUGFyYW1ldGVyTWFuYWdlciBmcm9tICcuLi8uLi9saWIvcGFyYW0tbWFuYWdlci5qcyc7XHJcbmltcG9ydCBXb3JrZXJQcm9jZXNzIGZyb20gJy4uL1dvcmtlclByb2Nlc3MnO1xyXG5cclxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxyXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuXHJcbmNvbnN0IGdldFN1aXRlc0JyZWFrcG9pbnRzID0gKHN1aXRlcykgPT4ge1xyXG4gICAgY29uc3QgcmV0dmFsID0gW107XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAgIHN1aXRlcyAmJlxyXG4gICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGVzKSAmJlxyXG4gICAgICAgIHN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgICBzdWl0ZXMubWFwKChzdWl0ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzdWl0ZSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoc3VpdGUuY2FzZXMpICYmXHJcbiAgICAgICAgICAgICAgICBzdWl0ZS5jYXNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubWFwKChjYXplKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjYXplLmJyZWFrcG9pbnRzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5tYXAoKGJyZWFrcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbC5wdXNoKGJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR2YWw7XHJcbn07XHJcblxyXG5jb25zdCByZW1vdmVCcmVha3BvaW50RnJvbVN1aXRlcyA9IChzdWl0ZXMsIHJlbW92ZUJyZWFrcG9pbnQpID0+IHtcclxuICAgIGlmIChcclxuICAgICAgICBzdWl0ZXMgJiZcclxuICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlcykgJiZcclxuICAgICAgICBzdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgc3VpdGUgJiZcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzICYmXHJcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHN1aXRlLmNhc2VzKSAmJlxyXG4gICAgICAgICAgICAgICAgc3VpdGUuY2FzZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLmNhc2VzLm1hcCgoY2F6ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY2F6ZS5icmVha3BvaW50cykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F6ZS5icmVha3BvaW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhemUuYnJlYWtwb2ludHMubWFwKChicmVha3BvaW50LCBpZHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LmZpbGUgPT09IHJlbW92ZUJyZWFrcG9pbnQuZmlsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQubGluZSA9PT0gcmVtb3ZlQnJlYWtwb2ludC5saW5lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXplLmJyZWFrcG9pbnRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3h5Z2VuUnVubmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIGNsYXNzIHZhcmlhYmxlc1xyXG4gICAgICAgIHRoaXMuX2lkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93b3JrZXJQcm9jTGFzdEVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSB0cnVlO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm5wbUdSb290RXhlY3V0aW9uICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG9wdGlvbnMubnBtR1Jvb3RFeGVjdXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWZpbmUgdmFyaWFibGVzIHRvIGl0ZXJhdGUgdGhyb3VnaCB0ZXN0IGNhc2VzIGFuZCB0ZXN0IHN1aXRlIGl0ZXJhdGlvbnNcclxuICAgICAgICB0aGlzLl9zdWl0ZTtcclxuICAgICAgICB0aGlzLl9lbnZWYXJzID0ge307ICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRlc3RcclxuICAgICAgICB0aGlzLl92YXJzID0ge307ICAgICAvLyB1c2VyLWRlZmluZWQgdmFyaWFibGVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBzY3JpcHRzXHJcbiAgICAgICAgdGhpcy5fY2FwcyA9IHt9OyAvLyBkZXNpcmVkIGNhcGFiaWxpdGllcyB0aGF0IGFyZSBwYXNzZWQgdG8gZWFjaCBtb2R1bGVcclxuICAgICAgICB0aGlzLl9tb2RDYXBzID0ge307XHJcbiAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2xvY2FsVGltZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCA9IDM7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9jdXJyZW50U3VpdGVSZXN1bHRJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9jdXJyZW50U3RlcFJlc3VsdElkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIHByb21pc2VzXHJcbiAgICAgICAgdGhpcy5fd2hlbkRpc3Bvc2VkID0gZGVmZXIoKTtcclxuICAgIH1cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFB1YmxpYyBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcyA9IHt9LCByZXBvcnRlcikge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgdGVzdCBzdWl0ZSBpcyBkZWZpbmVkXHJcbiAgICAgICAgaWYgKCFvcHRpb25zLnN1aXRlcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWxpemF0aW9uIGZhaWxlZCAtIG5vIHRlc3Qgc3VpdGVzIGFyZSBkZWZpbmVkLiBZb3UgbXVzdCBkZWZpbmUgXCJzdWl0ZXNcIiBwcm9wZXJ0eSBpbiBPeHlnZW4gb3B0aW9ucy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX2N3ZCA9IHRoaXMuX29wdGlvbnMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICAvLyBtZXJnZSBjdXJyZW50IGFuZCB0ZXN0IGNvbmZpZ3VyYXRpb24gYmFzZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGxldCBvcHRFbnYgPSB7fTtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW52KSB7XHJcbiAgICAgICAgICAgICAgICAvLyAnZW52JyBvcHRpb24gbWlnaHQgYmUgZGVmaW5lZCBlaXRoZXIgYXMgYSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCBvciBhcyBhbiBvYmplY3QgdGhhdCBsaXN0cyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAnZW52JyBpcyBhIHN0cmluZywgdGhlbiByZXNvbHZlIHRoZSBhY3R1YWwgdmFyaWFibGVzIGZyb20gJ2VudnMnIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmVudiA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIG9wdGlvbnMuZW52cyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucy5lbnZzW29wdGlvbnMuZW52XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52c1tvcHRpb25zLmVudl07XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWYgJ2VudicgaXMgYW4gb2JqZWN0LCB1c2UgdGhlIHZhcmlhYmxlcyBkZWZpbmVkIGluIGl0XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5lbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdEVudiA9IG9wdGlvbnMuZW52O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbnZWYXJzICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuZW52VmFycykpIHtcclxuICAgICAgICAgICAgICAgIG9wdEVudiA9IHsgLi4ub3B0RW52LCAuLi5vcHRpb25zLmVudlZhcnMgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgIHRoaXMuX2VudiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2VudixcclxuICAgICAgICAgICAgICAgIC4uLm9wdEVudlxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVzID0gb3B0aW9ucy50ZXN0QXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NhcHMgPSB7IC4uLmNhcHMgfTsgLy8gYXNzaWduIGNhcHMgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgIHRoaXMuX3N1aXRlcyA9IFsgLi4ub3B0aW9ucy5zdWl0ZXMgXTtcclxuICAgICAgICAvLyBzZXQgdXAgZGVidWdnaW5nIG9wdGlvbnNcclxuICAgICAgICAvLyBUT0RPOiB0aGlzIG5lZWRzIHRvIGJlIHJlaW1wbGVtZW50ZWQuIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBkZWJ1Z2dpbmcgKGluaXRpYWxpemVEZWJ1Z2dlcikgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBPeHlnZW5cclxuICAgICAgICAvLyBhbmQgYWRkZWQgdG8gSURFIGluc3RlYWQuIEkuZS4gdGhlIG9ubHkgdGhpbmcgb3h5Z2VuIHNob3VsZCBkbyBpcyB0byBsYXVuY2ggdGhlIGNoaWxkIHByb2Nlc3Mgd2l0aCB0aGUgZGVidWdnaW5nIHN3aXRjaC5cclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSAgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgb3B0aW9ucy5kZWJ1Z1BvcnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gb3B0aW9ucy5kZWJ1Z1BvcnQgfHwgb3B0aW9ucy5kZWJ1Z1BvcnRJZGUgfHwgbnVsbDtcclxuICAgICAgICBvcHRpb25zLnNjcmlwdENvbnRlbnRMaW5lT2Zmc2V0ID0gdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fbG9jYWxUaW1lID0gKHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5sb2NhbFRpbWUpIHx8IHRoaXMuX2xvY2FsVGltZTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydFdvcmtlclByb2Nlc3MoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2lzRGlzcG9zaW5nID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIgJiYgYXdhaXQgdGhpcy5fd29ya2VyLnN0b3BEZWJ1Z2dlcigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdG9wKHN0YXR1cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB3aGVuIGRpc3Bvc2luZyBSdW5uZXInLCBlKTtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycyBkdXJpbmcgdGhlIGRpc3Bvc2VcclxuICAgICAgICAgICAgbG9nLndhcm4oJ0Vycm9yIHdoZW4gZGlzcG9zaW5nIFJ1bm5lcjonLCBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdDQU5DRUxFRCcpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRHbG9iYWxWYXJpYWJsZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcnVuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemluZykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbml0aWFsaXphdGlvbiBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LCB3YWl0IGZvciAnaW5pdGlhbGl6ZWQnIGV2ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByZXZpb3VzIHRlc3QgaXMgc3RpbGwgcnVubmluZywgd2FpdCBmb3IgJ3Rlc3QtZW5kZWQnIGV2ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lclN0YXJ0KHRoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzKTtcclxuXHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5UZXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXJyb3IgJiYgcmVzdWx0ICYmIHJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gcmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblJ1bm5lckVuZCh0aGlzLl9pZCwgcmVzdWx0LCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGtpbGwoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmtpbGwoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdDb250aW51ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5zZXRCcmVha3BvaW50c0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNub296ZSg1MDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMsIGZpbGVQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRzQnJlYWtwb2ludHMgPSB0aGlzLl93b3JrZXIuZGVidWdnZXIuZ2V0QnJlYWtwb2ludHMoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVzQnJlYWtwb2ludHMgPSBnZXRTdWl0ZXNCcmVha3BvaW50cyh0aGlzLl9zdWl0ZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBicmVha3BvaW50cyBmcm9tIHN1aXRlcy9jYXNlcyB0cmVlXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZUJwIG9mIHN1aXRlc0JyZWFrcG9pbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmVha3BvaW50cy5pbmNsdWRlcyhzdWl0ZUJwLmxpbmUpICYmICBmaWxlUGF0aCA9PT0gc3VpdGVCcC5maWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUJyZWFrcG9pbnRGcm9tU3VpdGVzKHRoaXMuX3N1aXRlcywgc3VpdGVCcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBkZWxldGVkIGJyZWFrcG9pbnRzXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhY3R1YWxDdXJyZW50QnAgb2YgdHNCcmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtwb2ludHMuaW5jbHVkZXMoYWN0dWFsQ3VycmVudEJwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50QnlWYWx1ZShmaWxlUGF0aCwgYWN0dWFsQ3VycmVudEJwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGFkZCBuZXcgYnJlYWtwb2ludHNcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHVzZXJTZXRCcCBvZiBicmVha3BvaW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdHNCcmVha3BvaW50cy5pbmNsdWRlcyh1c2VyU2V0QnApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fd29ya2VyLmRlYnVnZ2VyLnNldEJyZWFrcG9pbnQoZmlsZVBhdGgsIHVzZXJTZXRCcCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZUFsbFByb21pc2UgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgYXdhaXQgc25vb3plKDUwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKCd1cGRhdGVCcmVha3BvaW50cygpIGRvbmUuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA9IHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5nZXRCcmVha3BvaW50cyhmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvbWlzZUFsbFByb21pc2UgOiBwcm9taXNlQWxsUHJvbWlzZSwgYnJlYWtwb2ludHNBZmVyTWFuaXB1bGF0aW9ucyA6IGJyZWFrcG9pbnRzQWZlck1hbmlwdWxhdGlvbnMgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0RlYnVnZ2VyIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxDbG9zZSgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuX3NlbmQoe1xyXG4gICAgICAgICAgICBldmVudDogJ3JlcGwnLFxyXG4gICAgICAgICAgICBuYW1lOiAncmVwbF9zdG9wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxTZW5kKGNtZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5fc2VuZCh7XHJcbiAgICAgICAgICAgIGV2ZW50OiAncmVwbCcsXHJcbiAgICAgICAgICAgIG5hbWU6ICdyZXBsX2V2YWwnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjbWQ6IGNtZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFN0YXJ0KCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5pbnZva2UoJ3JlcGxTdGFydCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJyZWFrcG9pbnQobGluZSkge1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgaWYgKHRoaXMuZGVidWdNb2RlICYmIHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIgJiYgdGhpcy5fc3VpdGUgJiYgdGhpcy5fc3VpdGUudGVzdGNhc2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRjID0gdGhpcy5fc3VpdGUudGVzdGNhc2VzW3RjaW5kZXhdO1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoJ294eWdlbi5zZXRCcmVha3BvaW50OiAnICsgKGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCkpO1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludCh0Yy5uYW1lLCBsaW5lICsgdGhpcy5fc2NyaXB0Q29udGVudExpbmVPZmZzZXQpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQnJlYWtwb2ludChsaW5lKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Z01vZGUgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZXIuZGVidWdnZXIuY2xlYXJCcmVha3BvaW50KGxpbmUgKyB0aGlzLl9zY3JpcHRDb250ZW50TGluZU9mZnNldCwgbnVsbCk7XHJcbiAgICAgICAgfSovXHJcbiAgICB9XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGFzeW5jIF9ydW5UZXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgcmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICByZXN1bHQuc3VpdGVzID0gW107XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAvLyBjYWxsIGJlZm9yZVRlc3QgaG9va1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggc3VpdGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IHN1aXRlIG9mIHRoaXMuX3N1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5TdWl0ZShzdWl0ZSk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcmVzdWx0LmR1cmF0aW9uID0gcmVzdWx0LmVuZFRpbWUgLSByZXN1bHQuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZXMgPSByZXN1bHQuc3VpdGVzLnNvbWUoc3VpdGVJdGVyYXRpb25zID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1aXRlSXRlcmF0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1aXRlSXRlcmF0aW9ucykgJiYgc3VpdGVJdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZUl0ZXJhdGlvbnMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXN1bHQuc3RhdHVzID0gaGFzRmFpbGVkU3VpdGVzID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgcmVzdWx0LmVudmlyb25tZW50ID0geyAuLi50aGlzLl9lbnYgfTtcclxuICAgICAgICAvLyBjb21iaW5lIHRlc3QgZGVmaW5lZCBjYXBzIGFuZCBwZXIgbW9kdWxlIGNhcGFiaWxpdGllcywgdGhhdCB3ZXJlIHBhc3NlZCBieSB1c2VyIGluIGVhY2ggbW9kdWxlJ3MgaW5pdCBmdW5jdGlvblxyXG4gICAgICAgIHJlc3VsdC5jYXBhYmlsaXRpZXMgPSB7IC4uLnRoaXMuX2NhcHMsIC4uLnRoaXMuX21vZENhcHMgfTsgICAgLy8gYXNzaWduIGEgY29weSBvZiBfY2FwcyBvYmplY3RcclxuICAgICAgICByZXN1bHQub3B0aW9ucyA9IHsgLi4udGhpcy5fb3B0aW9ucyB9OyAgLy8gYXNzaWduIGEgY29weSBvZiBfb3B0aW9ucyBvYmplY3RcclxuXHJcbiAgICAgICAgLy8gaWYgZXJyb3Igb2NjdXJlZCwgYWRkIGl0IHRvIHRoZSBzdW1tYXJ5XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5TdWl0ZShzdWl0ZSkge1xyXG4gICAgICAgIGlmICghc3VpdGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdzdWl0ZSBpcyBudWxsIGluIF9ydW5TdWl0ZSgpISEhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlnbm9yZSBzdWl0ZSB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5IHByb3BlcnRpZXNcclxuICAgICAgICBpZiAoIXN1aXRlLm5hbWUgJiYgIXN1aXRlLnBhdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gYWx3YXlzIHNwZWNpZnkgc3VpdGUuaXRlcmF0aW9uQ291bnRcclxuICAgICAgICBpZiAoIXN1aXRlLml0ZXJhdGlvbkNvdW50KSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzdWl0ZS5pdGVyYXRpb25Db3VudCA+IDEpIHtcclxuICAgICAgICAgICAgc2hvd1N1aXRlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlUnVuT25GYWlsdXJlID0gdGhpcy5fb3B0aW9ucy5yZVJ1bk9uRmFpbGVkIHx8IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1heFJlcnVucyA9IHRoaXMuX29wdGlvbnMucmVSdW5Db3VudCB8fCBNQVhfUkVSVU5TO1xyXG4gICAgICAgIGNvbnN0IHJlUnVuRGVsYXkgPSB0aGlzLl9vcHRpb25zLnJlUnVuRGVsYXk7XHJcbiAgICAgICAgLy8gc2luZ2xlIHN1aXRlIG1pZ2h0IHByb2R1Y2UgbXVsdGlwbGUgcmVzdWx0cywgYmFzZWQgb24gYW1vdW50IG9mIGRlZmluZWQgaXRlcmF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlSXRlcmF0aW9ucyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHN1aXRlSXRlcmF0aW9uPTE7IHN1aXRlSXRlcmF0aW9uIDw9IHN1aXRlLml0ZXJhdGlvbkNvdW50OyBzdWl0ZUl0ZXJhdGlvbisrKSB7XHJcbiAgICAgICAgICAgIGlmIChzaG93U3VpdGVJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIHN1aXRlSXRlcmF0aW9uLCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZVJlc3VsdCA9IG5ldyBUZXN0U3VpdGVSZXN1bHQoKTtcclxuICAgICAgICAgICAgc3VpdGVJdGVyYXRpb25zLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pZCA9IHRoaXMuX2N1cnJlbnRTdWl0ZVJlc3VsdElkID0gdjEoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQubmFtZSA9IHN1aXRlLm5hbWUgfHwgb3h1dGlsLmdldEZpbGVOYW1lV2l0aG91dEV4dChzdWl0ZS5wYXRoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBzdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW0gPSBzdWl0ZUl0ZXJhdGlvbjtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxCZWZvcmVTdWl0ZUhvb2soc3VpdGUpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblN1aXRlU3RhcnQodGhpcy5faWQsIHN1aXRlUmVzdWx0LmlkLCBzdWl0ZVJlc3VsdCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNhemUgb2Ygc3VpdGUuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBjYXNlcyB3aXRoIG1pc3NpbmcgbWFuZGF0b3J5ICdwYXRoJyBwcm9wZXJ0eSBcclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhemUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUubmFtZSA9IG94dXRpbC5nZXRGaWxlTmFtZVdpdGhvdXRFeHQoY2F6ZS5wYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2F6ZS5pdGVyYXRpb25Db3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhemUuaXRlcmF0aW9uQ291bnQgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZUl0ZXJhdGlvbj0xOyBjYXNlSXRlcmF0aW9uIDw9IGNhemUuaXRlcmF0aW9uQ291bnQ7IGNhc2VJdGVyYXRpb24rKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2F6ZSAmJiBjYXplLml0ZXJhdGlvbkNvdW50ICYmIGNhemUuaXRlcmF0aW9uQ291bnQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dDYXNlSXRlcmF0aW9uc01lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uSXRlcmF0aW9uU3RhcnQodGhpcy5faWQsIGNhc2VJdGVyYXRpb24sICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNhc2UgcmVzdWx0IGlkXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FzZVJlc3VsdElkID0gdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCA9IHYxKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVwb3J0IGNhc2Ugc3RhcnQgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkNhc2VTdGFydCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQuaWQgLypzdWl0ZS51cmkgfHwgc3VpdGUuaWQqLywgY2FzZVJlc3VsdElkIC8qY2F6ZS51cmkgfHwgY2F6ZS5pZCB8fCBjYXplLnBhdGgqLywgY2F6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9sZXQgcmVSdW5Db3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhc2VSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcnVuIG9yIHJlLXJ1biB0aGUgY3VycmVudCB0ZXN0IGNhc2VcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByZVJ1bkNvdW50ID0gMDsgcmVSdW5Db3VudCA8IG1heFJlcnVuczsgcmVSdW5Db3VudCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQgPSBhd2FpdCB0aGlzLl9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWNhc2VSZXN1bHQgfHwgY2FzZVJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpICYmICFyZVJ1bk9uRmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2FzZVJlc3VsdCAmJiBjYXNlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlUnVuRGVsYXkgJiYgcmVSdW5Db3VudCA8IG1heFJlcnVucyAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG94dXRpbC5zbGVlcChyZVJ1bkRlbGF5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmlkID0gY2FzZVJlc3VsdElkO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBjYXNlIGVuZCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uQ2FzZUVuZCh0aGlzLl9pZCwgc3VpdGVSZXN1bHQuaWQgLypzdWl0ZS51cmkgfHwgc3VpdGUuaWQqLywgY2FzZVJlc3VsdElkIC8qY2F6ZS51cmkgfHwgY2F6ZS5pZCovLCBjYXNlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0Nhc2VJdGVyYXRpb25zTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIGNhc2VSZXN1bHQsICdDYXNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBjYXNlIHJlc3VsdCB0byB0aGUgc3VpdGUgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVSZXN1bHQuY2FzZXMucHVzaChjYXNlUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0ZXN0IGNhc2UgaXRlcmF0aW9uIGhhcyBmYWlsZWQsIHRoZW4gbWFyayB0aGUgZW50aXJlIHRlc3QgY2FzZSBhcyBmYWlsZWQsIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0b3AgaXRlcmF0aW5nIG92ZXIgaXQgYW5kIG1vdmUgdG8gdGhlIG5leHQgdGVzdCBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhc2VSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgc3VpdGVSZXN1bHQuZHVyYXRpb24gPSBzdWl0ZVJlc3VsdC5lbmRUaW1lIC0gc3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNob3dTdWl0ZUl0ZXJhdGlvbnNNZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25JdGVyYXRpb25FbmQodGhpcy5faWQsIHN1aXRlUmVzdWx0LCAnU3VpdGUnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlclN1aXRlSG9vayhzdWl0ZSwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXBvcnRlci5vblN1aXRlRW5kKHRoaXMuX2lkLCBzdWl0ZVJlc3VsdC5pZCwgc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VpdGVJdGVyYXRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5DYXNlKHN1aXRlLCBjYXplLCBzdWl0ZUl0ZXJhdGlvbiwgY2FzZUl0ZXJhdGlvbiwgcmVSdW5Db3VudCA9IDApIHtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuICAgICAgICBjb25zdCByZVJ1biA9IHJlUnVuQ291bnQgPiAwO1xyXG4gICAgICAgIC8vIGdldCB0ZXN0IHN1aXRlJ3MgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgLy8gZ2V0IHRoZW0gZmlyc3QgYW5kIHRoZW4gb3ZlcnJpZGUgd2l0aCB0ZXN0IGNhc2UgbGV2ZWwgcGFyYW1ldGVycyBpZiBkZWZpbmVkXHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkUHJldigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF8uZXh0ZW5kKHBhcmFtcywgc3VpdGUucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVhZCB0ZXN0IGNhc2UncyBuZXh0IGxpbmVzIG9mIHBhcmFtZXRlcnMgaWYgcGFyYW1ldGVyIG1hbmFnZXIgaXMgZGVmaW5lZFxyXG4gICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICBpZiAocmVSdW4pIHtcclxuICAgICAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWRQcmV2KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXy5leHRlbmQocGFyYW1zLCBjYXplLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGQgYnJlYWtwb2ludHMgYmVmb3JlIHJ1bm5pbmcgdGhlIHNjcmlwdCBpZiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSAmJiB0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIGNhemUuYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXplLmJyZWFrcG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBlZGl0b3IgaW5kZXggc3RhcnRzIGZyb20gMSwgYnV0IHdlIG5lZWQgemVybyBiYXNlZCBpbmRleFxyXG4gICAgICAgICAgICAgICAgbGV0IGxpbmUgPSBjYXplLmJyZWFrcG9pbnRzW2ldLmxpbmU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IGNhemUuYnJlYWtwb2ludHNbaV0uZmlsZTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZGVidWdnZXIuc2V0QnJlYWtwb2ludChmaWxlLCBsaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfY2FsbEJlZm9yZUNhc2VIb29rKGNhemUpO1xyXG4gICAgICAgIGNvbnN0IGNhc2VSZXN1bHQgPSBuZXcgVGVzdENhc2VSZXN1bHQoKTtcclxuICAgICAgICBjYXNlUmVzdWx0Lm5hbWUgPSBjYXplLm5hbWU7XHJcbiAgICAgICAgY2FzZVJlc3VsdC5sb2NhdGlvbiA9IGNhemUucGF0aDtcclxuICAgICAgICBjYXNlUmVzdWx0Lml0ZXJhdGlvbk51bSA9IGNhc2VJdGVyYXRpb247XHJcbiAgICAgICAgY2FzZVJlc3VsdC5yZVJ1bkNvdW50ID0gcmVSdW5Db3VudDtcclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGluaXRpYWxpemUgT3h5Z2VuIGFuZCBoYW5kbGUgYW55IHBvc3NpYmxlIGVycm9yXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKCEodGhpcy5fd29ya2VyKSAmJiB0aGlzLl93b3JrZXJfSW5pdE94eWdlbigpKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl93b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX0luaXRPeHlnZW4oKSB0aHJvd24gYW4gZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgc3VpdGUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYXplLnBhcmFtTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgY2F6ZS5wYXJhbU1hbmFnZXIucmVhZE5leHQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHN0YXJ0IG5ldyB0ZXN0IHNlc3Npb25cclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfc3RhcnRTZXNzaW9uKCk7XHJcbiAgICAgICAgLy8gcnVuIHRoZSB0ZXN0IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBhbmQgaGFuZGxlIGFueSBwb3NzaWJsZSBlcnJvclxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBtb2R1bGVDYXBzLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NUZXN0UmVzdWx0cyh7IHJlc3VsdFN0b3JlLCBjb250ZXh0LCBlcnJvciwgbW9kdWxlQ2FwcyB9KTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LmR1cmF0aW9uID0gY2FzZVJlc3VsdC5lbmRUaW1lIC0gY2FzZVJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RlcHMgPSByZXN1bHRTdG9yZSAmJiByZXN1bHRTdG9yZS5zdGVwcyA/IHJlc3VsdFN0b3JlLnN0ZXBzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQubG9ncyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmxvZ3MgPyByZXN1bHRTdG9yZS5sb2dzIDogW107XHJcbiAgICAgICAgICAgIGNhc2VSZXN1bHQuaGFyID0gcmVzdWx0U3RvcmUgJiYgcmVzdWx0U3RvcmUuaGFyID8gcmVzdWx0U3RvcmUuaGFyIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC50ZXN0QXR0cmlidXRlcyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMgPyByZXN1bHRTdG9yZS5hdHRyaWJ1dGVzIDogbnVsbDtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cyA9IHJlc3VsdFN0b3JlICYmIHJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID8gcmVzdWx0U3RvcmUuYXR0YWNobWVudHMgOiBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRlc3QgY2FzZSBpdGVyYXRpb24gc3RhdHVzIC0gbWFyayBpdCBhcyBmYWlsZWQgaWYgYW55IHN0ZXAgaGFzIGZhaWxlZFxyXG4gICAgICAgICAgICB2YXIgZmFpbGVkU3RlcHMgPSBfLmZpbmQoY2FzZVJlc3VsdC5zdGVwcywge3N0YXR1czogU3RhdHVzLkZBSUxFRH0pO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHN0ZXBzIHdpdGggV2FybmluZyBzdGF0dXNcclxuICAgICAgICAgICAgdmFyIHdhcm5pbmdTdGVwcyA9IF8uZmluZChjYXNlUmVzdWx0LnN0ZXBzLCB7c3RhdHVzOiBTdGF0dXMuV0FSTklOR30pO1xyXG4gICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IF8uaXNFbXB0eShmYWlsZWRTdGVwcykgJiYgIWVycm9yID8gU3RhdHVzLlBBU1NFRCA6IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LnN0ZXBzID0gb3h1dGlsLm1ha2VUcmFuc2FjdGlvbkZhaWxlZElmU3RlcEZhaWxlZChjYXNlUmVzdWx0LnN0ZXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghXy5pc0VtcHR5KHdhcm5pbmdTdGVwcykpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyX2NhbGxBZnRlckNhc2VIb29rKGNhemUsIGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdfd29ya2VyX1J1bigpIHRocm93biBhbiBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlKTtcclxuICAgICAgICAgICAgY2FzZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlzcG9zZU94eWdlbk1vZHVsZXMgPSB0eXBlb2YgdGhpcy5fb3B0aW9ucy5hdXRvRGlzcG9zZSAhPT0gJ2Jvb2xlYW4nIHx8IHRoaXMuX29wdGlvbnMuYXV0b0Rpc3Bvc2UgPT09IHRydWU7XHJcbiAgICAgICAgLy8gZW5kIHNlc3Npb24gYW5kIGRpc3Bvc2UgT3h5Z2VuIG1vZHVsZXMgaWYgcmVxdWlyZWRcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXJfZW5kU2Vzc2lvbihjYXNlUmVzdWx0LnN0YXR1cywgZGlzcG9zZU94eWdlbk1vZHVsZXMpO1xyXG5cclxuICAgICAgICBpZiAoc3VpdGUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhemUucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIGNhemUucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FzZVJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX1J1bihzdWl0ZSwgY2F6ZSwgc3VpdGVJdGVyYXRpb24sIGNhc2VJdGVyYXRpb24sIHBhcmFtcykge1xyXG4gICAgICAgIGlmICghdGhpcy5fd29ya2VyKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignX3dvcmtlciBpcyBudWxsIGJ1dCBub3Qgc3VwcG9zZSB0byEnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVuVGVzdENhc2VGaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQucmVqZWN0KG5ldyBFcnJvcignX3dvcmtlciBpcyBudWxsJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc3RhcnQgcnVubmluZyB0aGUgdGVzdFxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93b3JrZXIucnVuKHtcclxuICAgICAgICAgICAgc2NyaXB0TmFtZTogY2F6ZS5uYW1lLFxyXG4gICAgICAgICAgICBzY3JpcHRQYXRoOiBjYXplLnBhdGgsXHJcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgZW52OiB0aGlzLl9lbnYsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLl9jYXBzLFxyXG4gICAgICAgICAgICAgICAgdmFyczogdGhpcy5fdmFycyxcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRoaXMuX2F0dHJpYnV0ZXMsXHJcbiAgICAgICAgICAgICAgICB0ZXN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjYXplLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3VpdGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9GaWxlOiB0aGlzLl9vcHRpb25zLnBvIHx8IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9Jbml0T3h5Z2VuKCkge1xyXG4gICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmluaXRPeHlnZW4odGhpcy5faWQsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NhcHMpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX3N0YXJ0U2Vzc2lvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5zdGFydFNlc3Npb24pIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLnN0YXJ0U2Vzc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfd29ya2VyX2VuZFNlc3Npb24oc3RhdHVzID0gbnVsbCwgZGlzcG9zZU1vZHVsZXMgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuZW5kU2Vzc2lvbihzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlVGVzdEhvb2soKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVUZXN0JywgW3RoaXMuX2lkLCB0aGlzLl9vcHRpb25zLCB0aGlzLl9jYXBzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKCdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImJlZm9yZVRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlU3VpdGVIb29rKHN1aXRlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMgJiYgdGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVTdWl0ZScsIFtzdWl0ZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVTdWl0ZVwiIGhvb2sgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXBvcnRlciAmJiBhd2FpdCB0aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KG51bGwsICdXQVJOJywgJ1wiYmVmb3JlU3VpdGVcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQmVmb3JlQ2FzZUhvb2soY2F6ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdiZWZvcmVDYXNlJywgW2NhemVdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDYXNlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyVGVzdEhvb2socmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyVGVzdCcsIFt0aGlzLl9pZCwgcmVzdWx0XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJUZXN0XCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclRlc3RcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3dvcmtlcl9jYWxsQWZ0ZXJTdWl0ZUhvb2soc3VpdGUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICh0aGlzLl93b3JrZXIgJiYgdGhpcy5fd29ya2VyLmludm9rZVRlc3RIb29rKCdhZnRlclN1aXRlJywgW3N1aXRlLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlclN1aXRlXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF93b3JrZXJfY2FsbEFmdGVyQ2FzZUhvb2soY2F6ZSwgcmVzdWx0KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ2FzZScsIFtjYXplLCByZXN1bHRdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJhZnRlckNhc2VcIiBob29rIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVwb3J0ZXIgJiYgYXdhaXQgdGhpcy5fcmVwb3J0ZXIub25Mb2dFbnRyeShudWxsLCAnV0FSTicsICdcImFmdGVyQ2FzZVwiIGhvb2sgZmFpbGVkOicrZSwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc3RhcnRXb3JrZXJQcm9jZXNzKCkge1xyXG4gICAgICAgIGNvbnN0IHdvcmtlclBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnd29ya2VyLmpzJyk7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyID0gbmV3IFdvcmtlclByb2Nlc3ModGhpcy5faWQsIHdvcmtlclBhdGgsIHRoaXMuX2RlYnVnTW9kZSwgdGhpcy5fZGVidWdQb3J0LCAnT3h5Z2VuJywgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3dvcmtlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJFdmVudHMoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl93b3JrZXIuc3RhcnREZWJ1Z2dlcigpO1xyXG4gICAgICAgIHRoaXMuX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9ob29rV29ya2VyRXZlbnRzKCkge1xyXG4gICAgICAgIC8vIHByZXNlcnZlIHRoaXMgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5zdWJzY3JpYmUoJ2NvbW1hbmQ6YmVmb3JlJywgdGhpcy5faGFuZGxlQmVmb3JlQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl93b3JrZXIuc3Vic2NyaWJlKCdjb21tYW5kOmFmdGVyJywgdGhpcy5faGFuZGxlQWZ0ZXJDb21tYW5kLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXJyb3InLCAocGF5bG9hZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1dvcmtlciBwcm9jZXNzIGVycm9yOiAnLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5leGl0RG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlclByb2NMYXN0RXJyb3IgPSBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3dvcmtlci5vbignZXhpdCcsIChwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCB7IGV4aXRDb2RlIH0gPSBwYXlsb2FkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV4aXRDb2RlICYmIGV4aXRDb2RlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIG9yIGlzIGJlaW5nIGRpc3Bvc2VkIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgZGllZCxcclxuICAgICAgICAgICAgICAgIC8vIHRoZW4gZW5kIHRoZSB0ZXN0IG9yIGRpc3Bvc2FsIHdpdGggZmF0YWwgZXJyb3JcclxuICAgICAgICAgICAgICAgIC8vIChjaGlsZCBwcm9jZXNzIG5vdCBzdXBwb3NlIHRvIGRpZSB3aXRoIGNvZGUgPiAwKVxyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9pc0Rpc3Bvc2luZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlbkRpc3Bvc2VkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoX3RoaXMuX2lzUnVubmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBfdGhpcy5fd2hlblRlc3RDYXNlRmluaXNoZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBfdGhpcy5fd29ya2VyUHJvY0xhc3RFcnJvciB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXRDb2RlID09IDEzNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdPdXQgb2YgbWVtb3J5IGVycm9yLiBNYWtlIHN1cmUgdGhhdCB5b3UgZG9uXFwndCBoYXZlIGFueSBtZW1vcnkgbGVha3MgaW4gdGhlIHRlc3Qgc2NyaXB0LicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgT3h5Z2VuRXJyb3IoYFdvcmtlciBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGU6ICR7ZXhpdENvZGV9LmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2UgJiYgcHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3Jlc2V0R2xvYmFsVmFyaWFibGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl93b3JrZXIub24oJ21lc3NhZ2UnLCBhc3luYyAobXNnKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5sZXZlbCA9PT0gJ0RFQlVHJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnSU5GTycpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhtc2cubXNnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmxldmVsID09PSAnRVJST1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKG1zZy5tc2csIG1zZy5lcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cubGV2ZWwgPT09ICdXQVJOJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKG1zZy5tc2cpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xvZycsIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3JlcG9ydGVyICYmIGF3YWl0IF90aGlzLl9yZXBvcnRlci5vbkxvZ0VudHJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIG1zZy50aW1lLCBtc2cubGV2ZWwsIG1zZy5tc2csIG1zZy5zcmMgfHwgREVGQVVMVF9JU1NVRVIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVJZDogdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VJZDogdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcElkOiB0aGlzLl9jdXJyZW50U3RlcFJlc3VsdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdsaW5lLXVwZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2xpbmUtdXBkYXRlJywgbXNnLmxpbmUsIG1zZy5zdGFjaywgbXNnLnRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCAmJiBtc2cuZXZlbnQgPT09ICdyZXN1bHQtdXBkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ2luaXQtZG9uZScsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobXNnLmV2ZW50ICYmIG1zZy5ldmVudCA9PT0gJ3dvcmtlckVycm9yJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3dvcmtlckVycm9yOicsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3Bvc2UoJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5raWxsKCdmYWlsZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtc2cuZXZlbnQgJiYgbXNnLmV2ZW50ID09PSAncmVwbCcpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLmVtaXQoJ3JlcGwnLCBtc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tXb3JrZXJEZWJ1Z2dlckV2ZW50cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3dvcmtlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3dvcmtlci5kZWJ1Z2dlciAmJiB0aGlzLl93b3JrZXIuZGVidWdnZXIub24oJ2RlYnVnZ2VyOmJyZWFrJywgKGJyZWFrcG9pbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludCcsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fd29ya2VyLmRlYnVnZ2VyICYmIHRoaXMuX3dvcmtlci5kZWJ1Z2dlci5vbignZGVidWdnZXI6YnJlYWtFcnJvcicsIChicmVha0Vycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnYnJlYWtwb2ludEVycm9yJywgYnJlYWtFcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZUJlZm9yZUNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwUmVzdWx0SWQgPSBlLmlkO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uU3RlcFN0YXJ0KHRoaXMuX2lkLCB0aGlzLl9jdXJyZW50U3VpdGVSZXN1bHRJZCwgdGhpcy5fY3VycmVudENhc2VSZXN1bHRJZCwgZSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubW9kdWxlICYmIGUubW9kdWxlID09PSAnbG9nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCAodGhpcy5fd29ya2VyICYmIHRoaXMuX3dvcmtlci5pbnZva2VUZXN0SG9vaygnYmVmb3JlQ29tbWFuZCcsIFtlXSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJiZWZvcmVDb21tYW5kXCIgaG9vayBmYWlsZWQ6JytlLCBERUZBVUxUX0lTU1VFUik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uU3RlcEVuZCh0aGlzLl9pZCwgdGhpcy5fY3VycmVudFN1aXRlUmVzdWx0SWQsIHRoaXMuX2N1cnJlbnRDYXNlUmVzdWx0SWQsIGUucmVzdWx0KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1vZHVsZSAmJiBlLm1vZHVsZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgKHRoaXMuX3dvcmtlciAmJiB0aGlzLl93b3JrZXIuaW52b2tlVGVzdEhvb2soJ2FmdGVyQ29tbWFuZCcsIFtlLnJlc3VsdF0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ1wiYWZ0ZXJDb21tYW5kXCIgaG9vayBmYWlsZWQ6JywgZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcG9ydGVyICYmIGF3YWl0IHRoaXMuX3JlcG9ydGVyLm9uTG9nRW50cnkobnVsbCwgJ1dBUk4nLCAnXCJhZnRlckNvbW1hbmRcIiBob29rIGZhaWxlZDonK2UsIERFRkFVTFRfSVNTVUVSKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFN0ZXBSZXN1bHRJZCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXRHbG9iYWxWYXJpYWJsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNEaXNwb3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RLaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl93aGVuRGlzcG9zZWQgPSBkZWZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIF9wcm9jZXNzVGVzdFJlc3VsdHMoeyByZXN1bHRTdG9yZSwgbW9kdWxlQ2FwcywgY29udGV4dCA9IHt9LCBlcnJvciA9IG51bGwgfSkge1xyXG4gICAgICAgIC8vIGlmIHRlc3Qgd2FzIGtpbGxlZCBiZWZvcmUgYW55IHJlc3VsdHMgd2VyZSBnZW5lcmF0ZWQsIHRoZW4ganVzdCBmaW5hbGl6ZSB0aGUgdGVzdCB3aXRob3V0IHByb2Nlc3NpbmcgcmVzdWx0c1xyXG4gICAgICAgIGlmICh0aGlzLl90ZXN0S2lsbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCd0ZXN0LWVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzdG9yZSAndmFycycgcGFydCBvZiB0aGUgY29udGV4dCBmb3IgYSBsYXRlciB1c2VcclxuICAgICAgICB0aGlzLl92YXJzID0gY29udGV4dC52YXJzIHx8IHRoaXMuX3ZhcnM7XHJcbiAgICAgICAgLy8gc3RvcmUgJ21vZENhcHMnIHBhcnQgb2YgdGhlIGNvbnRleHQgZm9yIGEgbGF0ZXIgdXNlXHJcbiAgICAgICAgdGhpcy5fbW9kQ2FwcyA9IHsgLi4udGhpcy5fbW9kQ2FwcywgLi4ubW9kdWxlQ2FwcyB8fCB7fSB9O1xyXG4gICAgICAgIC8vIGNsZWFuIHVwIGNvbnRleHQgZnJvbSBpbnRlcm5hbCBlbGVtZW50cywgbm90IG5lZWQgaW4gdGhlIHJlcG9ydDpcclxuICAgICAgICAvLyByZW1vdmUgY2FwcyBmcm9tIHRoZSBjb250ZXh0IGFzIGl0IGFscmVhZHkgYXBwZWFycyBpbiBUZXN0UmVzdWx0IG5vZGVcclxuICAgICAgICBpZiAoY29udGV4dC5jYXBzKVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5jYXBzO1xyXG4gICAgICAgIC8vIHJlbW92ZSBlbnYgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQuZW52KVxyXG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5lbnY7XHJcbiAgICAgICAgLy8gcmVtb3ZlIHRlc3QgZnJvbSB0aGUgY29udGV4dCBhcyBpdCBhbHJlYWR5IGFwcGVhcnMgaW4gVGVzdFJlc3VsdCBub2RlXHJcbiAgICAgICAgaWYgKGNvbnRleHQudGVzdClcclxuICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQudGVzdDtcclxuICAgIH1cclxuXHJcbiAgICBfZW1pdEl0ZXJhdGlvbkVuZCh0cywgdGMsIHN1aXRlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uTnVtLCBjYXNlSXRlcmF0aW9uUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdpdGVyYXRpb24tZW5kJywge1xyXG4gICAgICAgICAgICBzdGF0dXM6IGNhc2VJdGVyYXRpb25SZXN1bHQuX3N0YXR1cyxcclxuICAgICAgICAgICAgZmFpbHVyZTogY2FzZUl0ZXJhdGlvblJlc3VsdC5mYWlsdXJlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNhc2U6IHtcclxuICAgICAgICAgICAgICAgIGlkOiB0Yy5pZCB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGMubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogY2FzZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0Yy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdWl0ZToge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRzLmlkIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0cy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBzdWl0ZUl0ZXJhdGlvbk51bSxcclxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiB0cy5pdGVyYXRpb25Db3VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2VtaXRUZXN0RW5kKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgndGVzdC1lbmQnLCByZXN1bHQpO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IHsgUGFyYW1ldGVyTWFuYWdlciB9OyJdfQ==
@@ -219,4 +219,4 @@ function emitReporterEvent(eventName, eventArgs) {
219
219
  args: eventArgs
220
220
  });
221
221
  }
222
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi93b3JrZXIuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsInNldE1heExpc3RlbmVycyIsInJlcXVpcmUiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwib3h1dGlsIiwiZXJyb3JIZWxwZXIiLCJyZXBvcnRlciIsIm9uU3VpdGVTdGFydCIsImFyZ3MiLCJlbWl0UmVwb3J0ZXJFdmVudCIsIm9uU3VpdGVFbmQiLCJvbkNhc2VTdGFydCIsIm9uQ2FzZUVuZCIsIm9uU3RlcFN0YXJ0Iiwib25TdGVwRW5kIiwib25SdW5uZXJFbmQiLCJnbG9iYWwiLCJicm93c2VyIiwibG9nZ2VyIiwiaW5mbyIsIm1lc3NhZ2UiLCJzcmMiLCJERUZBVUxUX0xPR0dFUl9JU1NVRVIiLCJ0cyIsImdldFRpbWVTdGFtcCIsInByb2Nlc3NTZW5kIiwidGltZSIsImV2ZW50IiwibGV2ZWwiLCJMRVZFTFMiLCJJTkZPIiwibXNnIiwic3RyaW5naWZ5IiwiZGVidWciLCJERUJVRyIsImVycm9yIiwiZXJyIiwiRVJST1IiLCJ3YXJuIiwiV0FSTiIsIl93b3JrZXIiLCJPeHlnZW5Xb3JrZXIiLCJvYmoiLCJTdHJpbmciLCJKU09OIiwiaG9va0xvZ3MiLCJvbiIsIm9yaWdpbiIsIklTU1VFUlMiLCJVU0VSIiwiY29uc29sZSIsImxvZyIsImVyck1lc3NhZ2UiLCJkaXNwb3NlIiwidHlwZSIsIm1ldGhvZCIsImNhbGxJZCIsImludm9rZUZ1bmMiLCJpbnZva2VUZXN0SG9vayIsImludm9rZSIsInJldHZhbCIsInN1YnNjcmliZSIsInN0YXR1cyIsImUiLCJjb25uZWN0ZWQiLCJzZW5kIiwiYXBwbHkiLCJFcnJvciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJ1bmRlZmluZWQiLCJjYWxsVGVzdEhvb2siLCJldmVudE5hbWUiLCJlbWl0V29ya2VyRXZlbnQiLCJldmVudEFyZ3MiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7O0FBa0JBOztBQUNBOzs7O0FB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QzNDLE9BQVY7QUFDSDs7QUFDRCxTQUFPO0FBQUV3QyxJQUFBQSxNQUFGO0FBQVV6QixJQUFBQTtBQUFWLEdBQVA7QUFDSDs7QUFFRCxlQUFlMEIsU0FBZixDQUF5QlUsU0FBekIsRUFBb0M7QUFDaEMsTUFBSS9CLE9BQU8sSUFBSUEsT0FBTyxDQUFDTSxFQUF2QixFQUEyQjtBQUN2Qk4sSUFBQUEsT0FBTyxDQUFDTSxFQUFSLENBQVd5QixTQUFYLEVBQXNCLENBQUMsR0FBRy9ELElBQUosS0FBYWdFLGVBQWUsQ0FBQ0QsU0FBRCxFQUFZL0QsSUFBWixDQUFsRDtBQUNIO0FBQ0o7O0FBRUQsU0FBU2dFLGVBQVQsQ0FBeUJELFNBQXpCLEVBQW9DRSxTQUFwQyxFQUErQztBQUMzQ2hELEVBQUFBLFdBQVcsQ0FBQztBQUNSRSxJQUFBQSxLQUFLLEVBQUUsT0FEQztBQUVSK0MsSUFBQUEsSUFBSSxFQUFFSCxTQUZFO0FBR1IvRCxJQUFBQSxJQUFJLEVBQUVpRTtBQUhFLEdBQUQsQ0FBWDtBQUtIOztBQUVELFNBQVNoRSxpQkFBVCxDQUEyQjhELFNBQTNCLEVBQXNDRSxTQUF0QyxFQUFpRDtBQUM3Q2hELEVBQUFBLFdBQVcsQ0FBQztBQUNSRSxJQUFBQSxLQUFLLEVBQUUsVUFEQztBQUVSNEIsSUFBQUEsTUFBTSxFQUFFZ0IsU0FGQTtBQUdSL0QsSUFBQUEsSUFBSSxFQUFFaUU7QUFIRSxHQUFELENBQVg7QUFLSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKi9cblxuLypcbiAqIEJvaWxlcnBsYXRlIGNvZGUgZm9yIHVzZXIgc2NyaXB0cy5cbiAqIFByb3ZpZGVzIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBleGVjdXRpbmcgSlMgdGVzdCBzY3JpcHRzLlxuICovXG5cbi8vIGluY3JlYXNlIG1heCBsaXN0ZW5lcnMgbGltaXQgb24gcHJvY2VzcyBlbWl0dGVyXG5wcm9jZXNzLnNldE1heExpc3RlbmVycygxMDApO1xucmVxdWlyZSgnZXZlbnRzJykuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwMDtcblxuaW1wb3J0IHsgTEVWRUxTLCBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcbmltcG9ydCBPeHlnZW5Xb3JrZXIgZnJvbSAnLi9PeHlnZW5Xb3JrZXInO1xuY29uc3Qgb3h1dGlsID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWwnKTtcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xuXG5jb25zdCByZXBvcnRlciA9IHtcbiAgICBvblN1aXRlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgZW1pdFJlcG9ydGVyRXZlbnQoJ29uU3VpdGVTdGFydCcsIGFyZ3MpO1xuICAgIH0sXG4gICAgb25TdWl0ZUVuZDogZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdWl0ZUVuZCcsIGFyZ3MpO1xuICAgIH0sXG4gICAgb25DYXNlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgZW1pdFJlcG9ydGVyRXZlbnQoJ29uQ2FzZVN0YXJ0JywgYXJncyk7XG4gICAgfSxcbiAgICBvbkNhc2VFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgZW1pdFJlcG9ydGVyRXZlbnQoJ29uQ2FzZUVuZCcsIGFyZ3MpO1xuICAgIH0sXG4gICAgb25TdGVwU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgZW1pdFJlcG9ydGVyRXZlbnQoJ29uU3RlcFN0YXJ0JywgYXJncyk7XG4gICAgfSxcbiAgICBvblN0ZXBFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgZW1pdFJlcG9ydGVyRXZlbnQoJ29uU3RlcEVuZCcsIGFyZ3MpO1xuICAgIH0sXG4gICAgb25SdW5uZXJFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgZW1pdFJlcG9ydGVyRXZlbnQoJ29uUnVubmVyRW5kJywgYXJncyk7XG4gICAgfVxufTtcblxuLy8gbW9ja3VwIGdsb2JiYWwuYnJvd3NlciBvYmplY3QgZm9yIGludGVybmFsIFdESU8gZnVuY3Rpb25zIHRvIHdvcmsgcHJvcGVybHlcbmdsb2JhbC5icm93c2VyID0ge307XG5cbmNvbnN0IGxvZ2dlciA9IHtcbiAgICBpbmZvOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgIHByb2Nlc3NTZW5kKHsgdGltZTogdHMsIGV2ZW50OiAnbG9nJywgbGV2ZWw6IExFVkVMUy5JTkZPLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xuICAgIH0sXG4gICAgZGVidWc6IGZ1bmN0aW9uKG1lc3NhZ2UsIHNyYyA9IERFRkFVTFRfTE9HR0VSX0lTU1VFUikge1xuICAgICAgICBjb25zdCB0cyA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLkRFQlVHLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xuICAgIH0sXG4gICAgZXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIHNyYyA9IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgZXJyID0gbnVsbCkge1xuICAgICAgICBpZiAoIXNyYykge1xuICAgICAgICAgICAgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuRVJST1IsIG1zZzogc3RyaW5naWZ5KG1lc3NhZ2UpLCBzcmMsIGVycjogZXJyIH0pO1xuICAgIH0sXG4gICAgd2FybjogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuV0FSTiwgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYyB9KTtcbiAgICB9XG59O1xuXG5sZXQgX3dvcmtlciA9IG5ldyBPeHlnZW5Xb3JrZXIocmVwb3J0ZXIsIGxvZ2dlcik7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZyA/IG9iaiA6IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpO1xufVxuXG5veHV0aWwuaG9va0xvZ3MobG9nZ2VyKTtcbi8vIHJlZGlyZWN0IHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBsb2dnZXJcbi8vcHJvY2Vzcy5zdGRvdXQud3JpdGUgPSBsb2dnZXIuZGVidWc7XG4vL3Byb2Nlc3Muc3RkZXJyLndyaXRlID0gbG9nZ2VyLmVycm9yO1xuXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBhc3luYyhlcnIsIG9yaWdpbikgPT4ge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSwgSVNTVUVSUy5VU0VSKTtcbiAgICBjb25zb2xlLmxvZygndW5oYW5kbGVkUmVqZWN0aW9uJywgZXJyKTtcbiAgICBwcm9jZXNzU2VuZCh7XG4gICAgICAgIGV2ZW50OiAnd29ya2VyRXJyb3InLFxuICAgICAgICBlcnJNZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICB9KTtcbn0pO1xuXG5wcm9jZXNzLm9uKCd1bmNhdWdodEV4Y2VwdGlvbicsIGFzeW5jKGVyciwgb3JpZ2luKSA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLCBJU1NVRVJTLlVTRVIpO1xuICAgIGNvbnNvbGUubG9nKCd1bmNhdWdodEV4Y2VwdGlvbicsIGVycik7XG4gICAgcHJvY2Vzc1NlbmQoe1xuICAgICAgICBldmVudDogJ3dvcmtlckVycm9yJyxcbiAgICAgICAgZXJyTWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgfSk7XG59KTtcblxucHJvY2Vzcy5vbignU0lHSU5UJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgYXdhaXQgZGlzcG9zZSgnQ0FOQ0VMRUQnKTtcbn0pO1xuXG5wcm9jZXNzLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKG1zZykge1xuICAgIGlmICghbXNnLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKG1zZy50eXBlID09PSAnaW52b2tlJyB8fCBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJykgJiYgbXNnLm1ldGhvZCkge1xuICAgICAgICBjb25zdCB7IGNhbGxJZCwgbWV0aG9kLCBhcmdzIH0gPSBtc2c7XG4gICAgICAgIGNvbnN0IGludm9rZUZ1bmMgPSBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJyA/IGludm9rZVRlc3RIb29rIDogaW52b2tlO1xuICAgICAgICBjb25zdCB7IHJldHZhbCwgZXJyb3IgfSA9IGF3YWl0IGludm9rZUZ1bmMobWV0aG9kLCBhcmdzKTtcbiAgICAgICAgcHJvY2Vzc1NlbmQoe1xuICAgICAgICAgICAgZXZlbnQ6ICdpbnZva2U6cmVzdWx0JyxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICByZXR2YWw6IHJldHZhbFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAobXNnLnR5cGUgPT09ICdzdWJzY3JpYmUnKSB7XG4gICAgICAgIHN1YnNjcmliZShtc2cuZXZlbnQpO1xuICAgIH1cbn0pO1xuXG5hc3luYyBmdW5jdGlvbiBkaXNwb3NlKHN0YXR1cz0gbnVsbCkge1xuICAgIGlmIChfd29ya2VyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfd29ya2VyLmRpc3Bvc2Uoc3RhdHVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTZW5kKG1zZykge1xuICAgIC8vIHdyYXAgcHJvY2Vzcy5zZW5kIHdpdGggdHJ5L2NhdGNoIGFzIHNvbWV0aW1lcyB3ZSBtaWdodCBjYWxsIHByb2Nlc3Muc2VuZCBcbiAgICAvLyB3aGVuIHBhcmVudCBwcm9jZXNzIGlzIGFscmVhZHkgZGlzY29ubmVjdGVkICh3aGVuIHVzZSBraWxscyB0aGUgbWFpbiBwcm9jZXNzKVxuICAgIHRyeSB7XG4gICAgICAgIC8vIGFkZCB1dGMgdGltZXN0YW1wXG4gICAgICAgIHByb2Nlc3MuY29ubmVjdGVkICYmIHByb2Nlc3Muc2VuZCh7IHRpbWU6IG94dXRpbC5nZXRUaW1lU3RhbXAoKSwgLi4ubXNnIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZ3MpIHtcbiAgICBsZXQgcmV0dmFsLCBlcnJvcjtcbiAgICBpZiAoX3dvcmtlciAmJiBfd29ya2VyW21ldGhvZF0gJiYgdHlwZW9mIF93b3JrZXJbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlclttZXRob2RdLmFwcGx5KF93b3JrZXIsIGFyZ3MgfHwgW10pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGludm9rZTogJHttZXRob2R9OmAsIGUpO1xuICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihgTWV0aG9kIFwiJHttZXRob2R9XCIgZG9lcyBub3QgZXhpc3RgKTtcbiAgICB9XG4gICAgLy8gY29udmVydCBKUyBlcnJvciB0byBPeHlnZW4gRmFpbHVyZSBvYmplY3RcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmV0dmFsLCBlcnJvciB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBpbnZva2VUZXN0SG9vayhtZXRob2QsIGFyZ3MpIHtcbiAgICBsZXQgcmV0dmFsID0gdW5kZWZpbmVkLCBlcnJvciA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlci5jYWxsVGVzdEhvb2sobWV0aG9kLCBhcmdzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyb3IgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7IHJldHZhbCwgZXJyb3IgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3Vic2NyaWJlKGV2ZW50TmFtZSkge1xuICAgIGlmIChfd29ya2VyICYmIF93b3JrZXIub24pIHtcbiAgICAgICAgX3dvcmtlci5vbihldmVudE5hbWUsICguLi5hcmdzKSA9PiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBhcmdzKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBldmVudEFyZ3MpIHtcbiAgICBwcm9jZXNzU2VuZCh7XG4gICAgICAgIGV2ZW50OiAnZXZlbnQnLFxuICAgICAgICBuYW1lOiBldmVudE5hbWUsXG4gICAgICAgIGFyZ3M6IGV2ZW50QXJnc1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBlbWl0UmVwb3J0ZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xuICAgIHByb2Nlc3NTZW5kKHtcbiAgICAgICAgZXZlbnQ6ICdyZXBvcnRlcicsXG4gICAgICAgIG1ldGhvZDogZXZlbnROYW1lLFxuICAgICAgICBhcmdzOiBldmVudEFyZ3NcbiAgICB9KTtcbn1cblxuIl19
222
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi93b3JrZXIuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsInNldE1heExpc3RlbmVycyIsInJlcXVpcmUiLCJkZWZhdWx0TWF4TGlzdGVuZXJzIiwib3h1dGlsIiwiZXJyb3JIZWxwZXIiLCJyZXBvcnRlciIsIm9uU3VpdGVTdGFydCIsImFyZ3MiLCJlbWl0UmVwb3J0ZXJFdmVudCIsIm9uU3VpdGVFbmQiLCJvbkNhc2VTdGFydCIsIm9uQ2FzZUVuZCIsIm9uU3RlcFN0YXJ0Iiwib25TdGVwRW5kIiwib25SdW5uZXJFbmQiLCJnbG9iYWwiLCJicm93c2VyIiwibG9nZ2VyIiwiaW5mbyIsIm1lc3NhZ2UiLCJzcmMiLCJERUZBVUxUX0xPR0dFUl9JU1NVRVIiLCJ0cyIsImdldFRpbWVTdGFtcCIsInByb2Nlc3NTZW5kIiwidGltZSIsImV2ZW50IiwibGV2ZWwiLCJMRVZFTFMiLCJJTkZPIiwibXNnIiwic3RyaW5naWZ5IiwiZGVidWciLCJERUJVRyIsImVycm9yIiwiZXJyIiwiRVJST1IiLCJ3YXJuIiwiV0FSTiIsIl93b3JrZXIiLCJPeHlnZW5Xb3JrZXIiLCJvYmoiLCJTdHJpbmciLCJKU09OIiwiaG9va0xvZ3MiLCJvbiIsIm9yaWdpbiIsIklTU1VFUlMiLCJVU0VSIiwiY29uc29sZSIsImxvZyIsImVyck1lc3NhZ2UiLCJkaXNwb3NlIiwidHlwZSIsIm1ldGhvZCIsImNhbGxJZCIsImludm9rZUZ1bmMiLCJpbnZva2VUZXN0SG9vayIsImludm9rZSIsInJldHZhbCIsInN1YnNjcmliZSIsInN0YXR1cyIsImUiLCJjb25uZWN0ZWQiLCJzZW5kIiwiYXBwbHkiLCJFcnJvciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJ1bmRlZmluZWQiLCJjYWxsVGVzdEhvb2siLCJldmVudE5hbWUiLCJlbWl0V29ya2VyRXZlbnQiLCJldmVudEFyZ3MiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7O0FBa0JBOztBQUNBOzs7O0FB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QzNDLE9BQVY7QUFDSDs7QUFDRCxTQUFPO0FBQUV3QyxJQUFBQSxNQUFGO0FBQVV6QixJQUFBQTtBQUFWLEdBQVA7QUFDSDs7QUFFRCxlQUFlMEIsU0FBZixDQUF5QlUsU0FBekIsRUFBb0M7QUFDaEMsTUFBSS9CLE9BQU8sSUFBSUEsT0FBTyxDQUFDTSxFQUF2QixFQUEyQjtBQUN2Qk4sSUFBQUEsT0FBTyxDQUFDTSxFQUFSLENBQVd5QixTQUFYLEVBQXNCLENBQUMsR0FBRy9ELElBQUosS0FBYWdFLGVBQWUsQ0FBQ0QsU0FBRCxFQUFZL0QsSUFBWixDQUFsRDtBQUNIO0FBQ0o7O0FBRUQsU0FBU2dFLGVBQVQsQ0FBeUJELFNBQXpCLEVBQW9DRSxTQUFwQyxFQUErQztBQUMzQ2hELEVBQUFBLFdBQVcsQ0FBQztBQUNSRSxJQUFBQSxLQUFLLEVBQUUsT0FEQztBQUVSK0MsSUFBQUEsSUFBSSxFQUFFSCxTQUZFO0FBR1IvRCxJQUFBQSxJQUFJLEVBQUVpRTtBQUhFLEdBQUQsQ0FBWDtBQUtIOztBQUVELFNBQVNoRSxpQkFBVCxDQUEyQjhELFNBQTNCLEVBQXNDRSxTQUF0QyxFQUFpRDtBQUM3Q2hELEVBQUFBLFdBQVcsQ0FBQztBQUNSRSxJQUFBQSxLQUFLLEVBQUUsVUFEQztBQUVSNEIsSUFBQUEsTUFBTSxFQUFFZ0IsU0FGQTtBQUdSL0QsSUFBQUEsSUFBSSxFQUFFaUU7QUFIRSxHQUFELENBQVg7QUFLSCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogQm9pbGVycGxhdGUgY29kZSBmb3IgdXNlciBzY3JpcHRzLlxyXG4gKiBQcm92aWRlcyBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgZXhlY3V0aW5nIEpTIHRlc3Qgc2NyaXB0cy5cclxuICovXHJcblxyXG4vLyBpbmNyZWFzZSBtYXggbGlzdGVuZXJzIGxpbWl0IG9uIHByb2Nlc3MgZW1pdHRlclxyXG5wcm9jZXNzLnNldE1heExpc3RlbmVycygxMDApO1xyXG5yZXF1aXJlKCdldmVudHMnKS5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTAwO1xyXG5cclxuaW1wb3J0IHsgTEVWRUxTLCBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi8uLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IE94eWdlbldvcmtlciBmcm9tICcuL094eWdlbldvcmtlcic7XHJcbmNvbnN0IG94dXRpbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi91dGlsJyk7XHJcbmNvbnN0IGVycm9ySGVscGVyID0gcmVxdWlyZSgnLi4vLi4vZXJyb3JzL2hlbHBlcicpO1xyXG5cclxuY29uc3QgcmVwb3J0ZXIgPSB7XHJcbiAgICBvblN1aXRlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdWl0ZVN0YXJ0JywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdWl0ZUVuZDogZnVuY3Rpb24oLi4uYXJncykge1xyXG4gICAgICAgIGVtaXRSZXBvcnRlckV2ZW50KCdvblN1aXRlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25DYXNlU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvbkNhc2VFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25DYXNlRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25TdGVwU3RhcnQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwU3RhcnQnLCBhcmdzKTtcclxuICAgIH0sXHJcbiAgICBvblN0ZXBFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25TdGVwRW5kJywgYXJncyk7XHJcbiAgICB9LFxyXG4gICAgb25SdW5uZXJFbmQ6IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcclxuICAgICAgICBlbWl0UmVwb3J0ZXJFdmVudCgnb25SdW5uZXJFbmQnLCBhcmdzKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5jb25zdCBsb2dnZXIgPSB7XHJcbiAgICBpbmZvOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcclxuICAgICAgICBjb25zdCB0cyA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICBwcm9jZXNzU2VuZCh7IHRpbWU6IHRzLCBldmVudDogJ2xvZycsIGxldmVsOiBMRVZFTFMuSU5GTywgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYyB9KTtcclxuICAgIH0sXHJcbiAgICBkZWJ1ZzogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLkRFQlVHLCBtc2c6IHN0cmluZ2lmeShtZXNzYWdlKSwgc3JjIH0pO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiBmdW5jdGlvbihtZXNzYWdlLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIGVyciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXNyYykge1xyXG4gICAgICAgICAgICBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRzID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHsgdGltZTogdHMsIGV2ZW50OiAnbG9nJywgbGV2ZWw6IExFVkVMUy5FUlJPUiwgbXNnOiBzdHJpbmdpZnkobWVzc2FnZSksIHNyYywgZXJyOiBlcnIgfSk7XHJcbiAgICB9LFxyXG4gICAgd2FybjogZnVuY3Rpb24obWVzc2FnZSwgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgY29uc3QgdHMgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgcHJvY2Vzc1NlbmQoeyB0aW1lOiB0cywgZXZlbnQ6ICdsb2cnLCBsZXZlbDogTEVWRUxTLldBUk4sIG1zZzogc3RyaW5naWZ5KG1lc3NhZ2UpLCBzcmMgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgX3dvcmtlciA9IG5ldyBPeHlnZW5Xb3JrZXIocmVwb3J0ZXIsIGxvZ2dlcik7XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnIHx8IG9iaiBpbnN0YW5jZW9mIFN0cmluZyA/IG9iaiA6IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpO1xyXG59XHJcblxyXG5veHV0aWwuaG9va0xvZ3MobG9nZ2VyKTtcclxuLy8gcmVkaXJlY3Qgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIGxvZ2dlclxyXG4vL3Byb2Nlc3Muc3Rkb3V0LndyaXRlID0gbG9nZ2VyLmRlYnVnO1xyXG4vL3Byb2Nlc3Muc3RkZXJyLndyaXRlID0gbG9nZ2VyLmVycm9yO1xyXG5cclxucHJvY2Vzcy5vbigndW5oYW5kbGVkUmVqZWN0aW9uJywgYXN5bmMoZXJyLCBvcmlnaW4pID0+IHtcclxuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSwgSVNTVUVSUy5VU0VSKTtcclxuICAgIGNvbnNvbGUubG9nKCd1bmhhbmRsZWRSZWplY3Rpb24nLCBlcnIpO1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnd29ya2VyRXJyb3InLFxyXG4gICAgICAgIGVyck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBhc3luYyhlcnIsIG9yaWdpbikgPT4ge1xyXG4gICAgbG9nZ2VyLmVycm9yKGVyci5tZXNzYWdlLCBJU1NVRVJTLlVTRVIpO1xyXG4gICAgY29uc29sZS5sb2coJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyKTtcclxuICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICBldmVudDogJ3dvcmtlckVycm9yJyxcclxuICAgICAgICBlcnJNZXNzYWdlOiBlcnIubWVzc2FnZSxcclxuICAgIH0pO1xyXG59KTtcclxuXHJcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgYXdhaXQgZGlzcG9zZSgnQ0FOQ0VMRUQnKTtcclxufSk7XHJcblxyXG5wcm9jZXNzLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gKG1zZykge1xyXG4gICAgaWYgKCFtc2cudHlwZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICgobXNnLnR5cGUgPT09ICdpbnZva2UnIHx8IG1zZy50eXBlID09PSAnaW52b2tlOmhvb2snKSAmJiBtc2cubWV0aG9kKSB7XHJcbiAgICAgICAgY29uc3QgeyBjYWxsSWQsIG1ldGhvZCwgYXJncyB9ID0gbXNnO1xyXG4gICAgICAgIGNvbnN0IGludm9rZUZ1bmMgPSBtc2cudHlwZSA9PT0gJ2ludm9rZTpob29rJyA/IGludm9rZVRlc3RIb29rIDogaW52b2tlO1xyXG4gICAgICAgIGNvbnN0IHsgcmV0dmFsLCBlcnJvciB9ID0gYXdhaXQgaW52b2tlRnVuYyhtZXRob2QsIGFyZ3MpO1xyXG4gICAgICAgIHByb2Nlc3NTZW5kKHtcclxuICAgICAgICAgICAgZXZlbnQ6ICdpbnZva2U6cmVzdWx0JyxcclxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgIGNhbGxJZDogY2FsbElkLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXHJcbiAgICAgICAgICAgIHJldHZhbDogcmV0dmFsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChtc2cudHlwZSA9PT0gJ3N1YnNjcmliZScpIHtcclxuICAgICAgICBzdWJzY3JpYmUobXNnLmV2ZW50KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBkaXNwb3NlKHN0YXR1cz0gbnVsbCkge1xyXG4gICAgaWYgKF93b3JrZXIpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBfd29ya2VyLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzU2VuZChtc2cpIHtcclxuICAgIC8vIHdyYXAgcHJvY2Vzcy5zZW5kIHdpdGggdHJ5L2NhdGNoIGFzIHNvbWV0aW1lcyB3ZSBtaWdodCBjYWxsIHByb2Nlc3Muc2VuZCBcclxuICAgIC8vIHdoZW4gcGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgKHdoZW4gdXNlIGtpbGxzIHRoZSBtYWluIHByb2Nlc3MpXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIGFkZCB1dGMgdGltZXN0YW1wXHJcbiAgICAgICAgcHJvY2Vzcy5jb25uZWN0ZWQgJiYgcHJvY2Vzcy5zZW5kKHsgdGltZTogb3h1dGlsLmdldFRpbWVTdGFtcCgpLCAuLi5tc2cgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIGlnbm9yZVxyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsLCBlcnJvcjtcclxuICAgIGlmIChfd29ya2VyICYmIF93b3JrZXJbbWV0aG9kXSAmJiB0eXBlb2YgX3dvcmtlclttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dmFsID0gYXdhaXQgX3dvcmtlclttZXRob2RdLmFwcGx5KF93b3JrZXIsIGFyZ3MgfHwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGludm9rZTogJHttZXRob2R9OmAsIGUpO1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kfVwiIGRvZXMgbm90IGV4aXN0YCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb252ZXJ0IEpTIGVycm9yIHRvIE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IHJldHZhbCwgZXJyb3IgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gaW52b2tlVGVzdEhvb2sobWV0aG9kLCBhcmdzKSB7XHJcbiAgICBsZXQgcmV0dmFsID0gdW5kZWZpbmVkLCBlcnJvciA9IG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHZhbCA9IGF3YWl0IF93b3JrZXIuY2FsbFRlc3RIb29rKG1ldGhvZCwgYXJncyk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGVycm9yID0gZS5tZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmV0dmFsLCBlcnJvciB9O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmUoZXZlbnROYW1lKSB7XHJcbiAgICBpZiAoX3dvcmtlciAmJiBfd29ya2VyLm9uKSB7XHJcbiAgICAgICAgX3dvcmtlci5vbihldmVudE5hbWUsICguLi5hcmdzKSA9PiBlbWl0V29ya2VyRXZlbnQoZXZlbnROYW1lLCBhcmdzKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVtaXRXb3JrZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAnZXZlbnQnLFxyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBhcmdzOiBldmVudEFyZ3NcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBlbWl0UmVwb3J0ZXJFdmVudChldmVudE5hbWUsIGV2ZW50QXJncykge1xyXG4gICAgcHJvY2Vzc1NlbmQoe1xyXG4gICAgICAgIGV2ZW50OiAncmVwb3J0ZXInLFxyXG4gICAgICAgIG1ldGhvZDogZXZlbnROYW1lLFxyXG4gICAgICAgIGFyZ3M6IGV2ZW50QXJnc1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
- {
2
- "logger": {
3
- "console": {
4
- "level": "debug"
5
- }
6
- }
1
+ {
2
+ "logger": {
3
+ "console": {
4
+ "level": "debug"
5
+ }
6
+ }
7
7
  }