@appium/support 2.54.2 → 2.55.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/build/lib/fs.js +1 -1
  2. package/build/lib/image-util.js +17 -10
  3. package/build/lib/index.js +98 -0
  4. package/build/lib/log-internal.js +1 -1
  5. package/build/lib/logging.js +4 -3
  6. package/build/lib/net.js +6 -4
  7. package/build/lib/plist.js +4 -4
  8. package/build/lib/system.js +3 -3
  9. package/build/lib/tempdir.js +1 -1
  10. package/build/lib/timing.js +1 -1
  11. package/build/lib/util.js +17 -17
  12. package/build/lib/zip.js +25 -15
  13. package/build/test/assets/sample_binary.plist +0 -0
  14. package/build/test/assets/sample_text.plist +28 -0
  15. package/build/test/fs-specs.js +264 -0
  16. package/build/test/helpers.js +35 -0
  17. package/build/test/image-util-e2e-specs.js +227 -0
  18. package/build/test/index-specs.js +49 -0
  19. package/build/test/log-internals-specs.js +97 -0
  20. package/build/test/logger/helpers.js +71 -0
  21. package/build/test/logger/logger-force-specs.js +41 -0
  22. package/build/test/logger/logger-normal-specs.js +113 -0
  23. package/build/test/logger/logger-test-specs.js +40 -0
  24. package/build/test/mjpeg-e2e-specs.js +96 -0
  25. package/build/test/net-e2e-specs.js +32 -0
  26. package/build/test/node-e2e-specs.js +22 -0
  27. package/build/test/plist-specs.js +54 -0
  28. package/build/test/process-specs.js +104 -0
  29. package/build/test/system-specs.js +136 -0
  30. package/build/test/tempdir-specs.js +86 -0
  31. package/build/test/timing-specs.js +125 -0
  32. package/build/test/util-e2e-specs.js +136 -0
  33. package/build/test/util-specs.js +537 -0
  34. package/build/test/zip-e2e-specs.js +233 -0
  35. package/index.js +1 -28
  36. package/lib/image-util.js +15 -7
  37. package/lib/index.js +28 -0
  38. package/lib/log-internal.js +1 -1
  39. package/lib/logging.js +1 -1
  40. package/lib/net.js +5 -4
  41. package/lib/zip.js +45 -31
  42. package/package.json +9 -15
  43. package/build/index.js +0 -98
package/build/lib/net.js CHANGED
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.uploadFile = uploadFile;
9
8
  exports.downloadFile = downloadFile;
9
+ exports.uploadFile = uploadFile;
10
10
 
11
11
  require("source-map-support/register");
12
12
 
@@ -30,6 +30,8 @@ var _axios = _interopRequireDefault(require("axios"));
30
30
 
31
31
  var _formData = _interopRequireDefault(require("form-data"));
32
32
 
