oxygen-cli 1.42.0 → 1.43.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.43.1 (2025-12-04)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Better handling of errors related to loading of param files.
7
+
8
+ ## v1.43.0 (2025-11-21)
9
+
10
+ #### :beetle: Bug Fix
11
+ * Pass RP configuration attributes to RP test launch.
12
+
13
+ #### :house: Internal
14
+ * Internal fixes related to CB and Oxygen IDE.
15
+
3
16
  ## v1.42.0 (2025-08-20)
4
17
 
5
18
  #### :tada: New Feature
@@ -673,17 +673,16 @@ class Oxygen extends _OxygenEvents.default {
673
673
  if (err.type === _helper.default.errorCode.ASSERT_PASSED) {} else {
674
674
  step.failure = _helper.default.getFailureFromError(err);
675
675
  step.failure.location = location;
676
- if (typeof module._takeScreenshotSilent === 'function' && !this.opts.disableScreenshot) {
677
- try {
678
- step.screenshot = module._takeScreenshotSilent(methodName);
679
- } catch (e) {
680
- _deasync.default.sleep(1000);
681
- try {
682
- step.screenshot = module._takeScreenshotSilent(methodName);
683
- } catch (e) {}
684
- }
676
+ if (!this.opts.disableScreenshot) {
677
+ takeScreenshot(module, step, methodName);
685
678
  }
679
+ takeSnapshot(this.opts, module, step, methodName);
686
680
  }
681
+ } else if (this.opts.baseline) {
682
+ if (!step.screenshot && step.action) {
683
+ takeScreenshot(module, step, methodName);
684
+ }
685
+ takeSnapshot(this.opts, module, step, methodName);
687
686
  }
688
687
  return step;
689
688
  }
@@ -842,4 +841,48 @@ class Oxygen extends _OxygenEvents.default {
842
841
  }
843
842
  }
844
843
  exports.default = Oxygen;
