oxygen-cli 1.25.0 → 1.27.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 (269) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/core/OxygenCore.js +266 -37
  3. package/build/core/OxygenEvents.js +11 -1
  4. package/build/core/OxygenModule.js +14 -1
  5. package/build/core/OxygenService.js +12 -1
  6. package/build/core/OxygenSubModule.js +10 -1
  7. package/build/core/WebDriverModule.js +30 -1
  8. package/build/core/utils.js +17 -1
  9. package/build/errors/HookError.js +7 -1
  10. package/build/errors/ModuleError.js +7 -1
  11. package/build/errors/ModuleUnavailableError.js +3 -1
  12. package/build/errors/OxygenError.js +33 -1
  13. package/build/errors/ScriptNotFound.js +7 -1
  14. package/build/errors/helper.js +77 -45
  15. package/build/index.js +18 -6
  16. package/build/lib/cli-util.js +90 -28
  17. package/build/lib/cli.js +23 -1
  18. package/build/lib/debugger.js +144 -1
  19. package/build/lib/img-merge.js +15 -1
  20. package/build/lib/launcher.js +28 -1
  21. package/build/lib/moduleRequire.js +4 -1
  22. package/build/lib/param-manager.js +28 -1
  23. package/build/lib/param-reader-csv.js +15 -1
  24. package/build/lib/param-reader-excel.js +14 -1
  25. package/build/lib/param-reader-json.js +10 -1
  26. package/build/lib/text-to-image.js +183 -0
  27. package/build/lib/util.js +58 -3
  28. package/build/model/case-result.js +4 -2
  29. package/build/model/failure.js +2 -1
  30. package/build/model/status.js +2 -1
  31. package/build/model/step-result.js +2 -1
  32. package/build/model/suite-result.js +2 -1
  33. package/build/model/test-result.js +2 -1
  34. package/build/model/testcase.js +2 -1
  35. package/build/model/testsuite.js +2 -1
  36. package/build/ox_modules/index.js +33 -13
  37. package/build/ox_modules/module-assert.js +24 -8
  38. package/build/ox_modules/module-date.js +8 -3
  39. package/build/ox_modules/module-db.js +28 -7
  40. package/build/ox_modules/module-email.js +36 -10
  41. package/build/ox_modules/module-eyes.js +46 -5
  42. package/build/ox_modules/module-http.js +102 -41
  43. package/build/ox_modules/module-log.js +22 -5
  44. package/build/ox_modules/module-mailinator.js +32 -10
  45. package/build/ox_modules/module-mob/commands/alertAccept.js +2 -1
  46. package/build/ox_modules/module-mob/commands/alertDismiss.js +2 -1
  47. package/build/ox_modules/module-mob/commands/assertAlert.js +6 -1
  48. package/build/ox_modules/module-mob/commands/assertText.js +3 -1
  49. package/build/ox_modules/module-mob/commands/assertTitle.js +4 -1
  50. package/build/ox_modules/module-mob/commands/assertValue.js +15 -9
  51. package/build/ox_modules/module-mob/commands/back.js +2 -1
  52. package/build/ox_modules/module-mob/commands/clear.js +4 -1
  53. package/build/ox_modules/module-mob/commands/click.js +4 -3
  54. package/build/ox_modules/module-mob/commands/clickHidden.js +9 -3
  55. package/build/ox_modules/module-mob/commands/clickLong.js +2 -1
  56. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +4 -1
  57. package/build/ox_modules/module-mob/commands/closeApp.js +2 -1
  58. package/build/ox_modules/module-mob/commands/debug.js +2 -2
  59. package/build/ox_modules/module-mob/commands/dragAndDrop.js +2 -1
  60. package/build/ox_modules/module-mob/commands/enableNetwork.js +12 -4
  61. package/build/ox_modules/module-mob/commands/execute.js +2 -1
  62. package/build/ox_modules/module-mob/commands/findElement.js +3 -1
  63. package/build/ox_modules/module-mob/commands/findElements.js +4 -1
  64. package/build/ox_modules/module-mob/commands/getAlertText.js +2 -1
  65. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +2 -1
  66. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +10 -1
  67. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +2 -1
  68. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +2 -1
  69. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +9 -1
  70. package/build/ox_modules/module-mob/commands/getDeviceTime.js +2 -1
  71. package/build/ox_modules/module-mob/commands/getLocation.js +2 -1
  72. package/build/ox_modules/module-mob/commands/getSource.js +2 -1
  73. package/build/ox_modules/module-mob/commands/getText.js +4 -1
  74. package/build/ox_modules/module-mob/commands/getTitle.js +2 -1
  75. package/build/ox_modules/module-mob/commands/getUrl.js +2 -1
  76. package/build/ox_modules/module-mob/commands/getValue.js +9 -5
  77. package/build/ox_modules/module-mob/commands/getWindowHandles.js +2 -1
  78. package/build/ox_modules/module-mob/commands/hideKeyboard.js +2 -1
  79. package/build/ox_modules/module-mob/commands/index.js +94 -19
  80. package/build/ox_modules/module-mob/commands/installApp.js +2 -1
  81. package/build/ox_modules/module-mob/commands/isAppInstalled.js +2 -1
  82. package/build/ox_modules/module-mob/commands/isCheckable.js +2 -1
  83. package/build/ox_modules/module-mob/commands/isChecked.js +2 -1
  84. package/build/ox_modules/module-mob/commands/isClickable.js +2 -1
  85. package/build/ox_modules/module-mob/commands/isExist.js +3 -1
  86. package/build/ox_modules/module-mob/commands/isSelected.js +2 -1
  87. package/build/ox_modules/module-mob/commands/isVisible.js +3 -1
  88. package/build/ox_modules/module-mob/commands/isWebViewContext.js +2 -1
  89. package/build/ox_modules/module-mob/commands/launchApp.js +2 -1
  90. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +2 -1
  91. package/build/ox_modules/module-mob/commands/open.js +3 -1
  92. package/build/ox_modules/module-mob/commands/pause.js +2 -1
  93. package/build/ox_modules/module-mob/commands/removeApp.js +2 -1
  94. package/build/ox_modules/module-mob/commands/resetApp.js +2 -1
  95. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +6 -1
  96. package/build/ox_modules/module-mob/commands/scrollIntoView.js +2 -1
  97. package/build/ox_modules/module-mob/commands/select.js +4 -1
  98. package/build/ox_modules/module-mob/commands/selectFrame.js +4 -1
  99. package/build/ox_modules/module-mob/commands/selectWindow.js +26 -5
  100. package/build/ox_modules/module-mob/commands/sendKeys.js +9 -6
  101. package/build/ox_modules/module-mob/commands/setContext.js +2 -1
  102. package/build/ox_modules/module-mob/commands/setNativeContext.js +2 -1
  103. package/build/ox_modules/module-mob/commands/setTimeout.js +2 -1
  104. package/build/ox_modules/module-mob/commands/setWebViewContext.js +6 -3
  105. package/build/ox_modules/module-mob/commands/shake.js +2 -1
  106. package/build/ox_modules/module-mob/commands/smsClickLink.js +2 -1
  107. package/build/ox_modules/module-mob/commands/smsGetText.js +6 -3
  108. package/build/ox_modules/module-mob/commands/swipe.js +2 -1
  109. package/build/ox_modules/module-mob/commands/swipeElement.js +2 -1
  110. package/build/ox_modules/module-mob/commands/swipeScreen.js +2 -1
  111. package/build/ox_modules/module-mob/commands/takeScreenshot.js +2 -1
  112. package/build/ox_modules/module-mob/commands/tap.js +2 -1
  113. package/build/ox_modules/module-mob/commands/type.js +7 -3
  114. package/build/ox_modules/module-mob/commands/unlockPattern.js +10 -9
  115. package/build/ox_modules/module-mob/commands/waitForExist.js +2 -1
  116. package/build/ox_modules/module-mob/commands/waitForInteractable.js +3 -1
  117. package/build/ox_modules/module-mob/commands/waitForVisible.js +2 -1
  118. package/build/ox_modules/module-mob.js +141 -72
  119. package/build/ox_modules/module-pdf.js +62 -23
  120. package/build/ox_modules/module-proxy.js +68 -8
  121. package/build/ox_modules/module-serial.js +32 -7
  122. package/build/ox_modules/module-shell.js +27 -8
  123. package/build/ox_modules/module-soap.js +47 -14
  124. package/build/ox_modules/module-twilio.js +53 -10
  125. package/build/ox_modules/module-utils.js +51 -16
  126. package/build/ox_modules/module-web/commands/alertAccept.js +2 -1
  127. package/build/ox_modules/module-web/commands/alertDismiss.js +2 -1
  128. package/build/ox_modules/module-web/commands/assertAlert.js +6 -1
  129. package/build/ox_modules/module-web/commands/assertExist.js +2 -1
  130. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +4 -1
  131. package/build/ox_modules/module-web/commands/assertSelectedValue.js +3 -1
  132. package/build/ox_modules/module-web/commands/assertText.js +3 -1
  133. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +6 -1
  134. package/build/ox_modules/module-web/commands/assertTextPresent.js +6 -1
  135. package/build/ox_modules/module-web/commands/assertTitle.js +3 -1
  136. package/build/ox_modules/module-web/commands/assertValue.js +3 -1
  137. package/build/ox_modules/module-web/commands/back.js +2 -1
  138. package/build/ox_modules/module-web/commands/clear.js +5 -1
  139. package/build/ox_modules/module-web/commands/click.js +13 -4
  140. package/build/ox_modules/module-web/commands/clickHidden.js +7 -2
  141. package/build/ox_modules/module-web/commands/closeWindow.js +2 -1
  142. package/build/ox_modules/module-web/commands/debug.js +2 -2
  143. package/build/ox_modules/module-web/commands/deleteCookies.js +2 -1
  144. package/build/ox_modules/module-web/commands/deselect.js +2 -1
  145. package/build/ox_modules/module-web/commands/doubleClick.js +9 -3
  146. package/build/ox_modules/module-web/commands/dragAndDrop.js +2 -1
  147. package/build/ox_modules/module-web/commands/execute.js +2 -1
  148. package/build/ox_modules/module-web/commands/fileBrowse.js +10 -4
  149. package/build/ox_modules/module-web/commands/findElement.js +3 -1
  150. package/build/ox_modules/module-web/commands/findElements.js +4 -1
  151. package/build/ox_modules/module-web/commands/fullscreenWindow.js +2 -1
  152. package/build/ox_modules/module-web/commands/getAlertText.js +2 -1
  153. package/build/ox_modules/module-web/commands/getAttribute.js +4 -1
  154. package/build/ox_modules/module-web/commands/getBrowserLogs.js +3 -1
  155. package/build/ox_modules/module-web/commands/getCookies.js +2 -1
  156. package/build/ox_modules/module-web/commands/getCssValue.js +4 -1
  157. package/build/ox_modules/module-web/commands/getElementCount.js +2 -1
  158. package/build/ox_modules/module-web/commands/getHTML.js +2 -1
  159. package/build/ox_modules/module-web/commands/getSource.js +2 -1
  160. package/build/ox_modules/module-web/commands/getText.js +4 -1
  161. package/build/ox_modules/module-web/commands/getTitle.js +2 -1
  162. package/build/ox_modules/module-web/commands/getUrl.js +2 -1
  163. package/build/ox_modules/module-web/commands/getValue.js +5 -1
  164. package/build/ox_modules/module-web/commands/getWindowHandles.js +2 -1
  165. package/build/ox_modules/module-web/commands/getWindowSize.js +2 -1
  166. package/build/ox_modules/module-web/commands/getXMLPageSource.js +5 -1
  167. package/build/ox_modules/module-web/commands/index.js +100 -19
  168. package/build/ox_modules/module-web/commands/isAlertPresent.js +2 -1
  169. package/build/ox_modules/module-web/commands/isChecked.js +2 -1
  170. package/build/ox_modules/module-web/commands/isExist.js +3 -1
  171. package/build/ox_modules/module-web/commands/isInteractable.js +2 -1
  172. package/build/ox_modules/module-web/commands/isSelected.js +2 -1
  173. package/build/ox_modules/module-web/commands/isVisible.js +3 -1
  174. package/build/ox_modules/module-web/commands/makeVisible.js +10 -2
  175. package/build/ox_modules/module-web/commands/maximizeWindow.js +2 -1
  176. package/build/ox_modules/module-web/commands/minimizeWindow.js +2 -1
  177. package/build/ox_modules/module-web/commands/newWindow.js +2 -1
  178. package/build/ox_modules/module-web/commands/open.js +4 -1
  179. package/build/ox_modules/module-web/commands/pause.js +2 -1
  180. package/build/ox_modules/module-web/commands/point.js +2 -1
  181. package/build/ox_modules/module-web/commands/pointJS.js +8 -2
  182. package/build/ox_modules/module-web/commands/refresh.js +2 -1
  183. package/build/ox_modules/module-web/commands/rightClick.js +8 -3
  184. package/build/ox_modules/module-web/commands/rightClickActions.js +2 -1
  185. package/build/ox_modules/module-web/commands/scrollToElement.js +2 -1
  186. package/build/ox_modules/module-web/commands/select.js +5 -1
  187. package/build/ox_modules/module-web/commands/selectFrame.js +3 -1
  188. package/build/ox_modules/module-web/commands/selectWindow.js +26 -5
  189. package/build/ox_modules/module-web/commands/sendKeys.js +6 -3
  190. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
  191. package/build/ox_modules/module-web/commands/setTimeout.js +2 -1
  192. package/build/ox_modules/module-web/commands/setWindowSize.js +2 -1
  193. package/build/ox_modules/module-web/commands/takeScreenshot.js +5 -3
  194. package/build/ox_modules/module-web/commands/type.js +5 -1
  195. package/build/ox_modules/module-web/commands/waitForAngular.js +11 -6
  196. package/build/ox_modules/module-web/commands/waitForExist.js +2 -1
  197. package/build/ox_modules/module-web/commands/waitForInteractable.js +2 -1
  198. package/build/ox_modules/module-web/commands/waitForNotExist.js +8 -1
  199. package/build/ox_modules/module-web/commands/waitForNotText.js +3 -1
  200. package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -1
  201. package/build/ox_modules/module-web/commands/waitForText.js +3 -1
  202. package/build/ox_modules/module-web/commands/waitForValue.js +3 -1
  203. package/build/ox_modules/module-web/commands/waitForVisible.js +2 -1
  204. package/build/ox_modules/module-web/commands/waitForWindow.js +21 -4
  205. package/build/ox_modules/module-web.js +181 -82
  206. package/build/ox_modules/module-win/commands/assertText.js +3 -1
  207. package/build/ox_modules/module-win/commands/assertTitle.js +4 -1
  208. package/build/ox_modules/module-win/commands/assertValue.js +15 -9
  209. package/build/ox_modules/module-win/commands/back.js +2 -1
  210. package/build/ox_modules/module-win/commands/clear.js +4 -1
  211. package/build/ox_modules/module-win/commands/click.js +2 -1
  212. package/build/ox_modules/module-win/commands/clickLong.js +2 -1
  213. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +4 -1
  214. package/build/ox_modules/module-win/commands/findElement.js +3 -1
  215. package/build/ox_modules/module-win/commands/findElements.js +4 -1
  216. package/build/ox_modules/module-win/commands/getAppiumLogs.js +2 -1
  217. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +2 -1
  218. package/build/ox_modules/module-win/commands/getLocation.js +2 -1
  219. package/build/ox_modules/module-win/commands/getSource.js +2 -1
  220. package/build/ox_modules/module-win/commands/getText.js +4 -1
  221. package/build/ox_modules/module-win/commands/getValue.js +9 -5
  222. package/build/ox_modules/module-win/commands/getWindowHandles.js +2 -1
  223. package/build/ox_modules/module-win/commands/index.js +43 -5
  224. package/build/ox_modules/module-win/commands/isCheckable.js +2 -1
  225. package/build/ox_modules/module-win/commands/isChecked.js +2 -1
  226. package/build/ox_modules/module-win/commands/isClickable.js +2 -1
  227. package/build/ox_modules/module-win/commands/isExist.js +3 -1
  228. package/build/ox_modules/module-win/commands/isSelected.js +2 -1
  229. package/build/ox_modules/module-win/commands/isVisible.js +3 -1
  230. package/build/ox_modules/module-win/commands/open.js +2 -1
  231. package/build/ox_modules/module-win/commands/pause.js +2 -1
  232. package/build/ox_modules/module-win/commands/rightClick.js +2 -1
  233. package/build/ox_modules/module-win/commands/selectWindow.js +15 -1
  234. package/build/ox_modules/module-win/commands/sendKeys.js +4 -1
  235. package/build/ox_modules/module-win/commands/setTimeout.js +2 -1
  236. package/build/ox_modules/module-win/commands/takeScreenshot.js +2 -1
  237. package/build/ox_modules/module-win/commands/tap.js +2 -1
  238. package/build/ox_modules/module-win/commands/type.js +4 -1
  239. package/build/ox_modules/module-win/commands/waitForExist.js +2 -1
  240. package/build/ox_modules/module-win/commands/waitForInteractable.js +4 -1
  241. package/build/ox_modules/module-win/commands/waitForVisible.js +2 -1
  242. package/build/ox_modules/module-win.js +87 -48
  243. package/build/ox_modules/utils.js +76 -22
  244. package/build/ox_reporters/reporter-excel.js +58 -1
  245. package/build/ox_reporters/reporter-html.js +28 -1
  246. package/build/ox_reporters/reporter-json.js +14 -1
  247. package/build/ox_reporters/reporter-junit.js +24 -1
  248. package/build/ox_reporters/reporter-pdf.js +19 -1
  249. package/build/ox_reporters/reporter-xml.js +17 -1
  250. package/build/ox_services/service-devtools/submodule-network.js +91 -4
  251. package/build/ox_services/service-devtools.js +23 -1
  252. package/build/reporter/FileReporterBase.js +44 -5
  253. package/build/reporter/ReportAggregator.js +65 -1
  254. package/build/reporter/ReporterBase.js +6 -1
  255. package/build/runners/WorkerProcess.js +99 -1
  256. package/build/runners/cucumber/CucumberEventListener.js +29 -4
  257. package/build/runners/cucumber/CucumberReporter.js +56 -1
  258. package/build/runners/cucumber/CucumberWorker.js +66 -1
  259. package/build/runners/cucumber/index.js +30 -1
  260. package/build/runners/cucumber/worker.js +18 -1
  261. package/build/runners/index.js +6 -1
  262. package/build/runners/oxygen/OxygenWorker.js +60 -3
  263. package/build/runners/oxygen/index.js +178 -17
  264. package/build/runners/oxygen/worker.js +25 -2
  265. package/package.json +8 -8
  266. package/.babelrc +0 -28
  267. package/.eslintrc.json +0 -25
  268. package/.husky/pre-commit +0 -4
  269. package/CONTRIBUTE.md +0 -1
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
+
4
5
  var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