33
+ const DEFAULT_TIMEOUT_MS = 4 * 60 * 1000;
34
+
33
35
  function toAxiosAuth(auth) {
34
36
  if (!_lodash.default.isPlainObject(auth)) {
35
37
  return null;
@@ -45,7 +47,7 @@ function toAxiosAuth(auth) {
45
47
  async function uploadFileToHttp(localFileStream, parsedUri, uploadOptions = {}) {
46
48
  const {
47
49
  method = 'POST',
48
- timeout = 5000,
50
+ timeout = DEFAULT_TIMEOUT_MS,
49
51
  headers,
50
52
  auth,
51
53
  fileFieldName = 'file',
@@ -186,7 +188,7 @@ async function downloadFile(remoteUrl, dstPath, downloadOptions = {}) {
186
188
  const {
187
189
  isMetered = true,
188
190
  auth,
189
- timeout = 5000,
191
+ timeout = DEFAULT_TIMEOUT_MS,
190
192
  headers
191
193
  } = downloadOptions;
192
194
  const requestOpts = {
@@ -251,4 +253,4 @@ async function downloadFile(remoteUrl, dstPath, downloadOptions = {}) {
251
253
  }require('source-map-support').install();
252
254
 
253
255
 
254
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9uZXQuanMiXSwibmFtZXMiOlsidG9BeGlvc0F1dGgiLCJhdXRoIiwiXyIsImlzUGxhaW5PYmplY3QiLCJheGlvc0F1dGgiLCJ1c2VybmFtZSIsInVzZXIiLCJwYXNzd29yZCIsInBhc3MiLCJ1cGxvYWRGaWxlVG9IdHRwIiwibG9jYWxGaWxlU3RyZWFtIiwicGFyc2VkVXJpIiwidXBsb2FkT3B0aW9ucyIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZmlsZUZpZWxkTmFtZSIsImZvcm1GaWVsZHMiLCJocmVmIiwicmVxdWVzdE9wdHMiLCJ1cmwiLCJtYXhDb250ZW50TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhCb2R5TGVuZ3RoIiwiZm9ybSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicGFpcnMiLCJpc0FycmF5IiwidG9QYWlycyIsImtleSIsInZhbHVlIiwidG9Mb3dlciIsIk9iamVjdCIsImFzc2lnbiIsImdldEhlYWRlcnMiLCJkYXRhIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5Iiwib21pdCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJpbmZvIiwidXBsb2FkRmlsZVRvRnRwIiwiaG9zdG5hbWUiLCJwb3J0IiwicHJvdG9jb2wiLCJwYXRobmFtZSIsImZ0cE9wdHMiLCJob3N0IiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJGdHAiLCJwdXQiLCJlcnIiLCJ1cGxvYWRGaWxlIiwibG9jYWxQYXRoIiwicmVtb3RlVXJpIiwiZnMiLCJleGlzdHMiLCJFcnJvciIsImlzTWV0ZXJlZCIsInBhcnNlIiwic2l6ZSIsInN0YXQiLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJpbmNsdWRlcyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJkb3dubG9hZEZpbGUiLCJyZW1vdGVVcmwiLCJkc3RQYXRoIiwiZG93bmxvYWRPcHRpb25zIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VMZW5ndGgiLCJ3cml0ZXIiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwicmVzcG9uc2VIZWFkZXJzIiwicGFyc2VJbnQiLCJwaXBlIiwib25jZSIsImUiLCJ1bnBpcGUiLCJtZXNzYWdlIiwicmltcmFmIiwic2Vjb25kc0VsYXBzZWQiLCJieXRlc1BlclNlYyIsIk1hdGgiLCJmbG9vciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsU0FBU0EsV0FBVCxDQUFzQkMsSUFBdEIsRUFBNEI7QUFDMUIsTUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQixXQUFPLElBQVA7QUFDRDs7QUFFRCxRQUFNRyxTQUFTLEdBQUc7QUFDaEJDLElBQUFBLFFBQVEsRUFBRUosSUFBSSxDQUFDSSxRQUFMLElBQWlCSixJQUFJLENBQUNLLElBRGhCO0FBRWhCQyxJQUFBQSxRQUFRLEVBQUVOLElBQUksQ0FBQ00sUUFBTCxJQUFpQk4sSUFBSSxDQUFDTztBQUZoQixHQUFsQjtBQUlBLFNBQVFKLFNBQVMsQ0FBQ0MsUUFBVixJQUFzQkQsU0FBUyxDQUFDRyxRQUFqQyxHQUE2Q0gsU0FBN0MsR0FBeUQsSUFBaEU7QUFDRDs7QUFFRCxlQUFlSyxnQkFBZixDQUFpQ0MsZUFBakMsRUFBa0RDLFNBQWxELEVBQTZEQyxhQUFhLEdBQUcsRUFBN0UsRUFBaUY7QUFDL0UsUUFBTTtBQUNKQyxJQUFBQSxNQUFNLEdBQUcsTUFETDtBQUVKQyxJQUFBQSxPQUFPLEdBQUcsSUFGTjtBQUdKQyxJQUFBQSxPQUhJO0FBSUpkLElBQUFBLElBSkk7QUFLSmUsSUFBQUEsYUFBYSxHQUFHLE1BTFo7QUFNSkMsSUFBQUE7QUFOSSxNQU9GTCxhQVBKO0FBUUEsUUFBTTtBQUFFTSxJQUFBQTtBQUFGLE1BQVdQLFNBQWpCO0FBRUEsUUFBTVEsV0FBVyxHQUFHO0FBQ2xCQyxJQUFB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LEtBQUssQ0FBQ0ssV0FBTixHQUFvQkMsU0FBM0M7O0FBQ0FyQyxvQkFBSUMsS0FBSixDQUFXLEdBQUV1QyxTQUFVLEtBQUksZ0NBQXFCWCxJQUFyQixDQUEyQixJQUE1QyxHQUNQLDJCQUEwQlksT0FBUSxRQUFPZSxjQUFjLENBQUNsQixPQUFmLENBQXVCLENBQXZCLENBQTBCLEdBRHRFOztBQUVBLFFBQUlrQixjQUFjLElBQUksQ0FBdEIsRUFBeUI7QUFDdkIsWUFBTUMsV0FBVyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBVzlCLElBQUksR0FBRzJCLGNBQWxCLENBQXBCOztBQUNBeEQsc0JBQUlDLEtBQUosQ0FBVywrQkFBOEIsZ0NBQXFCd0QsV0FBckIsQ0FBa0MsSUFBM0U7QUFDRDtBQUNGO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdG9SZWFkYWJsZVNpemVTdHJpbmcgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRnRwIGZyb20gJ2pzZnRwJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5cblxuZnVuY3Rpb24gdG9BeGlvc0F1dGggKGF1dGgpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoYXV0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGF4aW9zQXV0aCA9IHtcbiAgICB1c2VybmFtZTogYXV0aC51c2VybmFtZSB8fCBhdXRoLnVzZXIsXG4gICAgcGFzc3dvcmQ6IGF1dGgucGFzc3dvcmQgfHwgYXV0aC5wYXNzLFxuICB9O1xuICByZXR1cm4gKGF4aW9zQXV0aC51c2VybmFtZSAmJiBheGlvc0F1dGgucGFzc3dvcmQpID8gYXhpb3NBdXRoIDogbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvSHR0cCAobG9jYWxGaWxlU3RyZWFtLCBwYXJzZWRVcmksIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbWV0aG9kID0gJ1BPU1QnLFxuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIGhlYWRlcnMsXG4gICAgYXV0aCxcbiAgICBmaWxlRmllbGROYW1lID0gJ2ZpbGUnLFxuICAgIGZvcm1GaWVsZHMsXG4gIH0gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCB7IGhyZWYgfSA9IHBhcnNlZFVyaTtcblxuICBjb25zdCByZXF1ZXN0T3B0cyA9IHtcbiAgICB1cmw6IGhyZWYsXG4gICAgbWV0aG9kLFxuICAgIHRpbWVvdXQsXG4gICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgbWF4Qm9keUxlbmd0aDogSW5maW5pdHksXG4gIH07XG4gIGNvbnN0IGF4aW9zQXV0aCA9IHRvQXhpb3NBdXRoKGF1dGgpO1xuICBpZiAoYXhpb3NBdXRoKSB7XG4gICAgcmVxdWVzdE9wdHMuYXV0aCA9IGF4aW9zQXV0aDtcbiAgfVxuICBpZiAoZmlsZUZpZWxkTmFtZSkge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtLmFwcGVuZChmaWxlRmllbGROYW1lLCBsb2NhbEZpbGVTdHJlYW0pO1xuICAgIGlmIChmb3JtRmllbGRzKSB7XG4gICAgICBsZXQgcGFpcnMgPSBbXTtcbiAgICAgIGlmIChfLmlzQXJyYXkoZm9ybUZpZWxkcykpIHtcbiAgICAgICAgcGFpcnMgPSBmb3JtRmllbGRzO1xuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoZm9ybUZpZWxkcykpIHtcbiAgICAgICAgcGFpcnMgPSBfLnRvUGFpcnMoZm9ybUZpZWxkcyk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwYWlycykge1xuICAgICAgICBpZiAoXy50b0xvd2VyKGtleSkgIT09IF8udG9Mb3dlcihmaWxlRmllbGROYW1lKSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBfLmlzUGxhaW5PYmplY3QoaGVhZGVycykgPyBoZWFkZXJzIDoge30sXG4gICAgICBmb3JtLmdldEhlYWRlcnMoKSk7XG4gICAgcmVxdWVzdE9wdHMuZGF0YSA9IGZvcm07XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSkge1xuICAgICAgcmVxdWVzdE9wdHMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgfVxuICAgIHJlcXVlc3RPcHRzLmRhdGEgPSBsb2NhbEZpbGVTdHJlYW07XG4gIH1cbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nICR7bWV0aG9kfSB0byAke2hyZWZ9IHdpdGggb3B0aW9ucyAoZXhjbHVkaW5nIGRhdGEpOiBgICtcbiAgICBKU09OLnN0cmluZ2lmeShfLm9taXQocmVxdWVzdE9wdHMsIFsnZGF0YSddKSkpO1xuXG4gIGNvbnN0IHtzdGF0dXMsIHN0YXR1c1RleHR9ID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdHMpO1xuICBsb2cuaW5mbyhgU2VydmVyIHJlc3BvbnNlOiAke3N0YXR1c30gJHtzdGF0dXNUZXh0fWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlVG9GdHAgKGxvY2FsRmlsZVN0cmVhbSwgcGFyc2VkVXJpLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGF1dGgsXG4gICAgdXNlcixcbiAgICBwYXNzLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGhvc3RuYW1lLFxuICAgIHBvcnQsXG4gICAgcHJvdG9jb2wsXG4gICAgcGF0aG5hbWUsXG4gIH0gPSBwYXJzZWRVcmk7XG5cbiAgY29uc3QgZnRwT3B0cyA9IHtcbiAgICBob3N0OiBob3N0bmFtZSxcbiAgICBwb3J0OiBwb3J0IHx8IDIxLFxuICB9O1xuICBpZiAoKGF1dGg/LnVzZXIgJiYgYXV0aD8ucGFzcykgfHwgKHVzZXIgJiYgcGFzcykpIHtcbiAgICBmdHBPcHRzLnVzZXIgPSBhdXRoPy51c2VyIHx8IHVzZXI7XG4gICAgZnRwT3B0cy5wYXNzID0gYXV0aD8ucGFzcyB8fCBwYXNzO1xuICB9XG4gIGxvZy5kZWJ1ZyhgJHtwcm90b2NvbH0gdXBsb2FkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZnRwT3B0cyl9YCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbmV3IEZ0cChmdHBPcHRzKS5wdXQobG9jYWxGaWxlU3RyZWFtLCBwYXRobmFtZSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXV0aENyZWRlbnRpYWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXNlciAtIE5vbi1lbXB0eSB1c2VyIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXNzIC0gTm9uLWVtcHR5IHBhc3N3b3JkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGdHBVcGxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIHVwbG9hZCBwZXJmb3JtYW5jZVxuICogKGUuZy4gdGltaW5ncyBhbmQgc3BlZWQpXG4gKiBAcHJvcGVydHkge0F1dGhDcmVkZW50aWFsc30gYXV0aFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSHR0cFVwbG9hZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNNZXRlcmVkIFt0cnVlXSAtIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWwgdXBsb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRob2QgW1BPU1RdIC0gVGhlIEhUVFAgbWV0aG9kIHVzZWQgZm9yIGZpbGUgdXBsb2FkXG4gKiBAcHJvcGVydHkge0F1dGhDcmVkZW50aWFsc30gYXV0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIC0gVGhlIGFjdHVhbCByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gaGVhZGVycyAtIEFkZGl0aW9uYWwgcmVxdWVzdCBoZWFkZXJzIG1hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZmlsZUZpZWxkTmFtZSBbZmlsZV0gLSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBmaWVsZCBjb250YWluaW5nIHRoZSBmaWxlXG4gKiBjb250ZW50IHRvIGJlIHVwbG9hZGVkLiBBbnkgZmFsc3kgdmFsdWUgbWFrZSB0aGUgcmVxdWVzdCB0byB1c2Ugbm9uLW11bHRpcGFydCB1cGxvYWRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UGFpcj58T2JqZWN0fSBmb3JtRmllbGRzIC0gVGhlIGFkZGl0aW9uYWwgZm9ybSBmaWVsZHNcbiAqIHRvIGJlIGluY2x1ZGVkIGludG8gdGhlIHVwbG9hZCByZXF1ZXN0LiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgY29uc2lkZXJlZCBpZlxuICogYGZpbGVGaWVsZE5hbWVgIGlzIHNldFxuICovXG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZ2l2ZW4gZmlsZSB0byBhIHJlbW90ZSBsb2NhdGlvbi4gSFRUUChTKSBhbmQgRlRQXG4gKiBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQYXRoIC0gVGhlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBsb2NhbCBzdG9yYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVyaSAtIFRoZSByZW1vdGUgVVJJIHRvIHVwbG9hZCB0aGUgZmlsZSB0by5cbiAqIEBwYXJhbSB7P0Z0cFVwbG9hZE9wdGlvbnN8SHR0cFVwbG9hZE9wdGlvbnN9IHVwbG9hZE9wdGlvbnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZSAobG9jYWxQYXRoLCByZW1vdGVVcmksIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yIChgJyR7bG9jYWxQYXRofScgZG9lcyBub3QgZXhpc3RzIG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNNZXRlcmVkID0gdHJ1ZSxcbiAgfSA9IHVwbG9hZE9wdGlvbnM7XG5cbiAgY29uc3QgcGFyc2VkVXJpID0gdXJsLnBhcnNlKHJlbW90ZVVyaSk7XG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQobG9jYWxQYXRoKTtcbiAgaWYgKGlzTWV0ZXJlZCkge1xuICAgIGxvZy5pbmZvKGBVcGxvYWRpbmcgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSB0byAnJHtyZW1vdGVVcml9J2ApO1xuICB9XG4gIGNvbnN0IHRpbWVyID0gbmV3IFRpbWVyKCkuc3RhcnQoKTtcbiAgaWYgKFsnaHR0cDonLCAnaHR0cHM6J10uaW5jbHVkZXMocGFyc2VkVXJpLnByb3RvY29sKSkge1xuICAgIGlmICghdXBsb2FkT3B0aW9ucy5maWxlRmllbGROYW1lKSB7XG4gICAgICB1cGxvYWRPcHRpb25zLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LFxuICAgICAgICBfLmlzUGxhaW5PYmplY3QodXBsb2FkT3B0aW9ucy5oZWFkZXJzKSA/IHVwbG9hZE9wdGlvbnMuaGVhZGVycyA6IHt9LFxuICAgICAgICB7J0NvbnRlbnQtTGVuZ3RoJzogc2l6ZX1cbiAgICAgICk7XG4gICAgfVxuICAgIGF3YWl0IHVwbG9hZEZpbGVUb0h0dHAoZnMuY3JlYXRlUmVhZFN0cmVhbShsb2NhbFBhdGgpLCBwYXJzZWRVcmksIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKHBhcnNlZFVyaS5wcm90b2NvbCA9PT0gJ2Z0cDonKSB7XG4gICAgYXdhaXQgdXBsb2FkRmlsZVRvRnRwKGZzLmNyZWF0ZVJlYWRTdHJlYW0obG9jYWxQYXRoKSwgcGFyc2VkVXJpLCB1cGxvYWRPcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1cGxvYWQgdGhlIGZpbGUgYXQgJyR7bG9jYWxQYXRofScgdG8gJyR7cmVtb3RlVXJpfScuIGAgK1xuICAgICAgYFVuc3VwcG9ydGVkIHJlbW90ZSBwcm90b2NvbCAnJHtwYXJzZWRVcmkucHJvdG9jb2x9Jy4gYCArXG4gICAgICBgT25seSBodHRwL2h0dHBzIGFuZCBmdHAvZnRwcyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICBpZiAoaXNNZXRlcmVkKSB7XG4gICAgbG9nLmluZm8oYFVwbG9hZGVkICcke2xvY2FsUGF0aH0nIG9mICR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9IHNpemUgaW4gYCArXG4gICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzU2Vjb25kcy50b0ZpeGVkKDMpfXNgKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvd25sb2FkT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc01ldGVyZWQgW3RydWVdIC0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbCBkb3dubG9hZCBwZXJmb3JtYW5jZVxuICogKGUuZy4gdGltaW5ncyBhbmQgc3BlZWQpXG4gKiBAcHJvcGVydHkge0F1dGhDcmVkZW50aWFsc30gYXV0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIC0gVGhlIGFjdHVhbCByZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKiBAcHJvcGVydHkge09iamVjdH0gaGVhZGVycyAtIFJlcXVlc3QgaGVhZGVycyBtYXBwaW5nXG4gKi9cblxuLyoqXG4gKiBEb3dubG9hZHMgdGhlIGdpdmVuIGZpbGUgdmlhIEhUVFAoUylcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlVXJsIC0gVGhlIHJlbW90ZSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfSBkc3RQYXRoIC0gVGhlIGxvY2FsIHBhdGggdG8gZG93bmxvYWQgdGhlIGZpbGUgdG9cbiAqIEBwYXJhbSB7P0Rvd25sb2FkT3B0aW9uc30gZG93bmxvYWRPcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZG93bmxvYWQgb3BlcmF0aW9uIGZhaWxzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZSAocmVtb3RlVXJsLCBkc3RQYXRoLCBkb3dubG9hZE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaXNNZXRlcmVkID0gdHJ1ZSxcbiAgICBhdXRoLFxuICAgIHRpbWVvdXQgPSA1MDAwLFxuICAgIGhlYWRlcnMsXG4gIH0gPSBkb3dubG9hZE9wdGlvbnM7XG5cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiByZW1vdGVVcmwsXG4gICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICB0aW1lb3V0LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgaWYgKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSkge1xuICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICB9XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKS5zdGFydCgpO1xuICBsZXQgcmVzcG9uc2VMZW5ndGg7XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JpdGVyID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogcmVzcG9uc2VTdHJlYW0sXG4gICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgfSA9IGF3YWl0IGF4aW9zKHJlcXVlc3RPcHRzKTtcbiAgICByZXNwb25zZUxlbmd0aCA9IHBhcnNlSW50KHJlc3BvbnNlSGVhZGVyc1snY29udGVudC1sZW5ndGgnXSwgMTApO1xuICAgIHJlc3BvbnNlU3RyZWFtLnBpcGUod3JpdGVyKTtcblxuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc3BvbnNlU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHdyaXRlci5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgIHdyaXRlci5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLnVucGlwZSh3cml0ZXIpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZG93bmxvYWQgdGhlIGZpbGUgZnJvbSAke3JlbW90ZVVybH06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGRzdFBhdGgpO1xuICBpZiAocmVzcG9uc2VMZW5ndGggJiYgc2l6ZSAhPT0gcmVzcG9uc2VMZW5ndGgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoZHN0UGF0aCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBkb3dubG9hZGVkIGZyb20gJHtyZW1vdGVVcmx9ICgke3NpemV9IGJ5dGVzKSBgICtcbiAgICAgIGBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiBDb250ZW50LUxlbmd0aCByZXNwb25zZSBoZWFkZXIgKCR7cmVzcG9uc2VMZW5ndGh9IGJ5dGVzKWApO1xuICB9XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBjb25zdCBzZWNvbmRzRWxhcHNlZCA9IHRpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzO1xuICAgIGxvZy5kZWJ1ZyhgJHtyZW1vdGVVcmx9ICgke3RvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfSkgYCArXG4gICAgICBgaGFzIGJlZW4gZG93bmxvYWRlZCB0byAnJHtkc3RQYXRofScgaW4gJHtzZWNvbmRzRWxhcHNlZC50b0ZpeGVkKDMpfXNgKTtcbiAgICBpZiAoc2Vjb25kc0VsYXBzZWQgPj0gMikge1xuICAgICAgY29uc3QgYnl0ZXNQZXJTZWMgPSBNYXRoLmZsb29yKHNpemUgLyBzZWNvbmRzRWxhcHNlZCk7XG4gICAgICBsb2cuZGVidWcoYEFwcHJveGltYXRlIGRvd25sb2FkIHNwZWVkOiAke3RvUmVhZGFibGVTaXplU3RyaW5nKGJ5dGVzUGVyU2VjKX0vc2ApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyB1cGxvYWRGaWxlLCBkb3dubG9hZEZpbGUgfTtcbiJdLCJmaWxlIjoibGliL25ldC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
256
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9uZXQuanMiXSwibmFtZXMiOlsiREVGQVVMVF9USU1FT1VUX01TIiwidG9BeGlvc0F1dGgiLCJhdXRoIiwiXyIsImlzUGxhaW5PYmplY3QiLCJheGlvc0F1dGgiLCJ1c2VybmFtZSIsInVzZXIiLCJwYXNzd29yZCIsInBhc3MiLCJ1cGxvYWRGaWxlVG9IdHRwIiwibG9jYWxGaWxlU3RyZWFtIiwicGFyc2VkVXJpIiwidXBsb2FkT3B0aW9ucyIsIm1ldGhvZCIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZmlsZUZpZWxkTmFtZSIsImZvcm1GaWVsZHMiLCJocmVmIiwicmVxdWVzdE9wdHMiLCJ1cmwiLCJtYXhDb250ZW50TGVuZ3RoIiwiSW5maW5pdHkiLCJtYXhCb2R5TGVuZ3RoIiwiZm9ybSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwicGFpcnMiLCJpc0FycmF5IiwidG9QYWlycyIsImtleSIsInZhbHVlIiwidG9Mb3dlciIsIk9iamVjdCIsImFzc2lnbiIsImdldEhlYWRlcnMiLCJkYXRhIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5Iiwib21pdCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJpbmZvIiwidXBsb2FkRmlsZVRvRnRwIiwiaG9zdG5hbWUiLCJwb3J0IiwicHJvdG9jb2wiLCJwYXRobmFtZSIsImZ0cE9wdHMiLCJob3N0IiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJGdHAiLCJwdXQiLCJlcnIiLCJ1cGxvYWRGaWxlIiwibG9jYWxQYXRoIiwicmVtb3RlVXJpIiwiZnMiLCJleGlzdHMiLCJFcnJvciIsImlzTWV0ZXJlZCIsInBhcnNlIiwic2l6ZSIsInN0YXQiLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJpbmNsdWRlcyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJnZXREdXJhdGlvbiIsImFzU2Vjb25kcyIsInRvRml4ZWQiLCJkb3dubG9hZEZpbGUiLCJyZW1vdGVVcmwiLCJkc3RQYXRoIiwiZG93bmxvYWRPcHRpb25zIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VMZW5ndGgiLCJ3cml0ZXIiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlc3BvbnNlU3RyZWFtIiwicmVzcG9uc2VIZWFkZXJzIiwicGFyc2VJbnQiLCJwaXBlIiwib25jZSIsImUiLCJ1bnBpcGUiLCJtZXNzYWdlIiwicmltcmFmIiwic2Vjb25kc0VsYXBzZWQiLCJieXRlc1BlclNlYyIsIk1hdGgiLCJmbG9vciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsSUFBSSxFQUFKLEdBQVMsSUFBcEM7O0FBRUEsU0FBU0MsV0FBVCxDQUFzQkMsSUFBdEIsRUFBNEI7QUFDMUIsTUFBSSxDQUFDQyxnQkFBRUMsYUFBRixDQUFnQkYsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQixXQUFPLElBQVA7QUFDRDs7QUFFRCxRQUFNRyxTQUFTLEdBQUc7QUFDaEJDLElBQUFBLFFBQVEsRUFBRUosSUFBSSxDQUFDSSxRQUFMLElBQWlCSixJQUFJLENBQUNLLElBRGhCO0FBRWhCQyxJQUFBQSxRQUFRLEVBQUVOLElBQUksQ0FBQ00sUUFBTCxJQUFpQk4sSUFBSSxDQUFDTztBQUZoQixHQUFsQjtBQUlBLFNBQVFKLFNBQVMsQ0FBQ0MsUUFBVixJQUFzQkQsU0FBUyxDQUFDRyxRQUFqQyxHQUE2Q0gsU0FBN0MsR0FBeUQsSUFBaEU7QUFDRDs7QUFFRCxlQUFlSyxnQkFBZixDQUFpQ0MsZUFBakMsRUFBa0RDLFNBQWxELEVBQTZEQyxhQUFhLEdBQUcsRUFBN0UsRUFBaUY7QUFDL0UsUUFBTTtBQUNKQyxJQUFBQSxNQUFNLEdBQUcsTUFETDtBQUVKQyxJQUFBQSxPQUFPLEdBQUdmLGtCQUZOO0FBR0pnQixJQUFBQSxPQUhJO0FBSUpkLElBQUFBLElBSkk7QUFLSmUsSUFBQUEsYUFBYSxHQUFHLE1BTFo7QUFNSkMsSUFBQUE7QUFOSSxNQU9GTCxhQVBKO0FBUUEsUUFBTTtBQUFFTSxJQUFBQTtBQUFGLE1BQVdQLFNBQWpCO0FBRUEsUUFBTVEsV0FBVyxHQUFHO0FBQ2xCQyxJQUFBQSxHQUFHLEVBQUVGLElBRGE7QUFFbEJMLElBQUFBLE1BRmtCO0FBR2xCQyxJQUFBQSxPQUhrQjtBQUlsQk8sSUFBQUEsZ0JBQWdCLEVBQUVDLFFBSkE7QUFLbEJDLElBQUFBLGFBQWEsRUFBRUQ7QUFMRyxHQUFwQjtBQU9BLFFBQU1sQixTQUFTLEdBQUdKLFdBQVcsQ0FBQ0MsSUFBRCxDQUE3Qjs7QUFDQSxNQUFJRyxTQUFKLEVBQWU7QUFDYmUsSUFBQUEsV0FBVyxDQUFDbEIsSUFBWixHQUFtQkcsU0FBbkI7QUFDRDs7QUFDRCxNQUFJWSxhQUFKLEVBQW1CO0FBQ2pCLFVBQU1RLElBQUksR0FBRyxJQUFJQyxpQkFBSixFQUFiO0FBQ0FELElBQUFBLElBQUksQ0FBQ0UsTUFBTCxDQUFZVixhQUFaLEVBQTJCTixlQUEzQjs7QUFDQSxRQUFJTyxVQUFKLEVBQWdCO0FBQ2QsVUFBSVUsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsVUFBSXpCLGdCQUFFMEIsT0FBRixDQUFVWCxVQUFWLENBQUosRUFBMkI7QUFDekJVLFFBQUFBLEtBQUssR0FBR1YsVUFBUjtBQUNELE9BRkQsTUFFTyxJQUFJZixnQkFBRUMsYUFBRixDQUFnQmMsVUFBaEIsQ0FBSixFQUFpQztBQUN0Q1UsUUFBQUEsS0FBSyxHQUFHekIsZ0JBQUUyQixPQUFGLENBQVVaLFVBQVYsQ0FBUjtBQUNEOztBQUNELFdBQUssTUFBTSxDQUFDYSxHQUFELEVBQU1DLEtBQU4sQ0FBWCxJQUEyQkosS0FBM0IsRUFBa0M7QUFDaEMsWUFBSXpCLGdCQUFFOEIsT0FBRixDQUFVRixHQUFWLE1BQW1CNUIsZ0JBQUU4QixPQUFGLENBQVVoQixhQUFWLENBQXZCLEVBQWlEO0FBQy9DUSxVQUFBQSxJQUFJLENBQUNFLE1BQUwsQ0FBWUksR0FBWixFQUFpQkMsS0FBakI7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0RaLElBQUFBLFdBQVcsQ0FBQ0osT0FBWixHQUFzQmtCLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JoQyxnQkFBRUMsYUFBRixDQUFnQlksT0FBaEIsSUFBMkJBLE9BQTNCLEdBQXFDLEVBQXZELEVBQ3BCUyxJQUFJLENBQUNXLFVBQUwsRUFEb0IsQ0FBdEI7QUFFQWhCLElBQUFBLFdBQVcsQ0FBQ2lCLElBQVosR0FBbUJaLElBQW5CO0FBQ0QsR0FuQkQsTUFtQk87QUFDTCxRQUFJdEIsZ0JBQUVDLGFBQUYsQ0FBZ0JZLE9BQWhCLENBQUosRUFBOEI7QUFDNUJJLE1BQUFBLFdBQVcsQ0FBQ0osT0FBWixHQUFzQkEsT0FBdEI7QUFDRDs7QUFDREksSUFBQUEsV0FBVyxDQUFDaUIsSUFBWixHQUFtQjFCLGVBQW5CO0FBQ0Q7O0FBQ0QyQixrQkFBSUMsS0FBSixDQUFXLGNBQWF6QixNQUFPLE9BQU1LLElBQUssa0NBQWhDLEdBQ1JxQixJQUFJLENBQUNDLFNBQUwsQ0FBZXRDLGdCQUFFdUMsSUFBRixDQUFPdEIsV0FBUCxFQUFvQixDQUFDLE1BQUQsQ0FBcEIsQ0FBZixDQURGOztBQUdBLFFBQU07QUFBQ3VCLElBQUFBLE1BQUQ7QUFBU0MsSUFBQUE7QUFBVCxNQUF1QixNQUFNLG9CQUFNeEIsV0FBTixDQUFuQzs7QUFDQWtCLGtCQUFJTyxJQUFKLENBQVUsb0JBQW1CRixNQUFPLElBQUdDLFVBQVcsRUFBbEQ7QUFDRDs7QUFFRCxlQUFlRSxlQUFmLENBQWdDbkMsZUFBaEMsRUFBaURDLFNBQWpELEVBQTREQyxhQUFhLEdBQUcsRUFBNUUsRUFBZ0Y7QUFDOUUsUUFBTTtBQUNKWCxJQUFBQSxJQURJO0FBRUpLLElBQUFBLElBRkk7QUFHSkUsSUFBQUE7QUFISSxNQUlGSSxhQUpKO0FBS0EsUUFBTTtBQUNKa0MsSUFBQUEsUUFESTtBQUVKQyxJQUFBQSxJQUZJO0FBR0pDLElBQUFBLFFBSEk7QUFJSkMsSUFBQUE7QUFKSSxNQUtGdEMsU0FMSjtBQU9BLFFBQU11QyxPQUFPLEdBQUc7QUFDZEMsSUFBQUEsSUFBSSxFQUFFTCxRQURRO0FBRWRDLElBQUFBLElBQUksRUFBRUEsSUFBSSxJQUFJO0FBRkEsR0FBaEI7O0FBSUEsTUFBSzlDLElBQUksU0FBSixJQUFBQSxJQUFJLFdBQUosSUFBQUEsSUFBSSxDQUFFSyxJQUFOLElBQWNMLElBQWQsYUFBY0EsSUFBZCxlQUFjQSxJQUFJLENBQUVPLElBQXJCLElBQStCRixJQUFJLElBQUlFLElBQTNDLEVBQWtEO0FBQ2hEMEMsSUFBQUEsT0FBTyxDQUFDNUMsSUFBUixHQUFlLENBQUFMLElBQUksU0FBSixJQUFBQSxJQUFJLFdBQUosWUFBQUEsSUFBSSxDQUFFSyxJQUFOLEtBQWNBLElBQTdCO0FBQ0E0QyxJQUFBQSxPQUFPLENBQUMxQyxJQUFSLEdBQWUsQ0FBQVAsSUFBSSxTQUFKLElBQUFBLElBQUksV0FBSixZQUFBQSxJQUFJLENBQUVPLElBQU4sS0FBY0EsSUFBN0I7QUFDRDs7QUFDRDZCLGtCQUFJQyxLQUFKLENBQVcsR0FBRVUsUUFBUyxvQkFBbUJULElBQUksQ0FBQ0MsU0FBTCxDQUFlVSxPQUFmLENBQXdCLEVBQWpFOztBQUNBLFNBQU8sTUFBTSxJQUFJRSxpQkFBSixDQUFNLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0QyxRQUFJQyxjQUFKLENBQVFMLE9BQVIsRUFBaUJNLEdBQWpCLENBQXFCOUMsZUFBckIsRUFBc0N1QyxRQUF0QyxFQUFpRFEsR0FBRCxJQUFTO0FBQ3ZELFVBQUlBLEdBQUosRUFBUztBQUNQSCxRQUFBQSxNQUFNLENBQUNHLEdBQUQsQ0FBTjtBQUNELE9BRkQsTUFFTztBQUNMSixRQUFBQSxPQUFPO0FBQ1I7QUFDRixLQU5EO0FBT0QsR0FSWSxDQUFiO0FBU0Q7O0FBc0NELGVBQWVLLFVBQWYsQ0FBMkJDLFNBQTNCLEVBQXNDQyxTQUF0QyxFQUFpRGhELGFBQWEsR0FBRyxFQUFqRSxFQUFxRTtBQUNuRSxNQUFJLEVBQUMsTUFBTWlELFlBQUdDLE1BQUgsQ0FBVUgsU0FBVixDQUFQLENBQUosRUFBaUM7QUFDL0IsVUFBTSxJQUFJSSxLQUFKLENBQVksSUFBR0osU0FBVSx3Q0FBekIsQ0FBTjtBQUNEOztBQUVELFFBQU07QUFDSkssSUFBQUEsU0FBUyxHQUFHO0FBRFIsTUFFRnBELGFBRko7O0FBSUEsUUFBTUQsU0FBUyxHQUFHUyxhQUFJNkMsS0FBSixDQUFVTCxTQUFWLENBQWxCOztBQUNBLFFBQU07QUFBQ00sSUFBQUE7QUFBRCxNQUFTLE1BQU1MLFlBQUdNLElBQUgsQ0FBUVIsU0FBUixDQUFyQjs7QUFDQSxNQUFJSyxTQUFKLEVBQWU7QUFDYjNCLG9CQUFJTyxJQUFKLENBQVUsY0FBYWUsU0FBVSxRQUFPLGdDQUFxQk8sSUFBckIsQ0FBMkIsYUFBWU4sU0FBVSxHQUF6RjtBQUNEOztBQUNELFFBQU1RLEtBQUssR0FBRyxJQUFJQyxlQUFKLEdBQVlDLEtBQVosRUFBZDs7QUFDQSxNQUFJLENBQUMsT0FBRCxFQUFVLFFBQVYsRUFBb0JDLFFBQXBCLENBQTZCNUQsU0FBUyxDQUFDcUMsUUFBdkMsQ0FBSixFQUFzRDtBQUNwRCxRQUFJLENBQUNwQyxhQUFhLENBQUNJLGFBQW5CLEVBQWtDO0FBQ2hDSixNQUFBQSxhQUFhLENBQUNHLE9BQWQsR0FBd0JrQixNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQ3RCaEMsZ0JBQUVDLGFBQUYsQ0FBZ0JTLGFBQWEsQ0FBQ0csT0FBOUIsSUFBeUNILGFBQWEsQ0FBQ0csT0FBdkQsR0FBaUUsRUFEM0MsRUFFdEI7QUFBQywwQkFBa0JtRDtBQUFuQixPQUZzQixDQUF4QjtBQUlEOztBQUNELFVBQU16RCxnQkFBZ0IsQ0FBQ29ELFlBQUdXLGdCQUFILENBQW9CYixTQUFwQixDQUFELEVBQWlDaEQsU0FBakMsRUFBNENDLGFBQTVDLENBQXRCO0FBQ0QsR0FSRCxNQVFPLElBQUlELFNBQVMsQ0FBQ3FDLFFBQVYsS0FBdUIsTUFBM0IsRUFBbUM7QUFDeEMsVUFBTUgsZUFBZSxDQUFDZ0IsWUFBR1csZ0JBQUgsQ0FBb0JiLFNBQXBCLENBQUQsRUFBaUNoRCxTQUFqQyxFQUE0Q0MsYUFBNUMsQ0FBckI7QUFDRCxHQUZNLE1BRUE7QUFDTCxVQUFNLElBQUltRCxLQUFKLENBQVcsOEJBQTZCSixTQUFVLFNBQVFDLFNBQVUsS0FBMUQsR0FDYixnQ0FBK0JqRCxTQUFTLENBQUNxQyxRQUFTLEtBRHJDLEdBRWIsdURBRkcsQ0FBTjtBQUdEOztBQUNELE1BQUlnQixTQUFKLEVBQWU7QUFDYjNCLG9CQUFJTyxJQUFKLENBQVUsYUFBWWUsU0FBVSxRQUFPLGdDQUFxQk8sSUFBckIsQ0FBMkIsV0FBekQsR0FDTixHQUFFRSxLQUFLLENBQUNLLFdBQU4sR0FBb0JDLFNBQXBCLENBQThCQyxPQUE5QixDQUFzQyxDQUF0QyxDQUF5QyxHQUQ5QztBQUVEO0FBQ0Y7O0FBbUJELGVBQWVDLFlBQWYsQ0FBNkJDLFNBQTdCLEVBQXdDQyxPQUF4QyxFQUFpREMsZUFBZSxHQUFHLEVBQW5FLEVBQXVFO0FBQ3JFLFFBQU07QUFDSmYsSUFBQUEsU0FBUyxHQUFHLElBRFI7QUFFSi9ELElBQUFBLElBRkk7QUFHSmEsSUFBQUEsT0FBTyxHQUFHZixrQkFITjtBQUlKZ0IsSUFBQUE7QUFKSSxNQUtGZ0UsZUFMSjtBQU9BLFFBQU01RCxXQUFXLEdBQUc7QUFDbEJDLElBQUFBLEdBQUcsRUFBRXlELFNBRGE7QUFFbEJHLElBQUFBLFlBQVksRUFBRSxRQUZJO0FBR2xCbEUsSUFBQUE7QUFIa0IsR0FBcEI7QUFLQSxRQUFNVixTQUFTLEdBQUdKLFdBQVcsQ0FBQ0MsSUFBRCxDQUE3Qjs7QUFDQSxNQUFJRyxTQUFKLEVBQWU7QUFDYmUsSUFBQUEsV0FBVyxDQUFDbEIsSUFBWixHQUFtQkcsU0FBbkI7QUFDRDs7QUFDRCxNQUFJRixnQkFBRUMsYUFBRixDQUFnQlksT0FBaEIsQ0FBSixFQUE4QjtBQUM1QkksSUFBQUEsV0FBVyxDQUFDSixPQUFaLEdBQXNCQSxPQUF0QjtBQUNEOztBQUVELFFBQU1xRCxLQUFLLEdBQUcsSUFBSUMsZUFBSixHQUFZQyxLQUFaLEVBQWQ7QUFDQSxNQUFJVyxjQUFKOztBQUNBLE1BQUk7QUFDRixVQUFNQyxNQUFNLEdBQUdyQixZQUFHc0IsaUJBQUgsQ0FBcUJMLE9BQXJCLENBQWY7O0FBQ0EsVUFBTTtBQUNKMUMsTUFBQUEsSUFBSSxFQUFFZ0QsY0FERjtBQUVKckUsTUFBQUEsT0FBTyxFQUFFc0U7QUFGTCxRQUdGLE1BQU0sb0JBQU1sRSxXQUFOLENBSFY7QUFJQThELElBQUFBLGNBQWMsR0FBR0ssUUFBUSxDQUFDRCxlQUFlLENBQUMsZ0JBQUQsQ0FBaEIsRUFBb0MsRUFBcEMsQ0FBekI7QUFDQUQsSUFBQUEsY0FBYyxDQUFDRyxJQUFmLENBQW9CTCxNQUFwQjtBQUVBLFVBQU0sSUFBSTlCLGlCQUFKLENBQU0sQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQy9COEIsTUFBQUEsY0FBYyxDQUFDSSxJQUFmLENBQW9CLE9BQXBCLEVBQTZCbEMsTUFBN0I7QUFDQTRCLE1BQUFBLE1BQU0sQ0FBQ00sSUFBUCxDQUFZLFFBQVosRUFBc0JuQyxPQUF0QjtBQUNBNkIsTUFBQUEsTUFBTSxDQUFDTSxJQUFQLENBQVksT0FBWixFQUFzQkMsQ0FBRCxJQUFPO0FBQzFCTCxRQUFBQSxjQUFjLENBQUNNLE1BQWYsQ0FBc0JSLE1BQXRCO0FBQ0E1QixRQUFBQSxNQUFNLENBQUNtQyxDQUFELENBQU47QUFDRCxPQUhEO0FBSUQsS0FQSyxDQUFOO0FBUUQsR0FqQkQsQ0FpQkUsT0FBT2hDLEdBQVAsRUFBWTtBQUNaLFVBQU0sSUFBSU0sS0FBSixDQUFXLGlDQUFnQ2MsU0FBVSxLQUFJcEIsR0FBRyxDQUFDa0MsT0FBUSxFQUFyRSxDQUFOO0FBQ0Q7O0FBRUQsUUFBTTtBQUFDekIsSUFBQUE7QUFBRCxNQUFTLE1BQU1MLFlBQUdNLElBQUgsQ0FBUVcsT0FBUixDQUFyQjs7QUFDQSxNQUFJRyxjQUFjLElBQUlmLElBQUksS0FBS2UsY0FBL0IsRUFBK0M7QUFDN0MsVUFBTXBCLFlBQUcrQixNQUFILENBQVVkLE9BQVYsQ0FBTjtBQUNBLFVBQU0sSUFBSWYsS0FBSixDQUFXLHdDQUF1Q2MsU0FBVSxLQUFJWCxJQUFLLFVBQTNELEdBQ2IsMkRBQTBEZSxjQUFlLFNBRHRFLENBQU47QUFFRDs7QUFDRCxNQUFJakIsU0FBSixFQUFlO0FBQ2IsVUFBTTZCLGNBQWMsR0FBR3pCLEtBQUssQ0FBQ0ssV0FBTixHQUFvQkMsU0FBM0M7O0FBQ0FyQyxvQkFBSUMsS0FBSixDQUFXLEdBQUV1QyxTQUFVLEtBQUksZ0NBQXFCWCxJQUFyQixDQUEyQixJQUE1QyxHQUNQLDJCQUEwQlksT0FBUSxRQUFPZSxjQUFjLENBQUNsQixPQUFmLENBQXVCLENBQXZCLENBQTBCLEdBRHRFOztBQUVBLFFBQUlrQixjQUFjLElBQUksQ0FBdEIsRUFBeUI7QUFDdkIsWUFBTUMsV0FBVyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBVzlCLElBQUksR0FBRzJCLGNBQWxCLENBQXBCOztBQUNBeEQsc0JBQUlDLEtBQUosQ0FBVywrQkFBOEIsZ0NBQXFCd0QsV0FBckIsQ0FBa0MsSUFBM0U7QUFDRDtBQUNGO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdG9SZWFkYWJsZVNpemVTdHJpbmcgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgRnRwIGZyb20gJ2pzZnRwJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5cbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDQgKiA2MCAqIDEwMDA7XG5cbmZ1bmN0aW9uIHRvQXhpb3NBdXRoIChhdXRoKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGF1dGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBheGlvc0F1dGggPSB7XG4gICAgdXNlcm5hbWU6IGF1dGgudXNlcm5hbWUgfHwgYXV0aC51c2VyLFxuICAgIHBhc3N3b3JkOiBhdXRoLnBhc3N3b3JkIHx8IGF1dGgucGFzcyxcbiAgfTtcbiAgcmV0dXJuIChheGlvc0F1dGgudXNlcm5hbWUgJiYgYXhpb3NBdXRoLnBhc3N3b3JkKSA/IGF4aW9zQXV0aCA6IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGVUb0h0dHAgKGxvY2FsRmlsZVN0cmVhbSwgcGFyc2VkVXJpLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG1ldGhvZCA9ICdQT1NUJyxcbiAgICB0aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUX01TLFxuICAgIGhlYWRlcnMsXG4gICAgYXV0aCxcbiAgICBmaWxlRmllbGROYW1lID0gJ2ZpbGUnLFxuICAgIGZvcm1GaWVsZHMsXG4gIH0gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCB7IGhyZWYgfSA9IHBhcnNlZFVyaTtcblxuICBjb25zdCByZXF1ZXN0T3B0cyA9IHtcbiAgICB1cmw6IGhyZWYsXG4gICAgbWV0aG9kLFxuICAgIHRpbWVvdXQsXG4gICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgbWF4Qm9keUxlbmd0aDogSW5maW5pdHksXG4gIH07XG4gIGNvbnN0IGF4aW9zQXV0aCA9IHRvQXhpb3NBdXRoKGF1dGgpO1xuICBpZiAoYXhpb3NBdXRoKSB7XG4gICAgcmVxdWVzdE9wdHMuYXV0aCA9IGF4aW9zQXV0aDtcbiAgfVxuICBpZiAoZmlsZUZpZWxkTmFtZSkge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtLmFwcGVuZChmaWxlRmllbGROYW1lLCBsb2NhbEZpbGVTdHJlYW0pO1xuICAgIGlmIChmb3JtRmllbGRzKSB7XG4gICAgICBsZXQgcGFpcnMgPSBbXTtcbiAgICAgIGlmIChfLmlzQXJyYXkoZm9ybUZpZWxkcykpIHtcbiAgICAgICAgcGFpcnMgPSBmb3JtRmllbGRzO1xuICAgICAgfSBlbHNlIGlmIChfLmlzUGxhaW5PYmplY3QoZm9ybUZpZWxkcykpIHtcbiAgICAgICAgcGFpcnMgPSBfLnRvUGFpcnMoZm9ybUZpZWxkcyk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwYWlycykge1xuICAgICAgICBpZiAoXy50b0xvd2VyKGtleSkgIT09IF8udG9Mb3dlcihmaWxlRmllbGROYW1lKSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBfLmlzUGxhaW5PYmplY3QoaGVhZGVycykgPyBoZWFkZXJzIDoge30sXG4gICAgICBmb3JtLmdldEhlYWRlcnMoKSk7XG4gICAgcmVxdWVzdE9wdHMuZGF0YSA9IGZvcm07XG4gIH0gZWxzZSB7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSkge1xuICAgICAgcmVxdWVzdE9wdHMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgfVxuICAgIHJlcXVlc3RPcHRzLmRhdGEgPSBsb2NhbEZpbGVTdHJlYW07XG4gIH1cbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nICR7bWV0aG9kfSB0byAke2hyZWZ9IHdpdGggb3B0aW9ucyAoZXhjbHVkaW5nIGRhdGEpOiBgICtcbiAgICBKU09OLnN0cmluZ2lmeShfLm9taXQocmVxdWVzdE9wdHMsIFsnZGF0YSddKSkpO1xuXG4gIGNvbnN0IHtzdGF0dXMsIHN0YXR1c1RleHR9ID0gYXdhaXQgYXhpb3MocmVxdWVzdE9wdHMpO1xuICBsb2cuaW5mbyhgU2VydmVyIHJlc3BvbnNlOiAke3N0YXR1c30gJHtzdGF0dXNUZXh0fWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlVG9GdHAgKGxvY2FsRmlsZVN0cmVhbSwgcGFyc2VkVXJpLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGF1dGgsXG4gICAgdXNlcixcbiAgICBwYXNzLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIGhvc3RuYW1lLFxuICAgIHBvcnQsXG4gICAgcHJvdG9jb2wsXG4gICAgcGF0aG5hbWUsXG4gIH0gPSBwYXJzZWRVcmk7XG5cbiAgY29uc3QgZnRwT3B0cyA9IHtcbiAgICBob3N0OiBob3N0bmFtZSxcbiAgICBwb3J0OiBwb3J0IHx8IDIxLFxuICB9O1xuICBpZiAoKGF1dGg/LnVzZXIgJiYgYXV0aD8ucGFzcykgfHwgKHVzZXIgJiYgcGFzcykpIHtcbiAgICBmdHBPcHRzLnVzZXIgPSBhdXRoPy51c2VyIHx8IHVzZXI7XG4gICAgZnRwT3B0cy5wYXNzID0gYXV0aD8ucGFzcyB8fCBwYXNzO1xuICB9XG4gIGxvZy5kZWJ1ZyhgJHtwcm90b2NvbH0gdXBsb2FkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZnRwT3B0cyl9YCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbmV3IEZ0cChmdHBPcHRzKS5wdXQobG9jYWxGaWxlU3RyZWFtLCBwYXRobmFtZSwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXV0aENyZWRlbnRpYWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXNlciAtIE5vbi1lbXB0eSB1c2VyIG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXNzIC0gTm9uLWVtcHR5IHBhc3N3b3JkXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGdHBVcGxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIHVwbG9hZCBwZXJmb3JtYW5jZVxuICogKGUuZy4gdGltaW5ncyBhbmQgc3BlZWQpXG4gKiBAcHJvcGVydHkge0F1dGhDcmVkZW50aWFsc30gYXV0aFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSHR0cFVwbG9hZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNNZXRlcmVkIFt0cnVlXSAtIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWwgdXBsb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXRob2QgW1BPU1RdIC0gVGhlIEhUVFAgbWV0aG9kIHVzZWQgZm9yIGZpbGUgdXBsb2FkXG4gKiBAcHJvcGVydHkge0F1dGhDcmVkZW50aWFsc30gYXV0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzI0MDAwMF0gLSBUaGUgYWN0dWFsIHJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWFkZXJzIC0gQWRkaXRpb25hbCByZXF1ZXN0IGhlYWRlcnMgbWFwcGluZ1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmaWxlRmllbGROYW1lIFtmaWxlXSAtIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGZpbGVcbiAqIGNvbnRlbnQgdG8gYmUgdXBsb2FkZWQuIEFueSBmYWxzeSB2YWx1ZSBtYWtlIHRoZSByZXF1ZXN0IHRvIHVzZSBub24tbXVsdGlwYXJ0IHVwbG9hZFxuICogQHByb3BlcnR5IHtBcnJheTxQYWlyPnxPYmplY3R9IGZvcm1GaWVsZHMgLSBUaGUgYWRkaXRpb25hbCBmb3JtIGZpZWxkc1xuICogdG8gYmUgaW5jbHVkZWQgaW50byB0aGUgdXBsb2FkIHJlcXVlc3QuIFRoaXMgcHJvcGVydHkgaXMgb25seSBjb25zaWRlcmVkIGlmXG4gKiBgZmlsZUZpZWxkTmFtZWAgaXMgc2V0XG4gKi9cblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBnaXZlbiBmaWxlIHRvIGEgcmVtb3RlIGxvY2F0aW9uLiBIVFRQKFMpIGFuZCBGVFBcbiAqIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbFBhdGggLSBUaGUgcGF0aCB0byBhIGZpbGUgb24gdGhlIGxvY2FsIHN0b3JhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlVXJpIC0gVGhlIHJlbW90ZSBVUkkgdG8gdXBsb2FkIHRoZSBmaWxlIHRvLlxuICogQHBhcmFtIHs/RnRwVXBsb2FkT3B0aW9uc3xIdHRwVXBsb2FkT3B0aW9uc30gdXBsb2FkT3B0aW9uc1xuICovXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlIChsb2NhbFBhdGgsIHJlbW90ZVVyaSwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IgKGAnJHtsb2NhbFBhdGh9JyBkb2VzIG5vdCBleGlzdHMgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpc01ldGVyZWQgPSB0cnVlLFxuICB9ID0gdXBsb2FkT3B0aW9ucztcblxuICBjb25zdCBwYXJzZWRVcmkgPSB1cmwucGFyc2UocmVtb3RlVXJpKTtcbiAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChsb2NhbFBhdGgpO1xuICBpZiAoaXNNZXRlcmVkKSB7XG4gICAgbG9nLmluZm8oYFVwbG9hZGluZyAnJHtsb2NhbFBhdGh9JyBvZiAke3RvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfSBzaXplIHRvICcke3JlbW90ZVVyaX0nYCk7XG4gIH1cbiAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKS5zdGFydCgpO1xuICBpZiAoWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyhwYXJzZWRVcmkucHJvdG9jb2wpKSB7XG4gICAgaWYgKCF1cGxvYWRPcHRpb25zLmZpbGVGaWVsZE5hbWUpIHtcbiAgICAgIHVwbG9hZE9wdGlvbnMuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sXG4gICAgICAgIF8uaXNQbGFpbk9iamVjdCh1cGxvYWRPcHRpb25zLmhlYWRlcnMpID8gdXBsb2FkT3B0aW9ucy5oZWFkZXJzIDoge30sXG4gICAgICAgIHsnQ29udGVudC1MZW5ndGgnOiBzaXplfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdXBsb2FkRmlsZVRvSHR0cChmcy5jcmVhdGVSZWFkU3RyZWFtKGxvY2FsUGF0aCksIHBhcnNlZFVyaSwgdXBsb2FkT3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAocGFyc2VkVXJpLnByb3RvY29sID09PSAnZnRwOicpIHtcbiAgICBhd2FpdCB1cGxvYWRGaWxlVG9GdHAoZnMuY3JlYXRlUmVhZFN0cmVhbShsb2NhbFBhdGgpLCBwYXJzZWRVcmksIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVwbG9hZCB0aGUgZmlsZSBhdCAnJHtsb2NhbFBhdGh9JyB0byAnJHtyZW1vdGVVcml9Jy4gYCArXG4gICAgICBgVW5zdXBwb3J0ZWQgcmVtb3RlIHByb3RvY29sICcke3BhcnNlZFVyaS5wcm90b2NvbH0nLiBgICtcbiAgICAgIGBPbmx5IGh0dHAvaHR0cHMgYW5kIGZ0cC9mdHBzIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBsb2cuaW5mbyhgVXBsb2FkZWQgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSBpbiBgICtcbiAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9c2ApO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRG93bmxvYWRPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gLSBXaGV0aGVyIHRvIGxvZyB0aGUgYWN0dWFsIGRvd25sb2FkIHBlcmZvcm1hbmNlXG4gKiAoZS5nLiB0aW1pbmdzIGFuZCBzcGVlZClcbiAqIEBwcm9wZXJ0eSB7QXV0aENyZWRlbnRpYWxzfSBhdXRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMjQwMDAwXSAtIFRoZSBhY3R1YWwgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgLSBSZXF1ZXN0IGhlYWRlcnMgbWFwcGluZ1xuICovXG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBnaXZlbiBmaWxlIHZpYSBIVFRQKFMpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVVybCAtIFRoZSByZW1vdGUgdXJsXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSBsb2NhbCBwYXRoIHRvIGRvd25sb2FkIHRoZSBmaWxlIHRvXG4gKiBAcGFyYW0gez9Eb3dubG9hZE9wdGlvbnN9IGRvd25sb2FkT3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IElmIGRvd25sb2FkIG9wZXJhdGlvbiBmYWlsc1xuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEZpbGUgKHJlbW90ZVVybCwgZHN0UGF0aCwgZG93bmxvYWRPcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgYXV0aCxcbiAgICB0aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUX01TLFxuICAgIGhlYWRlcnMsXG4gIH0gPSBkb3dubG9hZE9wdGlvbnM7XG5cbiAgY29uc3QgcmVxdWVzdE9wdHMgPSB7XG4gICAgdXJsOiByZW1vdGVVcmwsXG4gICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJyxcbiAgICB0aW1lb3V0LFxuICB9O1xuICBjb25zdCBheGlvc0F1dGggPSB0b0F4aW9zQXV0aChhdXRoKTtcbiAgaWYgKGF4aW9zQXV0aCkge1xuICAgIHJlcXVlc3RPcHRzLmF1dGggPSBheGlvc0F1dGg7XG4gIH1cbiAgaWYgKF8uaXNQbGFpbk9iamVjdChoZWFkZXJzKSkge1xuICAgIHJlcXVlc3RPcHRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICB9XG5cbiAgY29uc3QgdGltZXIgPSBuZXcgVGltZXIoKS5zdGFydCgpO1xuICBsZXQgcmVzcG9uc2VMZW5ndGg7XG4gIHRyeSB7XG4gICAgY29uc3Qgd3JpdGVyID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogcmVzcG9uc2VTdHJlYW0sXG4gICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgfSA9IGF3YWl0IGF4aW9zKHJlcXVlc3RPcHRzKTtcbiAgICByZXNwb25zZUxlbmd0aCA9IHBhcnNlSW50KHJlc3BvbnNlSGVhZGVyc1snY29udGVudC1sZW5ndGgnXSwgMTApO1xuICAgIHJlc3BvbnNlU3RyZWFtLnBpcGUod3JpdGVyKTtcblxuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc3BvbnNlU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIHdyaXRlci5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgIHdyaXRlci5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLnVucGlwZSh3cml0ZXIpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZG93bmxvYWQgdGhlIGZpbGUgZnJvbSAke3JlbW90ZVVybH06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGRzdFBhdGgpO1xuICBpZiAocmVzcG9uc2VMZW5ndGggJiYgc2l6ZSAhPT0gcmVzcG9uc2VMZW5ndGgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoZHN0UGF0aCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBkb3dubG9hZGVkIGZyb20gJHtyZW1vdGVVcmx9ICgke3NpemV9IGJ5dGVzKSBgICtcbiAgICAgIGBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiBDb250ZW50LUxlbmd0aCByZXNwb25zZSBoZWFkZXIgKCR7cmVzcG9uc2VMZW5ndGh9IGJ5dGVzKWApO1xuICB9XG4gIGlmIChpc01ldGVyZWQpIHtcbiAgICBjb25zdCBzZWNvbmRzRWxhcHNlZCA9IHRpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzO1xuICAgIGxvZy5kZWJ1ZyhgJHtyZW1vdGVVcmx9ICgke3RvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfSkgYCArXG4gICAgICBgaGFzIGJlZW4gZG93bmxvYWRlZCB0byAnJHtkc3RQYXRofScgaW4gJHtzZWNvbmRzRWxhcHNlZC50b0ZpeGVkKDMpfXNgKTtcbiAgICBpZiAoc2Vjb25kc0VsYXBzZWQgPj0gMikge1xuICAgICAgY29uc3QgYnl0ZXNQZXJTZWMgPSBNYXRoLmZsb29yKHNpemUgLyBzZWNvbmRzRWxhcHNlZCk7XG4gICAgICBsb2cuZGVidWcoYEFwcHJveGltYXRlIGRvd25sb2FkIHNwZWVkOiAke3RvUmVhZGFibGVTaXplU3RyaW5nKGJ5dGVzUGVyU2VjKX0vc2ApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyB1cGxvYWRGaWxlLCBkb3dubG9hZEZpbGUgfTtcbiJdLCJmaWxlIjoibGliL25ldC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -5,12 +5,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.parsePlistFile = parsePlistFile;
9
- exports.parsePlist = parsePlist;
10
- exports.createPlist = createPlist;
11
- exports.updatePlistFile = updatePlistFile;
12
8
  exports.createBinaryPlist = createBinaryPlist;
9
+ exports.createPlist = createPlist;
13
10
  exports.parseBinaryPlist = parseBinaryPlist;
11
+ exports.parsePlist = parsePlist;
12
+ exports.parsePlistFile = parsePlistFile;
13
+ exports.updatePlistFile = updatePlistFile;
14
14
 
15
15
  require("source-map-support/register");
16
16
 
@@ -5,11 +5,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.isWindows = isWindows;
9
- exports.isMac = isMac;
8
+ exports.arch = arch;
10
9
  exports.isLinux = isLinux;
10
+ exports.isMac = isMac;
11
11
  exports.isOSWin64 = isOSWin64;
12
- exports.arch = arch;
12
+ exports.isWindows = isWindows;
13
13
  exports.macOsxVersion = macOsxVersion;
14
14
 
15
15
  require("source-map-support/register");
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.open = open;
9
+ exports.openDir = void 0;
9
10
  exports.path = path;
10
11
  exports.staticDir = staticDir;
11
- exports.openDir = void 0;
12
12
 
13
13
  require("source-map-support/register");
14
14
 
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.Duration = exports.Timer = void 0;
8
+ exports.default = exports.Timer = exports.Duration = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
package/build/lib/util.js CHANGED
@@ -5,34 +5,34 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.hasContent = hasContent;
9
- exports.hasValue = hasValue;
8
+ exports.W3C_WEB_ELEMENT_IDENTIFIER = exports.MiB = exports.KiB = exports.GiB = void 0;
9
+ exports.cancellableDelay = cancellableDelay;
10
+ exports.coerceVersion = coerceVersion;
11
+ exports.compareVersions = compareVersions;
10
12
  exports.escapeSpace = escapeSpace;
11
13
  exports.escapeSpecialChars = escapeSpecialChars;
12
- exports.localIp = localIp;
13
- exports.cancellableDelay = cancellableDelay;
14
- exports.multiResolve = multiResolve;
15
- exports.safeJsonParse = safeJsonParse;
16
- exports.wrapElement = wrapElement;
17
- exports.unwrapElement = unwrapElement;
18
14
  exports.filterObject = filterObject;
19
- exports.toReadableSizeString = toReadableSizeString;
20
- exports.isSubPath = isSubPath;
15
+ exports.getLockFileGuard = getLockFileGuard;
16
+ exports.hasContent = hasContent;
17
+ exports.hasValue = hasValue;
21
18
  exports.isSameDestination = isSameDestination;
22
- exports.compareVersions = compareVersions;
23
- exports.coerceVersion = coerceVersion;
24
- exports.quote = quote;
25
- exports.unleakString = unleakString;
19
+ exports.isSubPath = isSubPath;
26
20
  exports.jsonStringify = jsonStringify;
21
+ exports.localIp = localIp;
22
+ exports.multiResolve = multiResolve;
27
23
  exports.pluralize = pluralize;
28
- exports.toInMemoryBase64 = toInMemoryBase64;
29
- exports.getLockFileGuard = getLockFileGuard;
24
+ exports.quote = quote;
25
+ exports.safeJsonParse = safeJsonParse;
30
26
  Object.defineProperty(exports, "shellParse", {
31
27
  enumerable: true,
32
28
  get: function () {
33
29
  return _shellQuote.parse;
34
30
  }
35
31
  });
32
+ exports.toInMemoryBase64 = toInMemoryBase64;
33
+ exports.toReadableSizeString = toReadableSizeString;
34
+ exports.unleakString = unleakString;
35
+ exports.unwrapElement = unwrapElement;
36
36
  Object.defineProperty(exports, "uuidV1", {
37
37
  enumerable: true,
38
38
  get: function () {
@@ -57,7 +57,7 @@ Object.defineProperty(exports, "uuidV5", {
57
57
  return _uuid.v5;
58
58
  }
59
59
  });
60
- exports.KiB = exports.MiB = exports.GiB = exports.W3C_WEB_ELEMENT_IDENTIFIER = void 0;
60
+ exports.wrapElement = wrapElement;
61
61
 
62
62
  require("source-map-support/register");
63
63
 
package/build/lib/zip.js CHANGED
@@ -5,13 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.extractAllTo = extractAllTo;
9
- exports.readEntries = readEntries;
10
- exports.toInMemoryZip = toInMemoryZip;
11
8
  exports._extractEntryTo = _extractEntryTo;
12
9
  exports.assertValidZip = assertValidZip;
13
- exports.toArchive = toArchive;
14
10
  exports.default = void 0;
11
+ exports.extractAllTo = extractAllTo;
12
+ exports.readEntries = readEntries;
13
+ exports.toArchive = toArchive;
14
+ exports.toInMemoryZip = toInMemoryZip;
15
15
 
16
16
  require("source-map-support/register");
17
17
 
@@ -33,6 +33,8 @@ var _stream = _interopRequireDefault(require("stream"));
33
33
 
34
34
  var _fs2 = _interopRequireDefault(require("./fs"));
35
35
 
36
+ var _system = require("./system");
37
+
36
38
  var _base64Stream = require("base64-stream");
37
39
 
38
40
  var _util = require("./util");
@@ -224,8 +226,20 @@ async function extractAllTo(zipFilePath, destDir, opts = {}) {
224
226
  }
225
227
 
226
228
  async function extractWithSystemUnzip(zipFilePath, destDir) {
227
- const unzipExecutablePath = await assertSystemUnzip();
228
- await (0, _teen_process.exec)(unzipExecutablePath, ['-q', '-o', zipFilePath, '-d', destDir]);
229
+ const isWindowsHost = (0, _system.isWindows)();
230
+ let executablePath;
231
+
232
+ try {
233
+ executablePath = await getExecutablePath(isWindowsHost ? 'powershell.exe' : 'unzip');
234
+ } catch (e) {
235
+ throw new Error('Could not find system unzip');
236
+ }
237
+
238
+ if (isWindowsHost) {
239
+ await (0, _teen_process.exec)(executablePath, ['-command', 'Expand-Archive', '-LiteralPath', zipFilePath, '-DestinationPath', destDir, '-Force']);
240
+ } else {
241
+ await (0, _teen_process.exec)(executablePath, ['-q', '-o', zipFilePath, '-d', destDir]);
242
+ }
229
243
  }
230
244
 
231
245
  async function _extractEntryTo(zipFile, entry, destDir) {
@@ -426,16 +440,12 @@ async function toArchive(dstPath, src = {}, opts = {}) {
426
440
  });
427
441
  }
428
442
 
429
- const assertSystemUnzip = _lodash.default.memoize(async () => {
430
- try {
431
- const unzipPath = await _fs2.default.which('unzip');
443
+ const getExecutablePath = _lodash.default.memoize(async function getExecutablePath(binaryName) {
444
+ const fullPath = await _fs2.default.which(binaryName);
432
445
 
433
- _logger.default.debug('found system unzip at %s', unzipPath);
446
+ _logger.default.debug(`Found '%s' at '%s'`, binaryName, fullPath);
434
447
 
435
- return unzipPath;
436
- } catch {
437
- throw new Error('Could not find system unzip');
438
- }
448
+ return fullPath;
439
449
  });
440
450
 
441
451
  var _default = {
@@ -448,4 +458,4 @@ var _default = {
448
458
  exports.default = _default;require('source-map-support').install();
449
459
 
450
460
 
451
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsib3BlblppcCIsIkIiLCJwcm9taXNpZnkiLCJ5YXV6bCIsIm9wZW4iLCJwaXBlbGluZSIsInN0cmVhbSIsIlpJUF9NQUdJQyIsIklGTVQiLCJJRkRJUiIsIklGTE5LIiwiWmlwRXh0cmFjdG9yIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsImRlY29kZVN0cmluZ3MiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJyZWFkRW50cnkiLCJzdGFydHNXaXRoIiwiZGVzdERpciIsInBhdGgiLCJkaXJuYW1lIiwiam9pbiIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJjYW5vbmljYWxEZXN0RGlyIiwicmVhbHBhdGgiLCJyZWxhdGl2ZURlc3REaXIiLCJyZWxhdGl2ZSIsInNwbGl0Iiwic2VwIiwiaW5jbHVkZXMiLCJFcnJvciIsImV4dHJhY3RFbnRyeSIsImNsb3NlIiwiZGVzdCIsIm1vZGUiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiaXNTeW1saW5rIiwiaXNEaXIiLCJlbmRzV2l0aCIsInZlcnNpb25NYWRlQnkiLCJwcm9jTW9kZSIsImdldEV4dHJhY3RlZE1vZGUiLCJta2Rpck9wdGlvbnMiLCJyZWFkU3RyZWFtIiwib3BlblJlYWRTdHJlYW0iLCJiaW5kIiwibGluayIsInN5bWxpbmsiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImVudHJ5TW9kZSIsImRlZmF1bHREaXJNb2RlIiwiZGVmYXVsdEZpbGVNb2RlIiwicGFyc2VJbnQiLCJleHRyYWN0QWxsVG8iLCJ6aXBGaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJ1c2VTeXN0ZW1VbnppcCIsImV4dHJhY3RXaXRoU3lzdGVtVW56aXAiLCJsb2ciLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImV4dHJhY3RvciIsInVuemlwRXhlY3V0YWJsZVBhdGgiLCJhc3NlcnRTeXN0ZW1VbnppcCIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJkc3RQYXRoIiwidGVzdCIsImV4aXN0cyIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInJlcyIsImV4dHJhY3RFbnRyeVRvIiwiZW1pdCIsInRvSW5NZW1vcnlaaXAiLCJzcmNQYXRoIiwiaXNNZXRlcmVkIiwiZW5jb2RlVG9CYXNlNjQiLCJtYXhTaXplIiwiR2lCIiwibGV2ZWwiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwiYXJjaGl2ZSIsInpsaWIiLCJzcmNTaXplIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsImUiLCJ1bnBpcGUiLCJhYm9ydCIsImRlc3Ryb3kiLCJwb2ludGVyIiwiYXJjaGl2ZVN0cmVhbVByb21pc2UiLCJ0aW1lciIsIlRpbWVyIiwic3RhcnQiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJmaWxlIiwibmFtZSIsImJhc2VuYW1lIiwiZmluYWxpemUiLCJkZWJ1ZyIsImdldER1cmF0aW9uIiwiYXNTZWNvbmRzIiwidG9GaXhlZCIsIkJ1ZmZlciIsImNvbmNhdCIsImFzc2VydFZhbGlkWmlwIiwiZmlsZVBhdGgiLCJzaXplIiwiZmQiLCJhbGxvYyIsInJlYWQiLCJzaWduYXR1cmUiLCJ0b0FyY2hpdmUiLCJzcmMiLCJwYXR0ZXJuIiwiY3dkIiwiaWdub3JlIiwiZ2xvYiIsIm1lbW9pemUiLCJ1bnppcFBhdGgiLCJ3aGljaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxPQUFPLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLGVBQU1DLElBQWxCLENBQWhCOztBQUNBLE1BQU1DLFFBQVEsR0FBR0osa0JBQUVDLFNBQUYsQ0FBWUksZ0JBQU9ELFFBQW5CLENBQWpCOztBQUNBLE1BQU1FLFNBQVMsR0FBRyxJQUFsQjtBQUNBLE1BQU1DLElBQUksR0FBRyxLQUFiO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLEtBQWQ7QUFDQSxNQUFNQyxLQUFLLEdBQUcsS0FBZDs7QUFHQSxNQUFNQyxZQUFOLENBQW1CO0FBQ2pCQyxFQUFBQSxXQUFXLENBQUVDLFVBQUYsRUFBY0MsSUFBSSxHQUFHLEVBQXJCLEVBQXlCO0FBQ2xDLFNBQUtDLE9BQUwsR0FBZUYsVUFBZjtBQUNBLFNBQUtDLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtFLFFBQUwsR0FBZ0IsS0FBaEI7QUFDRDs7QUFFREMsRUFBQUEsZUFBZSxDQUFFQyxLQUFGLEVBQVM7QUFDdEIsV0FBT0MsZ0JBQUVDLFFBQUYsQ0FBV0YsS0FBSyxDQUFDRyxRQUFqQixJQUE2QkgsS0FBSyxDQUFDRyxRQUFOLENBQWVDLFFBQWYsQ0FBd0IsS0FBS1IsSUFBTCxDQUFVUyxpQkFBbEMsQ0FBN0IsR0FBb0ZMLEtBQUssQ0FBQ0csUUFBakc7QUFDRDs7QUFFWSxRQUFQRyxPQUFPLEdBQUk7QUFDZixVQUFNO0FBQ0pDLE1BQUFBLEdBREk7QUFFSkYsTUFBQUE7QUFGSSxRQUdGLEtBQUtULElBSFQ7QUFJQSxTQUFLWSxPQUFMLEdBQWUsTUFBTTFCLE9BQU8sQ0FBQyxLQUFLZSxPQUFO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QXRDOztBQUNBLFdBQU9BLFNBQVA7QUFDRCxHQUpELENBSUUsTUFBTTtBQUNOLFVBQU0sSUFBSWhILEtBQUosQ0FBVSw2QkFBVixDQUFOO0FBQ0Q7QUFDRixDQVp1QixDQUExQjs7ZUFnQmU7QUFBRXVCLEVBQUFBLFlBQUY7QUFBZ0J5QixFQUFBQSxXQUFoQjtBQUE2QkssRUFBQUEsYUFBN0I7QUFBNEM2QyxFQUFBQSxjQUE1QztBQUE0RE8sRUFBQUE7QUFBNUQsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeWF1emwgZnJvbSAneWF1emwnO1xuaW1wb3J0IGFyY2hpdmVyIGZyb20gJ2FyY2hpdmVyJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBta2RpcnAgfSBmcm9tICcuLi9saWIvbWtkaXJwJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCB7IEJhc2U2NEVuY29kZSB9IGZyb20gJ2Jhc2U2NC1zdHJlYW0nO1xuaW1wb3J0IHsgdG9SZWFkYWJsZVNpemVTdHJpbmcsIEdpQiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgZ2V0U3RyZWFtIGZyb20gJ2dldC1zdHJlYW0nO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cbmNvbnN0IG9wZW5aaXAgPSBCLnByb21pc2lmeSh5YXV6bC5vcGVuKTtcbmNvbnN0IHBpcGVsaW5lID0gQi5wcm9taXNpZnkoc3RyZWFtLnBpcGVsaW5lKTtcbmNvbnN0IFpJUF9NQUdJQyA9ICdQSyc7XG5jb25zdCBJRk1UID0gNjE0NDA7XG5jb25zdCBJRkRJUiA9IDE2Mzg0O1xuY29uc3QgSUZMTksgPSA0MDk2MDtcblxuLy8gVGhpcyBjbGFzcyBpcyBtb3N0bHkgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL2V4dHJhY3QtemlwL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5jbGFzcyBaaXBFeHRyYWN0b3Ige1xuICBjb25zdHJ1Y3RvciAoc291cmNlUGF0aCwgb3B0cyA9IHt9KSB7XG4gICAgdGhpcy56aXBQYXRoID0gc291cmNlUGF0aDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGV4dHJhY3RGaWxlTmFtZSAoZW50cnkpIHtcbiAgICByZXR1cm4gXy5pc0J1ZmZlcihlbnRyeS5maWxlTmFtZSkgPyBlbnRyeS5maWxlTmFtZS50b1N0cmluZyh0aGlzLm9wdHMuZmlsZU5hbWVzRW5jb2RpbmcpIDogZW50cnkuZmlsZU5hbWU7XG4gIH1cblxuICBhc3luYyBleHRyYWN0ICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkaXIsXG4gICAgICBmaWxlTmFtZXNFbmNvZGluZyxcbiAgICB9ID0gdGhpcy5vcHRzO1xuICAgIHRoaXMuemlwZmlsZSA9IGF3YWl0IG9wZW5aaXAodGhpcy56aXBQYXRoLCB7XG4gICAgICBsYXp5RW50cmllczogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVqb3Nod29sZmUveWF1emwvY29tbWl0L2NjNzQ1NWFjNzg5YmE4NDk3MzE4NGU1ZWJkZTA1ODFjZGM0YzNiMzkjZGlmZi0wNGM2ZTkwZmFhYzI2NzVhYTg5ZTIxNzZkMmVlYzdkOFI5NVxuICAgICAgZGVjb2RlU3RyaW5nczogIWZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdlbnRyeScsIGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHRyYWN0RmlsZU5hbWUoZW50cnkpO1xuICAgICAgICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnX19NQUNPU1gvJykpIHtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGguZGlybmFtZShwYXRoLmpvaW4oZGlyLCBmaWxlTmFtZSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLm1rZGlyKGRlc3REaXIsIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbERlc3REaXIgPSBhd2FpdCBmcy5yZWFscGF0aChkZXN0RGlyKTtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZURlc3REaXIgPSBwYXRoLnJlbGF0aXZlKGRpciwgY2Fub25pY2FsRGVzdERpcik7XG5cbiAgICAgICAgICBpZiAocmVsYXRpdmVEZXN0RGlyLnNwbGl0KHBhdGguc2VwKS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgICAgICAgbmV3IEVycm9yKGBPdXQgb2YgYm91bmQgcGF0aCBcIiR7Y2Fub25pY2FsRGVzdERpcn1cIiBmb3VuZCB3aGlsZSBwcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLmV4dHJhY3RFbnRyeShlbnRyeSk7XG4gICAgICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUuY2xvc2UoKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleHRyYWN0RW50cnkgKGVudHJ5KSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkaXIsXG4gICAgfSA9IHRoaXMub3B0cztcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHRyYWN0RmlsZU5hbWUoZW50cnkpO1xuICAgIGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4oZGlyLCBmaWxlTmFtZSk7XG5cbiAgICAvLyBjb252ZXJ0IGV4dGVybmFsIGZpbGUgYXR0ciBpbnQgaW50byBhIGZzIHN0YXQgbW9kZSBpbnRcbiAgICBjb25zdCBtb2RlID0gKGVudHJ5LmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgPj4gMTYpICYgMHhGRkZGO1xuICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBzeW1saW5rIG9yIGRpciAodXNpbmcgc3RhdCBtb2RlIGNvbnN0YW50cylcbiAgICBjb25zdCBpc1N5bWxpbmsgPSAobW9kZSAmIElGTVQpID09PSBJRkxOSztcbiAgICBjb25zdCBpc0RpciA9IChtb2RlICYgSUZNVCkgPT09IElGRElSXG4gICAgICAvLyBGYWlsc2FmZSwgYm9ycm93ZWQgZnJvbSBqc1ppcFxuICAgICAgfHwgZmlsZU5hbWUuZW5kc1dpdGgoJy8nKVxuICAgICAgLy8gY2hlY2sgZm9yIHdpbmRvd3Mgd2VpcmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnlcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhvZ2Rlbi9leHRyYWN0LXppcC9pc3N1ZXMvMTMjaXNzdWVjb21tZW50LTE1NDQ5NDU2NlxuICAgICAgfHwgKGVudHJ5LnZlcnNpb25NYWRlQnkgPj4gOCA9PT0gMCAmJiBlbnRyeS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID09PSAxNik7XG4gICAgY29uc3QgcHJvY01vZGUgPSB0aGlzLmdldEV4dHJhY3RlZE1vZGUobW9kZSwgaXNEaXIpICYgMG83Nzc7XG4gICAgLy8gYWx3YXlzIGVuc3VyZSBmb2xkZXJzIGFyZSBjcmVhdGVkXG4gICAgY29uc3QgZGVzdERpciA9IGlzRGlyID8gZGVzdCA6IHBhdGguZGlybmFtZShkZXN0KTtcbiAgICBjb25zdCBta2Rpck9wdGlvbnMgPSB7IHJlY3Vyc2l2ZTogdHJ1ZSB9O1xuICAgIGlmIChpc0Rpcikge1xuICAgICAgbWtkaXJPcHRpb25zLm1vZGUgPSBwcm9jTW9kZTtcbiAgICB9XG4gICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwgbWtkaXJPcHRpb25zKTtcbiAgICBpZiAoaXNEaXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkU3RyZWFtID0gYXdhaXQgQi5wcm9taXNpZnkodGhpcy56aXBmaWxlLm9wZW5SZWFkU3RyZWFtLmJpbmQodGhpcy56aXBmaWxlKSkoZW50cnkpO1xuICAgIGlmIChpc1N5bWxpbmspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBhd2FpdCBnZXRTdHJlYW0ocmVhZFN0cmVhbSk7XG4gICAgICBhd2FpdCBmcy5zeW1saW5rKGxpbmssIGRlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBwaXBlbGluZShyZWFkU3RyZWFtLCBmcy5jcmVhdGVXcml0ZVN0cmVhbShkZXN0LCB7IG1vZGU6IHByb2NNb2RlIH0pKTtcbiAgICB9XG4gIH1cblxuICBnZXRFeHRyYWN0ZWRNb2RlIChlbnRyeU1vZGUsIGlzRGlyKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdERpck1vZGUsXG4gICAgICBkZWZhdWx0RmlsZU1vZGUsXG4gICAgfSA9IHRoaXMub3B0cztcblxuICAgIGxldCBtb2RlID0gZW50cnlNb2RlO1xuICAgIC8vIFNldCBkZWZhdWx0cywgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKG1vZGUgPT09IDApIHtcbiAgICAgIGlmIChpc0Rpcikge1xuICAgICAgICBpZiAoZGVmYXVsdERpck1vZGUpIHtcbiAgICAgICAgICBtb2RlID0gcGFyc2VJbnQoZGVmYXVsdERpck1vZGUsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgIG1vZGUgPSAwbzc1NTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWxlTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RmlsZU1vZGUsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgIG1vZGUgPSAwbzY0NDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFeHRyYWN0QWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmaWxlTmFtZXNFbmNvZGluZyBUaGUgZW5jb2RpbmcgdG8gdXNlIGZvciBleHRyYWN0ZWQgZmlsZSBuYW1lcy5cbiAqIEZvciBaSVAgYXJjaGl2ZXMgY3JlYXRlZCBvbiBNYWNPUyBpdCBpcyB1c3VhbGx5IGV4cGVjdGVkIHRvIGJlIGB1dGY4YC5cbiAqIEJ5IGRlZmF1bHQgaXQgaXMgYXV0b2RldGVjdGVkIGJhc2VkIG9uIHRoZSBlbnRyeSBtZXRhZGF0YSBhbmQgaXMgb25seSBuZWVkZWQgdG8gYmUgc2V0IGV4cGxpY2l0bHlcbiAqIGlmIHRoZSBwYXJ0aWN1bGFyIGFyY2hpdmUgZG9lcyBub3QgY29tcGx5IHRvIHRoZSBzdGFuZGFyZHMsIHdoaWNoIGxlYWRzIHRvIGNvcnJ1cHRlZCBmaWxlIG5hbWVzXG4gKiBhZnRlciBleHRyYWN0aW9uLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBkZWZhdWx0RGlyTW9kZSBbMG83NTVdIFRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBleHRyYWN0ZWQgZm9sZGVycy4gSXQgaXMgb25seVxuICogYXBwbGllZCB3aGVuIHRoZSBleHRyYWN0b3IgaXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoaXMgdmFsdWUgZm9yIGEgZGlyZWN0b3J5IGZyb20gdGhlIGFyY2hpdmVcbiAqIG1ldGFkYXRhLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSBkZWZhdWx0RmlsZU1vZGUgWzBvNjQ0XSBUaGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgZXh0cmFjdGVkIGZpbGVzLiBJdCBpcyBvbmx5XG4gKiBhcHBsaWVkIHdoZW4gdGhlIGV4dHJhY3RvciBpcyB1bmFibGUgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZSBmb3IgYSBmaWxlIGZyb20gdGhlIGFyY2hpdmVcbiAqIG1ldGFkYXRhLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdXNlU3lzdGVtVW56aXAgW2ZhbHNlXSBJZiB0cnVlLCBhdHRlbXB0IHRvIHVzZSBzeXN0ZW0gdW56aXA7IGlmIHRoaXMgZmFpbHMsXG4gKiBmYWxsYmFjayB0byB0aGUgSlMgdW56aXAgaW1wbGVtZW50YXRpb24uXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqIEBwYXJhbSB7P0V4dHJhY3RBbGxPcHRpb25zfSBvcHRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RBbGxUbyAoemlwRmlsZVBhdGgsIGRlc3REaXIsIG9wdHMgPSB7fSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICBpZiAob3B0cy51c2VTeXN0ZW1VbnppcCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkaXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oJ3VuemlwIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvIEpTOiAlcycsIGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBjb25zdCBleHRyYWN0b3IgPSBuZXcgWmlwRXh0cmFjdG9yKHppcEZpbGVQYXRoLCB7XG4gICAgLi4ub3B0cyxcbiAgICBkaXIsXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHN5c3RlbSB1bnppcCAoZS5nLiwgYC91c3IvYmluL3VuemlwYCkuICBJZiBhdmFpbGFibGUsIGl0IGlzXG4gKiBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBKUyBpbXBsZW1lbnRhdGlvbi5cbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWplY3Qgb24gd2luMzIuXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFdpdGhTeXN0ZW1VbnppcCAoemlwRmlsZVBhdGgsIGRlc3REaXIpIHtcbiAgY29uc3QgdW56aXBFeGVjdXRhYmxlUGF0aCA9IGF3YWl0IGFzc2VydFN5c3RlbVVuemlwKCk7XG4gIC8vIC1xIG1lYW5zIHF1aWV0IChubyBzdGRvdXQpXG4gIC8vIC1vIG1lYW5zIG92ZXJ3cml0ZVxuICAvLyAtZCBpcyB0aGUgZGVzdCBkaXJcbiAgYXdhaXQgZXhlYyh1bnppcEV4ZWN1dGFibGVQYXRoLCBbXG4gICAgJy1xJyxcbiAgICAnLW8nLCB6aXBGaWxlUGF0aCxcbiAgICAnLWQnLCBkZXN0RGlyXG4gIF0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5jb2RlVG9CYXNlNjQgW2ZhbHNlXSBXaGV0aGVyIHRvIGVuY29kZVxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIHRvIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbFxuICogYXJjaGl2ZXIgcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXhTaXplIFsxMDczNzQxODI0XSBUaGUgbWF4aW11bSBzaXplIG9mXG4gKiB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgaW4gYnl0ZXMuIFRoaXMgaXMgc2V0IHRvIDFHQiBieSBkZWZhdWx0LCBiZWNhdXNlXG4gKiBBcHBpdW0gbGltaXRzIHRoZSBtYXhpbXVtIEhUVFAgYm9keSBzaXplIHRvIDFHQi4gQWxzbywgdGhlIE5vZGVKUyBoZWFwXG4gKiBzaXplIG11c3QgYmUgZW5vdWdoIHRvIGtlZXAgdGhlIHJlc3VsdGluZyBvYmplY3QgKHVzdWFsbHkgdGhpcyBzaXplIGlzXG4gKiBsaW1pdGVkIHRvIDEuNCBHQilcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gVGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgbWF4aW11bVxuICogbGV2ZWwgaXMgOSAodGhlIGJlc3QgY29tcHJlc3Npb24sIHdvcnN0IHBlcmZvcm1hbmNlKS4gVGhlIG1pbmltdW1cbiAqIGNvbXByZXNzaW9uIGxldmVsIGlzIDAgKG5vIGNvbXByZXNzaW9uKS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgZmlsZSBiZWluZyB6aXBwZWRcbiAqIEBwYXJhbSB7WmlwT3B0aW9uc30gb3B0cyBaaXBwaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCAoYW5kIGVuY29kZWQgaWYgYGVuY29kZVRvQmFzZTY0YCBpcyB0cnV0aHkpXG4gKiBjb250ZW50IG9mIHRoZSBzb3VyY2UgcGF0aCBhcyBtZW1vcnkgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZVxuICogb3IgdGhlIHNvdXJjZSBpcyB0b28gYmlnXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSW5NZW1vcnlaaXAgKHNyY1BhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgZW5jb2RlVG9CYXNlNjQgPSBmYWxzZSxcbiAgICBtYXhTaXplID0gMSAqIEdpQixcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRCdWZmZXJzID0gW107XG4gIGxldCByZXN1bHRCdWZmZXJzU2l6ZSA9IDA7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW0gPSBuZXcgc3RyZWFtLldyaXRhYmxlKHtcbiAgICB3cml0ZTogKGJ1ZmZlciwgZW5jb2RpbmcsIG5leHQpID0+IHtcbiAgICAgIHJlc3VsdEJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgcmVzdWx0QnVmZmVyc1NpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmIChtYXhTaXplID4gMCAmJiByZXN1bHRCdWZmZXJzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgcmVzdWx0V3JpdGVTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YCkpO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsfVxuICB9KTtcbiAgbGV0IHNyY1NpemUgPSBudWxsO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gZW5jb2RlVG9CYXNlNjQgPyBuZXcgQmFzZTY0RW5jb2RlKCkgOiBudWxsO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgaWYgKGJhc2U2NEVuY29kZXJTdHJlYW0pIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH1cbiAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIHNyY1NpemUgPSBhcmNoaXZlLnBvaW50ZXIoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGFyY2hpdmVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFyY2hpdmUub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgYXJjaGl2ZS5vbmNlKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhgWmlwcGVkICR7ZW5jb2RlVG9CYXNlNjQgPyAnYW5kIGJhc2U2NC1lbmNvZGVkICcgOiAnJ31gICtcbiAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKHNyY1BhdGgpfScgYCArXG4gICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zIGAgK1xuICAgICAgYChjb21wcmVzc2lvbiBsZXZlbDogJHtsZXZlbH0pYCk7XG4gIH1cbiAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiB6aXAgYnVmZmVycyBjb25jYXRlbmF0ZWQgaW50byBvbmUgYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIHZhbGlkIFpJUCBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydFZhbGlkWmlwIChmaWxlUGF0aCkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICBpZiAoc2l6ZSA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgaXMgdG9vIHNtYWxsIHRvIGJlIGEgWklQIGFyY2hpdmVgKTtcbiAgfVxuICBjb25zdCBmZCA9IGF3YWl0IGZzLm9wZW4oZmlsZVBhdGgsICdyJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKFpJUF9NQUdJQy5sZW5ndGgpO1xuICAgIGF3YWl0IGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgWklQX01BR0lDLmxlbmd0aCwgMCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmIChzaWduYXR1cmUgIT09IFpJUF9NQUdJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgYGlzIG5vdCBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgWklQIGFyY2hpdmUgc2lnbmF0dXJlICcke1pJUF9NQUdJQ30nYCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLmNsb3NlKGZkKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcENvbXByZXNzaW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxldmVsIFs5XSAtIENvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIDAuLjlcbiAqIChncmVhdGVyIG51bWJlcnMgbWVhbiBiZXR0ZXIgY29tcHJlc3Npb24sIGJ1dCBsb25nZXIgcHJvY2Vzc2luZyB0aW1lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGN3ZCAtIFRoZSBzb3VyY2Ugcm9vdCBmb2xkZXIgKHRoZSBwYXJlbnQgZm9sZGVyIG9mXG4gKiB0aGUgZGVzdGluYXRpb24gZmlsZSBieSBkZWZhdWx0KVxuICogQHByb3BlcnR5IHs/QXJyYXk8c3RyaW5nPn0gaWdub3JlIC0gVGhlIGxpc3Qgb2YgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcmNoaXZlIGJhc2VkIG9uIHRoZSBnaXZlbiBnbG9iIHBhdHRlcm5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSByZXN1bHRpbmcgYXJjaGl2ZSBwYXRoXG4gKiBAcGFyYW0ge1ppcFNvdXJjZU9wdGlvbnN9IHNyYyAtIFNvdXJjZSBvcHRpb25zXG4gKiBAcGFyYW0ge1ppcENvbXByZXNzaW9uT3B0aW9uc30gb3B0cyAtIENvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGFyY2hpdmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9BcmNoaXZlIChkc3RQYXRoLCBzcmMgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCB7XG4gICAgcGF0dGVybiA9ICcqKi8qJyxcbiAgICBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksXG4gICAgaWdub3JlID0gW10sXG4gIH0gPSBzcmM7XG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywgeyB6bGliOiB7IGxldmVsIH19KTtcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZVxuICAgICAgLmdsb2IocGF0dGVybiwge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZSxcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgLnBpcGUoc3RyZWFtKTtcbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShzdHJlYW0pO1xuICAgICAgICBhcmNoaXZlLmFib3J0KCk7XG4gICAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIGEgc3lzdGVtIGB1bnppcGAgZXhlY3V0YWJsZS4gUmVqZWN0cyBpZiBpdCBpcyBub3QgZm91bmQuXG4gKi9cbmNvbnN0IGFzc2VydFN5c3RlbVVuemlwID0gXy5tZW1vaXplKFxuICAvKipcbiAgICogQHJldHVybnMge0I8c3RyaW5nPn0gUGF0aCB0byB1bnppcCBleGVjdXRhYmxlXG4gICAqL1xuICBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVuemlwUGF0aCA9IGF3YWl0IGZzLndoaWNoKCd1bnppcCcpO1xuICAgICAgbG9nLmRlYnVnKCdmb3VuZCBzeXN0ZW0gdW56aXAgYXQgJXMnLCB1bnppcFBhdGgpO1xuICAgICAgcmV0dXJuIHVuemlwUGF0aDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgc3lzdGVtIHVuemlwJyk7XG4gICAgfVxuICB9KTtcblxuZXhwb3J0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgX2V4dHJhY3RFbnRyeVRvLFxuICBhc3NlcnRWYWxpZFppcCwgdG9BcmNoaXZlIH07XG5leHBvcnQgZGVmYXVsdCB7IGV4dHJhY3RBbGxUbywgcmVhZEVudHJpZXMsIHRvSW5NZW1vcnlaaXAsIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmUgfTtcbiJdLCJmaWxlIjoibGliL3ppcC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
461
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsib3BlblppcCIsIkIiLCJwcm9taXNpZnkiLCJ5YXV6bCIsIm9wZW4iLCJwaXBlbGluZSIsInN0cmVhbSIsIlpJUF9NQUdJQyIsIklGTVQiLCJJRkRJUiIsIklGTE5LIiwiWmlwRXh0cmFjdG9yIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsImRlY29kZVN0cmluZ3MiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJyZWFkRW50cnkiLCJzdGFydHNXaXRoIiwiZGVzdERpciIsInBhdGgiLCJkaXJuYW1lIiwiam9pbiIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJjYW5vbmljYWxEZXN0RGlyIiwicmVhbHBhdGgiLCJyZWxhdGl2ZURlc3REaXIiLCJyZWxhdGl2ZSIsInNwbGl0Iiwic2VwIiwiaW5jbHVkZXMiLCJFcnJvciIsImV4dHJhY3RFbnRyeSIsImNsb3NlIiwiZGVzdCIsIm1vZGUiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiaXNTeW1saW5rIiwiaXNEaXIiLCJlbmRzV2l0aCIsInZlcnNpb25NYWRlQnkiLCJwcm9jTW9kZSIsImdldEV4dHJhY3RlZE1vZGUiLCJta2Rpck9wdGlvbnMiLCJyZWFkU3RyZWFtIiwib3BlblJlYWRTdHJlYW0iLCJiaW5kIiwibGluayIsInN5bWxpbmsiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImVudHJ5TW9kZSIsImRlZmF1bHREaXJNb2RlIiwiZGVmYXVsdEZpbGVNb2RlIiwicGFyc2VJbnQiLCJleHRyYWN0QWxsVG8iLCJ6aXBGaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJ1c2VTeXN0ZW1VbnppcCIsImV4dHJhY3RXaXRoU3lzdGVtVW56aXAiLCJsb2ciLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImV4dHJhY3RvciIsImlzV2luZG93c0hvc3QiLCJleGVjdXRhYmxlUGF0aCIsImdldEV4ZWN1dGFibGVQYXRoIiwiZSIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJkc3RQYXRoIiwidGVzdCIsImV4aXN0cyIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInJlcyIsImV4dHJhY3RFbnRyeVRvIiwiZW1pdCIsInRvSW5NZW1vcnlaaXAiLCJzcmNQYXRoIiwiaXNNZXRlcmVkIiwiZW5jb2RlVG9CYXNlNjQiLCJtYXhTaXplIiwiR2lCIiwibGV2ZWwiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwiYXJjaGl2ZSIsInpsaWIiLCJzcmNTaXplIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsInVucGlwZSIsImFib3J0IiwiZGVzdHJveSIsInBvaW50ZXIiLCJhcmNoaXZlU3RyZWFtUHJvbWlzZSIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImRpcmVjdG9yeSIsImZpbGUiLCJuYW1lIiwiYmFzZW5hbWUiLCJmaW5hbGl6ZSIsImRlYnVnIiwiZ2V0RHVyYXRpb24iLCJhc1NlY29uZHMiLCJ0b0ZpeGVkIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInNpemUiLCJmZCIsImFsbG9jIiwicmVhZCIsInNpZ25hdHVyZSIsInRvQXJjaGl2ZSIsInNyYyIsInBhdHRlcm4iLCJjd2QiLCJpZ25vcmUiLCJnbG9iIiwibWVtb2l6ZSIsImJpbmFyeU5hbWUiLCJmdWxsUGF0aCIsIndoaWNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0Msa0JBQUVDLFNBQUYsQ0FBWUMsZUFBTUMsSUFBbEIsQ0FBaEI7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHSixrQkFBRUMsU0FBRixDQUFZSSxnQkFBT0QsUUFBbkIsQ0FBakI7O0FBQ0EsTUFBTUUsU0FBUyxHQUFHLElBQWxCO0FBQ0EsTUFBTUMsSUFBSSxHQUFHLEtBQWI7QUFDQSxNQUFNQyxLQUFLLEdBQUcsS0FBZDtBQUNBLE1BQU1DLEtBQUssR0FBRyxLQUFkOztBQUdBLE1BQU1DLFlBQU4sQ0FBbUI7QUFDakJDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxJQUFJLEdBQUcsRUFBckIsRUFBeUI7QUFDbEMsU0FBS0MsT0FBTCxHQUFlRixVQUFmO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixLQUFoQjtBQUNEOztBQUVEQyxFQUFBQSxlQUFlLENBQUVDLEtBQUYsRUFBUztBQUN0QixXQUFPQyxnQkFBRUMsUUFBRixDQUFXRixLQUFLLENBQUNHLFFBQWpCLElBQTZCSCxLQUFLLENBQUNHLFFBQU4sQ0FBZUMsUUFBZixDQUF3QixLQUFLUixJQUFMLENBQVVTLGlCQUFsQyxDQUE3QixHQUFvRkwsS0FBSyxDQUFDRyxRQUFqRztBQUNEOztBQUVZLFFBQVBHLE9BQU8sR0FBSTtBQUNmLFVBQU07QUFDSkMsTUFBQUEsR0FESTtBQUVKRixNQUFBQTtBQUZJLFFBR0YsS0FBS1QsSUFIVDtBQUlBLFNBQUtZLE9BQUwsR0FB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ZXpILE1BQWY7QUFDQW1ILE1BQUFBLE9BQU8sQ0FBQ08sS0FBUjtBQUNBUCxNQUFBQSxPQUFPLENBQUNRLE9BQVI7QUFDQW5HLE1BQUFBLE1BQU0sQ0FBQ3VELENBQUQsQ0FBTjtBQUNELEtBTkgsRUFPR3RELEVBUEgsQ0FPTSxRQVBOLEVBT2dCRixPQVBoQjtBQVFBNEYsSUFBQUEsT0FBTyxDQUFDb0IsUUFBUjtBQUNELEdBakJZLENBQWI7QUFrQkQ7O0FBTUQsTUFBTXpELGlCQUFpQixHQUFHakUsZ0JBQUU4SSxPQUFGLENBSXhCLGVBQWU3RSxpQkFBZixDQUFrQzhFLFVBQWxDLEVBQThDO0FBQzVDLFFBQU1DLFFBQVEsR0FBRyxNQUFNNUgsYUFBRzZILEtBQUgsQ0FBU0YsVUFBVCxDQUF2Qjs7QUFDQXJGLGtCQUFJaUUsS0FBSixDQUFXLG9CQUFYLEVBQWdDb0IsVUFBaEMsRUFBNENDLFFBQTVDOztBQUNBLFNBQU9BLFFBQVA7QUFDRCxDQVJ1QixDQUExQjs7ZUFhZTtBQUFFM0YsRUFBQUEsWUFBRjtBQUFnQjJCLEVBQUFBLFdBQWhCO0FBQTZCSyxFQUFBQSxhQUE3QjtBQUE0QzRDLEVBQUFBLGNBQTVDO0FBQTRETyxFQUFBQTtBQUE1RCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IG1rZGlycCB9IGZyb20gJy4uL2xpYi9ta2RpcnAnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IHsgQmFzZTY0RW5jb2RlIH0gZnJvbSAnYmFzZTY0LXN0cmVhbSc7XG5pbXBvcnQgeyB0b1JlYWRhYmxlU2l6ZVN0cmluZywgR2lCIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBnZXRTdHJlYW0gZnJvbSAnZ2V0LXN0cmVhbSc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3Qgb3BlblppcCA9IEIucHJvbWlzaWZ5KHlhdXpsLm9wZW4pO1xuY29uc3QgcGlwZWxpbmUgPSBCLnByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuY29uc3QgWklQX01BR0lDID0gJ1BLJztcbmNvbnN0IElGTVQgPSA2MTQ0MDtcbmNvbnN0IElGRElSID0gMTYzODQ7XG5jb25zdCBJRkxOSyA9IDQwOTYwO1xuXG4vLyBUaGlzIGNsYXNzIGlzIG1vc3RseSBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF4b2dkZW4vZXh0cmFjdC16aXAvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmNsYXNzIFppcEV4dHJhY3RvciB7XG4gIGNvbnN0cnVjdG9yIChzb3VyY2VQYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLnppcFBhdGggPSBzb3VyY2VQYXRoO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZXh0cmFjdEZpbGVOYW1lIChlbnRyeSkge1xuICAgIHJldHVybiBfLmlzQnVmZmVyKGVudHJ5LmZpbGVOYW1lKSA/IGVudHJ5LmZpbGVOYW1lLnRvU3RyaW5nKHRoaXMub3B0cy5maWxlTmFtZXNFbmNvZGluZykgOiBlbnRyeS5maWxlTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3QgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICAgIGZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0gPSB0aGlzLm9wdHM7XG4gICAgdGhpcy56aXBmaWxlID0gYXdhaXQgb3BlblppcCh0aGlzLnppcFBhdGgsIHtcbiAgICAgIGxhenlFbnRyaWVzOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoZWpvc2h3b2xmZS95YXV6bC9jb21taXQvY2M3NDU1YWM3ODliYTg0OTczMTg0ZTVlYmRlMDU4MWNkYzRjM2IzOSNkaWZmLTA0YzZlOTBmYWFjMjY3NWFhODllMjE3NmQyZWVjN2Q4Ujk1XG4gICAgICBkZWNvZGVTdHJpbmdzOiAhZmlsZU5hbWVzRW5jb2RpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuemlwZmlsZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsZWQpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2VudHJ5JywgYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgICAgIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCdfX01BQ09TWC8nKSkge1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5kaXJuYW1lKHBhdGguam9pbihkaXIsIGZpbGVOYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsRGVzdERpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlRGVzdERpciA9IHBhdGgucmVsYXRpdmUoZGlyLCBjYW5vbmljYWxEZXN0RGlyKTtcblxuICAgICAgICAgIGlmIChyZWxhdGl2ZURlc3REaXIuc3BsaXQocGF0aC5zZXApLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICAgICAgICBuZXcgRXJyb3IoYE91dCBvZiBib3VuZCBwYXRoIFwiJHtjYW5vbmljYWxEZXN0RGlyfVwiIGZvdW5kIHdoaWxlIHByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHRoaXMuZXh0cmFjdEVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5jbG9zZSgpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3RFbnRyeSAoZW50cnkpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkaXIsIGZpbGVOYW1lKTtcblxuICAgIC8vIGNvbnZlcnQgZXh0ZXJuYWwgZmlsZSBhdHRyIGludCBpbnRvIGEgZnMgc3RhdCBtb2RlIGludFxuICAgIGNvbnN0IG1vZGUgPSAoZW50cnkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gY2hlY2sgaWYgaXQncyBhIHN5bWxpbmsgb3IgZGlyICh1c2luZyBzdGF0IG1vZGUgY29uc3RhbnRzKVxuICAgIGNvbnN0IGlzU3ltbGluayA9IChtb2RlICYgSUZNVCkgPT09IElGTE5LO1xuICAgIGNvbnN0IGlzRGlyID0gKG1vZGUgJiBJRk1UKSA9PT0gSUZESVJcbiAgICAgIC8vIEZhaWxzYWZlLCBib3Jyb3dlZCBmcm9tIGpzWmlwXG4gICAgICB8fCBmaWxlTmFtZS5lbmRzV2l0aCgnLycpXG4gICAgICAvLyBjaGVjayBmb3Igd2luZG93cyB3ZWlyZCB3YXkgb2Ygc3BlY2lmeWluZyBhIGRpcmVjdG9yeVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL2V4dHJhY3QtemlwL2lzc3Vlcy8xMyNpc3N1ZWNvbW1lbnQtMTU0NDk0NTY2XG4gICAgICB8fCAoZW50cnkudmVyc2lvbk1hZGVCeSA+PiA4ID09PSAwICYmIGVudHJ5LmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgPT09IDE2KTtcbiAgICBjb25zdCBwcm9jTW9kZSA9IHRoaXMuZ2V0RXh0cmFjdGVkTW9kZShtb2RlLCBpc0RpcikgJiAwbzc3NztcbiAgICAvLyBhbHdheXMgZW5zdXJlIGZvbGRlcnMgYXJlIGNyZWF0ZWRcbiAgICBjb25zdCBkZXN0RGlyID0gaXNEaXIgPyBkZXN0IDogcGF0aC5kaXJuYW1lKGRlc3QpO1xuICAgIGNvbnN0IG1rZGlyT3B0aW9ucyA9IHsgcmVjdXJzaXZlOiB0cnVlIH07XG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICBta2Rpck9wdGlvbnMubW9kZSA9IHByb2NNb2RlO1xuICAgIH1cbiAgICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCBta2Rpck9wdGlvbnMpO1xuICAgIGlmIChpc0Rpcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBhd2FpdCBCLnByb21pc2lmeSh0aGlzLnppcGZpbGUub3BlblJlYWRTdHJlYW0uYmluZCh0aGlzLnppcGZpbGUpKShlbnRyeSk7XG4gICAgaWYgKGlzU3ltbGluaykge1xuICAgICAgY29uc3QgbGluayA9IGF3YWl0IGdldFN0cmVhbShyZWFkU3RyZWFtKTtcbiAgICAgIGF3YWl0IGZzLnN5bWxpbmsobGluaywgZGVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHBpcGVsaW5lKHJlYWRTdHJlYW0sIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3QsIHsgbW9kZTogcHJvY01vZGUgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4dHJhY3RlZE1vZGUgKGVudHJ5TW9kZSwgaXNEaXIpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0RGlyTW9kZSxcbiAgICAgIGRlZmF1bHRGaWxlTW9kZSxcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgbGV0IG1vZGUgPSBlbnRyeU1vZGU7XG4gICAgLy8gU2V0IGRlZmF1bHRzLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RGlyTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RGlyTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNzU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbGVNb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IHBhcnNlSW50KGRlZmF1bHRGaWxlTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNjQ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGU7XG4gIH1cbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4dHJhY3RBbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVOYW1lc0VuY29kaW5nIFRoZSBlbmNvZGluZyB0byB1c2UgZm9yIGV4dHJhY3RlZCBmaWxlIG5hbWVzLlxuICogRm9yIFpJUCBhcmNoaXZlcyBjcmVhdGVkIG9uIE1hY09TIGl0IGlzIHVzdWFsbHkgZXhwZWN0ZWQgdG8gYmUgYHV0ZjhgLlxuICogQnkgZGVmYXVsdCBpdCBpcyBhdXRvZGV0ZWN0ZWQgYmFzZWQgb24gdGhlIGVudHJ5IG1ldGFkYXRhIGFuZCBpcyBvbmx5IG5lZWRlZCB0byBiZSBzZXQgZXhwbGljaXRseVxuICogaWYgdGhlIHBhcnRpY3VsYXIgYXJjaGl2ZSBkb2VzIG5vdCBjb21wbHkgdG8gdGhlIHN0YW5kYXJkcywgd2hpY2ggbGVhZHMgdG8gY29ycnVwdGVkIGZpbGUgbmFtZXNcbiAqIGFmdGVyIGV4dHJhY3Rpb24uIE9ubHkgYXBwbGljYWJsZSBpZiBzeXN0ZW0gdW56aXAgYmluYXJ5IGlzIE5PVCBiZWluZyB1c2VkLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdXNlU3lzdGVtVW56aXAgW2ZhbHNlXSBJZiB0cnVlLCBhdHRlbXB0IHRvIHVzZSBzeXN0ZW0gdW56aXA7IGlmIHRoaXMgZmFpbHMsXG4gKiBmYWxsYmFjayB0byB0aGUgSlMgdW56aXAgaW1wbGVtZW50YXRpb24uXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqIEBwYXJhbSB7P0V4dHJhY3RBbGxPcHRpb25zfSBvcHRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RBbGxUbyAoemlwRmlsZVBhdGgsIGRlc3REaXIsIG9wdHMgPSB7fSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICBpZiAob3B0cy51c2VTeXN0ZW1VbnppcCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkaXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oJ3VuemlwIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvIEpTOiAlcycsIGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBjb25zdCBleHRyYWN0b3IgPSBuZXcgWmlwRXh0cmFjdG9yKHppcEZpbGVQYXRoLCB7XG4gICAgLi4ub3B0cyxcbiAgICBkaXIsXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHN5c3RlbSB1bnppcCAoZS5nLiwgYC91c3IvYmluL3VuemlwYCkuIElmIGF2YWlsYWJsZSwgaXQgaXNcbiAqIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIEpTIGltcGxlbWVudGF0aW9uLlxuICogQnkgZGVmYXVsdCBhbGwgZmlsZXMgaW4gdGhlIGRlc3REaXIgZ2V0IG92ZXJyaWRkZW4gaWYgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuXG4gKiBUaGlzIGZvbGRlciBpcyBleHBlY3RlZCB0byBhbHJlYWR5IGV4aXN0IGJlZm9yZSBleHRyYWN0aW5nIHRoZSBhcmNoaXZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0V2l0aFN5c3RlbVVuemlwICh6aXBGaWxlUGF0aCwgZGVzdERpcikge1xuICBjb25zdCBpc1dpbmRvd3NIb3N0ID0gaXNXaW5kb3dzKCk7XG4gIGxldCBleGVjdXRhYmxlUGF0aDtcbiAgdHJ5IHtcbiAgICBleGVjdXRhYmxlUGF0aCA9IGF3YWl0IGdldEV4ZWN1dGFibGVQYXRoKFxuICAgICAgaXNXaW5kb3dzSG9zdCA/ICdwb3dlcnNoZWxsLmV4ZScgOiAndW56aXAnXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgc3lzdGVtIHVuemlwJyk7XG4gIH1cblxuICBpZiAoaXNXaW5kb3dzSG9zdCkge1xuICAgIC8vIG9uIFdpbmRvd3Mgd2UgdXNlIFBvd2VyU2hlbGwgdG8gdW56aXAgZmlsZXNcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbXG4gICAgICAnLWNvbW1hbmQnLCAnRXhwYW5kLUFyY2hpdmUnLFxuICAgICAgJy1MaXRlcmFsUGF0aCcsIHppcEZpbGVQYXRoLFxuICAgICAgJy1EZXN0aW5hdGlvblBhdGgnLCBkZXN0RGlyLFxuICAgICAgJy1Gb3JjZSdcbiAgICBdKTtcbiAgfSBlbHNlIHtcbiAgICAvLyAtcSBtZWFucyBxdWlldCAobm8gc3Rkb3V0KVxuICAgIC8vIC1vIG1lYW5zIG92ZXJ3cml0ZVxuICAgIC8vIC1kIGlzIHRoZSBkZXN0IGRpclxuICAgIGF3YWl0IGV4ZWMoZXhlY3V0YWJsZVBhdGgsIFtcbiAgICAgICctcScsXG4gICAgICAnLW8nLCB6aXBGaWxlUGF0aCxcbiAgICAgICctZCcsIGRlc3REaXJcbiAgICBdKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5jb2RlVG9CYXNlNjQgW2ZhbHNlXSBXaGV0aGVyIHRvIGVuY29kZVxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIHRvIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbFxuICogYXJjaGl2ZXIgcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXhTaXplIFsxMDczNzQxODI0XSBUaGUgbWF4aW11bSBzaXplIG9mXG4gKiB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgaW4gYnl0ZXMuIFRoaXMgaXMgc2V0IHRvIDFHQiBieSBkZWZhdWx0LCBiZWNhdXNlXG4gKiBBcHBpdW0gbGltaXRzIHRoZSBtYXhpbXVtIEhUVFAgYm9keSBzaXplIHRvIDFHQi4gQWxzbywgdGhlIE5vZGVKUyBoZWFwXG4gKiBzaXplIG11c3QgYmUgZW5vdWdoIHRvIGtlZXAgdGhlIHJlc3VsdGluZyBvYmplY3QgKHVzdWFsbHkgdGhpcyBzaXplIGlzXG4gKiBsaW1pdGVkIHRvIDEuNCBHQilcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gVGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgbWF4aW11bVxuICogbGV2ZWwgaXMgOSAodGhlIGJlc3QgY29tcHJlc3Npb24sIHdvcnN0IHBlcmZvcm1hbmNlKS4gVGhlIG1pbmltdW1cbiAqIGNvbXByZXNzaW9uIGxldmVsIGlzIDAgKG5vIGNvbXByZXNzaW9uKS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgZmlsZSBiZWluZyB6aXBwZWRcbiAqIEBwYXJhbSB7WmlwT3B0aW9uc30gb3B0cyBaaXBwaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCAoYW5kIGVuY29kZWQgaWYgYGVuY29kZVRvQmFzZTY0YCBpcyB0cnV0aHkpXG4gKiBjb250ZW50IG9mIHRoZSBzb3VyY2UgcGF0aCBhcyBtZW1vcnkgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZVxuICogb3IgdGhlIHNvdXJjZSBpcyB0b28gYmlnXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSW5NZW1vcnlaaXAgKHNyY1BhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgZW5jb2RlVG9CYXNlNjQgPSBmYWxzZSxcbiAgICBtYXhTaXplID0gMSAqIEdpQixcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRCdWZmZXJzID0gW107XG4gIGxldCByZXN1bHRCdWZmZXJzU2l6ZSA9IDA7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW0gPSBuZXcgc3RyZWFtLldyaXRhYmxlKHtcbiAgICB3cml0ZTogKGJ1ZmZlciwgZW5jb2RpbmcsIG5leHQpID0+IHtcbiAgICAgIHJlc3VsdEJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgcmVzdWx0QnVmZmVyc1NpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmIChtYXhTaXplID4gMCAmJiByZXN1bHRCdWZmZXJzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgcmVzdWx0V3JpdGVTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YCkpO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsfVxuICB9KTtcbiAgbGV0IHNyY1NpemUgPSBudWxsO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gZW5jb2RlVG9CYXNlNjQgPyBuZXcgQmFzZTY0RW5jb2RlKCkgOiBudWxsO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgaWYgKGJhc2U2NEVuY29kZXJTdHJlYW0pIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH1cbiAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIHNyY1NpemUgPSBhcmNoaXZlLnBvaW50ZXIoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGFyY2hpdmVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFyY2hpdmUub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgYXJjaGl2ZS5vbmNlKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhgWmlwcGVkICR7ZW5jb2RlVG9CYXNlNjQgPyAnYW5kIGJhc2U2NC1lbmNvZGVkICcgOiAnJ31gICtcbiAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKHNyY1BhdGgpfScgYCArXG4gICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zIGAgK1xuICAgICAgYChjb21wcmVzc2lvbiBsZXZlbDogJHtsZXZlbH0pYCk7XG4gIH1cbiAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiB6aXAgYnVmZmVycyBjb25jYXRlbmF0ZWQgaW50byBvbmUgYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIHZhbGlkIFpJUCBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydFZhbGlkWmlwIChmaWxlUGF0aCkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICBpZiAoc2l6ZSA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgaXMgdG9vIHNtYWxsIHRvIGJlIGEgWklQIGFyY2hpdmVgKTtcbiAgfVxuICBjb25zdCBmZCA9IGF3YWl0IGZzLm9wZW4oZmlsZVBhdGgsICdyJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKFpJUF9NQUdJQy5sZW5ndGgpO1xuICAgIGF3YWl0IGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgWklQX01BR0lDLmxlbmd0aCwgMCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmIChzaWduYXR1cmUgIT09IFpJUF9NQUdJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgYGlzIG5vdCBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgWklQIGFyY2hpdmUgc2lnbmF0dXJlICcke1pJUF9NQUdJQ30nYCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLmNsb3NlKGZkKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcENvbXByZXNzaW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxldmVsIFs5XSAtIENvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIDAuLjlcbiAqIChncmVhdGVyIG51bWJlcnMgbWVhbiBiZXR0ZXIgY29tcHJlc3Npb24sIGJ1dCBsb25nZXIgcHJvY2Vzc2luZyB0aW1lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGN3ZCAtIFRoZSBzb3VyY2Ugcm9vdCBmb2xkZXIgKHRoZSBwYXJlbnQgZm9sZGVyIG9mXG4gKiB0aGUgZGVzdGluYXRpb24gZmlsZSBieSBkZWZhdWx0KVxuICogQHByb3BlcnR5IHs/QXJyYXk8c3RyaW5nPn0gaWdub3JlIC0gVGhlIGxpc3Qgb2YgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcmNoaXZlIGJhc2VkIG9uIHRoZSBnaXZlbiBnbG9iIHBhdHRlcm5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSByZXN1bHRpbmcgYXJjaGl2ZSBwYXRoXG4gKiBAcGFyYW0ge1ppcFNvdXJjZU9wdGlvbnN9IHNyYyAtIFNvdXJjZSBvcHRpb25zXG4gKiBAcGFyYW0ge1ppcENvbXByZXNzaW9uT3B0aW9uc30gb3B0cyAtIENvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGFyY2hpdmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9BcmNoaXZlIChkc3RQYXRoLCBzcmMgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCB7XG4gICAgcGF0dGVybiA9ICcqKi8qJyxcbiAgICBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksXG4gICAgaWdub3JlID0gW10sXG4gIH0gPSBzcmM7XG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywgeyB6bGliOiB7IGxldmVsIH19KTtcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZVxuICAgICAgLmdsb2IocGF0dGVybiwge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZSxcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgLnBpcGUoc3RyZWFtKTtcbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShzdHJlYW0pO1xuICAgICAgICBhcmNoaXZlLmFib3J0KCk7XG4gICAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBtZW1vaXplcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBnaXZlbiBleGVjdXRhYmxlLlxuICogUmVqZWN0cyBpZiBpdCBpcyBub3QgZm91bmQuXG4gKi9cbmNvbnN0IGdldEV4ZWN1dGFibGVQYXRoID0gXy5tZW1vaXplKFxuICAvKipcbiAgICogQHJldHVybnMge0I8c3RyaW5nPn0gRnVsbCBQYXRoIHRvIHRoZSBleGVjdXRhYmxlXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBnZXRFeGVjdXRhYmxlUGF0aCAoYmluYXJ5TmFtZSkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCAnJXMnIGF0ICclcydgLCBiaW5hcnlOYW1lLCBmdWxsUGF0aCk7XG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG4pO1xuXG5leHBvcnQgeyBleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBfZXh0cmFjdEVudHJ5VG8sXG4gIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmUgfTtcbmV4cG9ydCBkZWZhdWx0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgYXNzZXJ0VmFsaWRaaXAsIHRvQXJjaGl2ZSB9O1xuIl0sImZpbGUiOiJsaWIvemlwLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>com.apple.locationd.bundle-/System/Library/PrivateFrameworks/Parsec.framework</key>
6
+ <dict>
7
+ <key>Whitelisted</key>
8
+ <false/>
9
+ <key>Executable</key>
10
+ <string></string>
11
+ <key>BundlePath</key>
12
+ <string>/System/Library/PrivateFrameworks/Parsec.framework</string>
13
+ <key>Registered</key>
14
+ <string></string>
15
+ </dict>
16
+ <key>com.apple.locationd.bundle-/System/Library/PrivateFrameworks/WirelessDiagnostics.framework</key>
17
+ <dict>
18
+ <key>Whitelisted</key>
19
+ <false/>
20
+ <key>Executable</key>
21
+ <string></string>
22
+ <key>BundlePath</key>
23
+ <string>/System/Library/PrivateFrameworks/WirelessDiagnostics.framework</string>
24
+ <key>Registered</key>
25
+ <string></string>
26
+ </dict>
27
+ </dict>
28
+ </plist>