845
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2xvYiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfZnMiLCJfZGVhc3luYyIsIl9mdXR1cmUiLCJfZmliZXJzIiwiX29zIiwiX3N0ZXBSZXN1bHQiLCJfT3h5Z2VuRXZlbnRzIiwiX3V0aWwiLCJjb3JlVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9PeHlnZW5FcnJvciIsIl9oZWxwZXIiLCJfc3RhdHVzIiwiTW9kdWxlcyIsIl9sb2dnZXIyIiwiX094eWdlblN1Yk1vZHVsZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInYxIiwiZ2xvYmFsIiwib3JpZyIsIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJfIiwic3RhY2siLCJlcnIiLCJjYXB0dXJlU3RhY2tUcmFjZSIsIkRFRkFVTFRfVElNRU9VVCIsIkRFRkFVTFRfT1BUUyIsImJhY2t0cmFjZSIsImNvbXBpbGVyIiwiZmFpbEFtYmlndW91c0RlZmluaXRpb25zIiwiZmFpbEZhc3QiLCJpZ25vcmVVbmRlZmluZWREZWZpbml0aW9ucyIsIm5hbWUiLCJwcm9maWxlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsImF0dHJpYnV0ZXMiLCJERUZBVUxUX1JFU1VMVF9TVE9SRSIsInN0ZXBzIiwibG9ncyIsImF0dGFjaG1lbnRzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsImtleXMiLCJsZW5ndGgiLCJtYWtlT3hHbG9iYWwiLCJfbG9hZFNlcnZpY2VzIiwiX2xvYWRNb2R1bGVzIiwiZ2xvYmFsU2NvcGUiLCJtYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwiLCJkaXNwb3NlTW9kdWxlcyIsInN0YXR1cyIsIl9kaXNwb3NlTW9kdWxlcyIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJTVEFUVVMiLCJXQVJOSU5HIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm1vZENhcHMiLCJtb2R1bGVOYW1lIiwibW9kdWxlIiwiX2dldENhcGFiaWxpdGllcyIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImFkZEF0dHJpYnV0ZSIsImJpbmQiLCJhZGRBdHRhY2htZW50IiwidmFsdWUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJmaWxlUGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInB1c2giLCJuZXdGaWxlQXR0YWNobWVudCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJ0b1VwcGVyQ2FzZSIsIm1zZyIsInNoaWZ0IiwiZW1pdExvZyIsIm94U2VydmljZXNEaXJQYXRoIiwicmVzb2x2ZSIsInNlcnZpY2VGaWxlcyIsImdsb2IiLCJzeW5jIiwic2VydmljZUZpbGVOYW1lIiwic2VydmljZUZpbGVQYXRoIiwibWF0Y2giLCJzZXJ2aWNlTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInNlcnZpY2UiLCJfbG9hZFNlcnZpY2UiLCJFT0wiLCJzdGFja3RyYWNlIiwic2VydmljZVBhdGgiLCJTZXJ2aWNlQ2xhc3MiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZUNsYXNzIiwiZ2V0T3hNb2R1bGVzRGlyIiwibG9hZE1vZHVsZUZyb21DbGFzcyIsIndyYXBwZXIiLCJfdGhpcyIsIm1vZHVsZU1ldGhvZHMiLCJzb21lIiwieCIsIl9nZXRBbGxQcm9wZXJ0eU5hbWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZCIsIkZ1bmN0aW9uIiwiT3h5Z2VuU3ViTW9kdWxlIiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInNsaWNlIiwiYXJndW1lbnRzIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwiZ2V0T3h5Z2VuRXJyb3IiLCJfY29tbWFuZFdyYXBwZXIiLCJjbWROYW1lIiwiY21kQXJncyIsInJldHZhbCIsImNtZEZuIiwicHVibGljTWV0aG9kIiwic3RhcnRzV2l0aCIsImRlbGF5IiwiZGVhc3luYyIsInNsZWVwIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImRlY3J5cHRlZEFyZ3MiLCJfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5IiwiX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlIiwiY21kTG9jYXRpb24iLCJzdGVwUmVzdWx0SWQiLCJfZ2V0Q29tbWFuZExvY2F0aW9uIiwiZW1pdEJlZm9yZUNvbW1hbmQiLCJfd3JhcEFzeW5jIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UiLCJyZXR2YWxQcm9taXNlIiwidGhlbiIsInByb21pc2VEb25lIiwibG9vcFdoaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQiLCJzdGVwUmVzdWx0IiwiZG9uZSIsIndhaXRJZCIsIl9nZXRTdGVwUmVzdWx0IiwiaWQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJkaXNwbGF5TmFtZSIsImdldFN0ZXBEaXNwbGF5TmFtZSIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXh0cmEiLCJodHRwIiwidHlwZSIsIkFTU0VSVF9QQVNTRUQiLCJQQVNTRUQiLCJGQUlMRUQiLCJhY3Rpb24iLCJfaXNBY3Rpb24iLCJfZ2V0U3RhdHMiLCJzdGF0cyIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJkaXNhYmxlU2NyZWVuc2hvdCIsInNjcmVlbnNob3QiLCJrZXkiLCJkaXNwb3NlUmVzdWx0Iiwib25Nb2R1bGVMb2FkZWQiLCJvbk1vZHVsZUluaXRpYWxpemVkIiwib25Nb2R1bGVXaWxsRGlzcG9zZSIsIl9uZXdBcmdzIiwiYXJnIiwiX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50IiwiZ2V0RGVjcnlwdFJlc3VsdCIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZW52TmFtZSIsImVudlZhbHVlIiwib2JqIiwicHJvcHMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcCIsImdldFByb3RvdHlwZU9mIiwiX2NoZWNrU3RlcFJlc3VsdCIsInJlamVjdCIsIl93YWl0U3RlcFJlc3VsdCIsIl9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXHJcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IGRlYXN5bmMgZnJvbSAnZGVhc3luYyc7XHJcbmltcG9ydCBGdXR1cmUgZnJvbSAnZmliZXJzL2Z1dHVyZSc7XHJcbmltcG9ydCBGaWJlciBmcm9tICdmaWJlcnMnO1xyXG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XHJcbmNvbnN0IHsgdjEgfSA9IHJlcXVpcmUoJ3V1aWQnKTtcclxuaW1wb3J0IFN0ZXBSZXN1bHQgZnJvbSAnLi4vbW9kZWwvc3RlcC1yZXN1bHQnO1xyXG5pbXBvcnQgT3h5Z2VuRXZlbnRzIGZyb20gJy4vT3h5Z2VuRXZlbnRzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCAqIGFzIGNvcmVVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgU1RBVFVTIGZyb20gJy4uL21vZGVsL3N0YXR1cy5qcyc7XHJcbmltcG9ydCAqIGFzIE1vZHVsZXMgZnJvbSAnLi4vb3hfbW9kdWxlcy9pbmRleCc7XHJcblxyXG4vLyBzZXR1cCBsb2dnZXJcclxuaW1wb3J0IGxvZ2dlciwgeyBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IHsgT3h5Z2VuU3ViTW9kdWxlIH0gZnJvbSAnLi9PeHlnZW5TdWJNb2R1bGUnO1xyXG5cclxuLypnbG9iYWwgX19zdGFjayovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdfX3N0YWNrJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG9yaWcgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcclxuICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIChfLCBzdGFjaykgeyByZXR1cm4gc3RhY2s7IH07XHJcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycik7XHJcbiAgICAgICAgdmFyIHN0YWNrID0gZXJyLnN0YWNrO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZztcclxuICAgICAgICByZXR1cm4gc3RhY2s7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuY29uc3QgREVGQVVMVF9USU1FT1VUID0gMzAwMDA7XHJcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgIGJhY2t0cmFjZTogZmFsc2UsIC8vIDxib29sZWFuPiBzaG93IGZ1bGwgYmFja3RyYWNlIGZvciBlcnJvcnNcclxuICAgIGNvbXBpbGVyOiBbXSwgLy8gPHN0cmluZ1tdPiAoXCJleHRlbnNpb246bW9kdWxlXCIpIHJlcXVpcmUgZmlsZXMgd2l0aCB0aGUgZ2l2ZW4gRVhURU5TSU9OIGFmdGVyIHJlcXVpcmluZyBNT0RVTEUgKHJlcGVhdGFibGUpXHJcbiAgICBmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnM6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gdHJlYXQgYW1iaWd1b3VzIGRlZmluaXRpb25zIGFzIGVycm9yc1xyXG4gICAgZmFpbEZhc3Q6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gYWJvcnQgdGhlIHJ1biBvbiBmaXJzdCBmYWlsdXJlXHJcbiAgICBpZ25vcmVVbmRlZmluZWREZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCB1bmRlZmluZWQgZGVmaW5pdGlvbnMgYXMgd2FybmluZ3NcclxuICAgIG5hbWU6IFtdLCAvLyA8UkVHRVhQW10+IG9ubHkgZXhlY3V0ZSB0aGUgc2NlbmFyaW9zIHdpdGggbmFtZSBtYXRjaGluZyB0aGUgZXhwcmVzc2lvbiAocmVwZWF0YWJsZSlcclxuICAgIHByb2ZpbGU6IFtdLCAvLyA8c3RyaW5nPiAobmFtZSkgc3BlY2lmeSB0aGUgcHJvZmlsZSB0byB1c2VcclxuICAgIHJlcXVpcmU6IFtdLCAvLyA8c3RyaW5nPiAoZmlsZS9kaXIvZ2xvYikgcmVxdWlyZSBmaWxlcyBiZWZvcmUgZXhlY3V0aW5nIGZlYXR1cmVzXHJcbiAgICBvcmRlcjogJ2RlZmluZWQnLCAvLyA8c3RyaW5nPiBzd2l0Y2ggYmV0d2VlbiBkZXRlcm1pbmlzdGljICBhbmQgcmFuZG9tIGZlYXR1cmUgZXhlY3V0aW9uLiBFaXRoZXIgXCJkZWZpbmVkXCIsIFwicmFuZG9tXCIgb3IgXCJyYW5kb206NDJcIiB3aGVyZWFzIDQyIGlzIHRoZSBzZWVkIGZvciByYW5kb21pemF0aW9uXHJcbiAgICBzbmlwcGV0U3ludGF4OiB1bmRlZmluZWQsIC8vIDxzdHJpbmc+IHNwZWNpZnkgYSBjdXN0b20gc25pcHBldCBzeW50YXhcclxuICAgIHNuaXBwZXRzOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzdGVwIGRlZmluaXRpb24gc25pcHBldHMgZm9yIHBlbmRpbmcgc3RlcHNcclxuICAgIHNvdXJjZTogdHJ1ZSwgLy8gPGJvb2xlYW4+IGhpZGUgc291cmNlIHVyaXNcclxuICAgIHN0cmljdDogZmFsc2UsIC8vIDxib29sZWFuPiBmYWlsIGlmIHRoZXJlIGFyZSBhbnkgdW5kZWZpbmVkIG9yIHBlbmRpbmcgc3RlcHNcclxuICAgIHRhZ0V4cHJlc3Npb246ICcnLCAvLyA8c3RyaW5nPiAoZXhwcmVzc2lvbikgb25seSBleGVjdXRlIHRoZSBmZWF0dXJlcyBvciBzY2VuYXJpb3Mgd2l0aCB0YWdzIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uXHJcbiAgICB0YWdzSW5UaXRsZTogZmFsc2UsIC8vIDxib29sZWFuPiBhZGQgY3VjdW1iZXIgdGFncyB0byBmZWF0dXJlIG9yIHNjZW5hcmlvIG5hbWVcclxuICAgIHRpbWVvdXQ6IERFRkFVTFRfVElNRU9VVCAvLyA8bnVtYmVyPiB0aW1lb3V0IGZvciBzdGVwIGRlZmluaXRpb25zIGluIG1pbGxpc2Vjb25kc1xyXG59O1xyXG5jb25zdCBNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWCA9IC9ebW9kdWxlLSguKz8pXFwuanMkLztcclxuY29uc3QgU0VSVklDRV9OQU1FX01BVENIX1JFR0VYID0gL15zZXJ2aWNlLSguKz8pXFwuanMkLztcclxuY29uc3QgRE9fTk9UX1dSQVBfTUVUSE9EUyA9IFsnZHJpdmVyJywgJ2dldERyaXZlciddO1xyXG5cclxuY29uc3QgREVGQVVMVF9DVFggPSB7XHJcbiAgICBwYXJhbXM6IHt9LFxyXG4gICAgdmFyczoge30sXHJcbiAgICBlbnY6IHt9LFxyXG4gICAgY2Fwczoge30sXHJcbiAgICBhdHRyaWJ1dGVzOiB7fSxcclxufTtcclxuY29uc3QgREVGQVVMVF9SRVNVTFRfU1RPUkUgPSB7XHJcbiAgICBzdGVwczogW10sXHJcbiAgICBsb2dzOiBbXSxcclxuICAgIGF0dGFjaG1lbnRzOiBbXSxcclxuICAgIGhhcjogbnVsbCxcclxuICAgIGF0dHJpYnV0ZXM6IHt9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW4gZXh0ZW5kcyBPeHlnZW5FdmVudHMge1xyXG4gICAgY29uc3RydWN0b3IgKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZSA9IHsgLi4uREVGQVVMVF9SRVNVTFRfU1RPUkUgfTtcclxuICAgICAgICB0aGlzLmN0eCA9IHsgLi4uREVGQVVMVF9DVFggfTtcclxuICAgICAgICB0aGlzLm1vZHVsZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VzID0ge307XHJcbiAgICAgICAgdGhpcy5yZXBvID0ge307XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3B0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5veEJhc2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vJyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcignT3h5Z2VuJykpO1xyXG4gICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcywgY3R4ID0ge30sIHJlc3VsdHMgPSB7fSkge1xyXG4gICAgICAgIHRoaXMub3B0cyA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9PUFRTLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmN3ZCA9IHRoaXMub3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLmN0eCA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9DVFgsIGN0eCB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jdHguY2FwcyA9IHsgLi4uY3R4LmNhcHMgfHwge30sIC4uLmNhcHMsIH07XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZSA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9SRVNVTFRfU1RPUkUsIHJlc3VsdHMgfHwge30pO1xyXG4gICAgICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdGhpcy5jdHguY2FwcyA9IGNhcHM7XHJcblxyXG4gICAgICAgIGlmIChjdHguYXR0cmlidXRlcyAmJiAoIXJlc3VsdHMuYXR0cmlidXRlcyB8fCAhT2JqZWN0LmtleXMocmVzdWx0cy5hdHRyaWJ1dGVzKS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlcyA9IHsgLi4uY3R4LmF0dHJpYnV0ZXMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlZmluZSAnb3gnIG9iamVjdCBpbiBnbG9iYWwgSlMgc2NvcGVcclxuICAgICAgICAvLyB3ZSB3aWxsIHVzZSB0aGlzIG9iamVjdCB0byBhY2Nlc3MgT3h5Z2VuIG1vZHVsZXMgYW5kIHRlc3QgY29udGV4dCBmcm9tIG1vZHVsZXMgdXNlZCBpbiB0aGUgdGVzdCAoaWYgYW55KSAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tYWtlT3hHbG9iYWwoKTtcclxuICAgICAgICAvLyBsb2FkIHNlcnZpY2VzXHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZpY2VzKCk7XHJcbiAgICAgICAgLy8gbG9hZCBtb2R1bGVzXHJcbiAgICAgICAgdGhpcy5fbG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAvLyBpZiBvcHRpb25zLm1ha2VNb2R1bGVzR2xvYmFsIGlzIHRydWUgb3IgdW5kZWZpbmVkIHRoYW4gZGVmaW5lICdjdHgnIGNvbnRlbnQgYW5kIGVhY2ggbW9kdWxlIGluIGdsb2JhbCBzY29wZVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgb3B0aW9ucy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGVzOiAnLCBlKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZU1vZHVsZXMoc3RhdHVzKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZVNlcnZpY2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRpc3Bvc2U6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWRqdXN0U2NyaXB0TGluZSgpIHtcclxuICAgICAgICBjb25zdCBpc0luRGVidWdNb2RlID0gb3h1dGlsLmlzSW5EZWJ1Z01vZGUoKTtcclxuICAgICAgICAvLyBhZGQgZXh0cmEgbGluZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBkZWJ1Z2dlciBtb2RlIChWOCBkZWJ1Z2dlciBhZGRzIGFuIGV4dHJhIGxpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSlcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBpc0luRGVidWdNb2RlID8gLTEgOiAwO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBjb250ZXh0KGN0eCkge1xyXG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LmN0eCA9IGN0eDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgaW4gXCJveFwiIGdsb2JhbCB2YXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBhcmFtcyA9IGN0eC5wYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuZW52ID0gY3R4LmVudiB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5hdHRyaWJ1dGVzID0gY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlcG9zaXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcmVwb3NpdG9yeShyZXBvKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvID0gcmVwbztcclxuICAgICAgICBpZiAoZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veC5yZXBvID0gcmVwbztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlc3VsdHMoKSB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRpbWUgZm9yIHRoZSB0cmFuc2FjdGlvbiBpdHNlbGYgLSBzdW1tYXJ5IG9mIGR1cmF0aW9ucyBmb3IgYWxsIHRoZSBzdGVwcyBpbiB0aGlzIHRyYW5zYWN0aW9uXHJcbiAgICAgICAgLy8gYWxzbyBhZGp1c3QgdHJhbnNhY3Rpb24gZW5kIHRpbWUgdG8gbXVjaCBlbmQgdGltZSBmb3IgdGhlIGxhc3QgZXhlY3V0ZWQgc3RlcCB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbi5cclxuICAgICAgICBmb3IgKGNvbnN0IHRyYW5zU3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFuc1N0ZXAubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zTmFtZSA9IHRyYW5zU3RlcC50cmFuc2FjdGlvbjtcclxuICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0ZXAgYmVsb25ncyB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAmIGlzIG5vdCB0aGUgdHJhbnNhY3Rpb24gc3RlcFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnRyYW5zYWN0aW9uID09PSB0cmFuc05hbWUgJiYgc3RlcCAhPT0gdHJhbnNTdGVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiArPSBzdGVwLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5lbmRUaW1lID4gdHJhbnNTdGVwLmVuZFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5lbmRUaW1lID0gc3RlcC5lbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdHJhbnNhY3Rpb24gc3RhdHVzIHRvIHdhcm5pbmcgaWYgYXQgbGVhc3Qgb25lIG9mIHN0ZXBzIGhhcyB3YXJuaW5nIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5zdGF0dXMgPT09IFNUQVRVUy5XQVJOSU5HKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc1N0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0U3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlc0NhcGFiaWxpdGllcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZS5uYW1lICYmIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzICYmIHR5cGVvZiBtb2R1bGUuX2dldENhcGFiaWxpdGllcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FwcyA9IG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBzdG9yZSBvbmx5IG5vbi1lbXB0eSBjYXBzIHBlciBtb2R1bGUgdGhhdCBoYXMgdGhpcy5jYXBzIHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwcyAmJiB0eXBlb2YgY2FwcyA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY2FwcykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZENhcHNbbW9kdWxlLm5hbWVdID0gY2FwcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9kQ2FwcztcclxuICAgIH1cclxuXHJcbiAgICByZXNldFJlc3VsdHMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB0aGlzLmhhciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25CZWZvcmVDYXNlKGNvbnRleHQpIHtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLm9uQmVmb3JlQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25CZWZvcmVDYXNlKGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25TdGFydCAmJiBhd2FpdCBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uQmVmb3JlQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFmdGVyQ2FzZShlcnJvciA9IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gYXdhaXQgZm9yIGF2b2lkIHN0dWNrIG9uICouZGlzcG9zZSBjYWxsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25BZnRlckNhc2UgJiYgYXdhaXQgbW9kdWxlLm9uQWZ0ZXJDYXNlKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5faXRlcmF0aW9uRW5kICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uRW5kKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25BZnRlckNhc2VcIiBtZXRob2Qgb2YgJHttb2R1bGVOYW1lfSBtb2R1bGUuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZU94R2xvYmFsKCkge1xyXG4gICAgICAgIGlmICghZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veCA9IHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZXM6IHRoaXMubW9kdWxlcyxcclxuICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdHMsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLmNhcGFiaWxpdGllcyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdFN0b3JlOiB0aGlzLnJlc3VsdFN0b3JlLFxyXG4gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlOiB0aGlzLmFkZEF0dHJpYnV0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgYWRkQXR0YWNobWVudDogdGhpcy5hZGRBdHRhY2htZW50LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBnbG9iYWwudmFycyA9IHRoaXMuY3R4LnZhcnM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpIHtcclxuICAgICAgICAvLyBtYWtlIHN1cmUgJ294JyBpcyBhbHJlYWR5IGdsb2JhbFxyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgLy8gZXhwb3NlIG1vZHVsZXMgYXMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFnbG9iYWxbbW9kdWxlTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbbW9kdWxlTmFtZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZXhwb3NlIFwiY3R4XCIsIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgYXMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gZ2xvYmFsLm94LmN0eC5wYXJhbXM7XHJcbiAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBnbG9iYWwub3guY3R4LmVudjtcclxuICAgICAgICAgICAgZ2xvYmFsLmN0eCA9IGdsb2JhbC5veC5jdHg7XHJcbiAgICAgICAgICAgIGdsb2JhbC5hdHRyaWJ1dGVzID0gZ2xvYmFsLm94LmN0eC5hdHRyaWJ1dGVzIHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiJ25hbWUnIGFuZCAndmFsdWUnIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgZm9yIG94LmFkZEF0dHJpYnV0ZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQXR0YWNobWVudChmaWxlUGF0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTdG9yZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyKGBGaWxlICR7ZmlsZVBhdGh9IGRvZXNuJ3QgZXhpc3RgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cy5wdXNoKFxyXG4gICAgICAgICAgICBjb3JlVXRpbHMubmV3RmlsZUF0dGFjaG1lbnQoZmlsZVBhdGgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGFnZU9iamVjdEZpbGUocG9QYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwb1BhdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwbyA9IHJlcXVpcmUocG9QYXRoKTtcclxuICAgICAgICAgICAgLy8gc2V0IHBhZ2Ugb2JqZWN0IHJlcG9zaXRvcnkgYXMgdGhlIG1haW4gb25lXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHBvO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSBwbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBvID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGUgTWV0aG9kc1xyXG4gICAgICovXHJcbiAgICBfd3JhcExvZ2dlcihfbG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3QgbG9nZ2VyV3JhcCA9IHtcclxuICAgICAgICAgICAgaW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBkZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzKSxcclxuICAgICAgICAgICAgZXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncyksXHJcbiAgICAgICAgICAgIHdhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzKSxcclxuICAgICAgICAgICAgdXNlckluZm86ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2luZm8nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2RlYnVnJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlckVycm9yOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdlcnJvcicsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJXYXJuOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICd3YXJuJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsb2dnZXJXcmFwO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2coX2xvZ2dlciwgbGV2ZWwsIGFyZ3MsIHNyYyA9IERFRkFVTFRfTE9HR0VSX0lTU1VFUikge1xyXG4gICAgICAgIGlmICghX2xvZ2dlcltsZXZlbF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbG9nZ2VyW2xldmVsXS5hcHBseShfbG9nZ2VyLCBhcmdzKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG94dXRpbC5zdHJpbmdpZnkoYXJncywgMik7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAvLyBhZGQgdGhlIGxvZyBlbnRyeSB0byB0aGUgcmVzdWx0IHN0b3JlXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0U3RvcmUgJiYgdGhpcy5yZXN1bHRTdG9yZS5sb2dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpbWU6IHRpbWUsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwudG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgIG1zZzogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZW1vdmUgZmlyc3QgYXJndW1lbnQsIGlmIGl0J3MgYSBtZXNzYWdlXHJcbiAgICAgICAgYXJncyA9IG1lc3NhZ2UgPyBhcmdzLnNoaWZ0KCkgOiBhcmdzO1xyXG4gICAgICAgIHRoaXMuZW1pdExvZyh0aW1lLCBsZXZlbCwgbWVzc2FnZSwgYXJncywgc3JjKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFNlcnZpY2VzKCkge1xyXG4gICAgICAgIGNvbnN0IG94U2VydmljZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3hCYXNlRGlyLCAnLi9veF9zZXJ2aWNlcycpO1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlcyA9IGdsb2Iuc3luYygnc2VydmljZS0qLmpzJywgeyBjd2Q6IG94U2VydmljZXNEaXJQYXRoIH0pO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWxsIHNlcnZpY2VzXHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZXMuLi4nKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJ2aWNlRmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVOYW1lID0gc2VydmljZUZpbGVzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZVBhdGggPSBwYXRoLmpvaW4ob3hTZXJ2aWNlc0RpclBhdGgsIHNlcnZpY2VGaWxlTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHNlcnZpY2VGaWxlTmFtZS5tYXRjaChTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHJlc3VsdFsxXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMub3B0cy5zZXJ2aWNlcyA9IHVuZGVmaW5lZCBpbiBzaW5nbGUgZmlsZSBtb2RlXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5zZXJ2aWNlcykgJiYgIXRoaXMub3B0cy5zZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZTogJyArIHNlcnZpY2VOYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLl9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZUZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2UuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV0gPSBzZXJ2aWNlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIHNlcnZpY2UgXCInICsgc2VydmljZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZVBhdGgpIHtcclxuICAgICAgICBsZXQgU2VydmljZUNsYXNzID0gcmVxdWlyZShzZXJ2aWNlUGF0aCk7XHJcbiAgICAgICAgLy8gRVM2IGNsYXNzIHdpbGwgYmUgdW5kZXIgJ2RlZmF1bHQnIHByb3BlcnR5XHJcbiAgICAgICAgaWYgKFNlcnZpY2VDbGFzcy5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzcy5kZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZXJ2aWNlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYFNlcnZpY2U6JHtzZXJ2aWNlTmFtZX1gKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlQ2xhc3ModGhpcy5vcHRzLCB0aGlzLmN0eCwgdGhpcy5yZXN1bHRTdG9yZSwgc2VydmljZUxvZ2dlcik7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRNb2R1bGVzKCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGludGVybmFsIG1vZHVsZXMuLi4nKTtcclxuICAgICAgICB0aGlzLl9sb2FkSW50ZXJuYWxNb2R1bGVzKCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgZXh0ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRFeHRlcm5hbE1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEV4dGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICBsZXQgbW9kdWxlc0ZvbGRlclBhdGggPSAnLi9tb2R1bGVzJztcclxuICAgICAgICBpZiAodGhpcy5vcHRzLm1vZHVsZXNfZXh0ICYmIHR5cGVvZiB0aGlzLm9wdHMubW9kdWxlc19leHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZXNGb2xkZXJQYXRoID0gdGhpcy5vcHRzLm1vZHVsZXNfZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2NvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X21vZHVsZXMnKTtcclxuICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY3dkLCBtb2R1bGVzRm9sZGVyUGF0aCk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG94TW9kdWxlc0RpclBhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1vZHVsZUZpbGVzID0gW107XHJcbiAgICAgICAgLy8gaWYgcGFydGljdWxhciBtb2R1bGUgbmFtZXMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZywgdGhlbiBsb2FkIG9ubHkgdGhlc2UgbW9kdWxlc1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5tb2R1bGVzKSAmJiB0aGlzLm9wdHMubW9kdWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0cy5tb2R1bGVzLmZvckVhY2gobW9kdWxlTmFtZSA9PiBtb2R1bGVGaWxlcy5wdXNoKGBtb2R1bGUtJHttb2R1bGVOYW1lfS5qc2ApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBsb2FkIGFsbCBhdmFpbGFibGUgbW9kdWxlcyAobWlnaHQgYmUgbW9yZSB0aW1lIGNvbnN1bWluZylcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9kdWxlRmlsZXMgPSBnbG9iLnN5bmMoJ21vZHVsZS0qLmpzJywgeyBjd2Q6IG94TW9kdWxlc0RpclBhdGggfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWxsIG1vZHVsZXMgICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZUZpbGVOYW1lIG9mIG1vZHVsZUZpbGVzKSB7XHJcbiAgICAgICAgICAgIC8vIGV4dHJhY3QgbmFtZSBmcm9tIHRoZSBtb2R1bGUgZmlsZSBuYW1lIGJhc2VkIG9uIG1vZHVsZSBuYW1lIHBhdHRlcm5cclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IG1vZHVsZUZpbGVOYW1lLm1hdGNoKE1PRFVMRV9OQU1FX01BVENIX1JFR0VYKVsxXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBsb2dnZXIgZm9yIHRoZSBtb2R1bGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBNb2R1bGU6JHttb2R1bGVOYW1lfWApKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IG1vZHVsZSBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kID0gY29yZVV0aWxzLmxvYWRNb2R1bGVGcm9tRmlsZShtb2R1bGVOYW1lLCBtb2R1bGVGaWxlTmFtZSwgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRJbnRlcm5hbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgLy8gaWYgYG1vZHVsZXNgIGlzIGVtcHR5IG9yIHVuZGVmaW5lZCBpbiBveHlnZW4uY29uZiB0aGVuIGxvYWQgYWxsIG1vZHVsZXNcclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgb25seSB0aG9zZSBpbXBsaWNpdGx5IGRlZmluZWRcclxuICAgICAgICBjb25zdCBleGNsdWRlVW5kZWZpbmVkTW9kcyA9IHRoaXMub3B0cy5tb2R1bGVzICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoTW9kdWxlcykpIHtcclxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVVbmRlZmluZWRNb2RzICYmICF0aGlzLm9wdHMubW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgTW9kdWxlQ2xhc3MgPSBNb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gb3h1dGlsLmdldE94TW9kdWxlc0RpcigpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21DbGFzcyhtb2R1bGVOYW1lLCBNb2R1bGVDbGFzcywgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBNb2R1bGUobmFtZSwgbW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogbmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGxldCBtb2R1bGVNZXRob2RzID0gT2JqZWN0LmtleXMobW9kdWxlKTtcclxuICAgICAgICBpZiAoIW1vZHVsZU1ldGhvZHMuc29tZSh4ID0+IHg9PT0gJ2V4cG9ydHMnKSkge1xyXG4gICAgICAgICAgICBtb2R1bGVNZXRob2RzID0gdGhpcy5fZ2V0QWxsUHJvcGVydHlOYW1lcyhtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtZXRob2ROYW1lIG9mIG1vZHVsZU1ldGhvZHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gbW9kdWxlW21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGEgT3h5Z2VuU3ViTW9kdWxlXHJcbiAgICAgICAgICAgIGlmICgoIShtZXRob2QgaW5zdGFuY2VvZiBGdW5jdGlvbikgJiYgIShtZXRob2QgaW5zdGFuY2VvZiBPeHlnZW5TdWJNb2R1bGUpICYmIHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHx8IG1ldGhvZE5hbWUgPT09ICdleHBvcnRzJyB8fCBtZXRob2ROYW1lID09PSAnX2NvbXBpbGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBtYXAgYW5kIHdyYXAgc3ViLW1vZHVsZSBtZXRob2RzIChyZWN1cnNpdmUgY2FsbCB0byBfd3JhcE1vZHVsZSlcclxuICAgICAgICAgICAgaWYgKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUoYCR7bmFtZX0uJHttZXRob2ROYW1lfWAsIG1ldGhvZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZG8gbm90IHdyYXAgbWV0aG9kc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChET19OT1RfV1JBUF9NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyA9PT0gJ2RyaXZlcicgfHwgbWV0aG9kTmFtZSA9PT0gJ2dldERyaXZlcidcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBtb2R1bGVbbWV0aG9kTmFtZV0uYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByaXZhdGUgbWV0aG9kcyBhbmQgZXZlbnQgaGFuZGxlcnNcclxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kTmFtZS5pbmRleE9mKCdfJykgPT09IDAgfHwgbWV0aG9kTmFtZS5pbmRleE9mKCdvbicpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobmFtZSwgbWV0aG9kTmFtZSwgYXJncykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlW21ldGhvZE5hbWVdLmFwcGx5KG1vZHVsZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBuYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGludGVybmFsIF9nZXRDYXBhYmlsaXRpZXMgbWV0aG9kIGZvciBpbnRlcm5hbCBPeHlnZW4gQ29yZSB1c2VcclxuICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgX2dldENhcGFiaWxpdGllcyBtZXRob2Qgd29uJ3QgYmUgdmlzaWJsZSBpbiB0aGUgdGVzdCByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2dldENhcGFiaWxpdGllcycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyWydfZ2V0Q2FwYWJpbGl0aWVzJ10gPSBtZXRob2QuYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9jb21tYW5kV3JhcHBlcihtZXRob2ROYW1lLCBhcmdzLCBtb2R1bGUsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE94RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1Rocm93aW5nIGFnYWluOicsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgX2NvbW1hbmRXcmFwcGVyKGNtZE5hbWUsIGNtZEFyZ3MsIG1vZHVsZSwgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGVbY21kTmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgY21kRm4gPSBtb2R1bGVbY21kTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHVibGljTWV0aG9kID0gIWNtZE5hbWUuc3RhcnRzV2l0aCgnXycpICYmIGNtZE5hbWUgIT09ICdkaXNwb3NlJztcclxuXHJcbiAgICAgICAgLy8gZGVsYXkgdGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9wdHMuZGVsYXkgJiZcclxuICAgICAgICAgICAgcHVibGljTWV0aG9kICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICdpbml0JyAmJlxyXG4gICAgICAgICAgICBjbWROYW1lICE9PSAndHJhbnNhY3Rpb24nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGRlYXN5bmMuc2xlZXAodGhpcy5vcHRzLmRlbGF5ICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aHJvdyBpZiBhIGNvbW1hbmQgZXhlY3V0ZWQgb24gdW5pdGlhbGl6ZWQgbW9kdWxlIChleGNlcHQgaW50ZXJuYWwgbWV0aG9kcyBhbmQgYSBmZXcgb3RoZXIpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUuaXNJbml0aWFsaXplZCAmJiBwdWJsaWNNZXRob2QgJiYgY21kTmFtZSAhPT0gJ2luaXQnICYmIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdNaXNzaW5nICcgKyBtb2R1bGVOYW1lICsgJy5pbml0KCknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlY3R5cHQgYXJndW1lbnRzXHJcbiAgICAgICAgbGV0IGRlY3J5cHRlZEFyZ3MgPSB0aGlzLl9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkoY21kQXJncywgbW9kdWxlTmFtZSk7XHJcbiAgICAgICAgZGVjcnlwdGVkQXJncyA9IHRoaXMuX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGRlY3J5cHRlZEFyZ3MpO1xyXG5cclxuICAgICAgICAvLyByZXBsYWNlIHBhcmFtZXRlcnMgaW4gbWV0aG9kIGFyZ3VtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzXHJcbiAgICAgICAgY21kQXJncyA9IHRoaXMuX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGNtZEFyZ3MpO1xyXG4gICAgICAgIC8vIHN0YXJ0IG1lYXN1cmluZyBtZXRob2QgZXhlY3V0aW9uIHRpbWVcclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgIC8vIGFkZCBjb21tYW5kIGxvY2F0aW9uIGluZm9ybWF0aW9uIChlLmcuIGZpbGUgbmFtZSBhbmQgY29tbWFuZCBsaW5lKVxyXG4gICAgICAgIGxldCBjbWRMb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgc3RlcCByZXN1bHQgaWRcclxuICAgICAgICBjb25zdCBzdGVwUmVzdWx0SWQgPSB2MSgpO1xyXG4gICAgICAgIC8vIGRvIG5vdCByZXBvcnQgcmVzdWx0cyBvciBsaW5lIHVwZGF0ZXMgb24gaW50ZXJuYWwgbWV0aG9kcyAoc3RhcnRlZCB3aXRoICdfJylcclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNtZExvY2F0aW9uID0gdGhpcy5fZ2V0Q29tbWFuZExvY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEJlZm9yZUNvbW1hbmQoc3RlcFJlc3VsdElkLCBjbWROYW1lLCBtb2R1bGVOYW1lLCBjbWRGbiwgY21kQXJncywgdGhpcy5jdHgsIGNtZExvY2F0aW9uLCBzdGFydFRpbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncykpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBlbWl0IGJlZm9yZSBldmVudHNcclxuICAgICAgICAgICAgaWYgKGNtZE5hbWUgPT09ICdkaXNwb3NlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmV0dmFsUHJvbWlzZSA9IHRoaXMuX3dyYXBBc3luYyhtb2R1bGVbY21kTmFtZV0pLmFwcGx5KG1vZHVsZSwgZGVjcnlwdGVkQXJncyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmV0dmFsUHJvbWlzZSAmJiByZXR2YWxQcm9taXNlLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlRG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHZhbFByb21pc2UudGhlbigodmFsdWUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZURvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZURvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIXByb21pc2VEb25lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHZhbCA9IHJldHZhbFByb21pc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjbWROYW1lID09PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXBBc3luYyh0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkKS5hcHBseSh0aGlzLCBbbW9kdWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkIHNlc3Npb24gaWQnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGVycm9yIG9jdXJyZWQgYWZ0ZXIgdGhlIG1vZHVsZSB3YXMgZGlzcG9zZWQgKG9yIGluIGEgcHJvY2VzcyBvZiBiZWluZyBkaXNwb3NlZClcclxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdCBmb3IgaW5pdCBtZXRob2RzIG9mIGNvdXJzZVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPT09ICdib29sZWFuJyAmJiAhbW9kdWxlLmlzSW5pdGlhbGl6ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgY21kTmFtZSAhPT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnPT09PSBlcnJvciA9PT09JywgZSlcclxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgIGxldCBzdGVwUmVzdWx0O1xyXG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FpdElkID0gK25ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5wdXNoKHdhaXRJZCk7XHJcblxyXG4gICAgICAgICAgICBzdGVwUmVzdWx0ID0gdGhpcy5fZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MsIGNtZExvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyb3IpO1xyXG4gICAgICAgICAgICBzdGVwUmVzdWx0LmlkID0gc3RlcFJlc3VsdElkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QuaW5kZXhPZih3YWl0SWQpO1xyXG4gICAgICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vc3RlcFJlc3VsdC5sb2NhdGlvbiA9IGNtZExvY2F0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcy5wdXNoKHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRBZnRlckNvbW1hbmQoY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgZW5kVGltZSwgc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLmlzRmF0YWwgJiYgIXRoaXMub3B0cy5jb250aW51ZU9uRXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCFlcnJvci5sb2NhdGlvbiAmJiBjbWRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQgJiYgc3RlcFJlc3VsdC5mYWlsdXJlICYmIHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubG9jYXRpb24gPSBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgfVxyXG5cclxuICAgIF93cmFwQXN5bmMgKGZuLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gY29udGV4dCB8fCB0aGlzO1xyXG4gICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBjb2RlIGlzIG5vdCBydW5uaW5nIGluc2lkZSB0aGUgRmliZXIgY29udGV4dCwgdGhlbiBydW4gYXN5bmMgY29kZSBhcyBzeW5jIHVzaW5nIGRlYXN5bmMgbW9kdWxlXHJcbiAgICAgICAgICAgIGlmICghRmliZXIuY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmluYWxWYWwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgJiYgcmV0dmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmV0dmFsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWwgPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3JlYWR5U3RhdGUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoaXMgZXJyb3IgYXMgaXQgdXN1YWxseSBoYXBwZW5zIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gT3h5Z2VuIGlzIGRpc3Bvc2VkIGFuZCBwcm9jZXNzIGlzIGJlaW5nIGtpbGxlZFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWFzeW5jLmxvb3BXaGlsZSgpIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxWYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaWYgd2UgYXJlIGluc2lkZSB0aGUgRmliZXIgY29udGV4dCwgdGhlbiB1c2UgRmliZXIncyBGdXR1cmVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1dHVyZSA9IG5ldyBGdXR1cmUoKTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKHZhbCkgPT4gZnV0dXJlLnJldHVybih2YWwpLCAoZXJyKSA9PiBmdXR1cmUudGhyb3coZXJyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1dHVyZS53YWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHJpZXZlIGN1cnJlbnQgbGluZSBhbmQgZnVuY3Rpb24gbmFtZSBmcm9tIHRoZSBjYWxsIHN0YWNrXHJcbiAgICBfZ2V0Q29tbWFuZExvY2F0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHN0YWNrID0gX19zdGFjaztcclxuICAgICAgICBsZXQgY2FsbGVyID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBjYWxsIG9mIHN0YWNrKSB7XHJcbiAgICAgICAgICAgIGlmIChfX2ZpbGVuYW1lID09PSBjYWxsLmdldEZpbGVOYW1lKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aGUgZmlyc3QgY2FsbGVyLCB3aGljaCBpcyBub3QgdGhlIGN1cnJlbnQgZmlsZVxyXG4gICAgICAgICAgICBjYWxsZXIgPSBjYWxsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7Y2FsbGVyLmdldEZpbGVOYW1lKCl9OiR7Y2FsbGVyLmdldExpbmVOdW1iZXIoKSArIHRoaXMuYWRqdXN0U2NyaXB0TGluZX06JHtjYWxsZXIuZ2V0Q29sdW1uTnVtYmVyKCl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBhcmdzLCBsb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycikge1xyXG4gICAgICAgIHZhciBzdGVwID0gbmV3IFN0ZXBSZXN1bHQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPVxyXG4gICAgICAgICAgICAobW9kdWxlLmdldFN0ZXBEaXNwbGF5TmFtZSAmJiBtb2R1bGUuZ2V0U3RlcERpc3BsYXlOYW1lKG1ldGhvZE5hbWUsIGFyZ3MsIHJldHZhbCwgZXJyKSkgfHxcclxuICAgICAgICAgICAgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuXHJcbiAgICAgICAgc3RlcC5uYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICAgICAgc3RlcC50cmFuc2FjdGlvbiA9IGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSB8fCBudWxsOyAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgaGVyZSBpZiBpdCdzIGFscmVhZHkgcG9wdWxhdGVkIGluIHJzP1xyXG4gICAgICAgIHN0ZXAubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAvLyBtb2R1bGUuZXh0cmEgaXMgcmVzZXRlZCBmb3IgZWFjaCBzdGVwLCBzbyB3ZSBtdXN0IGNsb25lIGl0XHJcbiAgICAgICAgc3RlcC5leHRyYSA9IHsgLi4ubW9kdWxlLmV4dHJhIH07XHJcbiAgICAgICAgaWYgKG1vZHVsZS5leHRyYSAmJiBtb2R1bGUuZXh0cmEuaHR0cCkge1xyXG4gICAgICAgICAgICBzdGVwLnR5cGUgPSAnaHR0cCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgc3RlcCBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5pc0ZhdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtb2R1bGVOYW1lID09PSAnbG9nJyAmJiBtZXRob2ROYW1lID09PSAnd2FybicpIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ZXAuYWN0aW9uID0gKHR5cGVvZiBtb2R1bGUuX2lzQWN0aW9uID09PSAnZnVuY3Rpb24nID8gbW9kdWxlLl9pc0FjdGlvbihtZXRob2ROYW1lKSA6IGZhbHNlKTtcclxuICAgICAgICBzdGVwLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcclxuICAgICAgICBzdGVwLmVuZFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgIHN0ZXAuZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5fZ2V0U3RhdHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IG1vZHVsZS5fZ2V0U3RhdHMobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICBpZiAoZXJyLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfUEFTU0VEKSB7XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZWRcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIHN0ZXAuZmFpbHVyZS5sb2NhdGlvbiA9IGxvY2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRoZSBtb2R1bGUgZGVjaWRlIHdoZXRoZXIgYSBzY3JlZW5zaG90IHNob3VsZCBiZSB0YWtlbiBvbiBlcnJvciBvciBub3RcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudCA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5vcHRzLmRpc2FibGVTY3JlZW5zaG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHdhaXQgZm9yIGEgbW9tZW50IChpbiBQZXJmZWN0byBDbG91ZCwgdGhlIHNjcmVlbnNob3QgbWlnaHQgbm90IGJlIGltbWlkaWF0ZWx5IGF2YWlsYWJsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5zbGVlcCgxMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdCA9IG1vZHVsZS5fdGFrZVNjcmVlbnNob3RTaWxlbnQobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbmRpY2F0ZSB0byB1c2VyIHRoYXQgYW4gYXR0ZW1wdCB0byB0YWtlIGEgc2NyZWVuc2hvdCBoYXMgZmFpbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0ZXA7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2Rpc3Bvc2VTZXJ2aWNlcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZXMgfHwgdHlwZW9mIHRoaXMuc2VydmljZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNlcnZpY2UuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXJ2aWNlLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHNlcnZpY2UgZGlzcG9zYWwgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRpc3Bvc2Ugc2VydmljZSAnJHtrZXl9JzpgLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzIHx8IHR5cGVvZiB0aGlzLm1vZHVsZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZXNba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtb2QuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwb3NlUmVzdWx0ID0gbW9kLmRpc3Bvc2Uoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcG9zZVJlc3VsdCAmJiB0eXBlb2YgZGlzcG9zZVJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2JhYmx5IGEgcHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkaXNwb3NlUmVzdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgbW9kdWxlIGRpc3Bvc2FsIGVycm9yIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGUgJyR7a2V5fSc6IGAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICAqIFNlcnZpY2VzIEV2ZW50IEVtaXR0ZXJzXHJcbiAgICAgKi9cclxuICAgIF9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZUxvYWRlZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUxvYWRlZFwiIG1ldGhvZCBvZiAke3NlcnZpY2VOYW1lfSBzZXJ2aWNlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQobW9kdWxlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgc2VydmljZU5hbWUgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghc2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2Uub25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUluaXRpYWxpemVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMgfHwgIXRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlcnZpY2Uub25Nb2R1bGVXaWxsRGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2Uub25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZVdpbGxEaXNwb3NlXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoYXJncykge1xyXG4gICAgICAgIGlmICghYXJncyB8fCAhQXJyYXkuaXNBcnJheShhcmdzKSB8fCBhcmdzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBfbmV3QXJncyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGFyZyBvZiBhcmdzKSB7XHJcbiAgICAgICAgICAgIF9uZXdBcmdzLnB1c2godGhpcy5fcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQoYXJnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuICAgIF9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFyZyB8fCB0eXBlb2YgYXJnICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIHVzZXIgcGFyYW1ldGVycyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIC8vIG5vdGU6IHVzZXIgcGFyYW1ldGVyIHdpdGggdGhlIHNhbWUgbmFtZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZW52aXJvbm1lbnQgdmFyaWFibGVcclxuICAgICAgICBmb3IgKGxldCBwYXJhbU5hbWUgaW4gdGhpcy5jdHgucGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5wYXJhbXMuaGFzT3duUHJvcGVydHkocGFyYW1OYW1lKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHRoaXMuY3R4LnBhcmFtc1twYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIHBhcmFtTmFtZSArICd9JywgJ2cnKSwgcGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVwbGFjZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCB2YWx1ZXNcclxuICAgICAgICBmb3IgKGxldCBlbnZOYW1lIGluIHRoaXMuY3R4LmVudikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdHguZW52Lmhhc093blByb3BlcnR5KGVudk5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZWYWx1ZSA9IHRoaXMuY3R4LmVudltlbnZOYW1lXTtcclxuICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwkeycgKyBlbnZOYW1lICsgJ30nLCAnZycpLCBlbnZWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyZztcclxuICAgIH1cclxuICAgIF9nZXRBbGxQcm9wZXJ0eU5hbWVzKCBvYmogKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSBbXTtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyggb2JqICkuZm9yRWFjaChmdW5jdGlvbiAoIHByb3AgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIHByb3BzLmluZGV4T2YoIHByb3AgKSA9PT0gLTEgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaCggcHJvcCApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXHJcbiAgICAgICAgfSB3aGlsZSAoIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiggb2JqICkgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd2FpdFN0ZXBSZXN1bHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShhcmdzLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9kZWNyeXB0UGFyYW1ldGVyRm9yQXBwbHlJbkFyZ3VtZW50KGFyZywgbW9kdWxlTmFtZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX25ld0FyZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnLmdldERlY3J5cHRSZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICdsb2cnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJnLmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyZztcclxuICAgIH1c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
844
+ function takeScreenshot(module, step, methodName) {
845
+ if (typeof module._takeScreenshotSilent !== 'function') {
846
+ return false;
847
+ }
848
+ try {
849
+ step.screenshot = module._takeScreenshotSilent(methodName);
850
+ } catch (e) {
851
+ _deasync.default.sleep(1000);
852
+ try {
853
+ step.screenshot = module._takeScreenshotSilent(methodName);
854
+ } catch (e) {
855
+ return false;
856
+ }
857
+ }
858
+ return true;
859
+ }
860
+ function takeSnapshot(options, module, step, methodName) {
861
+ if (typeof module._takeSnapshotSilent !== 'function') {
862
+ return false;
863
+ }
864
+ let snapshot;
865
+ try {
866
+ snapshot = module._takeSnapshotSilent(methodName);
867
+ } catch (e) {
868
+ _deasync.default.sleep(1000);
869
+ try {
870
+ snapshot = module._takeSnapshotSilent(methodName);
871
+ } catch (e) {
872
+ return false;
873
+ }
874
+ }
875
+ if (snapshot) {
876
+ if (!step.attachments) {
877
+ step.attachments = [];
878
+ }
879
+ const snapshotType = module.name && module.name === 'mob' ? 'xml' : 'html';
880
+ const attachment = coreUtils.newSnapshotAttachment(options, snapshot, snapshotType);
881
+ if (attachment) {
882
+ step.attachments.push(attachment);
883
+ return true;
884
+ }
885
+ }
886
+ return false;
887
+ }
888
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2xvYiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfZnMiLCJfZGVhc3luYyIsIl9mdXR1cmUiLCJfZmliZXJzIiwiX29zIiwiX3N0ZXBSZXN1bHQiLCJfT3h5Z2VuRXZlbnRzIiwiX3V0aWwiLCJjb3JlVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9PeHlnZW5FcnJvciIsIl9oZWxwZXIiLCJfc3RhdHVzIiwiTW9kdWxlcyIsIl9sb2dnZXIyIiwiX094eWdlblN1Yk1vZHVsZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInYxIiwiZ2xvYmFsIiwib3JpZyIsIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJfIiwic3RhY2siLCJlcnIiLCJjYXB0dXJlU3RhY2tUcmFjZSIsIkRFRkFVTFRfVElNRU9VVCIsIkRFRkFVTFRfT1BUUyIsImJhY2t0cmFjZSIsImNvbXBpbGVyIiwiZmFpbEFtYmlndW91c0RlZmluaXRpb25zIiwiZmFpbEZhc3QiLCJpZ25vcmVVbmRlZmluZWREZWZpbml0aW9ucyIsIm5hbWUiLCJwcm9maWxlIiwib3JkZXIiLCJzbmlwcGV0U3ludGF4IiwidW5kZWZpbmVkIiwic25pcHBldHMiLCJzb3VyY2UiLCJzdHJpY3QiLCJ0YWdFeHByZXNzaW9uIiwidGFnc0luVGl0bGUiLCJ0aW1lb3V0IiwiTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgiLCJTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgiLCJET19OT1RfV1JBUF9NRVRIT0RTIiwiREVGQVVMVF9DVFgiLCJwYXJhbXMiLCJ2YXJzIiwiZW52IiwiY2FwcyIsImF0dHJpYnV0ZXMiLCJERUZBVUxUX1JFU1VMVF9TVE9SRSIsInN0ZXBzIiwibG9ncyIsImF0dGFjaG1lbnRzIiwiaGFyIiwiT3h5Z2VuIiwiT3h5Z2VuRXZlbnRzIiwiY29uc3RydWN0b3IiLCJpc0luaXRpYWxpemVkIiwicmVzdWx0U3RvcmUiLCJjdHgiLCJtb2R1bGVzIiwic2VydmljZXMiLCJyZXBvIiwiY2FwYWJpbGl0aWVzIiwib3B0cyIsIm94QmFzZURpciIsInBhdGgiLCJqb2luIiwiX19kaXJuYW1lIiwibG9nZ2VyIiwiX3dyYXBMb2dnZXIiLCJfd2FpdFN0ZXBSZXN1bHRMaXN0IiwiaW5pdCIsIm9wdGlvbnMiLCJyZXN1bHRzIiwiYXNzaWduIiwiY3dkIiwicHJvY2VzcyIsImtleXMiLCJsZW5ndGgiLCJtYWtlT3hHbG9iYWwiLCJfbG9hZFNlcnZpY2VzIiwiX2xvYWRNb2R1bGVzIiwiZ2xvYmFsU2NvcGUiLCJtYWtlQ29udGV4dEFuZE1vZHVsZXNHbG9iYWwiLCJkaXNwb3NlTW9kdWxlcyIsInN0YXR1cyIsIl9kaXNwb3NlTW9kdWxlcyIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJTVEFUVVMiLCJXQVJOSU5HIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm1vZENhcHMiLCJtb2R1bGVOYW1lIiwibW9kdWxlIiwiX2dldENhcGFiaWxpdGllcyIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImFkZEF0dHJpYnV0ZSIsImJpbmQiLCJhZGRBdHRhY2htZW50IiwidmFsdWUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJmaWxlUGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInB1c2giLCJuZXdGaWxlQXR0YWNobWVudCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJ0b1VwcGVyQ2FzZSIsIm1zZyIsInNoaWZ0IiwiZW1pdExvZyIsIm94U2VydmljZXNEaXJQYXRoIiwicmVzb2x2ZSIsInNlcnZpY2VGaWxlcyIsImdsb2IiLCJzeW5jIiwic2VydmljZUZpbGVOYW1lIiwic2VydmljZUZpbGVQYXRoIiwibWF0Y2giLCJzZXJ2aWNlTmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInNlcnZpY2UiLCJfbG9hZFNlcnZpY2UiLCJFT0wiLCJzdGFja3RyYWNlIiwic2VydmljZVBhdGgiLCJTZXJ2aWNlQ2xhc3MiLCJzZXJ2aWNlTG9nZ2VyIiwiX2xvYWRJbnRlcm5hbE1vZHVsZXMiLCJfbG9hZEV4dGVybmFsTW9kdWxlcyIsIm1vZHVsZXNGb2xkZXJQYXRoIiwibW9kdWxlc19leHQiLCJveE1vZHVsZXNEaXJQYXRoIiwibW9kdWxlRmlsZXMiLCJmb3JFYWNoIiwibW9kdWxlRmlsZU5hbWUiLCJzdGFydFRpbWUiLCJEYXRlIiwibW9kdWxlTG9nZ2VyIiwibW9kIiwibG9hZE1vZHVsZUZyb21GaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkIiwiX3dyYXBNb2R1bGUiLCJleGNsdWRlVW5kZWZpbmVkTW9kcyIsIk1vZHVsZUNsYXNzIiwiZ2V0T3hNb2R1bGVzRGlyIiwibG9hZE1vZHVsZUZyb21DbGFzcyIsIndyYXBwZXIiLCJfdGhpcyIsIm1vZHVsZU1ldGhvZHMiLCJzb21lIiwieCIsIl9nZXRBbGxQcm9wZXJ0eU5hbWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZCIsIkZ1bmN0aW9uIiwiT3h5Z2VuU3ViTW9kdWxlIiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInNsaWNlIiwiYXJndW1lbnRzIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwiZ2V0T3h5Z2VuRXJyb3IiLCJfY29tbWFuZFdyYXBwZXIiLCJjbWROYW1lIiwiY21kQXJncyIsInJldHZhbCIsImNtZEZuIiwicHVibGljTWV0aG9kIiwic3RhcnRzV2l0aCIsImRlbGF5IiwiZGVhc3luYyIsInNsZWVwIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImRlY3J5cHRlZEFyZ3MiLCJfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5IiwiX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlIiwiY21kTG9jYXRpb24iLCJzdGVwUmVzdWx0SWQiLCJfZ2V0Q29tbWFuZExvY2F0aW9uIiwiZW1pdEJlZm9yZUNvbW1hbmQiLCJfd3JhcEFzeW5jIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UiLCJyZXR2YWxQcm9taXNlIiwidGhlbiIsInByb21pc2VEb25lIiwibG9vcFdoaWxlIiwiX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQiLCJzdGVwUmVzdWx0IiwiZG9uZSIsIndhaXRJZCIsIl9nZXRTdGVwUmVzdWx0IiwiaWQiLCJpbmRleCIsInNwbGljZSIsImVtaXRBZnRlckNvbW1hbmQiLCJpc0ZhdGFsIiwiY29udGludWVPbkVycm9yIiwibG9jYXRpb24iLCJmYWlsdXJlIiwiZm4iLCJzZWxmIiwiRmliZXIiLCJjdXJyZW50IiwiZmluYWxWYWwiLCJQcm9taXNlIiwidmFsIiwiY2F0Y2giLCJmdXR1cmUiLCJGdXR1cmUiLCJyZXR1cm4iLCJ0aHJvdyIsIndhaXQiLCJfX3N0YWNrIiwiY2FsbGVyIiwiX19maWxlbmFtZSIsImdldEZpbGVOYW1lIiwiZ2V0TGluZU51bWJlciIsImdldENvbHVtbk51bWJlciIsIlN0ZXBSZXN1bHQiLCJkaXNwbGF5TmFtZSIsImdldFN0ZXBEaXNwbGF5TmFtZSIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiZXh0cmEiLCJodHRwIiwidHlwZSIsIkFTU0VSVF9QQVNTRUQiLCJQQVNTRUQiLCJGQUlMRUQiLCJhY3Rpb24iLCJfaXNBY3Rpb24iLCJfZ2V0U3RhdHMiLCJzdGF0cyIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJkaXNhYmxlU2NyZWVuc2hvdCIsInRha2VTY3JlZW5zaG90IiwidGFrZVNuYXBzaG90IiwiYmFzZWxpbmUiLCJzY3JlZW5zaG90Iiwia2V5IiwiZGlzcG9zZVJlc3VsdCIsIm9uTW9kdWxlTG9hZGVkIiwib25Nb2R1bGVJbml0aWFsaXplZCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJfbmV3QXJncyIsImFyZyIsIl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudCIsImdldERlY3J5cHRSZXN1bHQiLCJwYXJhbU5hbWUiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCIsImV4cG9ydHMiLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJfdGFrZVNuYXBzaG90U2lsZW50Iiwic25hcHNob3QiLCJzbmFwc2hvdFR5cGUiLCJhdHRhY2htZW50IiwibmV3U25hcHNob3RBdHRhY2htZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvT3h5Z2VuQ29yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cclxuaW1wb3J0IGdsb2IgZnJvbSAnZ2xvYic7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgZGVhc3luYyBmcm9tICdkZWFzeW5jJztcclxuaW1wb3J0IEZ1dHVyZSBmcm9tICdmaWJlcnMvZnV0dXJlJztcclxuaW1wb3J0IEZpYmVyIGZyb20gJ2ZpYmVycyc7XHJcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcclxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xyXG5pbXBvcnQgU3RlcFJlc3VsdCBmcm9tICcuLi9tb2RlbC9zdGVwLXJlc3VsdCc7XHJcbmltcG9ydCBPeHlnZW5FdmVudHMgZnJvbSAnLi9PeHlnZW5FdmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0ICogYXMgY29yZVV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTVEFUVVMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzLmpzJztcclxuaW1wb3J0ICogYXMgTW9kdWxlcyBmcm9tICcuLi9veF9tb2R1bGVzL2luZGV4JztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyLCB7IERFRkFVTFRfTE9HR0VSX0lTU1VFUiwgSVNTVUVSUyB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XHJcblxyXG4vKmdsb2JhbCBfX3N0YWNrKi9cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgb3JpZyA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XHJcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTtcclxuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XHJcbiAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvcmlnO1xyXG4gICAgICAgIHJldHVybiBzdGFjaztcclxuICAgIH1cclxufSk7XHJcblxyXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcclxuY29uc3QgREVGQVVMVF9PUFRTID0ge1xyXG4gICAgYmFja3RyYWNlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHNob3cgZnVsbCBiYWNrdHJhY2UgZm9yIGVycm9yc1xyXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcclxuICAgIGZhaWxBbWJpZ3VvdXNEZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCBhbWJpZ3VvdXMgZGVmaW5pdGlvbnMgYXMgZXJyb3JzXHJcbiAgICBmYWlsRmFzdDogZmFsc2UsIC8vIDxib29sZWFuPiBhYm9ydCB0aGUgcnVuIG9uIGZpcnN0IGZhaWx1cmVcclxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xyXG4gICAgbmFtZTogW10sIC8vIDxSRUdFWFBbXT4gb25seSBleGVjdXRlIHRoZSBzY2VuYXJpb3Mgd2l0aCBuYW1lIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uIChyZXBlYXRhYmxlKVxyXG4gICAgcHJvZmlsZTogW10sIC8vIDxzdHJpbmc+IChuYW1lKSBzcGVjaWZ5IHRoZSBwcm9maWxlIHRvIHVzZVxyXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcclxuICAgIG9yZGVyOiAnZGVmaW5lZCcsIC8vIDxzdHJpbmc+IHN3aXRjaCBiZXR3ZWVuIGRldGVybWluaXN0aWMgIGFuZCByYW5kb20gZmVhdHVyZSBleGVjdXRpb24uIEVpdGhlciBcImRlZmluZWRcIiwgXCJyYW5kb21cIiBvciBcInJhbmRvbTo0MlwiIHdoZXJlYXMgNDIgaXMgdGhlIHNlZWQgZm9yIHJhbmRvbWl6YXRpb25cclxuICAgIHNuaXBwZXRTeW50YXg6IHVuZGVmaW5lZCwgLy8gPHN0cmluZz4gc3BlY2lmeSBhIGN1c3RvbSBzbmlwcGV0IHN5bnRheFxyXG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgc291cmNlOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzb3VyY2UgdXJpc1xyXG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGZhaWwgaWYgdGhlcmUgYXJlIGFueSB1bmRlZmluZWQgb3IgcGVuZGluZyBzdGVwc1xyXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cclxuICAgIHRhZ3NJblRpdGxlOiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFkZCBjdWN1bWJlciB0YWdzIHRvIGZlYXR1cmUgb3Igc2NlbmFyaW8gbmFtZVxyXG4gICAgdGltZW91dDogREVGQVVMVF9USU1FT1VUIC8vIDxudW1iZXI+IHRpbWVvdXQgZm9yIHN0ZXAgZGVmaW5pdGlvbnMgaW4gbWlsbGlzZWNvbmRzXHJcbn07XHJcbmNvbnN0IE1PRFVMRV9OQU1FX01BVENIX1JFR0VYID0gL15tb2R1bGUtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVggPSAvXnNlcnZpY2UtKC4rPylcXC5qcyQvO1xyXG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XHJcblxyXG5jb25zdCBERUZBVUxUX0NUWCA9IHtcclxuICAgIHBhcmFtczoge30sXHJcbiAgICB2YXJzOiB7fSxcclxuICAgIGVudjoge30sXHJcbiAgICBjYXBzOiB7fSxcclxuICAgIGF0dHJpYnV0ZXM6IHt9LFxyXG59O1xyXG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcclxuICAgIHN0ZXBzOiBbXSxcclxuICAgIGxvZ3M6IFtdLFxyXG4gICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgaGFyOiBudWxsLFxyXG4gICAgYXR0cmlidXRlczoge31cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlbiBleHRlbmRzIE94eWdlbkV2ZW50cyB7XHJcbiAgICBjb25zdHJ1Y3RvciAoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0geyAuLi5ERUZBVUxUX1JFU1VMVF9TVE9SRSB9O1xyXG4gICAgICAgIHRoaXMuY3R4ID0geyAuLi5ERUZBVUxUX0NUWCB9O1xyXG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VydmljZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlcG8gPSB7fTtcclxuICAgICAgICB0aGlzLmNhcGFiaWxpdGllcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gbnVsbDtcclxuICAgICAgICB0aGlzLm94QmFzZURpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8nKTtcclxuICAgICAgICB0aGlzLmxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKCdPeHlnZW4nKSk7XHJcbiAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzLCBjdHggPSB7fSwgcmVzdWx0cyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX09QVFMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuY3dkID0gdGhpcy5vcHRzLmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xyXG4gICAgICAgIHRoaXMuY3R4ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX0NUWCwgY3R4IHx8IHt9KTtcclxuICAgICAgICB0aGlzLmN0eC5jYXBzID0geyAuLi5jdHguY2FwcyB8fCB7fSwgLi4uY2FwcywgfTtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1JFU1VMVF9TVE9SRSwgcmVzdWx0cyB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmN0eC5jYXBzID0gY2FwcztcclxuXHJcbiAgICAgICAgaWYgKGN0eC5hdHRyaWJ1dGVzICYmICghcmVzdWx0cy5hdHRyaWJ1dGVzIHx8ICFPYmplY3Qua2V5cyhyZXN1bHRzLmF0dHJpYnV0ZXMpLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID0geyAuLi5jdHguYXR0cmlidXRlcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVmaW5lICdveCcgb2JqZWN0IGluIGdsb2JhbCBKUyBzY29wZVxyXG4gICAgICAgIC8vIHdlIHdpbGwgdXNlIHRoaXMgb2JqZWN0IHRvIGFjY2VzcyBPeHlnZW4gbW9kdWxlcyBhbmQgdGVzdCBjb250ZXh0IGZyb20gbW9kdWxlcyB1c2VkIGluIHRoZSB0ZXN0IChpZiBhbnkpICAgICAgICBcclxuICAgICAgICB0aGlzLm1ha2VPeEdsb2JhbCgpO1xyXG4gICAgICAgIC8vIGxvYWQgc2VydmljZXNcclxuICAgICAgICB0aGlzLl9sb2FkU2VydmljZXMoKTtcclxuICAgICAgICAvLyBsb2FkIG1vZHVsZXNcclxuICAgICAgICB0aGlzLl9sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgIC8vIGlmIG9wdGlvbnMubWFrZU1vZHVsZXNHbG9iYWwgaXMgdHJ1ZSBvciB1bmRlZmluZWQgdGhhbiBkZWZpbmUgJ2N0eCcgY29udGVudCBhbmQgZWFjaCBtb2R1bGUgaW4gZ2xvYmFsIHNjb3BlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCBvcHRpb25zLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZXM6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlU2VydmljZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZTogJywgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBhZGp1c3RTY3JpcHRMaW5lKCkge1xyXG4gICAgICAgIGNvbnN0IGlzSW5EZWJ1Z01vZGUgPSBveHV0aWwuaXNJbkRlYnVnTW9kZSgpO1xyXG4gICAgICAgIC8vIGFkZCBleHRyYSBsaW5lIGlmIHdlIGFyZSBydW5uaW5nIGluIGRlYnVnZ2VyIG1vZGUgKFY4IGRlYnVnZ2VyIGFkZHMgYW4gZXh0cmEgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzSW5EZWJ1Z01vZGUgPyAtMSA6IDA7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XHJcbiAgICAgICAgdGhpcy5jdHggPSBjdHg7XHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICBnbG9iYWwub3guY3R4ID0gY3R4O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBpbiBcIm94XCIgZ2xvYmFsIHZhcmlhYmxlXHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gY3R4LnBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBjdHguZW52IHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBjdHguYXR0cmlidXRlcyB8fCB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVwb3NpdG9yeSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBvO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCByZXBvc2l0b3J5KHJlcG8pIHtcclxuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LnJlcG8gPSByZXBvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVzdWx0cygpIHtcclxuICAgICAgICAvLyBjYWxjdWxhdGUgdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiAtIHN1bW1hcnkgb2YgZHVyYXRpb25zIGZvciBhbGwgdGhlIHN0ZXBzIGluIHRoaXMgdHJhbnNhY3Rpb25cclxuICAgICAgICAvLyBhbHNvIGFkanVzdCB0cmFuc2FjdGlvbiBlbmQgdGltZSB0byBtdWNoIGVuZCB0aW1lIGZvciB0aGUgbGFzdCBleGVjdXRlZCBzdGVwIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uLlxyXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zU3RlcC5uYW1lLmluY2x1ZGVzKCcudHJhbnNhY3Rpb24nKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNOYW1lID0gdHJhbnNTdGVwLnRyYW5zYWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICYgaXMgbm90IHRoZSB0cmFuc2FjdGlvbiBzdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uICs9IHN0ZXAuZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLmVuZFRpbWUgPiB0cmFuc1N0ZXAuZW5kVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgdG8gd2FybmluZyBpZiBhdCBsZWFzdCBvbmUgb2Ygc3RlcHMgaGFzIHdhcm5pbmcgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnN0YXR1cyA9PT0gU1RBVFVTLldBUk5JTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RDYXBzID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlLm5hbWUgJiYgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgJiYgdHlwZW9mIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXBzID0gbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICAgICAgICAgIC8vIHN0b3JlIG9ubHkgbm9uLWVtcHR5IGNhcHMgcGVyIG1vZHVsZSB0aGF0IGhhcyB0aGlzLmNhcHMgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChjYXBzICYmIHR5cGVvZiBjYXBzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjYXBzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kQ2Fwc1ttb2R1bGUubmFtZV0gPSBjYXBzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtb2RDYXBzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UmVzdWx0cygpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25CZWZvcmVDYXNlICYmIGF3YWl0IG1vZHVsZS5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0ICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uU3RhcnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25CZWZvcmVDYXNlXCIgbWV0aG9kIG9mICR7bW9kdWxlTmFtZX0gbW9kdWxlLmAsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQWZ0ZXJDYXNlKGVycm9yID0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBmb3IgYXZvaWQgc3R1Y2sgb24gKi5kaXNwb3NlIGNhbGxcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25FbmQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25FbmQoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkFmdGVyQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYWtlT3hHbG9iYWwoKSB7XHJcbiAgICAgICAgaWYgKCFnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94ID0ge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxyXG4gICAgICAgICAgICAgICAgY3R4OiB0aGlzLmN0eCxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMub3B0cyxcclxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0U3RvcmU6IHRoaXMucmVzdWx0U3RvcmUsXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGU6IHRoaXMuYWRkQXR0cmlidXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhZGRBdHRhY2htZW50OiB0aGlzLmFkZEF0dGFjaG1lbnQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnb3gnIGlzIGFscmVhZHkgZ2xvYmFsXHJcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xyXG4gICAgICAgICAgICAvLyBleHBvc2UgbW9kdWxlcyBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFttb2R1bGVOYW1lXSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBleHBvc2UgXCJjdHhcIiwgXCJwYXJhbXNcIiBhbmQgXCJlbnZcIiBhcyBnbG9iYWwgdmFyaWFibGVzXHJcbiAgICAgICAgICAgIGdsb2JhbC5wYXJhbXMgPSBnbG9iYWwub3guY3R4LnBhcmFtcztcclxuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xyXG4gICAgICAgICAgICBnbG9iYWwuY3R4ID0gZ2xvYmFsLm94LmN0eDtcclxuICAgICAgICAgICAgZ2xvYmFsLmF0dHJpYnV0ZXMgPSBnbG9iYWwub3guY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgXCInbmFtZScgYW5kICd2YWx1ZScgYXJndW1lbnRzIGFyZSByZXF1aXJlZCBmb3Igb3guYWRkQXR0cmlidXRlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0U3RvcmUgJiYgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRhY2htZW50KGZpbGVQYXRoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFN0b3JlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnIoYEZpbGUgJHtmaWxlUGF0aH0gZG9lc24ndCBleGlzdGApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzLnB1c2goXHJcbiAgICAgICAgICAgIGNvcmVVdGlscy5uZXdGaWxlQXR0YWNobWVudChmaWxlUGF0aClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlT2JqZWN0RmlsZShwb1BhdGgpIHtcclxuICAgICAgICBpZiAoIXBvUGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvID0gcmVxdWlyZShwb1BhdGgpO1xyXG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBvYmplY3QgcmVwb3NpdG9yeSBhcyB0aGUgbWFpbiBvbmVcclxuICAgICAgICAgICAgdGhpcy5yZXBvc2l0b3J5ID0gcG87XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5wbyA9IHBvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvclxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZSBNZXRob2RzXHJcbiAgICAgKi9cclxuICAgIF93cmFwTG9nZ2VyKF9sb2dnZXIpIHtcclxuICAgICAgICBjb25zdCBsb2dnZXJXcmFwID0ge1xyXG4gICAgICAgICAgICBpbmZvOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdpbmZvJywgYXJncyksXHJcbiAgICAgICAgICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzKSxcclxuICAgICAgICAgICAgd2FybjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnd2FybicsIGFyZ3MpLFxyXG4gICAgICAgICAgICB1c2VySW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJEZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlcldhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcldyYXA7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvZyhfbG9nZ2VyLCBsZXZlbCwgYXJncywgc3JjID0gREVGQVVMVF9MT0dHRVJfSVNTVUVSKSB7XHJcbiAgICAgICAgaWYgKCFfbG9nZ2VyW2xldmVsXSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9sb2dnZXJbbGV2ZWxdLmFwcGx5KF9sb2dnZXIsIGFyZ3MpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gb3h1dGlsLnN0cmluZ2lmeShhcmdzLCAyKTtcclxuICAgICAgICBjb25zdCB0aW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIC8vIGFkZCB0aGUgbG9nIGVudHJ5IHRvIHRoZSByZXN1bHQgc3RvcmVcclxuICAgICAgICBpZiAodGhpcy5yZXN1bHRTdG9yZSAmJiB0aGlzLnJlc3VsdFN0b3JlLmxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogdGltZSxcclxuICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbC50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgbXNnOiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlbW92ZSBmaXJzdCBhcmd1bWVudCwgaWYgaXQncyBhIG1lc3NhZ2VcclxuICAgICAgICBhcmdzID0gbWVzc2FnZSA/IGFyZ3Muc2hpZnQoKSA6IGFyZ3M7XHJcbiAgICAgICAgdGhpcy5lbWl0TG9nKHRpbWUsIGxldmVsLCBtZXNzYWdlLCBhcmdzLCBzcmMpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkU2VydmljZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgb3hTZXJ2aWNlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X3NlcnZpY2VzJyk7XHJcbiAgICAgICAgY29uc3Qgc2VydmljZUZpbGVzID0gZ2xvYi5zeW5jKCdzZXJ2aWNlLSouanMnLCB7IGN3ZDogb3hTZXJ2aWNlc0RpclBhdGggfSk7XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgc2VydmljZXNcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlcy4uLicpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcnZpY2VGaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZU5hbWUgPSBzZXJ2aWNlRmlsZXNbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlUGF0aCA9IHBhdGguam9pbihveFNlcnZpY2VzRGlyUGF0aCwgc2VydmljZUZpbGVOYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2VydmljZUZpbGVOYW1lLm1hdGNoKFNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcmVzdWx0WzFdO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcy5vcHRzLnNlcnZpY2VzID0gdW5kZWZpbmVkIGluIHNpbmdsZSBmaWxlIG1vZGVcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLnNlcnZpY2VzKSAmJiAhdGhpcy5vcHRzLnNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2VOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlOiAnICsgc2VydmljZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlRmlsZVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS5pbml0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgc2VydmljZSBcIicgKyBzZXJ2aWNlTmFtZSArICdcIjogJyArIGUubWVzc2FnZSArIEVPTCArIChlLnN0YWNrdHJhY2UgPyBlLnN0YWNrdHJhY2UgOiAnJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aCkge1xyXG4gICAgICAgIGxldCBTZXJ2aWNlQ2xhc3MgPSByZXF1aXJlKHNlcnZpY2VQYXRoKTtcclxuICAgICAgICAvLyBFUzYgY2xhc3Mgd2lsbCBiZSB1bmRlciAnZGVmYXVsdCcgcHJvcGVydHlcclxuICAgICAgICBpZiAoU2VydmljZUNsYXNzLmRlZmF1bHQpIHtcclxuICAgICAgICAgICAgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzLmRlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgU2VydmljZToke3NlcnZpY2VOYW1lfWApKTtcclxuICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDbGFzcyh0aGlzLm9wdHMsIHRoaXMuY3R4LCB0aGlzLnJlc3VsdFN0b3JlLCBzZXJ2aWNlTG9nZ2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgaW50ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRJbnRlcm5hbE1vZHVsZXMoKTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBleHRlcm5hbCBtb2R1bGVzLi4uJyk7XHJcbiAgICAgICAgdGhpcy5fbG9hZEV4dGVybmFsTW9kdWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkRXh0ZXJuYWxNb2R1bGVzKCkge1xyXG4gICAgICAgIGxldCBtb2R1bGVzRm9sZGVyUGF0aCA9ICcuL21vZHVsZXMnO1xyXG4gICAgICAgIGlmICh0aGlzLm9wdHMubW9kdWxlc19leHQgJiYgdHlwZW9mIHRoaXMub3B0cy5tb2R1bGVzX2V4dCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbW9kdWxlc0ZvbGRlclBhdGggPSB0aGlzLm9wdHMubW9kdWxlc19leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm94QmFzZURpciwgJy4vb3hfbW9kdWxlcycpO1xyXG4gICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jd2QsIG1vZHVsZXNGb2xkZXJQYXRoKTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3hNb2R1bGVzRGlyUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbW9kdWxlRmlsZXMgPSBbXTtcclxuICAgICAgICAvLyBpZiBwYXJ0aWN1bGFyIG1vZHVsZSBuYW1lcyBhcmUgZGVmaW5lZCBpbiB0aGUgY29uZmlnLCB0aGVuIGxvYWQgb25seSB0aGVzZSBtb2R1bGVzXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRzLm1vZHVsZXMpICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcHRzLm1vZHVsZXMuZm9yRWFjaChtb2R1bGVOYW1lID0+IG1vZHVsZUZpbGVzLnB1c2goYG1vZHVsZS0ke21vZHVsZU5hbWV9LmpzYCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgYWxsIGF2YWlsYWJsZSBtb2R1bGVzIChtaWdodCBiZSBtb3JlIHRpbWUgY29uc3VtaW5nKVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtb2R1bGVGaWxlcyA9IGdsb2Iuc3luYygnbW9kdWxlLSouanMnLCB7IGN3ZDogb3hNb2R1bGVzRGlyUGF0aCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgbW9kdWxlcyAgICAgICAgXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlRmlsZU5hbWUgb2YgbW9kdWxlRmlsZXMpIHtcclxuICAgICAgICAgICAgLy8gZXh0cmFjdCBuYW1lIGZyb20gdGhlIG1vZHVsZSBmaWxlIG5hbWUgYmFzZWQgb24gbW9kdWxlIG5hbWUgcGF0dGVyblxyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlRmlsZU5hbWUubWF0Y2goTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgpWzFdO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21GaWxlKG1vZHVsZU5hbWUsIG1vZHVsZUZpbGVOYW1lLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEludGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICAvLyBpZiBgbW9kdWxlc2AgaXMgZW1wdHkgb3IgdW5kZWZpbmVkIGluIG94eWdlbi5jb25mIHRoZW4gbG9hZCBhbGwgbW9kdWxlc1xyXG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBvbmx5IHRob3NlIGltcGxpY2l0bHkgZGVmaW5lZFxyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVVbmRlZmluZWRNb2RzID0gdGhpcy5vcHRzLm1vZHVsZXMgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhNb2R1bGVzKSkge1xyXG4gICAgICAgICAgICBpZiAoZXhjbHVkZVVuZGVmaW5lZE1vZHMgJiYgIXRoaXMub3B0cy5tb2R1bGVzLmluY2x1ZGVzKG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBNb2R1bGVDbGFzcyA9IE1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBveHV0aWwuZ2V0T3hNb2R1bGVzRGlyKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbG9nZ2VyIGZvciB0aGUgbW9kdWxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgTW9kdWxlOiR7bW9kdWxlTmFtZX1gKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBtb2R1bGUgaW5zdGFuY2VcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IGNvcmVVdGlscy5sb2FkTW9kdWxlRnJvbUNsYXNzKG1vZHVsZU5hbWUsIE1vZHVsZUNsYXNzLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBvbk1vZHVsZUxvYWRlZCBob29rXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUxvYWRlZChtb2QpO1xyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBnbG9iYWwub3gubW9kdWxlc1ttb2R1bGVOYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUobW9kdWxlTmFtZSwgbW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIHdyYXAgdXBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgbW9kdWxlOiAnICsgbW9kdWxlTmFtZSArICcgWyAnICsgZHVyYXRpb24gKyAnIHNlYyBdJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgbW9kdWxlIFwiJyArIG1vZHVsZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHRoYXQgZmFpbGVkIHRvIGxvYWQsIGV4Y2VwdCBXZWIgYW5kIE1vYiBtb2R1bGVzXHJcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ3dlYicgfHwgbW9kdWxlTmFtZSA9PT0gJ21vYicpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfd3JhcE1vZHVsZShuYW1lLCBtb2R1bGUpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgbGV0IG1vZHVsZU1ldGhvZHMgPSBPYmplY3Qua2V5cyhtb2R1bGUpO1xyXG4gICAgICAgIGlmICghbW9kdWxlTWV0aG9kcy5zb21lKHggPT4geD09PSAnZXhwb3J0cycpKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZU1ldGhvZHMgPSB0aGlzLl9nZXRBbGxQcm9wZXJ0eU5hbWVzKG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IG1ldGhvZE5hbWUgb2YgbW9kdWxlTWV0aG9kcykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBtb2R1bGVbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgbW9kdWxlIHByb3BlcnR5IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24gb3IgYSBPeHlnZW5TdWJNb2R1bGVcclxuICAgICAgICAgICAgaWYgKCghKG1ldGhvZCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSAmJiAhKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkgJiYgdHlwZW9mIG1ldGhvZCAhPT0gJ2Z1bmN0aW9uJykgfHwgbWV0aG9kTmFtZSA9PT0gJ2V4cG9ydHMnIHx8IG1ldGhvZE5hbWUgPT09ICdfY29tcGlsZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG1hcCBhbmQgd3JhcCBzdWItbW9kdWxlIG1ldGhvZHMgKHJlY3Vyc2l2ZSBjYWxsIHRvIF93cmFwTW9kdWxlKVxyXG4gICAgICAgICAgICBpZiAobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gdGhpcy5fd3JhcE1vZHVsZShgJHtuYW1lfS4ke21ldGhvZE5hbWV9YCwgbWV0aG9kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBkbyBub3Qgd3JhcCBtZXRob2RzXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKERPX05PVF9XUkFQX01FVEhPRFMuaW5jbHVkZXMobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vID09PSAnZHJpdmVyJyB8fCBtZXRob2ROYW1lID09PSAnZ2V0RHJpdmVyJ1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IG1vZHVsZVttZXRob2ROYW1lXS5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzIGFuZCBldmVudCBoYW5kbGVyc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLmluZGV4T2YoJ18nKSA9PT0gMCB8fCBtZXRob2ROYW1lLmluZGV4T2YoJ29uJykgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nOiAnICsgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShuYW1lLCBtZXRob2ROYW1lLCBhcmdzKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVbbWV0aG9kTmFtZV0uYXBwbHkobW9kdWxlLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gaW50ZXJuYWwgX2dldENhcGFiaWxpdGllcyBtZXRob2QgZm9yIGludGVybmFsIE94eWdlbiBDb3JlIHVzZVxyXG4gICAgICAgICAgICAgICAgLy8gY2FsbGluZyBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCB3b24ndCBiZSB2aXNpYmxlIGluIHRoZSB0ZXN0IHJlc3VsdHNcclxuICAgICAgICAgICAgICAgIGlmIChtZXRob2ROYW1lID09PSAnZ2V0Q2FwYWJpbGl0aWVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXJbJ19nZXRDYXBhYmlsaXRpZXMnXSA9IG1ldGhvZC5iaW5kKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2NvbW1hbmRXcmFwcGVyKG1ldGhvZE5hbWUsIGFyZ3MsIG1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgT3hFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnVGhyb3dpbmcgYWdhaW46JywgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gd3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICBfY29tbWFuZFdyYXBwZXIoY21kTmFtZSwgY21kQXJncywgbW9kdWxlLCBtb2R1bGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZVtjbWROYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBjbWRGbiA9IG1vZHVsZVtjbWROYW1lXTtcclxuICAgICAgICBjb25zdCBwdWJsaWNNZXRob2QgPSAhY21kTmFtZS5zdGFydHNXaXRoKCdfJykgJiYgY21kTmFtZSAhPT0gJ2Rpc3Bvc2UnO1xyXG5cclxuICAgICAgICAvLyBkZWxheSB0aGUgY29tbWFuZCBleGVjdXRpb24gaWYgcmVxdWlyZWRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMub3B0cy5kZWxheSAmJlxyXG4gICAgICAgICAgICBwdWJsaWNNZXRob2QgJiZcclxuICAgICAgICAgICAgY21kTmFtZSAhPT0gJ2luaXQnICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbidcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgZGVhc3luYy5zbGVlcCh0aGlzLm9wdHMuZGVsYXkgKiAxMDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRocm93IGlmIGEgY29tbWFuZCBleGVjdXRlZCBvbiB1bml0aWFsaXplZCBtb2R1bGUgKGV4Y2VwdCBpbnRlcm5hbCBtZXRob2RzIGFuZCBhIGZldyBvdGhlcilcclxuICAgICAgICBpZiAoIW1vZHVsZS5pc0luaXRpYWxpemVkICYmIHB1YmxpY01ldGhvZCAmJiBjbWROYW1lICE9PSAnaW5pdCcgJiYgY21kTmFtZSAhPT0gJ3RyYW5zYWN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ01pc3NpbmcgJyArIG1vZHVsZU5hbWUgKyAnLmluaXQoKScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVjdHlwdCBhcmd1bWVudHNcclxuICAgICAgICBsZXQgZGVjcnlwdGVkQXJncyA9IHRoaXMuX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseShjbWRBcmdzLCBtb2R1bGVOYW1lKTtcclxuICAgICAgICBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoZGVjcnlwdGVkQXJncyk7XHJcblxyXG4gICAgICAgIC8vIHJlcGxhY2UgcGFyYW1ldGVycyBpbiBtZXRob2QgYXJndW1lbnRzIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXNcclxuICAgICAgICBjbWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoY21kQXJncyk7XHJcbiAgICAgICAgLy8gc3RhcnQgbWVhc3VyaW5nIG1ldGhvZCBleGVjdXRpb24gdGltZVxyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgLy8gYWRkIGNvbW1hbmQgbG9jYXRpb24gaW5mb3JtYXRpb24gKGUuZy4gZmlsZSBuYW1lIGFuZCBjb21tYW5kIGxpbmUpXHJcbiAgICAgICAgbGV0IGNtZExvY2F0aW9uID0gbnVsbDtcclxuICAgICAgICAvLyBnZW5lcmF0ZSBzdGVwIHJlc3VsdCBpZFxyXG4gICAgICAgIGNvbnN0IHN0ZXBSZXN1bHRJZCA9IHYxKCk7XHJcbiAgICAgICAgLy8gZG8gbm90IHJlcG9ydCByZXN1bHRzIG9yIGxpbmUgdXBkYXRlcyBvbiBpbnRlcm5hbCBtZXRob2RzIChzdGFydGVkIHdpdGggJ18nKVxyXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgY21kTG9jYXRpb24gPSB0aGlzLl9nZXRDb21tYW5kTG9jYXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0QmVmb3JlQ29tbWFuZChzdGVwUmVzdWx0SWQsIGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIHN0YXJ0VGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRXhlY3V0aW5nOiAnICsgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGVtaXQgYmVmb3JlIGV2ZW50c1xyXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2Rpc3Bvc2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwQXN5bmModGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZSkuYXBwbHkodGhpcywgW21vZHVsZV0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXR2YWxQcm9taXNlID0gdGhpcy5fd3JhcEFzeW5jKG1vZHVsZVtjbWROYW1lXSkuYXBwbHkobW9kdWxlLCBkZWNyeXB0ZWRBcmdzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXR2YWxQcm9taXNlICYmIHJldHZhbFByb21pc2UudGhlbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2VEb25lID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dmFsUHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhcHJvbWlzZURvbmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsUHJvbWlzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNtZE5hbWUgPT09ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2ludmFsaWQgc2Vzc2lvbiBpZCcpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgZXJyb3Igb2N1cnJlZCBhZnRlciB0aGUgbW9kdWxlIHdhcyBkaXNwb3NlZCAob3IgaW4gYSBwcm9jZXNzIG9mIGJlaW5nIGRpc3Bvc2VkKVxyXG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0IGZvciBpbml0IG1ldGhvZHMgb2YgY291cnNlXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kdWxlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBtb2R1bGUuaXNJbml0aWFsaXplZCA9PT0gJ2Jvb2xlYW4nICYmICFtb2R1bGUuaXNJbml0aWFsaXplZClcclxuICAgICAgICAgICAgICAgICAgICAmJiBjbWROYW1lICE9PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCc9PT09IGVycm9yID09PT0nLCBlKVxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgbGV0IHN0ZXBSZXN1bHQ7XHJcbiAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBjb25zdCB3YWl0SWQgPSArbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnB1c2god2FpdElkKTtcclxuXHJcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQgPSB0aGlzLl9nZXRTdGVwUmVzdWx0KG1vZHVsZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncywgY21kTG9jYXRpb24sIHN0YXJ0VGltZSwgZW5kVGltZSwgcmV0dmFsLCBlcnJvcik7XHJcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQuaWQgPSBzdGVwUmVzdWx0SWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5pbmRleE9mKHdhaXRJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgICAgLy9zdGVwUmVzdWx0LmxvY2F0aW9uID0gY21kTG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzLnB1c2goc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEFmdGVyQ29tbWFuZChjbWROYW1lLCBtb2R1bGVOYW1lLCBjbWRGbiwgY21kQXJncywgdGhpcy5jdHgsIGNtZExvY2F0aW9uLCBlbmRUaW1lLCBzdGVwUmVzdWx0KTtcclxuICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuaXNGYXRhbCAmJiAhdGhpcy5vcHRzLmNvbnRpbnVlT25FcnJvcikge1xyXG4gICAgICAgICAgICBpZiAoIWVycm9yLmxvY2F0aW9uICYmIGNtZExvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IGNtZExvY2F0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RlcFJlc3VsdCAmJiBzdGVwUmVzdWx0LmZhaWx1cmUgJiYgc3RlcFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXB1YmxpY01ldGhvZCkge1xyXG4gICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcblxyXG4gICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBBc3luYyAoZm4sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSBjb250ZXh0IHx8IHRoaXM7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvZGUgaXMgbm90IHJ1bm5pbmcgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHJ1biBhc3luYyBjb2RlIGFzIHN5bmMgdXNpbmcgZGVhc3luYyBtb2R1bGVcclxuICAgICAgICAgICAgaWYgKCFGaWJlci5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR2YWwgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBmaW5hbFZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJldHZhbCAmJiByZXR2YWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXR2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbCA9IHZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxWYWwgPSByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5tZXNzYWdlICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGUubWVzc2FnZS5pbmNsdWRlcygncmVhZHlTdGF0ZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdGhpcyBlcnJvciBhcyBpdCB1c3VhbGx5IGhhcHBlbnMgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBPeHlnZW4gaXMgZGlzcG9zZWQgYW5kIHByb2Nlc3MgaXMgYmVpbmcga2lsbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlYXN5bmMubG9vcFdoaWxlKCkgZmFpbGVkOicsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcmV0dmFsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSBhcmUgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHVzZSBGaWJlcidzIEZ1dHVyZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlID0gbmV3IEZ1dHVyZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbigodmFsKSA9PiBmdXR1cmUucmV0dXJuKHZhbCksIChlcnIpID0+IGZ1dHVyZS50aHJvdyhlcnIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnV0dXJlLndhaXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0cmlldmUgY3VycmVudCBsaW5lIGFuZCBmdW5jdGlvbiBuYW1lIGZyb20gdGhlIGNhbGwgc3RhY2tcclxuICAgIF9nZXRDb21tYW5kTG9jYXRpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBfX3N0YWNrO1xyXG4gICAgICAgIGxldCBjYWxsZXIgPSBudWxsO1xyXG4gICAgICAgIGZvciAobGV0IGNhbGwgb2Ygc3RhY2spIHtcclxuICAgICAgICAgICAgaWYgKF9fZmlsZW5hbWUgPT09IGNhbGwuZ2V0RmlsZU5hbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBmaXJzdCBjYWxsZXIsIHdoaWNoIGlzIG5vdCB0aGUgY3VycmVudCBmaWxlXHJcbiAgICAgICAgICAgIGNhbGxlciA9IGNhbGw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FsbGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtjYWxsZXIuZ2V0RmlsZU5hbWUoKX06JHtjYWxsZXIuZ2V0TGluZU51bWJlcigpICsgdGhpcy5hZGp1c3RTY3JpcHRMaW5lfToke2NhbGxlci5nZXRDb2x1bW5OdW1iZXIoKX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MsIGxvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyKSB7XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBuZXcgU3RlcFJlc3VsdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9XHJcbiAgICAgICAgICAgIChtb2R1bGUuZ2V0U3RlcERpc3BsYXlOYW1lICYmIG1vZHVsZS5nZXRTdGVwRGlzcGxheU5hbWUobWV0aG9kTmFtZSwgYXJncywgcmV0dmFsLCBlcnIpKSB8fFxyXG4gICAgICAgICAgICBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG5cclxuICAgICAgICBzdGVwLm5hbWUgPSBkaXNwbGF5TmFtZTtcclxuICAgICAgICBzdGVwLnRyYW5zYWN0aW9uID0gZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lIHx8IG51bGw7ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3aHkgaXMgdGhpcyBoZXJlIGlmIGl0J3MgYWxyZWFkeSBwb3B1bGF0ZWQgaW4gcnM/XHJcbiAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGxvY2F0aW9uO1xyXG4gICAgICAgIC8vIG1vZHVsZS5leHRyYSBpcyByZXNldGVkIGZvciBlYWNoIHN0ZXAsIHNvIHdlIG11c3QgY2xvbmUgaXRcclxuICAgICAgICBzdGVwLmV4dHJhID0geyAuLi5tb2R1bGUuZXh0cmEgfTtcclxuICAgICAgICBpZiAobW9kdWxlLmV4dHJhICYmIG1vZHVsZS5leHRyYS5odHRwKSB7XHJcbiAgICAgICAgICAgIHN0ZXAudHlwZSA9ICdodHRwJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnIgJiYgZXJyLnR5cGUgJiYgZXJyLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfUEFTU0VEKSB7XHJcbiAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLlBBU1NFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSBzdGVwIHN0YXR1c1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmlzRmF0YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZHVsZU5hbWUgPT09ICdsb2cnICYmIG1ldGhvZE5hbWUgPT09ICd3YXJuJykge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLlBBU1NFRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RlcC5hY3Rpb24gPSAodHlwZW9mIG1vZHVsZS5faXNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBtb2R1bGUuX2lzQWN0aW9uKG1ldGhvZE5hbWUpIDogZmFsc2UpO1xyXG4gICAgICAgIHN0ZXAuc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHN0ZXAuZW5kVGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgc3RlcC5kdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLl9nZXRTdGF0cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXRzID0gbW9kdWxlLl9nZXRTdGF0cyhtZXRob2ROYW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXRzID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFTU0VSVF9QQVNTRUQpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlZFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgc3RlcC5mYWlsdXJlLmxvY2F0aW9uID0gbG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlU2NyZWVuc2hvdChtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRha2VTbmFwc2hvdCh0aGlzLm9wdHMsIG1vZHVsZSwgc3RlcCwgbWV0aG9kTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIGluIFwiYmFzZWxpbmVcIiBtb2RlLCB0YWtlIHNuYXBzaG90IGFuZCBzY3JlZW5zaG90IGZvciBlYWNoIFwiYWN0aW9uXCIgc3RlcFxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0cy5iYXNlbGluZSkge1xyXG4gICAgICAgICAgICBpZiAoIXN0ZXAuc2NyZWVuc2hvdCAmJiBzdGVwLmFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGFrZVNjcmVlbnNob3QobW9kdWxlLCBzdGVwLCBtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YWtlU25hcHNob3QodGhpcy5vcHRzLCBtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZVNlcnZpY2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlcyB8fCB0eXBlb2YgdGhpcy5zZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2VydmljZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2UuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgc2VydmljZSBkaXNwb3NhbCBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke2tleX0nOmAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMgfHwgdHlwZW9mIHRoaXMubW9kdWxlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZC5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VSZXN1bHQgPSBtb2QuZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlUmVzdWx0ICYmIHR5cGVvZiBkaXNwb3NlUmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSBwcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpc3Bvc2VSZXN1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBtb2R1bGUgZGlzcG9zYWwgZXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZSAnJHtrZXl9JzogYCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogU2VydmljZXMgRXZlbnQgRW1pdHRlcnNcclxuICAgICAqL1xyXG4gICAgX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uTW9kdWxlTG9hZGVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlTG9hZGVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5vbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlSW5pdGlhbGl6ZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICghdGhpcyB8fCAhdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlV2lsbERpc3Bvc2VcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShhcmdzKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9uZXdBcmdzO1xyXG4gICAgfVxyXG4gICAgX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykge1xyXG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlcGxhY2UgdXNlciBwYXJhbWV0ZXJzIHdpdGggdmFsdWVzXHJcbiAgICAgICAgLy8gbm90ZTogdXNlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZVxyXG4gICAgICAgIGZvciAobGV0IHBhcmFtTmFtZSBpbiB0aGlzLmN0eC5wYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3R4LnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbU5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5jdHgucGFyYW1zW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJHsnICsgcGFyYW1OYW1lICsgJ30nLCAnZycpLCBwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIGZvciAobGV0IGVudk5hbWUgaW4gdGhpcy5jdHguZW52KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5lbnYuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gdGhpcy5jdHguZW52W2Vudk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIGVudk5hbWUgKyAnfScsICdnJyksIGVudlZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG4gICAgX2dldEFsbFByb3BlcnR5TmFtZXMoIG9iaiApIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCBvYmogKS5mb3JFYWNoKGZ1bmN0aW9uICggcHJvcCApIHtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvcHMuaW5kZXhPZiggcHJvcCApID09PSAtMSApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKCBwcm9wICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cclxuICAgICAgICB9IHdoaWxlICggb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKCBvYmogKSApO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF93YWl0U3RlcFJlc3VsdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGFyZ3MsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuXHJcbiAgICBfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0YWtlU2NyZWVuc2hvdChtb2R1bGUsIHN0ZXAsIG1ldGhvZE5hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgdW5hYmxlIHRvIGdldCBhIHNjcmVlbnNob3RcclxuICAgICAgICAvLyBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQgKGluIFBlcmZlY3RvIENsb3VkLCB0aGUgc2NyZWVuc2hvdCBtaWdodCBub3QgYmUgaW1taWRpYXRlbHkgYXZhaWxhYmxlKVxyXG4gICAgICAgIGRlYXN5bmMuc2xlZXAoMTAwMCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIHRvIHVzZXIgdGhhdCBhbiBhdHRlbXB0IHRvIHRha2UgYSBzY3JlZW5zaG90IGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0YWtlU25hcHNob3Qob3B0aW9ucywgbW9kdWxlLCBzdGVwLCBtZXRob2ROYW1lKSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZS5fdGFrZVNuYXBzaG90U2lsZW50ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IHNuYXBzaG90O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBzbmFwc2hvdCA9IG1vZHVsZS5fdGFrZVNuYXBzaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgc25hcHNob3QsIHdhaXQgYSBiaXQgYW5kIHRyeSBhZ2FpblxyXG4gICAgICAgIGRlYXN5bmMuc2xlZXAoMTAwMCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc25hcHNob3QgPSBtb2R1bGUuX3Rha2VTbmFwc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc25hcHNob3QpIHtcclxuICAgICAgICBpZiAoIXN0ZXAuYXR0YWNobWVudHMpIHtcclxuICAgICAgICAgICAgc3RlcC5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkZXRlcm1pbmUgc25hcHNob3QgZmlsZSBleHRlbnNpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWVcclxuICAgICAgICBjb25zdCBzbmFwc2hvdFR5cGUgPSBtb2R1bGUubmFtZSAmJiBtb2R1bGUubmFtZSA9PT0gJ21vYicgPyAneG1sJyA6ICdodG1sJztcclxuICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gY29yZVV0aWxzLm5ld1NuYXBzaG90QXR0YWNobWVudChvcHRpb25zLCBzbmFwc2hvdCwgc25hcHNob3RUeXBlKTtcclxuICAgICAgICBpZiAoYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICBzdGVwLmF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElB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Q2hCO0VBQ0EsSUFBSTtJQUNBak4sSUFBSSxDQUFDdUwsVUFBVSxHQUFHaEwsTUFBTSxDQUFDME0scUJBQXFCLENBQUMvRyxVQUFVLENBQUM7RUFDOUQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7SUFHTmtPLGdCQUFPLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDbkIsSUFBSTtNQUNBckgsSUFBSSxDQUFDdUwsVUFBVSxHQUFHaEwsTUFBTSxDQUFDME0scUJBQXFCLENBQUMvRyxVQUFVLENBQUM7SUFDOUQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7TUFFTixPQUFPLEtBQUs7SUFDaEI7RUFDSjtFQUNBLE9BQU8sSUFBSTtBQUNmO0FBRUEsU0FBU21TLFlBQVlBLENBQUNwTixPQUFPLEVBQUVzQyxNQUFNLEVBQUVQLElBQUksRUFBRWtHLFVBQVUsRUFBRTtFQUNyRCxJQUFJLE9BQU8zRixNQUFNLENBQUMyTSxtQkFBbUIsS0FBSyxVQUFVLEVBQUU7SUFDbEQsT0FBTyxLQUFLO0VBQ2hCO0VBQ0EsSUFBSUMsUUFBUTtFQUNaLElBQUk7SUFDQUEsUUFBUSxHQUFHNU0sTUFBTSxDQUFDMk0sbUJBQW1CLENBQUNoSCxVQUFVLENBQUM7RUFDckQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7SUFFTmtPLGdCQUFPLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDbkIsSUFBSTtNQUNBOEYsUUFBUSxHQUFHNU0sTUFBTSxDQUFDMk0sbUJBQW1CLENBQUNoSCxVQUFVLENBQUM7SUFDckQsQ0FBQyxDQUNELE9BQU9oTixDQUFDLEVBQUU7TUFDTixPQUFPLEtBQUs7SUFDaEI7RUFDSjtFQUVBLElBQUlpVSxRQUFRLEVBQUU7SUFDVixJQUFJLENBQUNuTixJQUFJLENBQUNwRCxXQUFXLEVBQUU7TUFDbkJvRCxJQUFJLENBQUNwRCxXQUFXLEdBQUcsRUFBRTtJQUN6QjtJQUVBLE1BQU13USxZQUFZLEdBQUc3TSxNQUFNLENBQUNsRixJQUFJLElBQUlrRixNQUFNLENBQUNsRixJQUFJLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNO0lBQzFFLE1BQU1nUyxVQUFVLEdBQUczVSxTQUFTLENBQUM0VSxxQkFBcUIsQ0FBQ3JQLE9BQU8sRUFBRWtQLFFBQVEsRUFBRUMsWUFBWSxDQUFDO0lBQ25GLElBQUlDLFVBQVUsRUFBRTtNQUNack4sSUFBSSxDQUFDcEQsV0FBVyxDQUFDNkUsSUFBSSxDQUFDNEwsVUFBVSxDQUFDO01BQ2pDLE9BQU8sSUFBSTtJQUNmO0VBQ0o7RUFDQSxPQUFPLEtBQUs7QUFDaEIiLCJpZ25vcmVMaXN0IjpbXX0=