+
5
7
  var _utils = _interopRequireDefault(require("./utils"));
8
+
6
9
  var _lodash = _interopRequireDefault(require("lodash"));
10
+
7
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+
8
13
  /*
9
14
  * Copyright (C) 2015-present CloudBeat Limited
10
15
  *
@@ -18,16 +23,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
18
23
  * @name email
19
24
  * @description Provides methods for working with email via IMAP.
20
25
  */
21
-
22
26
  var errHelper = require('../errors/helper');
27
+
23
28
  module.exports = function () {
24
29
  var imaps = require('imap-simple');
30
+
25
31
  const simpleParser = require('mailparser').simpleParser;
32
+
26
33
  var _config;
34
+
27
35
  module.isInitialized = function () {
28
36
  return _config !== undefined;
29
37
  };
30
-
31
38
  /**
32
39
  * @summary Set email connection details.
33
40
  * @function init
@@ -39,13 +46,21 @@ module.exports = function () {
39
46
  * @param {Number} authTimeout - Authentication timeout in milliseconds.
40
47
  * @param {Boolean=} enableSNI - Enable sending SNI when establishing the connection. This is required for some mail servers. Default is false.
41
48
  */
49
+
50
+
42
51
  module.init = function (user, password, host, port, tls, authTimeout, enableSNI) {
43
52
  _utils.default.assertArgumentNonEmptyString(user, 'user');
53
+
44
54
  _utils.default.assertArgumentNonEmptyString(password, 'password');
55
+
45
56
  _utils.default.assertArgumentNonEmptyString(host, 'host');
57
+
46
58
  _utils.default.assertArgumentNumberNonNegative(port, 'port');
59
+
47
60
  _utils.default.assertArgumentBool(tls, 'tls');
61
+
48
62
  _utils.default.assertArgumentNumberNonNegative(authTimeout, 'authTimeout');
63
+
49
64
  _config = {
50
65
  imap: {
51
66
  user: user,
@@ -55,16 +70,14 @@ module.exports = function () {
55
70
  tls: tls,
56
71
  authTimeout: authTimeout
57
72
  }
58
- };
73
+ }; // set servername if SNI is enabled or we are using Gmail
59
74
 
60
- // set servername if SNI is enabled or we are using Gmail
61
75
  if (enableSNI || host === 'imap.gmail.com') {
62
76
  _config.imap.tlsOptions = {
63
77
  servername: host
64
78
  };
65
79
  }
66
80
  };
67
-
68
81
  /**
69
82
  * @summary Retrieves last unseen email.
70
83
  * @function getLastEmail
@@ -97,42 +110,49 @@ module.exports = function () {
97
110
  * });
98
111
  * }
99
112
  */
113
+
114
+
100
115
  module.getLastEmail = async function (sinceMinutes, subject, timeout) {
101
116
  _utils.default.assertArgumentNumberNonNegative(sinceMinutes, 'sinceMinutes');
117
+
102
118
  _utils.default.assertArgumentNumberNonNegative(timeout, 'timeout');
119
+
103
120
  var mail;
104
121
  var now = new Date().getTime();
105
122
  var err;
123
+
106
124
  while (!err && !mail && new Date().getTime() - now < timeout) {
107
125
  try {
108
126
  const connection = await imaps.connect(_config);
109
- await connection.openBox('INBOX');
127
+ await connection.openBox('INBOX'); // fetch unseen emails from the last sinceMinutes
110
128
 
111
- // fetch unseen emails from the last sinceMinutes
112
129
  var startDate = new Date();
113
130
  startDate.setTime(Date.now() - sinceMinutes * 60 * 1000);
114
131
  startDate = startDate.toISOString();
115
- var searchCriteria = ['UNSEEN', ['SINCE', startDate]];
132
+ var searchCriteria = ['UNSEEN', ['SINCE', startDate]]; // fetch certain headers and stripped down body
116
133
 
117
- // fetch certain headers and stripped down body
118
134
  var fetchOptions = {
119
135
  bodies: ['HEADER.FIELDS (FROM TO SUBJECT DATE)', 'TEXT'],
120
136
  struct: true,
121
137
  markSeen: false
122
138
  };
123
139
  const results = await connection.search(searchCriteria, fetchOptions);
140
+
124
141
  for (var result of results) {
125
142
  const headerPart = _lodash.default.find(result.parts, {
126
143
  'which': fetchOptions.bodies[0]
127
144
  });
145
+
128
146
  const bodyPart = _lodash.default.find(result.parts, {
129
147
  'which': fetchOptions.bodies[1]
130
148
  });
149
+
131
150
  const id = result.attributes.uid;
132
151
  const idHeader = 'Imap-Id: ' + id + '\r\n';
133
152
  const simple = await simpleParser(idHeader + bodyPart.body);
134
153
  const attachments = [];
135
154
  const parts = imaps.getParts(result.attributes.struct);
155
+
136
156
  for (const part of parts) {
137
157
  if (part.disposition && part.disposition.type.toUpperCase() === 'ATTACHMENT') {
138
158
  const partData = await connection.getPartData(result, part);
@@ -142,9 +162,11 @@ module.exports = function () {
142
162
  });
143
163
  }
144
164
  }
165
+
145
166
  let body;
146
167
  let html;
147
168
  let textAsHtml;
169
+
148
170
  if (simple.html || simple.text || simple.textAsHtml) {
149
171
  // parsed success
150
172
  body = bodyPart.text;
@@ -154,6 +176,7 @@ module.exports = function () {
154
176
  // don't parsed
155
177
  body = bodyPart.body;
156
178
  }
179
+
157
180
  if (headerPart) {
158
181
  if (subject && (subject.constructor.name === 'RegExp' && subject.test(headerPart.body.subject[0]) || subject === headerPart.body.subject[0])) {
159
182
  let to = headerPart.body.to ? headerPart.body.to[0] : null;
@@ -174,13 +197,16 @@ module.exports = function () {
174
197
  err = e;
175
198
  }
176
199
  }
200
+
177
201
  if (err) {
178
202
  throw new _OxygenError.default(errHelper.errorCode.EMAIL_ERROR, err.toString());
179
203
  } else if (!mail) {
180
204
  throw new _OxygenError.default(errHelper.errorCode.TIMEOUT, "Couldn't get an email within " + timeout + ' ms.');
181
205
  }
206
+
182
207
  return mail;
183
208
  };
209
+
184
210
  return module;
185
211
  };
186
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlcnJIZWxwZXIiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiX2NvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidGxzT3B0aW9ucyIsInNlcnZlcm5hbWUiLCJnZXRMYXN0RW1haWwiLCJzaW5jZU1pbnV0ZXMiLCJzdWJqZWN0IiwidGltZW91dCIsIm1haWwiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImVyciIsImNvbm5lY3Rpb24iLCJjb25uZWN0Iiwib3BlbkJveCIsInN0YXJ0RGF0ZSIsInNldFRpbWUiLCJ0b0lTT1N0cmluZyIsInNlYXJjaENyaXRlcmlhIiwiZmV0Y2hPcHRpb25zIiwiYm9kaWVzIiwic3RydWN0IiwibWFya1NlZW4iLCJyZXN1bHRzIiwic2VhcmNoIiwicmVzdWx0IiwiaGVhZGVyUGFydCIsIl8iLCJmaW5kIiwicGFydHMiLCJib2R5UGFydCIsImlkIiwiYXR0cmlidXRlcyIsInVpZCIsImlkSGVhZGVyIiwic2ltcGxlIiwiYm9keSIsImF0dGFjaG1lbnRzIiwiZ2V0UGFydHMiLCJwYXJ0IiwiZGlzcG9zaXRpb24iLCJ0eXBlIiwidG9VcHBlckNhc2UiLCJwYXJ0RGF0YSIsImdldFBhcnREYXRhIiwicHVzaCIsImZpbGVuYW1lIiwicGFyYW1zIiwiZGF0YSIsImh0bWwiLCJ0ZXh0QXNIdG1sIiwidGV4dCIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJ0byIsImZyb20iLCJkYXRlIiwiZSIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBlbWFpbFxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIGVtYWlsIHZpYSBJTUFQLlxyXG4gKi9cclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgaW1hcHMgPSByZXF1aXJlKCdpbWFwLXNpbXBsZScpO1xyXG4gICAgY29uc3Qgc2ltcGxlUGFyc2VyID0gcmVxdWlyZSgnbWFpbHBhcnNlcicpLnNpbXBsZVBhcnNlcjtcclxuICAgIHZhciBfY29uZmlnO1xyXG5cclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9jb25maWcgIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXQgZW1haWwgY29ubmVjdGlvbiBkZXRhaWxzLlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyIC0gVXNlcm5hbWUgKGUuZy4gJ3lvdXJAZW1haWwuYWRkcmVzcycpLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhc3N3b3JkIC0gUGFzc3dvcmQuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdCAtIEhvc3QgbmFtZSAoZS5nLiAnaW1hcC5nbWFpbC5jb20nKS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBwb3J0IC0gUG9ydCBudW1iZXIgKGUuZy4gOTkzKS5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gdGxzIC0gdHJ1ZSB0byB1c2UgVExTLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gYXV0aFRpbWVvdXQgLSBBdXRoZW50aWNhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbj19IGVuYWJsZVNOSSAtIEVuYWJsZSBzZW5kaW5nIFNOSSB3aGVuIGVzdGFibGlzaGluZyB0aGUgY29ubmVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3Igc29tZSBtYWlsIHNlcnZlcnMuIERlZmF1bHQgaXMgZmFsc2UuIFxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKHVzZXIsIHBhc3N3b3JkLCBob3N0LCBwb3J0LCB0bHMsIGF1dGhUaW1lb3V0LCBlbmFibGVTTkkpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHVzZXIsICd1c2VyJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0LCAnaG9zdCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUocG9ydCwgJ3BvcnQnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wodGxzLCAndGxzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShhdXRoVGltZW91dCwgJ2F1dGhUaW1lb3V0Jyk7XHJcblxyXG4gICAgICAgIF9jb25maWcgPSB7XHJcbiAgICAgICAgICAgIGltYXA6IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXIsXHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICBob3N0OiBob3N0LFxyXG4gICAgICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgICAgIHRsczogdGxzLFxyXG4gICAgICAgICAgICAgICAgYXV0aFRpbWVvdXQ6IGF1dGhUaW1lb3V0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBzZXQgc2VydmVybmFtZSBpZiBTTkkgaXMgZW5hYmxlZCBvciB3ZSBhcmUgdXNpbmcgR21haWxcclxuICAgICAgICBpZiAoZW5hYmxlU05JIHx8IGhvc3QgPT09ICdpbWFwLmdtYWlsLmNvbScpIHtcclxuICAgICAgICAgICAgX2NvbmZpZy5pbWFwLnRsc09wdGlvbnMgPSB7IHNlcnZlcm5hbWU6IGhvc3QgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0cmlldmVzIGxhc3QgdW5zZWVuIGVtYWlsLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RFbWFpbFxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHNpbmNlTWludXRlcyAtIFNlYXJjaCBmb3IgZW1haWxzIHJlY2VpdmVkIHNpbmNlIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIG1pbnV0ZXMgaW50byBwYXN0LlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnZXh9IHN1YmplY3QgLSBSZXR1cm4gZW1haWwgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBzdWJqZWN0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IChpbiBtaWxsaXNlY29uZHMpIGZvciB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZSB0byBhcnJpdmUuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEVtYWlsIGJvZHksIHRleHQsIHRleHRBc0h0bWwsIGF0dGFjaG1lbnRzIGlmIGFueSwgYW5kIFRPLCBGUk9NLCBTVUJKRUNULCBEQVRFIGhlYWRlcnMuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIGVtYWlsLmluaXQoJ1tZT1VSX0VNQUlMXUBnbWFpbC5jb20nLCAncGFzc3dvcmQnLCAnaW1hcC5nbWFpbC5jb20nLCA5OTMsIHRydWUsIDMwMDApO1xyXG4gICAgICogdmFyIG1haWwgPSBlbWFpbC5nZXRMYXN0RW1haWwoNjAsICdlbWFpbCBzdWJqZWN0JywgNTAwMCk7XHJcbiAgICAgKiBsb2cuaW5mbyhtYWlsKTtcclxuICAgICAqIFxyXG4gICAgICogaWYoci5hdHRhY2htZW50cyAmJiByLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICogXHRjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgKiBcdHIuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50KSA9PiB7XHJcbiAgICAgKiBcdFx0bGV0IGZpbGVEZXNjcmlwdG9yO1xyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZpbGVEZXNjcmlwdG9yID0gZnMub3BlblN5bmMoYXR0YWNobWVudC5maWxlbmFtZSwgJ3cnKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdjb3VsZCBub3Qgb3BlbiBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0dHJ5e1xyXG4gICAgICogXHRcdFx0ZnMud3JpdGVGaWxlU3luYyhmaWxlRGVzY3JpcHRvciwgYXR0YWNobWVudC5kYXRhKTtcclxuICAgICAqIFx0XHR9IGNhdGNoKGUpIHtcclxuICAgICAqIFx0XHRcdHRocm93ICdlcnJvciB3cml0aW5nIGZpbGU6ICcgKyBlO1xyXG4gICAgICogXHRcdH1cclxuICAgICAqIFx0XHRcclxuICAgICAqIFx0XHRmcy5jbG9zZVN5bmMoZmlsZURlc2NyaXB0b3IpO1xyXG4gICAgICogXHR9KTtcclxuICAgICAqIH1cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldExhc3RFbWFpbCA9IGFzeW5jIGZ1bmN0aW9uKHNpbmNlTWludXRlcywgc3ViamVjdCwgdGltZW91dCkge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoc2luY2VNaW51dGVzLCAnc2luY2VNaW51dGVzJyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSh0aW1lb3V0LCAndGltZW91dCcpO1xyXG5cclxuICAgICAgICB2YXIgbWFpbDtcclxuICAgICAgICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuICAgICAgICB2YXIgZXJyO1xyXG5cclxuICAgICAgICB3aGlsZSAoIWVyciAmJiAhbWFpbCAmJiAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIG5vdykgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgaW1hcHMuY29ubmVjdChfY29uZmlnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ub3BlbkJveCgnSU5CT1gnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCB1bnNlZW4gZW1haWxzIGZyb20gdGhlIGxhc3Qgc2luY2VNaW51dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZS5zZXRUaW1lKERhdGUubm93KCkgLSAoc2luY2VNaW51dGVzICogNjAgKiAxMDAwKSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hDcml0ZXJpYSA9IFsnVU5TRUVOJywgWydTSU5DRScsIHN0YXJ0RGF0ZV1dO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGZldGNoIGNlcnRhaW4gaGVhZGVycyBhbmQgc3RyaXBwZWQgZG93biBib2R5XHJcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZGllczogWydIRUFERVIuRklFTERTIChGUk9NIFRPIFNVQkpFQ1QgREFURSknLCAnVEVYVCddLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cnVjdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtYXJrU2VlbjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNvbm5lY3Rpb24uc2VhcmNoKHNlYXJjaENyaXRlcmlhLCBmZXRjaE9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyUGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1swXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5UGFydCA9IF8uZmluZChyZXN1bHQucGFydHMsIHsgJ3doaWNoJzogZmV0Y2hPcHRpb25zLmJvZGllc1sxXSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSByZXN1bHQuYXR0cmlidXRlcy51aWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRIZWFkZXIgPSAnSW1hcC1JZDogJytpZCsnXFxyXFxuJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaW1wbGUgPSBhd2FpdCBzaW1wbGVQYXJzZXIoaWRIZWFkZXIrYm9keVBhcnQuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGltYXBzLmdldFBhcnRzKHJlc3VsdC5hdHRyaWJ1dGVzLnN0cnVjdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5kaXNwb3NpdGlvbiAmJiBwYXJ0LmRpc3Bvc2l0aW9uLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0FUVEFDSE1FTlQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0RGF0YSA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0UGFydERhdGEocmVzdWx0LCBwYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBwYXJ0LmRpc3Bvc2l0aW9uLnBhcmFtcy5maWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJ0RGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBodG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaW1wbGUuaHRtbCB8fCBzaW1wbGUudGV4dCB8fCBzaW1wbGUudGV4dEFzSHRtbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZWQgc3VjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQudGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHNpbXBsZS5odG1sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sID0gc2ltcGxlLnRleHRBc0h0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBib2R5UGFydC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlclBhcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdCAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgc3ViamVjdC50ZXN0KGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViamVjdCA9PT0gaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gaGVhZGVyUGFydC5ib2R5LnRvID8gaGVhZGVyUGFydC5ib2R5LnRvWzBdIDogbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGhlYWRlclBhcnQuYm9keS5mcm9tWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiB0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0OiBoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBoZWFkZXJQYXJ0LmJvZHkuZGF0ZVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QXNIdG1sOiB0ZXh0QXNIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IGh0bWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5FTUFJTF9FUlJPUiwgZXJyLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW1haWwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBcIkNvdWxkbid0IGdldCBhbiBlbWFpbCB3aXRoaW4gXCIgKyB0aW1lb3V0ICsgJyBtcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYWlsO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQWNBO0FBQ0E7QUFDQTtBQUF1QjtBQWhCdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFLQSxJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUUzQ0MsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBVztFQUN4QixJQUFJQyxLQUFLLEdBQUdILE9BQU8sQ0FBQyxhQUFhLENBQUM7RUFDbEMsTUFBTUksWUFBWSxHQUFHSixPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNJLFlBQVk7RUFDdkQsSUFBSUMsT0FBTztFQUVYSixNQUFNLENBQUNLLGFBQWEsR0FBRyxZQUFXO0lBQzlCLE9BQU9ELE9BQU8sS0FBS0UsU0FBUztFQUNoQyxDQUFDOztFQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSU4sTUFBTSxDQUFDTyxJQUFJLEdBQUcsVUFBU0MsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLFdBQVcsRUFBRUMsU0FBUyxFQUFFO0lBQzVFQyxjQUFLLENBQUNDLDRCQUE0QixDQUFDUixJQUFJLEVBQUUsTUFBTSxDQUFDO0lB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
212
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1lbWFpbC5qcyJdLCJuYW1lcyI6WyJlcnJIZWxwZXIiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImltYXBzIiwic2ltcGxlUGFyc2VyIiwiX2NvbmZpZyIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwidXNlciIsInBhc3N3b3JkIiwiaG9zdCIsInBvcnQiLCJ0bHMiLCJhdXRoVGltZW91dCIsImVuYWJsZVNOSSIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJpbWFwIiwidGxzT3B0aW9ucyIsInNlcnZlcm5hbWUiLCJnZXRMYXN0RW1haWwiLCJzaW5jZU1pbnV0ZXMiLCJzdWJqZWN0IiwidGltZW91dCIsIm1haWwiLCJub3ciLCJEYXRlIiwiZ2V0VGltZSIsImVyciIsImNvbm5lY3Rpb24iLCJjb25uZWN0Iiwib3BlbkJveCIsInN0YXJ0RGF0ZSIsInNldFRpbWUiLCJ0b0lTT1N0cmluZyIsInNlYXJjaENyaXRlcmlhIiwiZmV0Y2hPcHRpb25zIiwiYm9kaWVzIiwic3RydWN0IiwibWFya1NlZW4iLCJyZXN1bHRzIiwic2VhcmNoIiwicmVzdWx0IiwiaGVhZGVyUGFydCIsIl8iLCJmaW5kIiwicGFydHMiLCJib2R5UGFydCIsImlkIiwiYXR0cmlidXRlcyIsInVpZCIsImlkSGVhZGVyIiwic2ltcGxlIiwiYm9keSIsImF0dGFjaG1lbnRzIiwiZ2V0UGFydHMiLCJwYXJ0IiwiZGlzcG9zaXRpb24iLCJ0eXBlIiwidG9VcHBlckNhc2UiLCJwYXJ0RGF0YSIsImdldFBhcnREYXRhIiwicHVzaCIsImZpbGVuYW1lIiwicGFyYW1zIiwiZGF0YSIsImh0bWwiLCJ0ZXh0QXNIdG1sIiwidGV4dCIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJ0byIsImZyb20iLCJkYXRlIiwiZSIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJFTUFJTF9FUlJPUiIsInRvU3RyaW5nIiwiVElNRU9VVCJdLCJtYXBwaW5ncyI6Ijs7OztBQWNBOztBQUNBOztBQUNBOzs7O0FBaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQSxJQUFJQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF2Qjs7QUFFQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVc7QUFDeEIsTUFBSUMsS0FBSyxHQUFHSCxPQUFPLENBQUMsYUFBRCxDQUFuQjs7QUFDQSxRQUFNSSxZQUFZLEdBQUdKLE9BQU8sQ0FBQyxZQUFELENBQVAsQ0FBc0JJLFlBQTNDOztBQUNBLE1BQUlDLE9BQUo7O0FBRUFKLEVBQUFBLE1BQU0sQ0FBQ0ssYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU9ELE9BQU8sS0FBS0UsU0FBbkI7QUFDSCxHQUZEO0FBSUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lOLEVBQUFBLE1BQU0sQ0FBQ08sSUFBUCxHQUFjLFVBQVNDLElBQVQsRUFBZUMsUUFBZixFQUF5QkMsSUFBekIsRUFBK0JDLElBQS9CLEVBQXFDQyxHQUFyQyxFQUEwQ0MsV0FBMUMsRUFBdURDLFNBQXZELEVBQWtFO0FBQzVFQyxtQkFBTUMsNEJBQU4sQ0FBbUNSLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBTyxtQkFBTUMsNEJBQU4sQ0FBbUNQLFFBQW5DLEVBQTZDLFVBQTdDOztBQUNBTSxtQkFBTUMsNEJBQU4sQ0FBbUNOLElBQW5DLEVBQXlDLE1BQXpDOztBQUNBSyxtQkFBTUUsK0JBQU4sQ0FBc0NOLElBQXRDLEVBQTRDLE1BQTVDOztBQUNBSSxtQkFBTUcsa0JBQU4sQ0FBeUJOLEdBQXpCLEVBQThCLEtBQTlCOztBQUNBRyxtQkFBTUUsK0JBQU4sQ0FBc0NKLFdBQXRDLEVBQW1ELGFBQW5EOztB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QUFTO0FBQ0wsWUFBTSxJQUFJZ0Qsb0JBQUosQ0FBWWhGLFNBQVMsQ0FBQ2lGLFNBQVYsQ0FBb0JDLFdBQWhDLEVBQTZDbEQsR0FBRyxDQUFDbUQsUUFBSixFQUE3QyxDQUFOO0FBQ0gsS0FGRCxNQUVPLElBQUksQ0FBQ3ZELElBQUwsRUFBVztBQUNkLFlBQU0sSUFBSW9ELG9CQUFKLENBQVloRixTQUFTLENBQUNpRixTQUFWLENBQW9CRyxPQUFoQyxFQUF5QyxrQ0FBa0N6RCxPQUFsQyxHQUE0QyxNQUFyRixDQUFOO0FBQ0g7O0FBRUQsV0FBT0MsSUFBUDtBQUNILEdBL0ZEOztBQWlHQSxTQUFPMUIsTUFBUDtBQUNILENBL0tEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgZW1haWxcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCBlbWFpbCB2aWEgSU1BUC5cclxuICovXHJcblxyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGltYXBzID0gcmVxdWlyZSgnaW1hcC1zaW1wbGUnKTtcclxuICAgIGNvbnN0IHNpbXBsZVBhcnNlciA9IHJlcXVpcmUoJ21haWxwYXJzZXInKS5zaW1wbGVQYXJzZXI7XHJcbiAgICB2YXIgX2NvbmZpZztcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBfY29uZmlnICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0IGVtYWlsIGNvbm5lY3Rpb24gZGV0YWlscy5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lIChlLmcuICd5b3VyQGVtYWlsLmFkZHJlc3MnKS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZCAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3QgLSBIb3N0IG5hbWUgKGUuZy4gJ2ltYXAuZ21haWwuY29tJykuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gcG9ydCAtIFBvcnQgbnVtYmVyIChlLmcuIDk5MykuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHRscyAtIHRydWUgdG8gdXNlIFRMUywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGF1dGhUaW1lb3V0IC0gQXV0aGVudGljYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW49fSBlbmFibGVTTkkgLSBFbmFibGUgc2VuZGluZyBTTkkgd2hlbiBlc3RhYmxpc2hpbmcgdGhlIGNvbm5lY3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNvbWUgbWFpbCBzZXJ2ZXJzLiBEZWZhdWx0IGlzIGZhbHNlLiBcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbih1c2VyLCBwYXNzd29yZCwgaG9zdCwgcG9ydCwgdGxzLCBhdXRoVGltZW91dCwgZW5hYmxlU05JKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh1c2VyLCAndXNlcicpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcocGFzc3dvcmQsICdwYXNzd29yZCcpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdCwgJ2hvc3QnKTtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHBvcnQsICdwb3J0Jyk7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sKHRscywgJ3RscycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUoYXV0aFRpbWVvdXQsICdhdXRoVGltZW91dCcpO1xyXG5cclxuICAgICAgICBfY29uZmlnID0ge1xyXG4gICAgICAgICAgICBpbWFwOiB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgaG9zdDogaG9zdCxcclxuICAgICAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgICAgICB0bHM6IHRscyxcclxuICAgICAgICAgICAgICAgIGF1dGhUaW1lb3V0OiBhdXRoVGltZW91dFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHNlcnZlcm5hbWUgaWYgU05JIGlzIGVuYWJsZWQgb3Igd2UgYXJlIHVzaW5nIEdtYWlsXHJcbiAgICAgICAgaWYgKGVuYWJsZVNOSSB8fCBob3N0ID09PSAnaW1hcC5nbWFpbC5jb20nKSB7XHJcbiAgICAgICAgICAgIF9jb25maWcuaW1hcC50bHNPcHRpb25zID0geyBzZXJ2ZXJuYW1lOiBob3N0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBsYXN0IHVuc2VlbiBlbWFpbC5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0RW1haWxcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBzaW5jZU1pbnV0ZXMgLSBTZWFyY2ggZm9yIGVtYWlscyByZWNlaXZlZCBzaW5jZSB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBtaW51dGVzIGludG8gcGFzdC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ2V4fSBzdWJqZWN0IC0gUmV0dXJuIGVtYWlsIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgc3ViamVjdC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IC0gVGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBFbWFpbCBib2R5LCB0ZXh0LCB0ZXh0QXNIdG1sLCBhdHRhY2htZW50cyBpZiBhbnksIGFuZCBUTywgRlJPTSwgU1VCSkVDVCwgREFURSBoZWFkZXJzLlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiBlbWFpbC5pbml0KCdbWU9VUl9FTUFJTF1AZ21haWwuY29tJywgJ3Bhc3N3b3JkJywgJ2ltYXAuZ21haWwuY29tJywgOTkzLCB0cnVlLCAzMDAwKTtcclxuICAgICAqIHZhciBtYWlsID0gZW1haWwuZ2V0TGFzdEVtYWlsKDYwLCAnZW1haWwgc3ViamVjdCcsIDUwMDApO1xyXG4gICAgICogbG9nLmluZm8obWFpbCk7XHJcbiAgICAgKiBcclxuICAgICAqIGlmKHIuYXR0YWNobWVudHMgJiYgci5hdHRhY2htZW50cy5sZW5ndGggPiAwKXtcclxuICAgICAqIFx0Y29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICogXHRyLmF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICogXHRcdGxldCBmaWxlRGVzY3JpcHRvcjtcclxuICAgICAqIFx0XHR0cnl7XHJcbiAgICAgKiBcdFx0XHRmaWxlRGVzY3JpcHRvciA9IGZzLm9wZW5TeW5jKGF0dGFjaG1lbnQuZmlsZW5hbWUsICd3Jyk7XHJcbiAgICAgKiBcdFx0fSBjYXRjaChlKSB7XHJcbiAgICAgKiBcdFx0XHR0aHJvdyAnY291bGQgbm90IG9wZW4gZmlsZTogJyArIGU7XHJcbiAgICAgKiBcdFx0fVxyXG4gICAgICogXHRcdFxyXG4gICAgICogXHRcdHRyeXtcclxuICAgICAqIFx0XHRcdGZzLndyaXRlRmlsZVN5bmMoZmlsZURlc2NyaXB0b3IsIGF0dGFjaG1lbnQuZGF0YSk7XHJcbiAgICAgKiBcdFx0fSBjYXRjaChlKSB7XHJcbiAgICAgKiBcdFx0XHR0aHJvdyAnZXJyb3Igd3JpdGluZyBmaWxlOiAnICsgZTtcclxuICAgICAqIFx0XHR9XHJcbiAgICAgKiBcdFx0XHJcbiAgICAgKiBcdFx0ZnMuY2xvc2VTeW5jKGZpbGVEZXNjcmlwdG9yKTtcclxuICAgICAqIFx0fSk7XHJcbiAgICAgKiB9XHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0RW1haWwgPSBhc3luYyBmdW5jdGlvbihzaW5jZU1pbnV0ZXMsIHN1YmplY3QsIHRpbWVvdXQpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKHNpbmNlTWludXRlcywgJ3NpbmNlTWludXRlcycpO1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuXHJcbiAgICAgICAgdmFyIG1haWw7XHJcbiAgICAgICAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdmFyIGVycjtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFlcnIgJiYgIW1haWwgJiYgKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBub3cpIDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGltYXBzLmNvbm5lY3QoX2NvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLm9wZW5Cb3goJ0lOQk9YJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2ggdW5zZWVuIGVtYWlscyBmcm9tIHRoZSBsYXN0IHNpbmNlTWludXRlc1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0VGltZShEYXRlLm5vdygpIC0gKHNpbmNlTWludXRlcyAqIDYwICogMTAwMCkpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoQ3JpdGVyaWEgPSBbJ1VOU0VFTicsIFsnU0lOQ0UnLCBzdGFydERhdGVdXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBmZXRjaCBjZXJ0YWluIGhlYWRlcnMgYW5kIHN0cmlwcGVkIGRvd24gYm9keVxyXG4gICAgICAgICAgICAgICAgdmFyIGZldGNoT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBib2RpZXM6IFsnSEVBREVSLkZJRUxEUyAoRlJPTSBUTyBTVUJKRUNUIERBVEUpJywgJ1RFWFQnXSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFya1NlZW46IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjb25uZWN0aW9uLnNlYXJjaChzZWFyY2hDcml0ZXJpYSwgZmV0Y2hPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciByZXN1bHQgb2YgcmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlclBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMF0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keVBhcnQgPSBfLmZpbmQocmVzdWx0LnBhcnRzLCB7ICd3aGljaCc6IGZldGNoT3B0aW9ucy5ib2RpZXNbMV0gfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0LmF0dHJpYnV0ZXMudWlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkSGVhZGVyID0gJ0ltYXAtSWQ6ICcraWQrJ1xcclxcbic7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2ltcGxlID0gYXdhaXQgc2ltcGxlUGFyc2VyKGlkSGVhZGVyK2JvZHlQYXJ0LmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpbWFwcy5nZXRQYXJ0cyhyZXN1bHQuYXR0cmlidXRlcy5zdHJ1Y3QpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQuZGlzcG9zaXRpb24gJiYgcGFydC5kaXNwb3NpdGlvbi50eXBlLnRvVXBwZXJDYXNlKCkgPT09ICdBVFRBQ0hNRU5UJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFydERhdGEgPSBhd2FpdCBjb25uZWN0aW9uLmdldFBhcnREYXRhKHJlc3VsdCwgcGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogcGFydC5kaXNwb3NpdGlvbi5wYXJhbXMuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFydERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dEFzSHRtbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlLmh0bWwgfHwgc2ltcGxlLnRleHQgfHwgc2ltcGxlLnRleHRBc0h0bWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VkIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHlQYXJ0LnRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBzaW1wbGUuaHRtbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbCA9IHNpbXBsZS50ZXh0QXNIdG1sO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keVBhcnQuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJqZWN0LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHN1YmplY3QudGVzdChoZWFkZXJQYXJ0LmJvZHkuc3ViamVjdFswXSkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YmplY3QgPT09IGhlYWRlclBhcnQuYm9keS5zdWJqZWN0WzBdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0byA9IGhlYWRlclBhcnQuYm9keS50byA/IGhlYWRlclBhcnQuYm9keS50b1swXSA6IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBoZWFkZXJQYXJ0LmJvZHkuZnJvbVswXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogaGVhZGVyUGFydC5ib2R5LnN1YmplY3RbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogaGVhZGVyUGFydC5ib2R5LmRhdGVbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFzSHRtbDogdGV4dEFzSHRtbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBodG1sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIgPSBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuRU1BSUxfRVJST1IsIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFtYWlsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgXCJDb3VsZG4ndCBnZXQgYW4gZW1haWwgd2l0aGluIFwiICsgdGltZW91dCArICcgbXMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWFpbDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
@@ -4,12 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  require("source-map-support/register");
9
+
8
10
  var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
11
+
9
12
  var _ModuleError = _interopRequireDefault(require("../errors/ModuleError"));
13
+
10
14
  var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
15
+
11
16
  var _helper = _interopRequireDefault(require("../errors/helper"));
17
+
12
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
13
20
  /*
14
21
  * Copyright (C) 2015-present CloudBeat Limited
15
22
  *
@@ -23,18 +30,19 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
23
30
  * @name eyes
24
31
  * @description Provides access to Applitools Eyes service.
25
32
  */
26
-
27
33
  const DEFAULT_VIEWPORT = {
28
34
  width: 1440,
29
35
  height: 900
30
36
  };
31
37
  const MODULE_NAME = 'eyes';
38
+
32
39
  class ApplitoolsModule extends _OxygenModule.default {
33
40
  constructor(options, context, rs, logger, modules, services) {
34
- super(options, context, rs, logger, modules, services);
35
- // this module doesn't require calling init() method
41
+ super(options, context, rs, logger, modules, services); // this module doesn't require calling init() method
42
+
36
43
  this._eyes = null;
37
44
  }
45
+
38
46
  get name() {
39
47
  return MODULE_NAME;
40
48
  }
@@ -45,16 +53,22 @@ class ApplitoolsModule extends _OxygenModule.default {
45
53
  * @param {apiKey} [apiKey] - An optional Applitools API Key.
46
54
  * If this parameter is not provided, API Key must be specified in the test configuration file.
47
55
  */
56
+
57
+
48
58
  async init(module, apiKey = null) {
49
59
  this._eyesConfig = this.options.applitoolsOpts || {};
60
+
50
61
  if (!this.options.applitoolsOpts && !apiKey) {
51
62
  throw new _ModuleError.default('Applitools settings are missing.');
52
63
  }
64
+
53
65
  this._viewport = Object.assign(DEFAULT_VIEWPORT, this._eyesConfig.viewport || {});
54
66
  this._apiKey = apiKey || this.options.applitoolsKey || this._eyesConfig.key || process.env.APPLITOOLS_KEY || null;
67
+
55
68
  if (!this._apiKey) {
56
69
  throw new _ModuleError.default('API key is missing. To use Applitools service, you must specify Applitools API key.');
57
70
  }
71
+
58
72
  if (typeof module === 'string') {
59
73
  if (Object.prototype.hasOwnProperty.call(this.modules, module)) {
60
74
  module = this.modules[module];
@@ -62,27 +76,37 @@ class ApplitoolsModule extends _OxygenModule.default {
62
76
  throw new _ModuleError.default(`Module not found: ${module}.`);
63
77
  }
64
78
  }
79
+
65
80
  if (typeof module.getDriver !== 'function') {
66
81
  throw new _ModuleError.default(`The module "${module.name}" does not have "getDriver" function implemented.`);
67
82
  }
83
+
68
84
  const driver = module.getDriver();
69
85
  this._driver = driver;
86
+
70
87
  const Eyes = require('@applitools/eyes-webdriverio').Eyes;
88
+
71
89
  this._eyes = new Eyes();
90
+
72
91
  this._eyes.setApiKey(this._apiKey);
92
+
73
93
  let appName = 'Oxygen App';
74
94
  let testName = 'Oxygen Test';
95
+
75
96
  if (this.options.appName && typeof this.options.appName === 'string') {
76
97
  appName = this.options.appName;
77
98
  }
99
+
78
100
  if (this.options.name && typeof this.options.name === 'string') {
79
101
  testName = this.options.name;
80
102
  }
103
+
81
104
  try {
82
105
  await driver.call(() => this._eyes.open(driver, appName, testName, this._viewport));
83
106
  } catch (e) {
84
107
  throw new _ModuleError.default(`Failed to initialize "eyes" module: ${e.message}`);
85
108
  }
109
+
86
110
  super.init();
87
111
  }
88
112
  /**
@@ -90,16 +114,21 @@ class ApplitoolsModule extends _OxygenModule.default {
90
114
  * @function dispose
91
115
  * @return {TestResult} Eyes test result.
92
116
  */
117
+
118
+
93
119
  async dispose() {
94
120
  if (!this.isInitialized || !this._eyes) {
95
121
  return;
96
122
  }
123
+
97
124
  let results = null;
125
+
98
126
  try {
99
127
  results = this._eyes.close(false);
100
128
  } finally {
101
129
  this._eyes.abortIfNotClosed();
102
130
  }
131
+
103
132
  this._eyes = null;
104
133
  super.dispose();
105
134
  return results;
@@ -111,18 +140,23 @@ class ApplitoolsModule extends _OxygenModule.default {
111
140
  * @param {Target} [target] - An optional target instance which describes whether we want a window/region/frame.
112
141
  * @return {boolean} A promise which is resolved when the validation is finished.
113
142
  */
143
+
144
+
114
145
  async check(name, target = null) {
115
146
  if (!this._eyes) {
116
147
  return false;
117
148
  }
149
+
118
150
  const Target = require('@applitools/eyes-webdriverio').Target;
151
+
119
152
  const result = await this._eyes.check(name, target || Target.window().fully());
153
+
120
154
  if (result._asExpected) {
121
155
  return true;
122
156
  }
157
+
123
158
  throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, null);
124
159
  }
125
-
126
160
  /**
127
161
  * @summary Takes a snapshot of the application under test and matches it with
128
162
  * the expected output.
@@ -131,18 +165,25 @@ class ApplitoolsModule extends _OxygenModule.default {
131
165
  * @param {number} [matchTimeout=-1] - The amount of time to retry matching (Milliseconds).
132
166
  * @return {boolean} A promise which is resolved when the validation is finished.
133
167
  */
168
+
169
+
134
170
  async checkWindow(name, matchTimeout) {
135
171
  if (!this._eyes) {
136
172
  return false;
137
173
  }
174
+
138
175
  const result = await this._driver.call(async () => {
139
176
  return await this._eyes.checkWindow(name, matchTimeout);
140
177
  });
178
+
141
179
  if (result && result.asExpected) {
142
180
  return true;
143
181
  }
182
+
144
183
  throw new _OxygenError.default(_helper.default.errorCode.ASSERT_ERROR, null);
145
184
  }
185
+
146
186
  }
187
+
147
188
  exports.default = ApplitoolsModule;
148
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1ZJRVdQT1JUIiwid2lkdGgiLCJoZWlnaHQiLCJNT0RVTEVfTkFNRSIsIkFwcGxpdG9vbHNNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfZXllcyIsIm5hbWUiLCJpbml0IiwibW9kdWxlIiwiYXBpS2V5IiwiX2V5ZXNDb25maWciLCJhcHBsaXRvb2xzT3B0cyIsIk1vZHVsZUVycm9yIiwiX3ZpZXdwb3J0IiwiT2JqZWN0IiwiYXNzaWduIiwidmlld3BvcnQiLCJfYXBpS2V5IiwiYXBwbGl0b29sc0tleSIsImtleSIsInByb2Nlc3MiLCJlbnYiLCJBUFBMSVRPT0xTX0tFWSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImdldERyaXZlciIsImRyaXZlciIsIl9kcml2ZXIiLCJFeWVzIiwicmVxdWlyZSIsInNldEFwaUtleSIsImFwcE5hbWUiLCJ0ZXN0TmFtZSIsIm9wZW4iLCJlIiwibWVzc2FnZSIsImRpc3Bvc2UiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0cyIsImNsb3NlIiwiYWJvcnRJZk5vdENsb3NlZCIsImNoZWNrIiwidGFyZ2V0IiwiVGFyZ2V0IiwicmVzdWx0Iiwid2luZG93IiwiZnVsbHkiLCJfYXNFeHBlY3RlZCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJBU1NFUlRfRVJST1IiLCJjaGVja1dpbmRvdyIsIm1hdGNoVGltZW91dCIsImFzRXhwZWN0ZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtZXllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBleWVzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhY2Nlc3MgdG8gQXBwbGl0b29scyBFeWVzIHNlcnZpY2UuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCBNb2R1bGVFcnJvciBmcm9tICcuLi9lcnJvcnMvTW9kdWxlRXJyb3InO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5cclxuY29uc3QgREVGQVVMVF9WSUVXUE9SVCA9IHtcclxuICAgIHdpZHRoOiAxNDQwLFxyXG4gICAgaGVpZ2h0OiA5MDBcclxufTtcclxuY29uc3QgTU9EVUxFX05BTUUgPSAnZXllcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaXRvb2xzTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIC8vIHRoaXMgbW9kdWxlIGRvZXNuJ3QgcmVxdWlyZSBjYWxsaW5nIGluaXQoKSBtZXRob2RcclxuICAgICAgICB0aGlzLl9leWVzID0gbnVsbDtcclxuICAgIH1cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgQXBwbGl0b29scyBFeWVzIHNlc3Npb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBtb2R1bGUgLSBBIG1vZHVsZSBuYW1lIG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RvZHVsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggRXllcyBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge2FwaUtleX0gW2FwaUtleV0gLSBBbiBvcHRpb25hbCBBcHBsaXRvb2xzIEFQSSBLZXkuIFxyXG4gICAgICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByb3ZpZGVkLCBBUEkgS2V5IG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSB0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChtb2R1bGUsIGFwaUtleSA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9leWVzQ29uZmlnID0gdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNPcHRzIHx8IHt9O1xyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNPcHRzICYmICFhcGlLZXkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKCdBcHBsaXRvb2xzIHNldHRpbmdzIGFyZSBtaXNzaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl92aWV3cG9ydCA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9WSUVXUE9SVCwgdGhpcy5fZXllc0NvbmZpZy52aWV3cG9ydCB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5fYXBpS2V5ID0gYXBpS2V5IHx8IHRoaXMub3B0aW9ucy5hcHBsaXRvb2xzS2V5IHx8IHRoaXMuX2V5ZXNDb25maWcua2V5IHx8IHByb2Nlc3MuZW52LkFQUExJVE9PTFNfS0VZIHx8IG51bGw7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fYXBpS2V5KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcignQVBJIGtleSBpcyBtaXNzaW5nLiBUbyB1c2UgQXBwbGl0b29scyBzZXJ2aWNlLCB5b3UgbXVzdCBzcGVjaWZ5IEFwcGxpdG9vbHMgQVBJIGtleS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5tb2R1bGVzLCBtb2R1bGUpKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcihgTW9kdWxlIG5vdCBmb3VuZDogJHttb2R1bGV9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoYFRoZSBtb2R1bGUgXCIke21vZHVsZS5uYW1lfVwiIGRvZXMgbm90IGhhdmUgXCJnZXREcml2ZXJcIiBmdW5jdGlvbiBpbXBsZW1lbnRlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZHJpdmVyID0gbW9kdWxlLmdldERyaXZlcigpO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IGRyaXZlcjtcclxuXHJcbiAgICAgICAgY29uc3QgRXllcyA9IHJlcXVpcmUoJ0BhcHBsaXRvb2xzL2V5ZXMtd2ViZHJpdmVyaW8nKS5FeWVzO1xyXG4gICAgICAgIHRoaXMuX2V5ZXMgPSBuZXcgRXllcygpO1xyXG4gICAgICAgIHRoaXMuX2V5ZXMuc2V0QXBpS2V5KHRoaXMuX2FwaUtleSk7XHJcblxyXG4gICAgICAgIGxldCBhcHBOYW1lID0gJ094eWdlbiBBcHAnO1xyXG4gICAgICAgIGxldCB0ZXN0TmFtZSA9ICdPeHlnZW4gVGVzdCc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwTmFtZSAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLmFwcE5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGFwcE5hbWUgPSB0aGlzLm9wdGlvbnMuYXBwTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5uYW1lICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMubmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGVzdE5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgZHJpdmVyLmNhbGwoKCkgPT4gdGhpcy5fZXllcy5vcGVuKGRyaXZlciwgYXBwTmFtZSwgdGVzdE5hbWUsIHRoaXMuX3ZpZXdwb3J0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcihgRmFpbGVkIHRvIGluaXRpYWxpemUgXCJleWVzXCIgbW9kdWxlOiAke2UubWVzc2FnZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBDbG9zZXMgQXBwbGl0b29scyBFeWVzIHNlc3Npb24sIHRlcm1pbmF0ZXMgdGhlIHNlcXVlbmNlIG9mIGNoZWNrcG9pbnRzLCBhbmQgdGhlbiB3YWl0cyBmb3IgYW5kIHJldHVybnMgdGhlIHRlc3QgcmVzdWx0cy5cclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAcmV0dXJuIHtUZXN0UmVzdWx0fSBFeWVzIHRlc3QgcmVzdWx0LlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9leWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXN1bHRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzdWx0cyA9IHRoaXMuX2V5ZXMuY2xvc2UoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5fZXllcy5hYm9ydElmTm90Q2xvc2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2V5ZXMgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFByZWZvcm0gdmlzdWFsIHZhbGlkYXRpb24gZm9yIGEgY2VydGFpbiB0YXJnZXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gY2hlY2tcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQSBuYW1lIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWF0Y2guXHJcbiAgICAgKiBAcGFyYW0ge1RhcmdldH0gW3RhcmdldF0gLSBBbiBvcHRpb25hbCB0YXJnZXQgaW5zdGFuY2Ugd2hpY2ggZGVzY3JpYmVzIHdoZXRoZXIgd2Ugd2FudCBhIHdpbmRvdy9yZWdpb24vZnJhbWUuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY2hlY2sobmFtZSwgdGFyZ2V0ID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZXllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IFRhcmdldCA9IHJlcXVpcmUoJ0BhcHBsaXRvb2xzL2V5ZXMtd2ViZHJpdmVyaW8nKS5UYXJnZXQ7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gIGF3YWl0IHRoaXMuX2V5ZXMuY2hlY2sobmFtZSwgdGFyZ2V0IHx8IFRhcmdldC53aW5kb3coKS5mdWxseSgpKTtcclxuICAgICAgICBpZiAocmVzdWx0Ll9hc0V4cGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9FUlJPUiwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBUYWtlcyBhIHNuYXBzaG90IG9mIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0IGFuZCBtYXRjaGVzIGl0IHdpdGhcclxuICAgICAqIHRoZSBleHBlY3RlZCBvdXRwdXQuXHJcbiAgICAgKiBAZnVuY3Rpb24gY2hlY2tXaW5kb3dcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1dIC0gQW4gb3B0aW9uYWwgdGFnIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc25hcHNob3QuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW21hdGNoVGltZW91dD0tMV0gLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gcmV0cnkgbWF0Y2hpbmcgKE1pbGxpc2Vjb25kcykuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIHByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY2hlY2tXaW5kb3cobmFtZSwgbWF0Y2hUaW1lb3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9leWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2RyaXZlci5jYWxsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXllcy5jaGVja1dpbmRvdyhuYW1lLCBtYXRjaFRpbWVvdXQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmFzRXhwZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBudWxsKTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUF5QztBQWpCekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFPQSxNQUFNQSxnQkFBZ0IsR0FBRztFQUNyQkMsS0FBSyxFQUFFLElBQUk7RUFDWEMsTUFBTSxFQUFFO0FBQ1osQ0FBQztBQUNELE1BQU1DLFdBQVcsR0FBRyxNQUFNO0FBRVgsTUFBTUMsZ0JBQWdCLFNBQVNDLHFCQUFZLENBQUM7RUFDdkRDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRTtJQUN6RCxLQUFLLENBQUNMLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxRQUFRLENBQUM7SUFDdEQ7SUFDQSxJQUFJLENBQUNDLEtBQUssR0FBRyxJQUFJO0VBQ3JCO0VBQ0Es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
189
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1leWVzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfVklFV1BPUlQiLCJ3aWR0aCIsImhlaWdodCIsIk1PRFVMRV9OQU1FIiwiQXBwbGl0b29sc01vZHVsZSIsIk94eWdlbk1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsIl9leWVzIiwibmFtZSIsImluaXQiLCJtb2R1bGUiLCJhcGlLZXkiLCJfZXllc0NvbmZpZyIsImFwcGxpdG9vbHNPcHRzIiwiTW9kdWxlRXJyb3IiLCJfdmlld3BvcnQiLCJPYmplY3QiLCJhc3NpZ24iLCJ2aWV3cG9ydCIsIl9hcGlLZXkiLCJhcHBsaXRvb2xzS2V5Iiwia2V5IiwicHJvY2VzcyIsImVudiIsIkFQUExJVE9PTFNfS0VZIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0RHJpdmVyIiwiZHJpdmVyIiwiX2RyaXZlciIsIkV5ZXMiLCJyZXF1aXJlIiwic2V0QXBpS2V5IiwiYXBwTmFtZSIsInRlc3ROYW1lIiwib3BlbiIsImUiLCJtZXNzYWdlIiwiZGlzcG9zZSIsImlzSW5pdGlhbGl6ZWQiLCJyZXN1bHRzIiwiY2xvc2UiLCJhYm9ydElmTm90Q2xvc2VkIiwiY2hlY2siLCJ0YXJnZXQiLCJUYXJnZXQiLCJyZXN1bHQiLCJ3aW5kb3ciLCJmdWxseSIsIl9hc0V4cGVjdGVkIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIkFTU0VSVF9FUlJPUiIsImNoZWNrV2luZG93IiwibWF0Y2hUaW1lb3V0IiwiYXNFeHBlY3RlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBY0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU9BLE1BQU1BLGdCQUFn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LENBQXdDYyxNQUF2RDs7QUFDQSxVQUFNQyxNQUFNLEdBQUksTUFBTSxLQUFLeEMsS0FBTCxDQUFXcUMsS0FBWCxDQUFpQnBDLElBQWpCLEVBQXVCcUMsTUFBTSxJQUFJQyxNQUFNLENBQUNFLE1BQVAsR0FBZ0JDLEtBQWhCLEVBQWpDLENBQXRCOztBQUNBLFFBQUlGLE1BQU0sQ0FBQ0csV0FBWCxFQUF3QjtBQUNwQixhQUFPLElBQVA7QUFDSDs7QUFDRCxVQUFNLElBQUlDLG9CQUFKLENBQVlDLGdCQUFVQyxTQUFWLENBQW9CQyxZQUFoQyxFQUE4QyxJQUE5QyxDQUFOO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDcUIsUUFBWEMsV0FBVyxDQUFDL0MsSUFBRCxFQUFPZ0QsWUFBUCxFQUFxQjtBQUNsQyxRQUFJLENBQUMsS0FBS2pELEtBQVYsRUFBaUI7QUFDYixhQUFPLEtBQVA7QUFDSDs7QUFFRCxVQUFNd0MsTUFBTSxHQUFHLE1BQU0sS0FBS2pCLE9BQUwsQ0FBYUgsSUFBYixDQUFrQixZQUFXO0FBQzlDLGFBQU8sTUFBTSxLQUFLcEIsS0FBTCxDQUFXZ0QsV0FBWCxDQUF1Qi9DLElBQXZCLEVBQTZCZ0QsWUFBN0IsQ0FBYjtBQUNILEtBRm9CLENBQXJCOztBQUdBLFFBQUlULE1BQU0sSUFBSUEsTUFBTSxDQUFDVSxVQUFyQixFQUFpQztBQUM3QixhQUFPLElBQVA7QUFDSDs7QUFDRCxVQUFNLElBQUlOLG9CQUFKLENBQVlDLGdCQUFVQyxTQUFWLENBQW9CQyxZQUFoQyxFQUE4QyxJQUE5QyxDQUFOO0FBQ0g7O0FBNUhzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGV5ZXNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGFjY2VzcyB0byBBcHBsaXRvb2xzIEV5ZXMgc2VydmljZS5cclxuICovXHJcblxyXG5pbXBvcnQgT3h5Z2VuTW9kdWxlIGZyb20gJy4uL2NvcmUvT3h5Z2VuTW9kdWxlJztcclxuaW1wb3J0IE1vZHVsZUVycm9yIGZyb20gJy4uL2Vycm9ycy9Nb2R1bGVFcnJvcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBERUZBVUxUX1ZJRVdQT1JUID0ge1xyXG4gICAgd2lkdGg6IDE0NDAsXHJcbiAgICBoZWlnaHQ6IDkwMFxyXG59O1xyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdleWVzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpdG9vbHNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgLy8gdGhpcyBtb2R1bGUgZG9lc24ndCByZXF1aXJlIGNhbGxpbmcgaW5pdCgpIG1ldGhvZFxyXG4gICAgICAgIHRoaXMuX2V5ZXMgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBBcHBsaXRvb2xzIEV5ZXMgc2Vzc2lvbi5cclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG1vZHVsZSAtIEEgbW9kdWxlIG5hbWUgb3IgYSByZWZlcmVuY2UgdG8gdGhlIG1vZG9kdWxlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBFeWVzIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7YXBpS2V5fSBbYXBpS2V5XSAtIEFuIG9wdGlvbmFsIEFwcGxpdG9vbHMgQVBJIEtleS4gXHJcbiAgICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3QgcHJvdmlkZWQsIEFQSSBLZXkgbXVzdCBiZSBzcGVjaWZpZWQgaW4gdGhlIHRlc3QgY29uZmlndXJhdGlvbiBmaWxlLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KG1vZHVsZSwgYXBpS2V5ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX2V5ZXNDb25maWcgPSB0aGlzLm9wdGlvbnMuYXBwbGl0b29sc09wdHMgfHwge307XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYXBwbGl0b29sc09wdHMgJiYgIWFwaUtleSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9kdWxlRXJyb3IoJ0FwcGxpdG9vbHMgc2V0dGluZ3MgYXJlIG1pc3NpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1ZJRVdQT1JULCB0aGlzLl9leWVzQ29uZmlnLnZpZXdwb3J0IHx8IHt9KTtcclxuICAgICAgICB0aGlzLl9hcGlLZXkgPSBhcGlLZXkgfHwgdGhpcy5vcHRpb25zLmFwcGxpdG9vbHNLZXkgfHwgdGhpcy5fZXllc0NvbmZpZy5rZXkgfHwgcHJvY2Vzcy5lbnYuQVBQTElUT09MU19LRVkgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9hcGlLZXkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKCdBUEkga2V5IGlzIG1pc3NpbmcuIFRvIHVzZSBBcHBsaXRvb2xzIHNlcnZpY2UsIHlvdSBtdXN0IHNwZWNpZnkgQXBwbGl0b29scyBBUEkga2V5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLm1vZHVsZXMsIG1vZHVsZSkpIHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKGBNb2R1bGUgbm90IGZvdW5kOiAke21vZHVsZX0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuZ2V0RHJpdmVyICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2R1bGVFcnJvcihgVGhlIG1vZHVsZSBcIiR7bW9kdWxlLm5hbWV9XCIgZG9lcyBub3QgaGF2ZSBcImdldERyaXZlclwiIGZ1bmN0aW9uIGltcGxlbWVudGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkcml2ZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XHJcbiAgICAgICAgdGhpcy5fZHJpdmVyID0gZHJpdmVyO1xyXG5cclxuICAgICAgICBjb25zdCBFeWVzID0gcmVxdWlyZSgnQGFwcGxpdG9vbHMvZXllcy13ZWJkcml2ZXJpbycpLkV5ZXM7XHJcbiAgICAgICAgdGhpcy5fZXllcyA9IG5ldyBFeWVzKCk7XHJcbiAgICAgICAgdGhpcy5fZXllcy5zZXRBcGlLZXkodGhpcy5fYXBpS2V5KTtcclxuXHJcbiAgICAgICAgbGV0IGFwcE5hbWUgPSAnT3h5Z2VuIEFwcCc7XHJcbiAgICAgICAgbGV0IHRlc3ROYW1lID0gJ094eWdlbiBUZXN0JztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcHBOYW1lICYmIHR5cGVvZiB0aGlzLm9wdGlvbnMuYXBwTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgYXBwTmFtZSA9IHRoaXMub3B0aW9ucy5hcHBOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm5hbWUgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5uYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0ZXN0TmFtZSA9IHRoaXMub3B0aW9ucy5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBkcml2ZXIuY2FsbCgoKSA9PiB0aGlzLl9leWVzLm9wZW4oZHJpdmVyLCBhcHBOYW1lLCB0ZXN0TmFtZSwgdGhpcy5fdmlld3BvcnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE1vZHVsZUVycm9yKGBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBcImV5ZXNcIiBtb2R1bGU6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IENsb3NlcyBBcHBsaXRvb2xzIEV5ZXMgc2Vzc2lvbiwgdGVybWluYXRlcyB0aGUgc2VxdWVuY2Ugb2YgY2hlY2twb2ludHMsIGFuZCB0aGVuIHdhaXRzIGZvciBhbmQgcmV0dXJucyB0aGUgdGVzdCByZXN1bHRzLlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEByZXR1cm4ge1Rlc3RSZXN1bHR9IEV5ZXMgdGVzdCByZXN1bHQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX2V5ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBudWxsO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHRzID0gdGhpcy5fZXllcy5jbG9zZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICB0aGlzLl9leWVzLmFib3J0SWZOb3RDbG9zZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZXllcyA9IG51bGw7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUHJlZm9ybSB2aXN1YWwgdmFsaWRhdGlvbiBmb3IgYSBjZXJ0YWluIHRhcmdldC5cclxuICAgICAqIEBmdW5jdGlvbiBjaGVja1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBBIG5hbWUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXRjaC5cclxuICAgICAqIEBwYXJhbSB7VGFyZ2V0fSBbdGFyZ2V0XSAtIEFuIG9wdGlvbmFsIHRhcmdldCBpbnN0YW5jZSB3aGljaCBkZXNjcmliZXMgd2hldGhlciB3ZSB3YW50IGEgd2luZG93L3JlZ2lvbi9mcmFtZS5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgcHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSB2YWxpZGF0aW9uIGlzIGZpbmlzaGVkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjaGVjayhuYW1lLCB0YXJnZXQgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9leWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgVGFyZ2V0ID0gcmVxdWlyZSgnQGFwcGxpdG9vbHMvZXllcy13ZWJkcml2ZXJpbycpLlRhcmdldDtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAgYXdhaXQgdGhpcy5fZXllcy5jaGVjayhuYW1lLCB0YXJnZXQgfHwgVGFyZ2V0LndpbmRvdygpLmZ1bGx5KCkpO1xyXG4gICAgICAgIGlmIChyZXN1bHQuX2FzRXhwZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QgYW5kIG1hdGNoZXMgaXQgd2l0aFxyXG4gICAgICogdGhlIGV4cGVjdGVkIG91dHB1dC5cclxuICAgICAqIEBmdW5jdGlvbiBjaGVja1dpbmRvd1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lPV0gLSBBbiBvcHRpb25hbCB0YWcgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzbmFwc2hvdC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF0Y2hUaW1lb3V0PS0xXSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byByZXRyeSBtYXRjaGluZyAoTWlsbGlzZWNvbmRzKS5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IEEgcHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSB2YWxpZGF0aW9uIGlzIGZpbmlzaGVkLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjaGVja1dpbmRvdyhuYW1lLCBtYXRjaFRpbWVvdXQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2V5ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNhbGwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9leWVzLmNoZWNrV2luZG93KG5hbWUsIG1hdGNoVGltZW91dCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYXNFeHBlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==