appium-android-driver 4.51.0 → 4.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -1,12 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
 
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
5
-
6
4
  Object.defineProperty(exports, "__esModule", {
7
5
  value: true
8
6
  });
9
- exports.SETTINGS_HELPER_PKG_ID = exports.CHROMIUM_WIN = exports.WEBVIEW_BASE = exports.WEBVIEW_WIN = exports.NATIVE_WIN = exports.webviewHelpers = exports.commonCapConstraints = exports.startServer = exports.AndroidDriver = exports.androidCommands = exports.androidHelpers = exports.default = void 0;
7
+ exports.webviewHelpers = exports.startServer = exports.default = exports.commonCapConstraints = exports.androidHelpers = exports.androidCommands = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.SETTINGS_HELPER_PKG_ID = exports.NATIVE_WIN = exports.CHROMIUM_WIN = exports.AndroidDriver = void 0;
10
8
 
11
9
  require("source-map-support/register");
12
10
 
@@ -24,6 +22,10 @@ var webview = _interopRequireWildcard(require("./lib/webview-helpers"));
24
22
 
25
23
  var caps = _interopRequireWildcard(require("./lib/desired-caps"));
26
24
 
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+
27
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
+
27
29
  const {
28
30
  startServer
29
31
  } = server;
@@ -80,4 +82,4 @@ var _default = AndroidDriver;
80
82
  exports.default = _default;require('source-map-support').install();
81
83
 
82
84
 
83
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQXhCQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBa0JDLE1BQXhCOztBQUVBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjs7QUFFQSxlQUFlQyxJQUFmLEdBQXVCO0FBQ3JCLFFBQU1DLFdBQVcsR0FBSUMsT0FBRCxJQUFhO0FBQy9CLFVBQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLE9BQWIsQ0FBcUJKLE9BQXJCLENBQWpCO0FBQ0EsV0FBT0MsUUFBUSxHQUFHLENBQVgsR0FBZUMsT0FBTyxDQUFDQyxJQUFSLENBQWFGLFFBQVEsR0FBRyxDQUF4QixDQUFmLEdBQTRDLElBQW5EO0FBQ0QsR0FIRDs7QUFJQSxRQUFNSSxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDLFFBQUQsQ0FBWixFQUF3QixFQUF4QixDQUFSLElBQXVDRixZQUFwRDtBQUNBLFFBQU1VLElBQUksR0FBR1IsV0FBVyxDQUFDLFFBQUQsQ0FBWCxJQUF5QkgsWUFBdEM7QUFDQSxTQUFPLE1BQU1GLFdBQVcsQ0FBQ1csSUFBRCxFQUFPRSxJQUFQLENBQXhCO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtBQUMzQiwwQkFBU1gsSUFBVDtBQUNEOztBQVVELE1BQU07QUFBRVksRUFBQUE7QUFBRixJQUFvQkMsTUFBMUI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxPQUFPLEVBQUVDLGNBQVg7QUFBMkJDLEVBQUFBLFVBQTNCO0FBQXVDQyxFQUFBQSxXQUF2QztBQUFvREMsRUFBQUEsWUFBcEQ7QUFDRUMsRUFBQUE7QUFERixJQUNtQkMsT0FEekI7Ozs7OztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUEyQkMsSUFBakM7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxRQUFRLEVBQUVDO0FBQVosSUFBZ0NDLFlBQXRDOztBQUNBLE1BQU07QUFBRVgsRUFBQUEsT0FBTyxFQUFFWSxjQUFYO0FBQTJCQyxFQUFBQTtBQUEzQixJQUFzREMsa0JBQTVEOzs7ZUFHZWhCLGEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL2xpYi9zZXJ2ZXInO1xuXG5cbmNvbnN0IHsgc3RhcnRTZXJ2ZXIgfSA9IHNlcnZlcjtcblxuY29uc3QgREVGQVVMVF9IT1NUID0gJ2xvY2FsaG9zdCc7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA0NzIzO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluICgpIHtcbiAgY29uc3QgZ2V0QXJnVmFsdWUgPSAoYXJnTmFtZSkgPT4ge1xuICAgIGNvbnN0IGFyZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoYXJnTmFtZSk7XG4gICAgcmV0dXJuIGFyZ0luZGV4ID4gMCA/IHByb2Nlc3MuYXJndlthcmdJbmRleCArIDFdIDogbnVsbDtcbiAgfTtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGdldEFyZ1ZhbHVlKCctLXBvcnQnKSwgMTApIHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgaG9zdCA9IGdldEFyZ1ZhbHVlKCctLWhvc3QnKSB8fCBERUZBVUxUX0hPU1Q7XG4gIHJldHVybiBhd2FpdCBzdGFydFNlcnZlcihwb3J0LCBob3N0KTtcbn1cblxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5cbmNvbnN0IHsgQW5kcm9pZERyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBoZWxwZXJzOiB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sIFdFQlZJRVdfQkFTRSxcbiAgICAgICAgQ0hST01JVU1fV0lOIH0gPSB3ZWJ2aWV3O1xuY29uc3QgeyBjb21tb25DYXBDb25zdHJhaW50cyB9ID0gY2FwcztcbmNvbnN0IHsgY29tbWFuZHM6IGFuZHJvaWRDb21tYW5kcyB9ID0gY29tbWFuZEluZGV4O1xuY29uc3QgeyBoZWxwZXJzOiBhbmRyb2lkSGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9ID0gYW5kcm9pZEhlbHBlckluZGV4O1xuXG5cbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG5leHBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBBbmRyb2lkRHJpdmVyLCBzdGFydFNlcnZlcixcbiAgY29tbW9uQ2FwQ29uc3RyYWludHMsIHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTixcbiAgV0VCVklFV19CQVNFLCBDSFJPTUlVTV9XSU4sIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
85
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQXVCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBeEJBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFrQkMsTUFBeEI7O0FBRUEsTUFBTUMsWUFBWSxHQUFHLFdBQXJCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLElBQXJCOztBQUVBLGVBQWVDLElBQWYsR0FBdUI7QUFDckIsUUFBTUMsV0FBVyxHQUFJQyxPQUFELElBQWE7QUFDL0IsVUFBTUMsUUFBUSxHQUFHQyxPQUFPLENBQUNDLElBQVIsQ0FBYUMsT0FBYixDQUFxQkosT0FBckIsQ0FBakI7QUFDQSxXQUFPQyxRQUFRLEdBQUcsQ0FBWCxHQUFlQyxPQUFPLENBQUNDLElBQVIsQ0FBYUYsUUFBUSxHQUFHLENBQXhCLENBQWYsR0FBNEMsSUFBbkQ7QUFDRCxHQUhEOztBQUlBLFFBQU1JLElBQUksR0FBR0MsUUFBUSxDQUFDUCxXQUFXLENBQUMsUUFBRCxDQUFaLEVBQXdCLEVBQXhCLENBQVIsSUFBdUNGLFlBQXBEO0FBQ0EsUUFBTVUsSUFBSSxHQUFHUixXQUFXLENBQUMsUUFBRCxDQUFYLElBQXlCSCxZQUF0QztBQUNBLFNBQU8sTUFBTUYsV0FBVyxDQUFDVyxJQUFELEVBQU9FLElBQVAsQ0FBeEI7QUFDRDs7QUFFRCxJQUFJQyxPQUFPLENBQUNWLElBQVIsS0FBaUJXLE1BQXJCLEVBQTZCO0FBQzNCLDBCQUFTWCxJQUFUO0FBQ0Q7O0FBVUQsTUFBTTtBQUFFWSxFQUFBQTtBQUFGLElBQW9CQyxNQUExQjs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLE9BQU8sRUFBRUMsY0FBWDtBQUEyQkMsRUFBQUEsVUFBM0I7QUFBdUNDLEVBQUFBLFdBQXZDO0FBQW9EQyxFQUFBQSxZQUFwRDtBQUNFQyxFQUFBQTtBQURGLElBQ21CQyxPQUR6Qjs7Ozs7O0FBRUEsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQTJCQyxJQUFqQzs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLFFBQVEsRUFBRUM7QUFBWixJQUFnQ0MsWUFBdEM7O0FBQ0EsTUFBTTtBQUFFWCxFQUFBQSxPQUFPLEVBQUVZLGNBQVg7QUFBMkJDLEVBQUFBO0FBQTNCLElBQXNEQyxrQkFBNUQ7OztlQUdlaEIsYSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0ICogYXMgc2VydmVyIGZyb20gJy4vbGliL3NlcnZlcic7XG5cblxuY29uc3QgeyBzdGFydFNlcnZlciB9ID0gc2VydmVyO1xuXG5jb25zdCBERUZBVUxUX0hPU1QgPSAnbG9jYWxob3N0JztcbmNvbnN0IERFRkFVTFRfUE9SVCA9IDQ3MjM7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkge1xuICBjb25zdCBnZXRBcmdWYWx1ZSA9IChhcmdOYW1lKSA9PiB7XG4gICAgY29uc3QgYXJnSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihhcmdOYW1lKTtcbiAgICByZXR1cm4gYXJnSW5kZXggPiAwID8gcHJvY2Vzcy5hcmd2W2FyZ0luZGV4ICsgMV0gOiBudWxsO1xuICB9O1xuICBjb25zdCBwb3J0ID0gcGFyc2VJbnQoZ2V0QXJnVmFsdWUoJy0tcG9ydCcpLCAxMCkgfHwgREVGQVVMVF9QT1JUO1xuICBjb25zdCBob3N0ID0gZ2V0QXJnVmFsdWUoJy0taG9zdCcpIHx8IERFRkFVTFRfSE9TVDtcbiAgcmV0dXJuIGF3YWl0IHN0YXJ0U2VydmVyKHBvcnQsIGhvc3QpO1xufVxuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cblxuaW1wb3J0ICogYXMgZHJpdmVyIGZyb20gJy4vbGliL2RyaXZlcic7XG5pbXBvcnQgKiBhcyBhbmRyb2lkSGVscGVySW5kZXggZnJvbSAnLi9saWIvYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCAqIGFzIGNvbW1hbmRJbmRleCBmcm9tICcuL2xpYi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQgKiBhcyB3ZWJ2aWV3IGZyb20gJy4vbGliL3dlYnZpZXctaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjYXBzIGZyb20gJy4vbGliL2Rlc2lyZWQtY2Fwcyc7XG5cblxuY29uc3QgeyBBbmRyb2lkRHJpdmVyIH0gPSBkcml2ZXI7XG5jb25zdCB7IGhlbHBlcnM6IHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTiwgV0VCVklFV19CQVNFLFxuICAgICAgICBDSFJPTUlVTV9XSU4gfSA9IHdlYnZpZXc7XG5jb25zdCB7IGNvbW1vbkNhcENvbnN0cmFpbnRzIH0gPSBjYXBzO1xuY29uc3QgeyBjb21tYW5kczogYW5kcm9pZENvbW1hbmRzIH0gPSBjb21tYW5kSW5kZXg7XG5jb25zdCB7IGhlbHBlcnM6IGFuZHJvaWRIZWxwZXJzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEIH0gPSBhbmRyb2lkSGVscGVySW5kZXg7XG5cblxuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZERyaXZlcjtcbmV4cG9ydCB7XG4gIGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIEFuZHJvaWREcml2ZXIsIHN0YXJ0U2VydmVyLFxuICBjb21tb25DYXBDb25zdHJhaW50cywgd2Vidmlld0hlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLFxuICBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn07XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.prepareAvdArgs = prepareAvdArgs;
8
+ exports.default = exports.SETTINGS_HELPER_PKG_ID = exports.APP_STATE = void 0;
11
9
  exports.ensureNetworkSpeed = ensureNetworkSpeed;
12
- exports.default = exports.APP_STATE = exports.SETTINGS_HELPER_PKG_ID = exports.helpers = void 0;
10
+ exports.helpers = void 0;
11
+ exports.prepareAvdArgs = prepareAvdArgs;
13
12
 
14
13
  require("source-map-support/register");
15
14
 
@@ -37,6 +36,10 @@ var _os = require("os");
37
36
 
38
37
  var _semver = _interopRequireDefault(require("semver"));
39
38
 
39
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
40
+
41
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
42
+
40
43
  const PACKAGE_INSTALL_TIMEOUT = 90000;
41
44
  const CHROME_BROWSER_PACKAGE_ACTIVITY = {
42
45
  chrome: {
@@ -898,4 +901,4 @@ var _default = helpers;
898
901
  exports.default = _default;require('source-map-support').install();
899
902
 
900
903
 
901
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwibmFtZXMiOlsiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQiLCJDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZIiwiY2hyb21lIiwicGtnIiwiYWN0aXZpdHkiLCJjaHJvbWl1bSIsImNocm9tZWJldGEiLCJicm93c2VyIiwiZGVmYXVsdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZIiwiRU1VTEFUT1JfUEFUVEVSTiIsIkFQUF9TVEFURSIsIk9iamVjdCIsImZyZWV6ZSIsIk5PVF9JTlNUQUxMRUQiLCJOT1RfUlVOTklORyIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsInRvQ3JlZGVudGlhbFR5cGUiLCJ1bmxvY2tUeXBlIiwiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJFcnJvciIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJhdmROYW1lIiwicmVwbGFjZSIsInJ1bm5pbmdBVkQiLCJnZXRSdW5uaW5nQVZEIiwiYXJncyIsImRlYnVnIiwia2lsbEVtdWxhdG9yIiwibGF1bmNoQVZEIiwiZW5zdXJlRGV2aWNlTG9jYWxlIiwic2NyaXB0IiwiaXNTdHJpbmciLCJzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkiLCJlbnN1cmVDdXJyZW50TG9jYWxlIiwibWVzc2FnZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwia2V5IiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsInVubG9ja0tleSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJ1bmxvY2tlciIsInZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiaXNOaWwiLCJpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwiZmFzdFVubG9jayIsImNyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsInVubG9ja01ldGhvZCIsInBpblVubG9jayIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBhc3N3b3JkVW5sb2NrIiwicGF0dGVyblVubG9jayIsImZpbmdlcnByaW50VW5sb2NrIiwidmVyaWZ5VW5sb2NrIiwidGltZW91dE1zIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzRW11bGF0b3IiLCJpc1VuZGVmaW5lZCIsInN0YXJ0TG9nY2F0IiwiZm9ybWF0IiwiZmlsdGVyU3BlY3MiLCJyZW1vdmVOdWxsUHJvcGVydGllcyIsIm9iaiIsImlzTnVsbCIsInRydW5jYXRlRGVjaW1hbHMiLCJudW1iZXIiLCJkaWdpdHMiLCJtdWx0aXBsaWVyIiwiTWF0aCIsInBvdyIsImFkanVzdGVkTnVtIiwidHJ1bmNhdGVkTnVtIiwiaXNDaHJvbWVCcm93c2VyIiwiZ2V0Q2hyb21lUGtnIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwic2Vzc2lvbklkIiwiaXNGdW5jdGlvbiIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwiYWN0aXZlSGFuZGxlcnMiLCJwYXRobmFtZSIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJwYXJzZUFycmF5IiwiY2FwIiwicGFyc2VkQ2FwcyIsIkpTT04iLCJwYXJzZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiYnJvd3Nlck5hbWUiLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJzdHJpbmdpZnkiLCJwb3NzaWJsZU5hbWVzIiwic29tZSIsInRlc3QiLCJib290c3RyYXAiLCJCb290c3RyYXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUVBLE1BQU1BLHVCQUF1QixHQUFHLEtBQWhDO0FBRUEsTUFBTUMsK0JBQStCLEdBQUc7QUFDdENDLEVBQUFBLE1BQU0sRUFBRTtBQUNOQyxJQUFBQSxHQUFHLEVBQUUsb0JBREM7QUFF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O0FBR0EsU0FBT29NLElBQVA7QUFDRCxDQW5CRDs7QUE0QkFwUCxPQUFPLENBQUNvTixVQUFSLEdBQXFCLFNBQVNBLFVBQVQsQ0FBcUI3TyxHQUFyQixFQUEwQlUsSUFBMUIsRUFBZ0M7QUFDbkQsUUFBTXVRLGFBQWEsR0FBRyxDQUFDdlEsSUFBSSxDQUFDMkQsSUFBTixFQUFZckUsR0FBWixhQUFZQSxHQUFaLHVCQUFZQSxHQUFHLENBQUV1RSxXQUFqQixDQUF0QjtBQUNBLFNBQU8sQ0FBQyxDQUFDN0QsSUFBSSxDQUFDa0MsR0FBUCxJQUFjcU8sYUFBYSxDQUFDQyxJQUFkLENBQW9CbEcsQ0FBRCxJQUFPekwsZ0JBQWdCLENBQUM0UixJQUFqQixDQUFzQm5HLENBQXRCLENBQTFCLENBQXJCO0FBQ0QsQ0FIRDs7QUFLQXZKLE9BQU8sQ0FBQzJQLFNBQVIsR0FBb0JDLGtCQUFwQjtBQUNBNVAsT0FBTyxDQUFDc0wsUUFBUixHQUFtQkEsc0JBQW5CO2VBR2V0TCxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcGF0aCBhcyBzZXR0aW5nc0Fwa1BhdGggfSBmcm9tICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuaW1wb3J0IEJvb3RzdHJhcCBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQURCIGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB1bmxvY2tlciwgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsXG4gIFBBU1NXT1JEX1VOTE9DSywgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xufSBmcm9tICcuL3VubG9jay1oZWxwZXJzJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGNvbnN0IHJ1bm5pbmdBVkQgPSBhd2FpdCBhZGIuZ2V0UnVubmluZ0FWRChhdmROYW1lKTtcbiAgY29uc3QgYXJncyA9IHByZXBhcmVBdmRBcmdzKGFkYiwgb3B0cyk7XG4gIGlmIChydW5uaW5nQVZEKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgcmVpbnN0YWxsXCIpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnkoMiwgYXN5bmMgZnVuY3Rpb24gcmV0cnlJbnN0YWxsSGVscGVyQXBwICgpIHtcbiAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yW2ZhbHNlXSAtIFdoZXRoZXIgdGhyb3cgZXJyb3Igb3Igbm90XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhyb3dFcnJvciBpcyB0cnVlIGFuZCBzb21ldGhpbmcgaGFwcGVucyBpbiBpbnN0YWxsYXRpb24gc3RlcFxuICovXG5oZWxwZXJzLnB1c2hTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTZXR0aW5nc0FwcCAoYWRiLCB0aHJvd0Vycm9yID0gZmFsc2UpIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3aWxsIHN0b3AgdGhlIHNldHRpbmdzIGhlbHBlciBwcm9jZXNzIGFueXdheSwgc29cbiAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgc3RpbGwgcnVubmluZ1xuICBpZiAoYXdhaXQgYWRiLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCkpIHtcbiAgICBsb2dnZXIuZGVidWcoYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0gaXMgYWxyZWFkeSBydW5uaW5nLiBgICtcbiAgICAgIGBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IGl0cyBwZXJtaXNzaW9ucy5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPD0gMjMpIHsgLy8gQW5kcm9pZCA2LSBkZXZpY2VzIHNob3VsZCBoYXZlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICBjb25zdCBwZXJtcyA9IFsnU0VUX0FOSU1BVElPTl9TQ0FMRScsICdDSEFOR0VfQ09ORklHVVJBVElPTicsICdBQ0NFU1NfRklORV9MT0NBVElPTiddO1xuICAgIGxvZ2dlci5pbmZvKGBHcmFudGluZyBwZXJtaXNzaW9ucyAke3Blcm1zfSB0byAnJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSdgKTtcbiAgICBhd2FpdCBhZGIuZ3JhbnRQZXJtaXNzaW9ucyhTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBwZXJtcy5tYXAoKHgpID0+IGBhbmRyb2lkLnBlcm1pc3Npb24uJHt4fWApKTtcbiAgfVxuXG4gIC8vIGxhdW5jaCBpby5hcHBpdW0uc2V0dGluZ3MgYXBwIGR1ZSB0byBzZXR0aW5ncyBmYWlsaW5nIHRvIGJlIHNldFxuICAvLyBpZiB0aGUgYXBwIGlzIG5vdCBsYXVuY2hlZCBwcmlvciB0byBzdGFydCB0aGUgc2Vzc2lvbiBvbiBhbmRyb2lkIDcrXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvODk1N1xuICB0cnkge1xuICAgIGF3YWl0IGFkYi5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhlcnIpO1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHN0cmluZy54bWwgYW5kIGNvbnZlcnRzIGl0IHRvIHN0cmluZy5qc29uIGFuZCBwdXNoZXNcbiAqIGl0IHRvIC9kYXRhL2xvY2FsL3RtcC9zdHJpbmcuanNvbiBvbiBmb3IgdXNlIG9mIGJvb3RzdHJhcFxuICogSWYgYXBwIGlzIG5vdCBwcmVzZW50IHRvIGV4dHJhY3Qgc3RyaW5nLnhtbCBpdCBkZWxldGVzIHJlbW90ZSBzdHJpbmdzLmpzb25cbiAqIElmIGFwcCBkb2VzIG5vdCBoYXZlIHN0cmluZ3MueG1sIHdlIHB1c2ggYW4gZW1wdHkganNvbiBvYmplY3QgdG8gcmVtb3RlXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlIGFiYnJldmlhdGlvbiwgZm9yIGV4YW1wbGUgJ2ZyJy4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2VcbiAqIGlzIHVzZWQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZGVmaW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkaWN0aW9uYXJ5LCB3aGVyZSBzdHJpbmcgcmVzb3VyY2UgaWRlbnRpZmllcnMgYXJlIGtleXNcbiAqIGFsb25nIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBvciBhbiBlbXB0eSBvYmplY3RcbiAqIGlmIG5vIG1hdGNoaW5nIHJlc291cmNlcyB3ZXJlIGV4dHJhY3RlZC5cbiAqL1xuaGVscGVycy5wdXNoU3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTdHJpbmdzIChsYW5ndWFnZSwgYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHJlbW90ZURpciA9ICcvZGF0YS9sb2NhbC90bXAnO1xuICBjb25zdCBzdHJpbmdzSnNvbiA9ICdzdHJpbmdzLmpzb24nO1xuICBjb25zdCByZW1vdGVGaWxlID0gcGF0aC5wb3NpeC5yZXNvbHZlKHJlbW90ZURpciwgc3RyaW5nc0pzb24pO1xuXG4gIC8vIGNsZWFuIHVwIHJlbW90ZSBzdHJpbmcuanNvbiBpZiBwcmVzZW50XG4gIGF3YWl0IGFkYi5yaW1yYWYocmVtb3RlRmlsZSk7XG5cbiAgbGV0IGFwcDtcbiAgdHJ5IHtcbiAgICBhcHAgPSBvcHRzLmFwcCB8fCBhd2FpdCBhZGIucHVsbEFwayhvcHRzLmFwcFBhY2thZ2UsIG9wdHMudG1wRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmluZm8oYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke29wdHMuYXBwUGFja2FnZX0nIHRvICcke29wdHMudG1wRGlyfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShvcHRzLmFwcFBhY2thZ2UpIHx8ICEoYXdhaXQgZnMuZXhpc3RzKGFwcCkpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyBhcHAgb3IgcGFja2FnZSBzcGVjaWZpZWQuIFJldHVybmluZyBlbXB0eSBzdHJpbmdzYCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgc3RyaW5nc1RtcERpciA9IHBhdGgucmVzb2x2ZShvcHRzLnRtcERpciwgb3B0cy5hcHBQYWNrYWdlKTtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZGVidWcoJ0V4dHJhY3Rpbmcgc3RyaW5ncyBmcm9tIGFwaycsIGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGNvbnN0IHthcGtTdHJpbmdzLCBsb2NhbFBhdGh9ID0gYXdhaXQgYWRiLmV4dHJhY3RTdHJpbmdzRnJvbUFwayhhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBhd2FpdCBhZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZURpcik7XG4gICAgcmV0dXJuIGFwa1N0cmluZ3M7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IHN0cmluZ3MsIGNvbnRpbnVpbmcgYW55d2F5LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoJ2VjaG8nLCBbYCd7fScgPiAke3JlbW90ZUZpbGV9YF0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihzdHJpbmdzVG1wRGlyKTtcbiAgfVxuICByZXR1cm4ge307XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dnZXIuZGVidWcoJ1NjcmVlbiBpcyBsb2NrZWQsIHRyeWluZyB0byB1bmxvY2snKTtcblxuICBpZiAoIWNhcGFiaWxpdGllcy51bmxvY2tUeXBlICYmICFjYXBhYmlsaXRpZXMudW5sb2NrS2V5KSB7XG4gICAgbG9nZ2VyLndhcm4oJ1VzaW5nIGFwcCB1bmxvY2ssIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCEnKTtcbiAgICBhd2FpdCBoZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAoYWRiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgdW5sb2NrVHlwZSxcbiAgICB1bmxvY2tLZXksXG4gICAgdW5sb2NrU3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQsXG4gIH0gPSB1bmxvY2tlci52YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpO1xuICBpZiAodW5sb2NrS2V5ICYmIHVubG9ja1R5cGUgIT09IEZJTkdFUlBSSU5UX1VOTE9DS1xuICAgICAgJiYgKF8uaXNOaWwodW5sb2NrU3RyYXRlZ3kpIHx8IF8udG9Mb3dlcih1bmxvY2tTdHJhdGVneSkgPT09ICdsb2Nrc2V0dGluZ3MnKVxuICAgICAgJiYgYXdhaXQgYWRiLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQoKSkge1xuICAgIGF3YWl0IHVubG9ja2VyLmZhc3RVbmxvY2soYWRiLCB7XG4gICAgICBjcmVkZW50aWFsOiB1bmxvY2tLZXksXG4gICAgICBjcmVkZW50aWFsVHlwZTogdG9DcmVkZW50aWFsVHlwZSh1bmxvY2tUeXBlKSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1bmxvY2tNZXRob2QgPSB7XG4gICAgICBbUElOX1VOTE9DS106IHVubG9ja2VyLnBpblVubG9jayxcbiAgICAgIFtQSU5fVU5MT0NLX0tFWV9FVkVOVF06IHVubG9ja2VyLnBpblVubG9ja1dpdGhLZXlFdmVudCxcbiAgICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICAgIFtQQVRURVJOX1VOTE9DS106IHVubG9ja2VyLnBhdHRlcm5VbmxvY2ssXG4gICAgICBbRklOR0VSUFJJTlRfVU5MT0NLXTogdW5sb2NrZXIuZmluZ2VycHJpbnRVbmxvY2ssXG4gICAgfVt1bmxvY2tUeXBlXTtcbiAgICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gIH1cbiAgYXdhaXQgaGVscGVycy52ZXJpZnlVbmxvY2soYWRiLCB1bmxvY2tTdWNjZXNzVGltZW91dCk7XG59O1xuXG5oZWxwZXJzLnZlcmlmeVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVVubG9jayAoYWRiLCB0aW1lb3V0TXMgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiAhKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0TXMgPz8gMjAwMCxcbiAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGV2aWNlIGhhcyBmYWlsZWQgdG8gYmUgdW5sb2NrZWQnKTtcbiAgfVxuICBsb2dnZXIuaW5mbygnVGhlIGRldmljZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5sb2NrZWQnKTtcbn07XG5cbmhlbHBlcnMuaW5pdERldmljZSA9IGFzeW5jIGZ1bmN0aW9uIGluaXREZXZpY2UgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgc2tpcERldmljZUluaXRpYWxpemF0aW9uLFxuICAgIGxvY2FsZSxcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGVTY3JpcHQsXG4gICAgdW5pY29kZUtleWJvYXJkLFxuICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgc2tpcFVubG9jayxcbiAgICBtb2NrTG9jYXRpb25BcHAsXG4gICAgc2tpcExvZ2NhdENhcHR1cmUsXG4gICAgbG9nY2F0Rm9ybWF0LFxuICAgIGxvZ2NhdEZpbHRlclNwZWNzLFxuICB9ID0gb3B0cztcblxuICBpZiAoc2tpcERldmljZUluaXRpYWxpemF0aW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24nIGlzIHNldC4gU2tpcHBpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi53YWl0Rm9yRGV2aWNlKCk7XG4gICAgLy8gcHVzaFNldHRpbmdzQXBwIHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIGVuc3VyZURldmljZUxvY2FsZSBmb3IgQVBJIExldmVsIDI0K1xuXG4gICAgLy8gU29tZSBmZWF0dXJlIHN1Y2ggYXMgbG9jYXRpb24vd2lmaSBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIHVzZXJzLFxuICAgIC8vIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIHNldHRpbmdzIGFwcC4gU28sIHRyeSB0byBjb25maWd1cmUgaXQgd2hpbGUgQXBwaXVtXG4gICAgLy8gZG9lcyBub3QgdGhyb3cgZXJyb3IgZXZlbiBpZiB0aGV5IGZhaWwuXG4gICAgY29uc3Qgc2hvdWxkVGhyb3dFcnJvciA9IGxhbmd1YWdlXG4gICAgICB8fCBsb2NhbGVcbiAgICAgIHx8IGxvY2FsZVNjcmlwdFxuICAgICAgfHwgdW5pY29kZUtleWJvYXJkXG4gICAgICB8fCBkaXNhYmxlV2luZG93QW5pbWF0aW9uXG4gICAgICB8fCAhc2tpcFVubG9jaztcbiAgICBhd2FpdCBoZWxwZXJzLnB1c2hTZXR0aW5nc0FwcChhZGIsIHNob3VsZFRocm93RXJyb3IpO1xuICB9XG5cbiAgaWYgKCFoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSAmJiAobW9ja0xvY2F0aW9uQXBwIHx8IF8uaXNVbmRlZmluZWQobW9ja0xvY2F0aW9uQXBwKSkpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcChhZGIsIG1vY2tMb2NhdGlvbkFwcCB8fCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEKTtcbiAgfVxuXG4gIGlmIChsYW5ndWFnZSB8fCBsb2NhbGUpIHtcbiAgICBhd2FpdCBoZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZShhZGIsIGxhbmd1YWdlLCBsb2NhbGUsIGxvY2FsZVNjcmlwdCk7XG4gIH1cblxuICBpZiAoc2tpcExvZ2NhdENhcHR1cmUpIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBMb2djYXRDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ2NhdCBjYXB0dXJlLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi5zdGFydExvZ2NhdCh7XG4gICAgICBmb3JtYXQ6IGxvZ2NhdEZvcm1hdCxcbiAgICAgIGZpbHRlclNwZWNzOiBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh1bmljb2RlS2V5Ym9hcmQpIHtcbiAgICByZXR1cm4gYXdhaXQgaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkKGFkYik7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiByZW1vdmVOdWxsUHJvcGVydGllcyAob2JqKSB7XG4gIGZvciAobGV0IGtleSBvZiBfLmtleXMob2JqKSkge1xuICAgIGlmIChfLmlzTnVsbChvYmpba2V5XSkgfHwgXy5pc1VuZGVmaW5lZChvYmpba2V5XSkpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyA9IGZ1bmN0aW9uIHRydW5jYXRlRGVjaW1hbHMgKG51bWJlciwgZGlnaXRzKSB7XG4gIGxldCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIGRpZ2l0cyksXG4gICAgICBhZGp1c3RlZE51bSA9IG51bWJlciAqIG11bHRpcGxpZXIsXG4gICAgICB0cnVuY2F0ZWROdW0gPSBNYXRoW2FkanVzdGVkTnVtIDwgMCA/ICdjZWlsJyA6ICdmbG9vciddKGFkanVzdGVkTnVtKTtcblxuICByZXR1cm4gdHJ1bmNhdGVkTnVtIC8gbXVsdGlwbGllcjtcbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVCcm93c2VyID0gZnVuY3Rpb24gaXNDaHJvbWVCcm93c2VyIChicm93c2VyKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKE9iamVjdC5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpLCAoYnJvd3NlciB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5oZWxwZXJzLmdldENocm9tZVBrZyA9IGZ1bmN0aW9uIGdldENocm9tZVBrZyAoYnJvd3Nlcikge1xuICByZXR1cm4gQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWVticm93c2VyLnRvTG93ZXJDYXNlKCldIHx8IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkuZGVmYXVsdDtcbn07XG5cbmhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIChzZXJ2ZXIsIHNlc3Npb25JZCkge1xuICBpZiAoIXNlcnZlciB8fCAhXy5pc0Z1bmN0aW9uKHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhY3RpdmVIYW5kbGVycyA9IGF3YWl0IHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhzZXNzaW9uSWQpO1xuICBmb3IgKGNvbnN0IHBhdGhuYW1lIG9mIF8ua2V5cyhhY3RpdmVIYW5kbGVycykpIHtcbiAgICBhd2FpdCBzZXJ2ZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlcihwYXRobmFtZSk7XG4gIH1cbn07XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMucGFyc2VBcnJheSA9IGZ1bmN0aW9uIHBhcnNlQXJyYXkgKGNhcCkge1xuICBsZXQgcGFyc2VkQ2FwcztcbiAgdHJ5IHtcbiAgICBwYXJzZWRDYXBzID0gSlNPTi5wYXJzZShjYXApO1xuICB9IGNhdGNoIChpZ24pIHsgfVxuXG4gIGlmIChfLmlzQXJyYXkocGFyc2VkQ2FwcykpIHtcbiAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGNhcCkpIHtcbiAgICByZXR1cm4gW2NhcF07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMuIFJldHVybnMgdHJ1ZSBpZiBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKlxuICogQHBhcmFtIHsqfSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjYXBzIGhhcyBpbnZhbGlkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzID0gZnVuY3Rpb24gdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXMgaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgbG9nZ2VyLndhcm4oYFRoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgICBpZiAoY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVGhlIGRlc2lyZWQgc2hvdWxkIG5vdCBpbmNsdWRlIGJvdGggb2YgYW4gJ2FwcFBhY2thZ2UnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VBcnJheShjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkanVzdCB0aGUgY2FwYWJpbGl0aWVzIGZvciBhIGJyb3dzZXIgc2Vzc2lvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIC0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiAhISEgVGhlIG9iamVjdCBpcyBtdXRhdGVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwgISEhXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBwb3NzaWJseSBtdXRhdGVkIGBvcHRzYCBpbnN0YW5jZS5cbiAqIE5vIG11dGF0aW9uIGlzIGhhcHBlbmluZyBpcyB0aGUgY3VycmVudCBzZXNzaW9uIGlmXG4gKiBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQuXG4gKi9cbmhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzID0gZnVuY3Rpb24gYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIChjYXBzID0ge30pIHtcbiAgY29uc3QgeyBicm93c2VyTmFtZSB9ID0gY2FwcztcbiAgbG9nZ2VyLmluZm8oYFRoZSBjdXJyZW50IHNlc3Npb24gaXMgY29uc2lkZXJlZCBicm93c2VyLWJhc2VkYCk7XG4gIGxvZ2dlci5pbmZvKGBTdXBwb3J0ZWQgYnJvd3NlciBuYW1lczogJHtKU09OLnN0cmluZ2lmeShfLmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSkpfWApO1xuICBpZiAoY2Fwcy5hcHBQYWNrYWdlIHx8IGNhcHMuYXBwQWN0aXZpdHkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IG92ZXJyaWRpbmcgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBmb3IgJyR7YnJvd3Nlck5hbWV9JyBgICtcbiAgICAgICdiZWNhdXNlIHNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gYWxyZWFkeSBwcm92aWRlZCcpO1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3Qge3BrZywgYWN0aXZpdHl9ID0gdGhpcy5nZXRDaHJvbWVQa2coYnJvd3Nlck5hbWUpO1xuICBjYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gIGNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgbG9nZ2VyLmluZm8oYGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IHNldCB0byAke3BrZ30vJHthY3Rpdml0eX0gYCArXG4gICAgYGZvciAnJHticm93c2VyTmFtZX0nYCk7XG4gIGxvZ2dlci5pbmZvKGBDb25zaWRlciBjaGFuZ2luZyB0aGUgYnJvd3Nlck5hbWUgdG8gdGhlIG9uZSBmcm9tIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBicm93c2VyIG5hbWVzIGAgK1xuICAgIGBvciBwcm92aWRlIGN1c3RvbSBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGlmIHRoZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIG9uZXMgZG8gYCArXG4gICAgYG5vdCBtYWtlIHNlbnNlYCk7XG4gIHJldHVybiBjYXBzO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBkZXZpY2UgdW5kZXIgdGVzdCBpcyBhbiBlbXVsYXRvclxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgLSBhcHBpdW0tYWRiIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIGRyaXZlciBvcHRpb25zIG1hcHBpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGRldmljZSBpcyBhbiBBbmRyb2lkIGVtdWxhdG9yXG4gKi9cbmhlbHBlcnMuaXNFbXVsYXRvciA9IGZ1bmN0aW9uIGlzRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCBwb3NzaWJsZU5hbWVzID0gW29wdHMudWRpZCwgYWRiPy5jdXJEZXZpY2VJZF07XG4gIHJldHVybiAhIW9wdHMuYXZkIHx8IHBvc3NpYmxlTmFtZXMuc29tZSgoeCkgPT4gRU1VTEFUT1JfUEFUVEVSTi50ZXN0KHgpKTtcbn07XG5cbmhlbHBlcnMuYm9vdHN0cmFwID0gQm9vdHN0cmFwO1xuaGVscGVycy51bmxvY2tlciA9IHVubG9ja2VyO1xuXG5leHBvcnQgeyBoZWxwZXJzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBBUFBfU1RBVEUsIHByZXBhcmVBdmRBcmdzLCBlbnN1cmVOZXR3b3JrU3BlZWQgfTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwiZmlsZSI6ImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
904
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiXSwibmFtZXMiOlsiUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQiLCJDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZIiwiY2hyb21lIiwicGtnIiwiYWN0aXZpdHkiLCJjaHJvbWl1bSIsImNocm9tZWJldGEiLCJicm93c2VyIiwiZGVmYXVsdCIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZIiwiRU1VTEFUT1JfUEFUVEVSTiIsIkFQUF9TVEFURSIsIk9iamVjdCIsImZyZWV6ZSIsIk5PVF9JTlNUQUxMRUQiLCJOT1RfUlVOTklORyIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsImVuc3VyZU5ldHdvcmtTcGVlZCIsImFkYiIsIm5ldHdvcmtTcGVlZCIsIl8iLCJ2YWx1ZXMiLCJORVRXT1JLX1NQRUVEIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJ3YXJuIiwiRlVMTCIsInByZXBhcmVBdmRBcmdzIiwib3B0cyIsImlzSGVhZGxlc3MiLCJhdmRBcmdzIiwicmVzdWx0IiwiaXNBcnJheSIsInB1c2giLCJ1dGlsIiwic2hlbGxQYXJzZSIsInRvQ3JlZGVudGlhbFR5cGUiLCJ1bmxvY2tUeXBlIiwiUElOX1VOTE9DSyIsIlBJTl9VTkxPQ0tfS0VZX0VWRU5UIiwiUEFTU1dPUkRfVU5MT0NLIiwiUEFUVEVSTl9VTkxPQ0siLCJFcnJvciIsImhlbHBlcnMiLCJjcmVhdGVCYXNlQURCIiwiYWRiUG9ydCIsInN1cHByZXNzS2lsbFNlcnZlciIsInJlbW90ZUFkYkhvc3QiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiYWRiRXhlY1RpbWVvdXQiLCJ1c2VLZXlzdG9yZSIsImtleXN0b3JlUGF0aCIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsImFsbG93T2ZmbGluZURldmljZXMiLCJhbGxvd0RlbGF5QWRiIiwiQURCIiwiY3JlYXRlQURCIiwicHJlcGFyZUVtdWxhdG9yIiwiYXZkIiwiYXZkRW52IiwiZW52IiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJjb3VudHJ5IiwiYXZkTGF1bmNoVGltZW91dCIsImxhdW5jaFRpbWVvdXQiLCJhdmRSZWFkeVRpbWVvdXQiLCJyZWFkeVRpbWVvdXQiLCJhdmROYW1lIiwicmVwbGFjZSIsInJ1bm5pbmdBVkQiLCJnZXRSdW5uaW5nQVZEIiwiYXJncyIsImRlYnVnIiwia2lsbEVtdWxhdG9yIiwibGF1bmNoQVZEIiwiZW5zdXJlRGV2aWNlTG9jYWxlIiwic2NyaXB0IiwiaXNTdHJpbmciLCJzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkiLCJlbnN1cmVDdXJyZW50TG9jYWxlIiwibWVzc2FnZSIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsInVkaWQiLCJlbVBvcnQiLCJjdXJEZXZpY2VJZCIsImVtdWxhdG9yUG9ydCIsImluZm8iLCJkZXZpY2VzIiwiZ2V0RGV2aWNlc1dpdGhSZXRyeSIsIm1hcCIsImVycm9yQW5kVGhyb3ciLCJnZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nIiwicGxhdGZvcm1WZXJzaW9uIiwidHJpbSIsInNlbXZlciIsImNvZXJjZSIsImF2YWlsRGV2aWNlcyIsInBhcnRpYWxNYXRjaENhbmRpZGF0ZSIsImRldmljZSIsInNldERldmljZUlkIiwicmF3RGV2aWNlT1MiLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VPUyIsImJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCIsInZhbGlkIiwiYm90aFZlcnNpb25zQXJlU3RyaW5ncyIsInZlcnNpb24iLCJ0b0xvd2VyIiwibWFqb3IiLCJtaW5vciIsImd0Iiwia2V5cyIsImpvaW4iLCJzZXRFbXVsYXRvclBvcnQiLCJ2YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzIiwia2V5IiwibmFtZSIsIm1hdGNoIiwiZXhlYyIsImluZGV4Iiwic3Vic3RyaW5nIiwiZ2V0TGF1bmNoSW5mbyIsImFwcCIsImFwcFBhY2thZ2UiLCJhcHBBY3Rpdml0eSIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYXBrUGFja2FnZSIsImFwa0FjdGl2aXR5IiwicGFja2FnZUFuZExhdW5jaEFjdGl2aXR5RnJvbU1hbmlmZXN0IiwicmVzZXRBcHAiLCJmYXN0UmVzZXQiLCJmdWxsUmVzZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsImFsbG93VGVzdFBhY2thZ2VzIiwiaXNJbnN0YWxsZWQiLCJpc0FwcEluc3RhbGxlZCIsImZvcmNlU3RvcCIsImlnbiIsIm91dHB1dCIsImNsZWFyIiwidG9Mb3dlckNhc2UiLCJncmFudEFsbFBlcm1pc3Npb25zIiwiZXJyb3IiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsIiwiZ3JhbnRQZXJtaXNzaW9ucyIsInRpbWVvdXQiLCJpbnN0YWxsQXBrIiwiZW5mb3JjZUFwcEluc3RhbGwiLCJhcHBTdGF0ZSIsIndhc1VuaW5zdGFsbGVkIiwiaW5zdGFsbE9yVXBncmFkZSIsImVuZm9yY2VDdXJyZW50QnVpbGQiLCJpc0luc3RhbGxlZE92ZXJFeGlzdGluZ0FwcCIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiaW5zdGFsbE90aGVyQXBrcyIsIm90aGVyQXBwcyIsIkIiLCJhbGwiLCJvdGhlckFwcCIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJhcHBQYWNrYWdlcyIsImZpbHRlclBhY2thZ2VzIiwiZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzIiwicGFja2FnZXNTdHJpbmciLCJzaGVsbCIsImFwcFBhY2thZ2VzQXJyYXkiLCJzcGxpdCIsIkVPTCIsImRpZmZlcmVuY2UiLCJlcnIiLCJpbml0VW5pY29kZUtleWJvYXJkIiwiZGVmYXVsdElNRSIsImFwcGl1bUlNRSIsImVuYWJsZUlNRSIsInNldElNRSIsInNldE1vY2tMb2NhdGlvbkFwcCIsImdldEFwaUxldmVsIiwiaW5zdGFsbEhlbHBlckFwcCIsImFwa1BhdGgiLCJwYWNrYWdlSWQiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsInVubG9ja0tleSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJ1bmxvY2tlciIsInZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiaXNOaWwiLCJpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwiZmFzdFVubG9jayIsImNyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsInVubG9ja01ldGhvZCIsInBpblVubG9jayIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBhc3N3b3JkVW5sb2NrIiwicGF0dGVyblVubG9jayIsImZpbmdlcnByaW50VW5sb2NrIiwidmVyaWZ5VW5sb2NrIiwidGltZW91dE1zIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImluaXREZXZpY2UiLCJza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24iLCJsb2NhbGVTY3JpcHQiLCJ1bmljb2RlS2V5Ym9hcmQiLCJkaXNhYmxlV2luZG93QW5pbWF0aW9uIiwic2tpcFVubG9jayIsIm1vY2tMb2NhdGlvbkFwcCIsInNraXBMb2djYXRDYXB0dXJlIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJ3YWl0Rm9yRGV2aWNlIiwic2hvdWxkVGhyb3dFcnJvciIsImlzRW11bGF0b3IiLCJpc1VuZGVmaW5lZCIsInN0YXJ0TG9nY2F0IiwiZm9ybWF0IiwiZmlsdGVyU3BlY3MiLCJyZW1vdmVOdWxsUHJvcGVydGllcyIsIm9iaiIsImlzTnVsbCIsInRydW5jYXRlRGVjaW1hbHMiLCJudW1iZXIiLCJkaWdpdHMiLCJtdWx0aXBsaWVyIiwiTWF0aCIsInBvdyIsImFkanVzdGVkTnVtIiwidHJ1bmNhdGVkTnVtIiwiaXNDaHJvbWVCcm93c2VyIiwiZ2V0Q2hyb21lUGtnIiwicmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIiwic2VydmVyIiwic2Vzc2lvbklkIiwiaXNGdW5jdGlvbiIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwiYWN0aXZlSGFuZGxlcnMiLCJwYXRobmFtZSIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJwYXJzZUFycmF5IiwiY2FwIiwicGFyc2VkQ2FwcyIsIkpTT04iLCJwYXJzZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiYnJvd3Nlck5hbWUiLCJhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMiLCJzdHJpbmdpZnkiLCJwb3NzaWJsZU5hbWVzIiwic29tZSIsInRlc3QiLCJib290c3RyYXAiLCJCb290c3RyYXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLHVCQUF1QixHQUFHLEtBQWhDO0FBRUEsTUFBTUMsK0JBQStCLEdBQUc7QUFDdENDLEVBQUFBLE1BQU0sRUFBRTtBQUNOQyxJQUFBQSxHQUFHLEVBQUUsb0JBREM7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Rkg7O0FBR0EsU0FBT29NLElBQVA7QUFDRCxDQW5CRDs7QUE0QkFwUCxPQUFPLENBQUNvTixVQUFSLEdBQXFCLFNBQVNBLFVBQVQsQ0FBcUI3TyxHQUFyQixFQUEwQlUsSUFBMUIsRUFBZ0M7QUFDbkQsUUFBTXVRLGFBQWEsR0FBRyxDQUFDdlEsSUFBSSxDQUFDMkQsSUFBTixFQUFZckUsR0FBWixhQUFZQSxHQUFaLHVCQUFZQSxHQUFHLENBQUV1RSxXQUFqQixDQUF0QjtBQUNBLFNBQU8sQ0FBQyxDQUFDN0QsSUFBSSxDQUFDa0MsR0FBUCxJQUFjcU8sYUFBYSxDQUFDQyxJQUFkLENBQW9CbEcsQ0FBRCxJQUFPekwsZ0JBQWdCLENBQUM0UixJQUFqQixDQUFzQm5HLENBQXRCLENBQTFCLENBQXJCO0FBQ0QsQ0FIRDs7QUFLQXZKLE9BQU8sQ0FBQzJQLFNBQVIsR0FBb0JDLGtCQUFwQjtBQUNBNVAsT0FBTyxDQUFDc0wsUUFBUixHQUFtQkEsc0JBQW5CO2VBR2V0TCxPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnksIHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZzLCB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcGF0aCBhcyBzZXR0aW5nc0Fwa1BhdGggfSBmcm9tICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuaW1wb3J0IEJvb3RzdHJhcCBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQURCIGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB1bmxvY2tlciwgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsXG4gIFBBU1NXT1JEX1VOTE9DSywgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xufSBmcm9tICcuL3VubG9jay1oZWxwZXJzJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGNvbnN0IHJ1bm5pbmdBVkQgPSBhd2FpdCBhZGIuZ2V0UnVubmluZ0FWRChhdmROYW1lKTtcbiAgY29uc3QgYXJncyA9IHByZXBhcmVBdmRBcmdzKGFkYiwgb3B0cyk7XG4gIGlmIChydW5uaW5nQVZEKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgcmVpbnN0YWxsXCIpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnkoMiwgYXN5bmMgZnVuY3Rpb24gcmV0cnlJbnN0YWxsSGVscGVyQXBwICgpIHtcbiAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yW2ZhbHNlXSAtIFdoZXRoZXIgdGhyb3cgZXJyb3Igb3Igbm90XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhyb3dFcnJvciBpcyB0cnVlIGFuZCBzb21ldGhpbmcgaGFwcGVucyBpbiBpbnN0YWxsYXRpb24gc3RlcFxuICovXG5oZWxwZXJzLnB1c2hTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTZXR0aW5nc0FwcCAoYWRiLCB0aHJvd0Vycm9yID0gZmFsc2UpIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3aWxsIHN0b3AgdGhlIHNldHRpbmdzIGhlbHBlciBwcm9jZXNzIGFueXdheSwgc29cbiAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgc3RpbGwgcnVubmluZ1xuICBpZiAoYXdhaXQgYWRiLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCkpIHtcbiAgICBsb2dnZXIuZGVidWcoYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0gaXMgYWxyZWFkeSBydW5uaW5nLiBgICtcbiAgICAgIGBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IGl0cyBwZXJtaXNzaW9ucy5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPD0gMjMpIHsgLy8gQW5kcm9pZCA2LSBkZXZpY2VzIHNob3VsZCBoYXZlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICBjb25zdCBwZXJtcyA9IFsnU0VUX0FOSU1BVElPTl9TQ0FMRScsICdDSEFOR0VfQ09ORklHVVJBVElPTicsICdBQ0NFU1NfRklORV9MT0NBVElPTiddO1xuICAgIGxvZ2dlci5pbmZvKGBHcmFudGluZyBwZXJtaXNzaW9ucyAke3Blcm1zfSB0byAnJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSdgKTtcbiAgICBhd2FpdCBhZGIuZ3JhbnRQZXJtaXNzaW9ucyhTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBwZXJtcy5tYXAoKHgpID0+IGBhbmRyb2lkLnBlcm1pc3Npb24uJHt4fWApKTtcbiAgfVxuXG4gIC8vIGxhdW5jaCBpby5hcHBpdW0uc2V0dGluZ3MgYXBwIGR1ZSB0byBzZXR0aW5ncyBmYWlsaW5nIHRvIGJlIHNldFxuICAvLyBpZiB0aGUgYXBwIGlzIG5vdCBsYXVuY2hlZCBwcmlvciB0byBzdGFydCB0aGUgc2Vzc2lvbiBvbiBhbmRyb2lkIDcrXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvODk1N1xuICB0cnkge1xuICAgIGF3YWl0IGFkYi5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhlcnIpO1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHN0cmluZy54bWwgYW5kIGNvbnZlcnRzIGl0IHRvIHN0cmluZy5qc29uIGFuZCBwdXNoZXNcbiAqIGl0IHRvIC9kYXRhL2xvY2FsL3RtcC9zdHJpbmcuanNvbiBvbiBmb3IgdXNlIG9mIGJvb3RzdHJhcFxuICogSWYgYXBwIGlzIG5vdCBwcmVzZW50IHRvIGV4dHJhY3Qgc3RyaW5nLnhtbCBpdCBkZWxldGVzIHJlbW90ZSBzdHJpbmdzLmpzb25cbiAqIElmIGFwcCBkb2VzIG5vdCBoYXZlIHN0cmluZ3MueG1sIHdlIHB1c2ggYW4gZW1wdHkganNvbiBvYmplY3QgdG8gcmVtb3RlXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlIGFiYnJldmlhdGlvbiwgZm9yIGV4YW1wbGUgJ2ZyJy4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2VcbiAqIGlzIHVzZWQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZGVmaW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkaWN0aW9uYXJ5LCB3aGVyZSBzdHJpbmcgcmVzb3VyY2UgaWRlbnRpZmllcnMgYXJlIGtleXNcbiAqIGFsb25nIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBvciBhbiBlbXB0eSBvYmplY3RcbiAqIGlmIG5vIG1hdGNoaW5nIHJlc291cmNlcyB3ZXJlIGV4dHJhY3RlZC5cbiAqL1xuaGVscGVycy5wdXNoU3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTdHJpbmdzIChsYW5ndWFnZSwgYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHJlbW90ZURpciA9ICcvZGF0YS9sb2NhbC90bXAnO1xuICBjb25zdCBzdHJpbmdzSnNvbiA9ICdzdHJpbmdzLmpzb24nO1xuICBjb25zdCByZW1vdGVGaWxlID0gcGF0aC5wb3NpeC5yZXNvbHZlKHJlbW90ZURpciwgc3RyaW5nc0pzb24pO1xuXG4gIC8vIGNsZWFuIHVwIHJlbW90ZSBzdHJpbmcuanNvbiBpZiBwcmVzZW50XG4gIGF3YWl0IGFkYi5yaW1yYWYocmVtb3RlRmlsZSk7XG5cbiAgbGV0IGFwcDtcbiAgdHJ5IHtcbiAgICBhcHAgPSBvcHRzLmFwcCB8fCBhd2FpdCBhZGIucHVsbEFwayhvcHRzLmFwcFBhY2thZ2UsIG9wdHMudG1wRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmluZm8oYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke29wdHMuYXBwUGFja2FnZX0nIHRvICcke29wdHMudG1wRGlyfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShvcHRzLmFwcFBhY2thZ2UpIHx8ICEoYXdhaXQgZnMuZXhpc3RzKGFwcCkpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyBhcHAgb3IgcGFja2FnZSBzcGVjaWZpZWQuIFJldHVybmluZyBlbXB0eSBzdHJpbmdzYCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgc3RyaW5nc1RtcERpciA9IHBhdGgucmVzb2x2ZShvcHRzLnRtcERpciwgb3B0cy5hcHBQYWNrYWdlKTtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZGVidWcoJ0V4dHJhY3Rpbmcgc3RyaW5ncyBmcm9tIGFwaycsIGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGNvbnN0IHthcGtTdHJpbmdzLCBsb2NhbFBhdGh9ID0gYXdhaXQgYWRiLmV4dHJhY3RTdHJpbmdzRnJvbUFwayhhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBhd2FpdCBhZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZURpcik7XG4gICAgcmV0dXJuIGFwa1N0cmluZ3M7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IHN0cmluZ3MsIGNvbnRpbnVpbmcgYW55d2F5LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoJ2VjaG8nLCBbYCd7fScgPiAke3JlbW90ZUZpbGV9YF0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihzdHJpbmdzVG1wRGlyKTtcbiAgfVxuICByZXR1cm4ge307XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dnZXIuZGVidWcoJ1NjcmVlbiBpcyBsb2NrZWQsIHRyeWluZyB0byB1bmxvY2snKTtcblxuICBpZiAoIWNhcGFiaWxpdGllcy51bmxvY2tUeXBlICYmICFjYXBhYmlsaXRpZXMudW5sb2NrS2V5KSB7XG4gICAgbG9nZ2VyLndhcm4oJ1VzaW5nIGFwcCB1bmxvY2ssIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCEnKTtcbiAgICBhd2FpdCBoZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAoYWRiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgdW5sb2NrVHlwZSxcbiAgICB1bmxvY2tLZXksXG4gICAgdW5sb2NrU3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQsXG4gIH0gPSB1bmxvY2tlci52YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpO1xuICBpZiAodW5sb2NrS2V5ICYmIHVubG9ja1R5cGUgIT09IEZJTkdFUlBSSU5UX1VOTE9DS1xuICAgICAgJiYgKF8uaXNOaWwodW5sb2NrU3RyYXRlZ3kpIHx8IF8udG9Mb3dlcih1bmxvY2tTdHJhdGVneSkgPT09ICdsb2Nrc2V0dGluZ3MnKVxuICAgICAgJiYgYXdhaXQgYWRiLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQoKSkge1xuICAgIGF3YWl0IHVubG9ja2VyLmZhc3RVbmxvY2soYWRiLCB7XG4gICAgICBjcmVkZW50aWFsOiB1bmxvY2tLZXksXG4gICAgICBjcmVkZW50aWFsVHlwZTogdG9DcmVkZW50aWFsVHlwZSh1bmxvY2tUeXBlKSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1bmxvY2tNZXRob2QgPSB7XG4gICAgICBbUElOX1VOTE9DS106IHVubG9ja2VyLnBpblVubG9jayxcbiAgICAgIFtQSU5fVU5MT0NLX0tFWV9FVkVOVF06IHVubG9ja2VyLnBpblVubG9ja1dpdGhLZXlFdmVudCxcbiAgICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICAgIFtQQVRURVJOX1VOTE9DS106IHVubG9ja2VyLnBhdHRlcm5VbmxvY2ssXG4gICAgICBbRklOR0VSUFJJTlRfVU5MT0NLXTogdW5sb2NrZXIuZmluZ2VycHJpbnRVbmxvY2ssXG4gICAgfVt1bmxvY2tUeXBlXTtcbiAgICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gIH1cbiAgYXdhaXQgaGVscGVycy52ZXJpZnlVbmxvY2soYWRiLCB1bmxvY2tTdWNjZXNzVGltZW91dCk7XG59O1xuXG5oZWxwZXJzLnZlcmlmeVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVVubG9jayAoYWRiLCB0aW1lb3V0TXMgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiAhKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0TXMgPz8gMjAwMCxcbiAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGV2aWNlIGhhcyBmYWlsZWQgdG8gYmUgdW5sb2NrZWQnKTtcbiAgfVxuICBsb2dnZXIuaW5mbygnVGhlIGRldmljZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5sb2NrZWQnKTtcbn07XG5cbmhlbHBlcnMuaW5pdERldmljZSA9IGFzeW5jIGZ1bmN0aW9uIGluaXREZXZpY2UgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgc2tpcERldmljZUluaXRpYWxpemF0aW9uLFxuICAgIGxvY2FsZSxcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGVTY3JpcHQsXG4gICAgdW5pY29kZUtleWJvYXJkLFxuICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgc2tpcFVubG9jayxcbiAgICBtb2NrTG9jYXRpb25BcHAsXG4gICAgc2tpcExvZ2NhdENhcHR1cmUsXG4gICAgbG9nY2F0Rm9ybWF0LFxuICAgIGxvZ2NhdEZpbHRlclNwZWNzLFxuICB9ID0gb3B0cztcblxuICBpZiAoc2tpcERldmljZUluaXRpYWxpemF0aW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24nIGlzIHNldC4gU2tpcHBpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi53YWl0Rm9yRGV2aWNlKCk7XG4gICAgLy8gcHVzaFNldHRpbmdzQXBwIHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIGVuc3VyZURldmljZUxvY2FsZSBmb3IgQVBJIExldmVsIDI0K1xuXG4gICAgLy8gU29tZSBmZWF0dXJlIHN1Y2ggYXMgbG9jYXRpb24vd2lmaSBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIHVzZXJzLFxuICAgIC8vIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIHNldHRpbmdzIGFwcC4gU28sIHRyeSB0byBjb25maWd1cmUgaXQgd2hpbGUgQXBwaXVtXG4gICAgLy8gZG9lcyBub3QgdGhyb3cgZXJyb3IgZXZlbiBpZiB0aGV5IGZhaWwuXG4gICAgY29uc3Qgc2hvdWxkVGhyb3dFcnJvciA9IGxhbmd1YWdlXG4gICAgICB8fCBsb2NhbGVcbiAgICAgIHx8IGxvY2FsZVNjcmlwdFxuICAgICAgfHwgdW5pY29kZUtleWJvYXJkXG4gICAgICB8fCBkaXNhYmxlV2luZG93QW5pbWF0aW9uXG4gICAgICB8fCAhc2tpcFVubG9jaztcbiAgICBhd2FpdCBoZWxwZXJzLnB1c2hTZXR0aW5nc0FwcChhZGIsIHNob3VsZFRocm93RXJyb3IpO1xuICB9XG5cbiAgaWYgKCFoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSAmJiAobW9ja0xvY2F0aW9uQXBwIHx8IF8uaXNVbmRlZmluZWQobW9ja0xvY2F0aW9uQXBwKSkpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcChhZGIsIG1vY2tMb2NhdGlvbkFwcCB8fCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEKTtcbiAgfVxuXG4gIGlmIChsYW5ndWFnZSB8fCBsb2NhbGUpIHtcbiAgICBhd2FpdCBoZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZShhZGIsIGxhbmd1YWdlLCBsb2NhbGUsIGxvY2FsZVNjcmlwdCk7XG4gIH1cblxuICBpZiAoc2tpcExvZ2NhdENhcHR1cmUpIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBMb2djYXRDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ2NhdCBjYXB0dXJlLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi5zdGFydExvZ2NhdCh7XG4gICAgICBmb3JtYXQ6IGxvZ2NhdEZvcm1hdCxcbiAgICAgIGZpbHRlclNwZWNzOiBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh1bmljb2RlS2V5Ym9hcmQpIHtcbiAgICByZXR1cm4gYXdhaXQgaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkKGFkYik7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiByZW1vdmVOdWxsUHJvcGVydGllcyAob2JqKSB7XG4gIGZvciAobGV0IGtleSBvZiBfLmtleXMob2JqKSkge1xuICAgIGlmIChfLmlzTnVsbChvYmpba2V5XSkgfHwgXy5pc1VuZGVmaW5lZChvYmpba2V5XSkpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyA9IGZ1bmN0aW9uIHRydW5jYXRlRGVjaW1hbHMgKG51bWJlciwgZGlnaXRzKSB7XG4gIGxldCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIGRpZ2l0cyksXG4gICAgICBhZGp1c3RlZE51bSA9IG51bWJlciAqIG11bHRpcGxpZXIsXG4gICAgICB0cnVuY2F0ZWROdW0gPSBNYXRoW2FkanVzdGVkTnVtIDwgMCA/ICdjZWlsJyA6ICdmbG9vciddKGFkanVzdGVkTnVtKTtcblxuICByZXR1cm4gdHJ1bmNhdGVkTnVtIC8gbXVsdGlwbGllcjtcbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVCcm93c2VyID0gZnVuY3Rpb24gaXNDaHJvbWVCcm93c2VyIChicm93c2VyKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKE9iamVjdC5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpLCAoYnJvd3NlciB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5oZWxwZXJzLmdldENocm9tZVBrZyA9IGZ1bmN0aW9uIGdldENocm9tZVBrZyAoYnJvd3Nlcikge1xuICByZXR1cm4gQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWVticm93c2VyLnRvTG93ZXJDYXNlKCldIHx8IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkuZGVmYXVsdDtcbn07XG5cbmhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIChzZXJ2ZXIsIHNlc3Npb25JZCkge1xuICBpZiAoIXNlcnZlciB8fCAhXy5pc0Z1bmN0aW9uKHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhY3RpdmVIYW5kbGVycyA9IGF3YWl0IHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhzZXNzaW9uSWQpO1xuICBmb3IgKGNvbnN0IHBhdGhuYW1lIG9mIF8ua2V5cyhhY3RpdmVIYW5kbGVycykpIHtcbiAgICBhd2FpdCBzZXJ2ZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlcihwYXRobmFtZSk7XG4gIH1cbn07XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMucGFyc2VBcnJheSA9IGZ1bmN0aW9uIHBhcnNlQXJyYXkgKGNhcCkge1xuICBsZXQgcGFyc2VkQ2FwcztcbiAgdHJ5IHtcbiAgICBwYXJzZWRDYXBzID0gSlNPTi5wYXJzZShjYXApO1xuICB9IGNhdGNoIChpZ24pIHsgfVxuXG4gIGlmIChfLmlzQXJyYXkocGFyc2VkQ2FwcykpIHtcbiAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGNhcCkpIHtcbiAgICByZXR1cm4gW2NhcF07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMuIFJldHVybnMgdHJ1ZSBpZiBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKlxuICogQHBhcmFtIHsqfSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjYXBzIGhhcyBpbnZhbGlkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzID0gZnVuY3Rpb24gdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXMgaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgbG9nZ2VyLndhcm4oYFRoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgICBpZiAoY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVGhlIGRlc2lyZWQgc2hvdWxkIG5vdCBpbmNsdWRlIGJvdGggb2YgYW4gJ2FwcFBhY2thZ2UnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VBcnJheShjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkanVzdCB0aGUgY2FwYWJpbGl0aWVzIGZvciBhIGJyb3dzZXIgc2Vzc2lvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIC0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiAhISEgVGhlIG9iamVjdCBpcyBtdXRhdGVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwgISEhXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBwb3NzaWJseSBtdXRhdGVkIGBvcHRzYCBpbnN0YW5jZS5cbiAqIE5vIG11dGF0aW9uIGlzIGhhcHBlbmluZyBpcyB0aGUgY3VycmVudCBzZXNzaW9uIGlmXG4gKiBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQuXG4gKi9cbmhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzID0gZnVuY3Rpb24gYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIChjYXBzID0ge30pIHtcbiAgY29uc3QgeyBicm93c2VyTmFtZSB9ID0gY2FwcztcbiAgbG9nZ2VyLmluZm8oYFRoZSBjdXJyZW50IHNlc3Npb24gaXMgY29uc2lkZXJlZCBicm93c2VyLWJhc2VkYCk7XG4gIGxvZ2dlci5pbmZvKGBTdXBwb3J0ZWQgYnJvd3NlciBuYW1lczogJHtKU09OLnN0cmluZ2lmeShfLmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSkpfWApO1xuICBpZiAoY2Fwcy5hcHBQYWNrYWdlIHx8IGNhcHMuYXBwQWN0aXZpdHkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IG92ZXJyaWRpbmcgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBmb3IgJyR7YnJvd3Nlck5hbWV9JyBgICtcbiAgICAgICdiZWNhdXNlIHNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gYWxyZWFkeSBwcm92aWRlZCcpO1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3Qge3BrZywgYWN0aXZpdHl9ID0gdGhpcy5nZXRDaHJvbWVQa2coYnJvd3Nlck5hbWUpO1xuICBjYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gIGNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgbG9nZ2VyLmluZm8oYGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IHNldCB0byAke3BrZ30vJHthY3Rpdml0eX0gYCArXG4gICAgYGZvciAnJHticm93c2VyTmFtZX0nYCk7XG4gIGxvZ2dlci5pbmZvKGBDb25zaWRlciBjaGFuZ2luZyB0aGUgYnJvd3Nlck5hbWUgdG8gdGhlIG9uZSBmcm9tIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBicm93c2VyIG5hbWVzIGAgK1xuICAgIGBvciBwcm92aWRlIGN1c3RvbSBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGlmIHRoZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIG9uZXMgZG8gYCArXG4gICAgYG5vdCBtYWtlIHNlbnNlYCk7XG4gIHJldHVybiBjYXBzO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBkZXZpY2UgdW5kZXIgdGVzdCBpcyBhbiBlbXVsYXRvclxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgLSBhcHBpdW0tYWRiIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIGRyaXZlciBvcHRpb25zIG1hcHBpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGRldmljZSBpcyBhbiBBbmRyb2lkIGVtdWxhdG9yXG4gKi9cbmhlbHBlcnMuaXNFbXVsYXRvciA9IGZ1bmN0aW9uIGlzRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCBwb3NzaWJsZU5hbWVzID0gW29wdHMudWRpZCwgYWRiPy5jdXJEZXZpY2VJZF07XG4gIHJldHVybiAhIW9wdHMuYXZkIHx8IHBvc3NpYmxlTmFtZXMuc29tZSgoeCkgPT4gRU1VTEFUT1JfUEFUVEVSTi50ZXN0KHgpKTtcbn07XG5cbmhlbHBlcnMuYm9vdHN0cmFwID0gQm9vdHN0cmFwO1xuaGVscGVycy51bmxvY2tlciA9IHVubG9ja2VyO1xuXG5leHBvcnQgeyBoZWxwZXJzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBBUFBfU1RBVEUsIHByZXBhcmVBdmRBcmdzLCBlbnN1cmVOZXR3b3JrU3BlZWQgfTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwiZmlsZSI6ImxpYi9hbmRyb2lkLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
@@ -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.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.helpers = exports.commands = void 0;
6
+ exports.helpers = exports.default = exports.commands = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.default = exports.setupNewChromedriver = exports.helpers = exports.commands = void 0;
8
+ exports.setupNewChromedriver = exports.helpers = exports.default = exports.commands = void 0;
11
9
 
12
10
  require("source-map-support/register");
13
11
 
@@ -29,6 +27,10 @@ var _webviewHelpers = _interopRequireWildcard(require("../webview-helpers"));
29
27
 
30
28
  var _androidHelpers = require("../android-helpers");
31
29
 
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33
+
32
34
  const CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';
33
35
  let commands = {},
34
36
  helpers = {},
@@ -192,12 +194,14 @@ helpers.startChromedriverProxy = async function startChromedriverProxy(context,
192
194
 
193
195
  this.chromedriver = cd;
194
196
  this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);
197
+ this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);
195
198
  this.jwpProxyActive = true;
196
199
  };
197
200
 
198
201
  helpers.suspendChromedriverProxy = function suspendChromedriverProxy() {
199
202
  this.chromedriver = null;
200
203
  this.proxyReqRes = null;
204
+ this.proxyCommand = null;
201
205
  this.jwpProxyActive = false;
202
206
  };
203
207
 
@@ -286,6 +290,7 @@ helpers.startChromeSession = async function startChromeSession() {
286
290
  this.curContext = _webviewHelpers.CHROMIUM_WIN;
287
291
  this.sessionChromedrivers[_webviewHelpers.CHROMIUM_WIN] = this.chromedriver;
288
292
  this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);
293
+ this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);
289
294
  this.jwpProxyActive = true;
290
295
 
291
296
  if (this.shouldDismissChromeWelcome()) {
@@ -420,4 +425,4 @@ var _default = extensions;
420
425
  exports.default = _default;require('source-map-support').install();
421
426
 
422
427
 
423
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsImFzc2lnbkNvbnRleHRzIiwic2V0Q29udGV4dCIsIm5hbWUiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXRUJWSUVXX1dJTiIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNvbnRleHRzIiwiXyIsImluY2x1ZGVzIiwiZXJyb3JzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwic3dpdGNoQ29udGV4dCIsIm1vYmlsZUdldENvbnRleHRzIiwiYW5kcm9pZERldmljZVNvY2tldCIsImVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIiwid2Vidmlld0RldnRvb2xzUG9ydCIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsIndlYnZpZXdzIiwicGFyc2VXZWJ2aWV3TmFtZXMiLCJOQVRJVkVfV0lOIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJoYXMiLCJtYXAiLCJ3bSIsIndlYnZpZXdOYW1lIiwia25vd25QYWNrYWdlIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJhcHBTdGF0ZSIsInF1ZXJ5QXBwU3RhdGUiLCJBUFBfU1RBVEUiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJpbmZvIiwic2V0dXBOZXdDaHJvbWVkcml2ZXIiLCJjdXJEZXZpY2VJZCIsIm9uIiwiQ2hyb21lZHJpdmVyIiwiRVZFTlRfQ0hBTkdFRCIsIm1zZyIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIm9uQ2hyb21lZHJpdmVyU3RvcCIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwicHJveHlSZXEiLCJiaW5kIiwiandwUHJveHlBY3RpdmUiLCJ3YXJuIiwiZXJyIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJrZXlzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsIm1lc3NhZ2UiLCJ2aWV3TmFtZSIsIkNIUk9NSVVNX1dJTiIsInNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lIiwiY2hyb21lT3B0aW9ucyIsImlzQXJyYXkiLCJhcmdzIiwiZGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBRUEsTUFBTUEsaUNBQWlDLEdBQUcsMkJBQTFDO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQU1BRixRQUFRLENBQUNH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LEdBQUksNERBQXpCOztBQUNBL0gsc0JBQUVpSSxLQUFGLENBQVFqSixJQUFJLENBQUN5RixhQUFiLEVBQTRCekYsSUFBSSxDQUFDK0ksR0FBRCxDQUFoQztBQUNEO0FBQ0Y7O0FBRUQsUUFBTUcsSUFBSSxHQUFHN0ksd0JBQWU4SSxzQkFBZixDQUFzQ25KLElBQXRDLEVBQTRDa0UsV0FBNUMsRUFBeUR5RCxPQUF6RCxDQUFiOztBQUNBOUYsa0JBQUlDLEtBQUosQ0FBVyxvREFBbURvSCxJQUFJLENBQUN6RCxhQUFMLENBQW1CeEMsY0FBZSxHQUFoRzs7QUFDQSxRQUFNeUIsWUFBWSxDQUFDMEUsS0FBYixDQUFtQkYsSUFBbkIsQ0FBTjtBQUNBLFNBQU94RSxZQUFQO0FBQ0QsQ0FsREQ7O0FBbURBLE1BQU1ULG9CQUFvQixHQUFHdkUsT0FBTyxDQUFDdUUsb0JBQXJDOztBQUdBaEUsTUFBTSxDQUFDQyxNQUFQLENBQWNQLFVBQWQsRUFBMEJGLFFBQTFCLEVBQW9DQyxPQUFwQztlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBDaHJvbWVkcml2ZXIgZnJvbSAnYXBwaXVtLWNocm9tZWRyaXZlcic7XG5pbXBvcnQgUG9ydEZpbmRlciBmcm9tICdwb3J0ZmluZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB3ZWJ2aWV3SGVscGVycyxcbiAgTkFUSVZFX1dJTiwgV0VCVklFV19CQVNFLCBXRUJWSUVXX1dJTiwgQ0hST01JVU1fV0lOLCBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FU1xufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0IHsgQVBQX1NUQVRFIH0gZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIHJldHVybiB0aGlzLmFzc2lnbkNvbnRleHRzKHdlYnZpZXdzTWFwcGluZyk7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7aXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvbn0sIHRoaXMub3B0cyk7XG4gIGNvbnN0IHdlYnZpZXdzTWFwcGluZyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG4gIGNvbnN0IGNvbnRleHRzID0gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWUsXG4gICAgaXNDaHJvbWVTZXNzaW9uOiB0aGlzLmlzQ2hyb21lU2Vzc2lvblxuICB9O1xuICByZXR1cm4gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbn07XG5cbmhlbHBlcnMuYXNzaWduQ29udGV4dHMgPSBmdW5jdGlvbiBhc3NpZ25Db250ZXh0cyAod2Vidmlld3NNYXBwaW5nKSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3MgPSB3ZWJ2aWV3SGVscGVycy5wYXJzZVdlYnZpZXdOYW1lcyh3ZWJ2aWV3c01hcHBpbmcsIG9wdHMpO1xuICB0aGlzLmNvbnRleHRzID0gW05BVElWRV9XSU4sIC4uLndlYnZpZXdzXTtcbiAgbG9nLmRlYnVnKGBBdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb250ZXh0cyl9YCk7XG4gIHJldHVybiB0aGlzLmNvbnRleHRzO1xufTtcblxuaGVscGVycy5zd2l0Y2hDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ29udGV4dCAobmFtZSwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIC8vIFdlIGhhdmUgc29tZSBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gd2Vidmlld3MuIElmIHdlIHdhbnQgYVxuICAvLyBDaHJvbWVkcml2ZXIgd2Vidmlldywgd2UgY2FuIG9ubHkgY29udHJvbCBvbmUgYXQgYSB0aW1lLlxuICBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQobmFtZSkpIHtcbiAgICAvLyBzdGFydCBwcm94eWluZyBjb21tYW5kcyBkaXJlY3RseSB0byBjaHJvbWVkcml2ZXJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkobmFtZSwgd2Vidmlld3NNYXBwaW5nKTtcbiAgfSBlbHNlIGlmICh0aGlzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCh0aGlzLmN1ckNvbnRleHQpKSB7XG4gICAgLy8gaWYgd2UncmUgbW92aW5nIHRvIGEgbm9uLWNocm9tZWRyaXZlciB3ZWJ2aWV3LCBhbmQgb3VyIGN1cnJlbnQgY29udGV4dFxuICAgIC8vIF9pc18gYSBjaHJvbWVkcml2ZXIgd2VidmlldywgaWYgY2FwcyByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIGlzIHNldFxuICAgIC8vIHRvIHRydWUgdGhlbiBraWxsIGNocm9tZWRyaXZlciBzZXNzaW9uIHVzaW5nIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzIG9yXG4gICAgLy8gZWxzZSBzaW1wbHkgc3VzcGVuZCBwcm94eWluZyB0byB0aGUgbGF0dGVyXG4gICAgaWYgKHRoaXMub3B0cy5yZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zKSB7XG4gICAgICBsb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArIHRoaXMub3B0cy5hcHBQYWNrYWdlO1xufTtcblxuaGVscGVycy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ICE9PSBudWxsICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbi8vIFR1cm4gb24gcHJveHlpbmcgdG8gYW4gZXhpc3RpbmcgQ2hyb21lZHJpdmVyIHNlc3Npb24gb3IgYSBuZXcgb25lXG5oZWxwZXJzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZWRyaXZlclByb3h5IChjb250ZXh0LCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIGxvZy5kZWJ1ZyhgRm91bmQgZXhpc3RpbmcgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICcke2NvbnRleHR9Jy4gVXNpbmcgaXQuYCk7XG4gICAgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGF3YWl0IHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIoY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgcXVlcnlpbmcgc3RhdGVzIG9mIENocm9tZSBhcHAgcGFja2FnZXNgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3Qgd20gb2Ygd2Vidmlld3NNYXBwaW5nKSB7XG4gICAgICAgICAgICBpZiAod20ud2Vidmlld05hbWUgPT09IGNvbnRleHQgJiYgXy5oYXMod20/LmluZm8sICdBbmRyb2lkLVBhY2thZ2UnKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gd20uaW5mb1snQW5kcm9pZC1QYWNrYWdlJ107XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBDRFBgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbn07XG5cbi8vIEhhbmRsZSBhbiBvdXQtb2YtYmFuZCBDaHJvbWVkcml2ZXIgc3RvcCBldmVudFxuaGVscGVycy5vbkNocm9tZWRyaXZlclN0b3AgPSBhc3luYyBmdW5jdGlvbiBvbkNocm9tZWRyaXZlclN0b3AgKGNvbnRleHQpIHtcbiAgbG9nLndhcm4oYENocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9IHN0b3BwZWQgdW5leHBlY3RlZGx5YCk7XG4gIGlmIChjb250ZXh0ID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICAvLyB3ZSBleGl0ZWQgdW5leHBlY3RlZGx5IHdoaWxlIGF1dG9tYXRpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgc28gd2FudFxuICAgIC8vIHRvIHNodXQgZG93biB0aGUgc2Vzc2lvbiBhbmQgcmVzcG9uZCB3aXRoIGFuIGVycm9yXG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcignQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5IGR1cmluZyBzZXNzaW9uJyk7XG4gICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgQ2hyb21lZHJpdmVyIGluIHRoZSBub24tYWN0aXZlIGNvbnRleHQgYmFyZnMsIHdlIGRvbid0IHJlYWxseVxuICAgIC8vIGNhcmUsIHdlJ2xsIGp1c3QgbWFrZSBhIG5ldyBvbmUgbmV4dCB0aW1lIHdlIG5lZWQgdGhlIGNvbnRleHQuXG4gICAgbG9nLndhcm4oXCJDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHksIGJ1dCBpdCB3YXNuJ3QgdGhlIGFjdGl2ZSBcIiArXG4gICAgICAgICAgICAgICAgJ2NvbnRleHQsIGlnbm9yaW5nJyk7XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbi8vIEludGVudGlvbmFsbHkgc3RvcCBhbGwgdGhlIGNocm9tZWRyaXZlcnMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIGlnbm9yZVxuLy8gdGhlaXIgZXhpdCBldmVudHNcbmhlbHBlcnMuc3RvcENocm9tZWRyaXZlclByb3hpZXMgPSBhc3luYyBmdW5jdGlvbiBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyAoKSB7XG4gIHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7IC8vIG1ha2Ugc3VyZSB3ZSB0dXJuIG9mZiB0aGUgcHJveHkgZmxhZ1xuICBmb3IgKGxldCBjb250ZXh0IG9mIF8ua2V5cyh0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzKSkge1xuICAgIGxldCBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgbG9nLmRlYnVnKGBTdG9wcGluZyBjaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fWApO1xuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciB0aGUgc3RvcHBlZCBzdGF0ZSBldmVudFxuICAgIGNkLnJlbW92ZUFsbExpc3RlbmVycyhDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNkLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBFcnJvciBzdG9wcGluZyBDaHJvbWVkcml2ZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQ29udGV4dCAodmlld05hbWUpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXModmlld05hbWUsIFdFQlZJRVdfV0lOKSB8fCB2aWV3TmFtZSA9PT0gQ0hST01JVU1fV0lOO1xufTtcblxuaGVscGVycy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSA9IGZ1bmN0aW9uIHNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgcmV0dXJuICEhdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMgJiZcbiAgICAgICAgIF8uaXNBcnJheSh0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzKSAmJlxuICAgICAgICAgdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncy5pbmNsdWRlcygnLS1uby1maXJzdC1ydW4nKTtcbn07XG5cbmhlbHBlcnMuZGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBhc3luYyBmdW5jdGlvbiBkaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIGxvZy5pbmZvKCdUcnlpbmcgdG8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZScpO1xuICBsZXQgYWN0aXZpdHkgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRBY3Rpdml0eSgpO1xuICBpZiAoYWN0aXZpdHkgIT09ICdvcmcuY2hyb21pdW0uY2hyb21lLmJyb3dzZXIuZmlyc3RydW4uRmlyc3RSdW5BY3Rpdml0eScpIHtcbiAgICBsb2cuaW5mbygnQ2hyb21lIHdlbGNvbWUgZGlhbG9nIG5ldmVyIHNob3dlZCB1cCEgQ29udGludWluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvdGVybXNfYWNjZXB0JywgZmFsc2UpO1xuICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB0cnkge1xuICAgIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC9uZWdhdGl2ZV9idXR0b24nLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIERPIE5PVEhJTkcsIFRISVMgREVWSUNFIERJRE5UIExBVU5DSCBUSEUgU0lHTklOIERJQUxPR1xuICAgIC8vIElUIE1VU1QgQkUgQSBOT04gR01TIERFVklDRVxuICAgIGxvZy53YXJuKGBUaGlzIGRldmljZSBkaWQgbm90IHNob3cgQ2hyb21lIFNpZ25JbiBkaWFsb2csICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLnN0YXJ0Q2hyb21lU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lU2Vzc2lvbiAoKSB7XG4gIGxvZy5pbmZvKCdTdGFydGluZyBhIGNocm9tZS1iYXNlZCBicm93c2VyIHNlc3Npb24nKTtcbiAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gIGNvbnN0IGtub3duUGFja2FnZXMgPSBbXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgICdjb20uY2hyb21lLmJldGEnLFxuICAgICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICBdO1xuXG4gIGlmIChfLmluY2x1ZGVzKGtub3duUGFja2FnZXMsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgIG9wdHMuY2hyb21lQnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICB0aGlzLmNocm9tZWRyaXZlciA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiKTtcbiAgdGhpcy5jaHJvbWVkcml2ZXIub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoQ0hST01JVU1fV0lOKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBDaHJvbWUgc2Vzc2lvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIGNvbnRleHQgaXNcbiAgLy8gYXBwcm9wcmlhdGVseSBzZXQgYW5kIHRoYXQgdGhpcyBjaHJvbWVkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3RcbiAgLy8gb2Ygc2Vzc2lvbiBjaHJvbWVkcml2ZXJzIHNvIHdlIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGhcbiAgdGhpcy5jdXJDb250ZXh0ID0gQ0hST01JVU1fV0lOO1xuICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW0NIUk9NSVVNX1dJTl0gPSB0aGlzLmNocm9tZWRyaXZlcjtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICBpZiAodGhpcy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSgpKSB7XG4gICAgLy8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZSBkaWFsb2dcbiAgICBhd2FpdCB0aGlzLmRpc21pc3NDaHJvbWVXZWxjb21lKCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyIChjaHJvbWVkcml2ZXIpIHtcbiAgLy8gY2hlY2sgdGhlIHN0YXR1cyBieSBzZW5kaW5nIGEgc2ltcGxlIHdpbmRvdy1iYXNlZCBjb21tYW5kIHRvIENocm9tZURyaXZlclxuICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgd2Ugd2FudCB0byByZWNyZWF0ZSB0aGUgQ2hyb21lRHJpdmVyIHNlc3Npb25cbiAgaWYgKCFhd2FpdCBjaHJvbWVkcml2ZXIuaGFzV29ya2luZ1dlYnZpZXcoKSkge1xuICAgIGxvZy5kZWJ1ZygnQ2hyb21lRHJpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSB3aW5kb3cuICcgK1xuICAgICAgICAgICAgICAgICAnUmUtaW5pdGlhbGl6aW5nIHRoZSBzZXNzaW9uLicpO1xuICAgIGF3YWl0IGNocm9tZWRyaXZlci5yZXN0YXJ0KCk7XG4gIH1cbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn1cblxuLyoqXG4gKiBGaW5kIGEgZnJlZSBwb3J0IHRvIGhhdmUgQ2hyb21lZHJpdmVyIGxpc3RlbiBvbi5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBbcG9ydFNwZWNdIC0gQXJyYXkgd2hpY2ggaXMgYSBsaXN0IG9mIHBvcnRzLiBBIGxpc3QgaXRlbSBtYXlcbiAqIGFsc28gaXRzZWxmIGJlIGFuIGFycmF5IG9mIGxlbmd0aCAyIHNwZWNpZnlpbmcgYSBzdGFydCBhbmQgZW5kIHBvcnQgb2ZcbiAqIGEgcmFuZ2UuIFNvbWUgdmFsaWQgcG9ydCBzcGVjczpcbiAqICAgIC0gWzgwMDAsIDgwMDEsIDgwMDJdXG4gKiAgICAtIFtbODAwMCwgODAwNV1dXG4gKiAgICAtIFs4MDAwLCBbOTAwMCwgOTEwMF1dXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIGZyZWUgcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJQb3J0IChwb3J0U3BlYykge1xuICBjb25zdCBnZXRQb3J0ID0gQi5wcm9taXNpZnkoUG9ydEZpbmRlci5nZXRQb3J0LCB7Y29udGV4dDogUG9ydEZpbmRlcn0pO1xuXG4gIC8vIGlmIHRoZSB1c2VyIGRpZG4ndCBnaXZlIHVzIGFueSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjaHJvbWVkcml2ZXJcbiAgLy8gcG9ydCByYW5nZXMsIGp1c3QgZmluZCBhbnkgZnJlZSBwb3J0XG4gIGlmICghcG9ydFNwZWMpIHtcbiAgICBjb25zdCBwb3J0ID0gYXdhaXQgZ2V0UG9ydCgpO1xuICAgIGxvZy5kZWJ1ZyhgQSBwb3J0IHdhcyBub3QgZ2l2ZW4sIHVzaW5nIHJhbmRvbSBmcmVlIHBvcnQ6ICR7cG9ydH1gKTtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBmcmVlIHBvcnQgYmFzZWQgb24gYSBsaXN0IG9yIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGxvZy5kZWJ1ZyhgRmluZGluZyBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIGxldCBmb3VuZFBvcnQgPSBudWxsO1xuICBmb3IgKGNvbnN0IHBvdGVudGlhbFBvcnQgb2YgcG9ydFNwZWMpIHtcbiAgICBsZXQgcG9ydCwgc3RvcFBvcnQ7XG4gICAgaWYgKF8uaXNBcnJheShwb3RlbnRpYWxQb3J0KSkge1xuICAgICAgKFtwb3J0LCBzdG9wUG9ydF0gPSBwb3RlbnRpYWxQb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9ydCA9IHBhcnNlSW50KHBvdGVudGlhbFBvcnQsIDEwKTsgLy8gZW5zdXJlIHdlIGhhdmUgYSBudW1iZXIgYW5kIG5vdCBhIHN0cmluZ1xuICAgICAgc3RvcFBvcnQgPSBwb3J0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKGBDaGVja2luZyBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH1gKTtcbiAgICAgIGZvdW5kUG9ydCA9IGF3YWl0IGdldFBvcnQoe3BvcnQsIHN0b3BQb3J0fSk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoYE5vdGhpbmcgaW4gcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9IHdhcyBhdmFpbGFibGVgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRQb3J0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgY2hyb21lZHJpdmVyUG9ydHMgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgVXNpbmcgZnJlZSBwb3J0ICR7Zm91bmRQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIHJldHVybiBmb3VuZFBvcnQ7XG59XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkICgpIHtcbiAgaWYgKHRoaXMuaXNGZWF0dXJlRW5hYmxlZChDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbG9nLmRlYnVnKGBBdXRvbWF0ZWQgQ2hyb21lZHJpdmVyIGRvd25sb2FkIGlzIGRpc2FibGVkLiBgICtcbiAgICBgVXNlICcke0NIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRX0nIHNlcnZlciBmZWF0dXJlIHRvIGVuYWJsZSBpdGApO1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5oZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyID0gYXN5bmMgZnVuY3Rpb24gc2V0dXBOZXdDaHJvbWVkcml2ZXIgKG9wdHMsIGN1ckRldmljZUlkLCBhZGIsIGNvbnRleHQgPSBudWxsKSB7XG4gIGlmIChvcHRzLmNocm9tZURyaXZlclBvcnQpIHtcbiAgICBsb2cud2FybihgVGhlICdjaHJvbWVEcml2ZXJQb3J0JyBjYXBhYmlsaXR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2Nocm9tZWRyaXZlclBvcnQnIGluc3RlYWRgKTtcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBvcHRzLmNocm9tZURyaXZlclBvcnQ7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVkcml2ZXJQb3J0KSB7XG4gICAgbG9nLmRlYnVnKGBVc2luZyB1c2VyLXNwZWNpZmllZCBwb3J0ICR7b3B0cy5jaHJvbWVkcml2ZXJQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBzaW5nbGUgcG9ydCB3YXNuJ3QgZ2l2ZW4sIHdlJ2xsIGxvb2sgZm9yIGEgZnJlZSBvbmVcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBhd2FpdCBnZXRDaHJvbWVkcml2ZXJQb3J0KG9wdHMuY2hyb21lZHJpdmVyUG9ydHMpO1xuICB9XG5cbiAgY29uc3QgZGV0YWlscyA9IGNvbnRleHQgPyB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3RGV0YWlscyhhZGIsIGNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBpZiAoIV8uaXNFbXB0eShkZXRhaWxzKSkge1xuICAgIGxvZy5kZWJ1ZygnUGFzc2luZyB3ZWIgdmlldyBkZXRhaWxzIHRvIHRoZSBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3I6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZGV0YWlscywgbnVsbCwgMikpO1xuICB9XG5cbiAgY29uc3QgY2hyb21lZHJpdmVyID0gbmV3IENocm9tZWRyaXZlcih7XG4gICAgcG9ydDogb3B0cy5jaHJvbWVkcml2ZXJQb3J0LFxuICAgIGV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZSxcbiAgICBhZGIsXG4gICAgY21kQXJnczogb3B0cy5jaHJvbWVkcml2ZXJBcmdzLFxuICAgIHZlcmJvc2U6ICEhb3B0cy5zaG93Q2hyb21lZHJpdmVyTG9nLFxuICAgIGV4ZWN1dGFibGVEaXI6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpcixcbiAgICBtYXBwaW5nUGF0aDogb3B0cy5jaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSxcbiAgICBidW5kbGVJZDogb3B0cy5jaHJvbWVCdW5kbGVJZCxcbiAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUsXG4gICAgZGlzYWJsZUJ1aWxkQ2hlY2s6IG9wdHMuY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgZGV0YWlscyxcbiAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQ6ICh0aGlzIHx8IHt9KS5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWRcbiAgICAgID8gdGhpcy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQoKSA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBjaHJvbWVPcHRpb25zXG4gIG9wdHMuY2hyb21lT3B0aW9ucyA9IG9wdHMuY2hyb21lT3B0aW9ucyB8fCB7fTtcbiAgLy8gdHJ5IG91dCBhbnkgcHJlZml4ZWQgY2hyb21lT3B0aW9ucyxcbiAgLy8gYW5kIHN0cmlwIHRoZSBwcmVmaXhcbiAgZm9yIChjb25zdCBvcHQgb2YgXy5rZXlzKG9wdHMpKSB7XG4gICAgaWYgKG9wdC5lbmRzV2l0aCgnOmNocm9tZU9wdGlvbnMnKSkge1xuICAgICAgbG9nLndhcm4oYE1lcmdpbmcgJyR7b3B0fScgaW50byAnY2hyb21lT3B0aW9ucycuIFRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JgKTtcbiAgICAgIF8ubWVyZ2Uob3B0cy5jaHJvbWVPcHRpb25zLCBvcHRzW29wdF0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNhcHMgPSB3ZWJ2aWV3SGVscGVycy5jcmVhdGVDaHJvbWVkcml2ZXJDYXBzKG9wdHMsIGN1ckRldmljZUlkLCBkZXRhaWxzKTtcbiAgbG9nLmRlYnVnKGBCZWZvcmUgc3RhcnRpbmcgY2hyb21lZHJpdmVyLCBhbmRyb2lkUGFja2FnZSBpcyAnJHtjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2V9J2ApO1xuICBhd2FpdCBjaHJvbWVkcml2ZXIuc3RhcnQoY2Fwcyk7XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59O1xuY29uc3Qgc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBoZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyO1xuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMsIHNldHVwTmV3Q2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
428
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsImFzc2lnbkNvbnRleHRzIiwic2V0Q29udGV4dCIsIm5hbWUiLCJ1dGlsIiwiaGFzVmFsdWUiLCJXRUJWSUVXX1dJTiIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNvbnRleHRzIiwiXyIsImluY2x1ZGVzIiwiZXJyb3JzIiwiTm9TdWNoQ29udGV4dEVycm9yIiwic3dpdGNoQ29udGV4dCIsIm1vYmlsZUdldENvbnRleHRzIiwiYW5kcm9pZERldmljZVNvY2tldCIsImVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzIiwid2Vidmlld0RldnRvb2xzUG9ydCIsImVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiIsIndlYnZpZXdzIiwicGFyc2VXZWJ2aWV3TmFtZXMiLCJOQVRJVkVfV0lOIiwibG9nIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJoYXMiLCJtYXAiLCJ3bSIsIndlYnZpZXdOYW1lIiwia25vd25QYWNrYWdlIiwiS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVMiLCJhcHBTdGF0ZSIsInF1ZXJ5QXBwU3RhdGUiLCJBUFBfU1RBVEUiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJpbmZvIiwic2V0dXBOZXdDaHJvbWVkcml2ZXIiLCJjdXJEZXZpY2VJZCIsIm9uIiwiQ2hyb21lZHJpdmVyIiwiRVZFTlRfQ0hBTkdFRCIsIm1zZyIsInN0YXRlIiwiU1RBVEVfU1RPUFBFRCIsIm9uQ2hyb21lZHJpdmVyU3RvcCIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwicHJveHlSZXEiLCJiaW5kIiwicHJveHlDb21tYW5kIiwiandwcm94eSIsImNvbW1hbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwiQ0hST01JVU1fV0lOIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImFjdGl2aXR5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZWwiLCJmaW5kRWxPckVscyIsImNsaWNrIiwiRUxFTUVOVCIsImUiLCJzdGFydENocm9tZVNlc3Npb24iLCJrbm93blBhY2thZ2VzIiwiY2hyb21lQnVuZGxlSWQiLCJjaHJvbWVBbmRyb2lkQWN0aXZpdHkiLCJhcHBBY3Rpdml0eSIsImhhc1dvcmtpbmdXZWJ2aWV3IiwicmVzdGFydCIsImdldENocm9tZWRyaXZlclBvcnQiLCJwb3J0U3BlYyIsImdldFBvcnQiLCJCIiwicHJvbWlzaWZ5IiwiUG9ydEZpbmRlciIsInBvcnQiLCJmb3VuZFBvcnQiLCJwb3RlbnRpYWxQb3J0Iiwic3RvcFBvcnQiLCJwYXJzZUludCIsImlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCIsImlzRmVhdHVyZUVuYWJsZWQiLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiZGV0YWlscyIsImdldFdlYnZpZXdEZXRhaWxzIiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY21kQXJncyIsImNocm9tZWRyaXZlckFyZ3MiLCJ2ZXJib3NlIiwic2hvd0Nocm9tZWRyaXZlckxvZyIsImV4ZWN1dGFibGVEaXIiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlRGlyIiwibWFwcGluZ1BhdGgiLCJjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSIsImJ1bmRsZUlkIiwidXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUiLCJkaXNhYmxlQnVpbGRDaGVjayIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiaXNBdXRvZG93bmxvYWRFbmFibGVkIiwib3B0IiwiZW5kc1dpdGgiLCJtZXJnZSIsImNhcHMiLCJjcmVhdGVDaHJvbWVkcml2ZXJDYXBzIiwic3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7OztBQUVBLE1BQU1BLGlDQUFpQyxHQUFHLDJCQUExQztBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlD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QUFULEVBQWF4QixpQ0FBYixHQUNuQixLQUFLQSxpQ0FBTCxFQURtQixHQUN3Qk87QUFiWCxHQUFqQixDQUFyQjtBQWlCQWhJLEVBQUFBLElBQUksQ0FBQzRGLGFBQUwsR0FBcUI1RixJQUFJLENBQUM0RixhQUFMLElBQXNCLEVBQTNDOztBQUdBLE9BQUssTUFBTXNELEdBQVgsSUFBa0JsSSxnQkFBRXFFLElBQUYsQ0FBT3JGLElBQVAsQ0FBbEIsRUFBZ0M7QUFDOUIsUUFBSWtKLEdBQUcsQ0FBQ0MsUUFBSixDQUFhLGdCQUFiLENBQUosRUFBb0M7QUFDbEN0SCxzQkFBSXFELElBQUosQ0FBVSxZQUFXZ0UsR0FBSSw0REFBekI7O0FBQ0FsSSxzQkFBRW9JLEtBQUYsQ0FBUXBKLElBQUksQ0FBQzRGLGFBQWIsRUFBNEI1RixJQUFJLENBQUNrSixHQUFELENBQWhDO0FBQ0Q7QUFDRjs7QUFFRCxRQUFNRyxJQUFJLEdBQUdoSix3QkFBZWlKLHNCQUFmLENBQXNDdEosSUFBdEMsRUFBNENrRSxXQUE1QyxFQUF5RDRELE9BQXpELENBQWI7O0FBQ0FqRyxrQkFBSUMsS0FBSixDQUFXLG9EQUFtRHVILElBQUksQ0FBQ3pELGFBQUwsQ0FBbUIzQyxjQUFlLEdBQWhHOztBQUNBLFFBQU15QixZQUFZLENBQUM2RSxLQUFiLENBQW1CRixJQUFuQixDQUFOO0FBQ0EsU0FBTzNFLFlBQVA7QUFDRCxDQWxERDs7QUFtREEsTUFBTVQsb0JBQW9CLEdBQUd2RSxPQUFPLENBQUN1RSxvQkFBckM7O0FBR0FoRSxNQUFNLENBQUNDLE1BQVAsQ0FBY1AsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IENocm9tZWRyaXZlciBmcm9tICdhcHBpdW0tY2hyb21lZHJpdmVyJztcbmltcG9ydCBQb3J0RmluZGVyIGZyb20gJ3BvcnRmaW5kZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHdlYnZpZXdIZWxwZXJzLFxuICBOQVRJVkVfV0lOLCBXRUJWSUVXX0JBU0UsIFdFQlZJRVdfV0lOLCBDSFJPTUlVTV9XSU4sIEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTXG59IGZyb20gJy4uL3dlYnZpZXctaGVscGVycyc7XG5pbXBvcnQgeyBBUFBfU1RBVEUgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuXG5jb25zdCBDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUgPSAnY2hyb21lZHJpdmVyX2F1dG9kb3dubG9hZCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBY3R1YWwgTUpTT05XUCBjb21tYW5kIGhhbmRsZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYG51bGxgLCBpbmRpY2F0aW5nIG5vIGNvbnRleHRcbiAgLy8gZXhwbGljaXRseSBzZXQsIGl0IGlzIHRoZSBkZWZhdWx0IGNvbnRleHRcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCB8fCB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbiAgcmV0dXJuIHRoaXMuYXNzaWduQ29udGV4dHMod2Vidmlld3NNYXBwaW5nKTtcbn07XG5cbmNvbW1hbmRzLnNldENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0IChuYW1lKSB7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShuYW1lKSkge1xuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuICB9IGVsc2UgaWYgKG5hbWUgPT09IFdFQlZJRVdfV0lOKSB7XG4gICAgLy8gaGFuZGxlIHNldENvbnRleHQgXCJXRUJWSUVXXCJcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgfVxuICAvLyBpZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBjb250ZXh0IHdlIHdhbnQsIGRvIG5vdGhpbmdcbiAgaWYgKG5hbWUgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBPYmplY3QuYXNzaWduKHtpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9ufSwgdGhpcy5vcHRzKTtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCBvcHRzKTtcbiAgY29uc3QgY29udGV4dHMgPSB0aGlzLmFzc2lnbkNvbnRleHRzKHdlYnZpZXdzTWFwcGluZyk7XG4gIC8vIGlmIHRoZSBjb250ZXh0IHdlIHdhbnQgZG9lc24ndCBleGlzdCwgZmFpbFxuICBpZiAoIV8uaW5jbHVkZXMoY29udGV4dHMsIG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuc3dpdGNoQ29udGV4dChuYW1lLCB3ZWJ2aWV3c01hcHBpbmcpO1xuICB0aGlzLmN1ckNvbnRleHQgPSBuYW1lO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBXZWJ2aWV3c01hcHBpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9jIFRoZSBuYW1lIG9mIHRoZSBEZXZ0b29scyBVbml4IHNvY2tldFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHdlYnZpZXcgVGhlIHdlYiB2aWV3IGFsaWFzLiBMb29rcyBsaWtlIGBXRUJWSUVXX2BcbiAqIHByZWZpeCBwbHVzIFBJRCBvciBwYWNrYWdlIG5hbWVcbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaW5mbyBXZWJ2aWV3IGluZm9ybWF0aW9uIGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vdmVyc2lvbiBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ0eSB7P0FycmF5PE9iamVjdD59IHBhZ2VzIFdlYnZpZXcgcGFnZXMgbGlzdCBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL2xpc3QgQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVyeSB7P3N0cmluZ30gd2Vidmlld05hbWUgQW4gYWN0dWFsIHdlYnZpZXcgbmFtZSBmb3Igc3dpdGNoaW5nIGNvbnRleHQuXG4gKiBUaGlzIHZhbHVlIGJlY29tZXMgbnVsbCB3aGVuIGZhaWxpbmcgdG8gZmluZCBhIFBJRCBmb3IgYSB3ZWJ2aWV3LlxuICpcbiAqIFRoZSBmb2xsb3dpbmcganNvbiBkZW1vbnN0cmF0ZXMgdGhlIGV4YW1wbGUgb2YgV2Vidmlld3NNYXBwaW5nIG9iamVjdC5cbiAqIE5vdGUgdGhhdCBgZGVzY3JpcHRpb25gIGluIGBwYWdlYCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nIG1vc3QgbGlrZWx5IHdoZW4gaXQgY29tZXMgdG8gTW9iaWxlIENocm9tZSlcbiAqIHtcbiAqICAgXCJwcm9jXCI6IFwiQHdlYnZpZXdfZGV2dG9vbHNfcmVtb3RlXzIyMTM4XCIsXG4gKiAgIFwid2Vidmlld1wiOiBcIldFQlZJRVdfMjIxMzhcIixcbiAqICAgXCJpbmZvXCI6IHtcbiAqICAgICBcIkFuZHJvaWQtUGFja2FnZVwiOiBcImlvLmFwcGl1bS5zZXR0aW5nc1wiLFxuICogICAgIFwiQnJvd3NlclwiOiBcIkNocm9tZS83NC4wLjM3MjkuMTg1XCIsXG4gKiAgICAgXCJQcm90b2NvbC1WZXJzaW9uXCI6IFwiMS4zXCIsXG4gKiAgICAgXCJVc2VyLUFnZW50XCI6IFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEwOyBBbmRyb2lkIFNESyBidWlsdCBmb3IgeDg2IEJ1aWxkL1FTUjEuMTkwOTIwLjAwMTsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS83NC4wLjM3MjkuMTg1IE1vYmlsZSBTYWZhcmkvNTM3LjM2XCIsXG4gKiAgICAgXCJWOC1WZXJzaW9uXCI6IFwiNy40LjI4OC4yOFwiLFxuICogICAgIFwiV2ViS2l0LVZlcnNpb25cIjogXCI1MzcuMzYgKEAyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkKVwiLFxuICogICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9icm93c2VyXCJcbiAqICAgfSxcbiAqICAgXCJwYWdlc1wiOiBbXG4gKiAgICAge1xuICogICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIntcXFwiYXR0YWNoZWRcXFwiOnRydWUsXFxcImVtcHR5XFxcIjpmYWxzZSxcXFwiaGVpZ2h0XFxcIjoxNDU4LFxcXCJzY3JlZW5YXFxcIjowLFxcXCJzY3JlZW5ZXFxcIjozMzYsXFxcInZpc2libGVcXFwiOnRydWUsXFxcIndpZHRoXFxcIjoxMDgwfVwiLFxuICogICAgICAgXCJkZXZ0b29sc0Zyb250ZW5kVXJsXCI6IFwiaHR0cDovL2Nocm9tZS1kZXZ0b29scy1mcm9udGVuZC5hcHBzcG90LmNvbS9zZXJ2ZV9yZXYvQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQvaW5zcGVjdG9yLmh0bWw/d3M9MTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwiaWRcIjogXCIyNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJ0aXRsZVwiOiBcIlJlbGVhc2VzIMK3IGFwcGl1bS9hcHBpdW0gwrcgR2l0SHViXCIsXG4gKiAgICAgICBcInR5cGVcIjogXCJwYWdlXCIsXG4gKiAgICAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3JlbGVhc2VzXCIsXG4gKiAgICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiXG4gKiAgICAgfVxuICogICBdLFxuICogICBcIndlYnZpZXdOYW1lXCI6IFwiV0VCVklFV19jb20uaW8uYXBwaXVtLnNldHRpbmdcIlxuICogfVxuICovXG5cbi8qKlxuICogUmV0dXJucyBhIHdlYnZpZXdzTWFwcGluZyBiYXNlZCBvbiBDRFAgZW5kcG9pbnRzXG4gKlxuICogQHJldHVybiB7QXJyYXk8V2Vidmlld3NNYXBwaW5nPn0gd2Vidmlld3NNYXBwaW5nXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Q29udGV4dHMgKCkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIGFuZHJvaWREZXZpY2VTb2NrZXQ6IHRoaXMub3B0cy5hbmRyb2lkRGV2aWNlU29ja2V0LFxuICAgIGVuc3VyZVdlYnZpZXdzSGF2ZVBhZ2VzOiB0cnVlLFxuICAgIHdlYnZpZXdEZXZ0b29sc1BvcnQ6IHRoaXMub3B0cy53ZWJ2aWV3RGV2dG9vbHNQb3J0LFxuICAgIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbjogdHJ1ZSxcbiAgICBpc0Nocm9tZVNlc3Npb246IHRoaXMuaXNDaHJvbWVTZXNzaW9uXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5hc3NpZ25Db250ZXh0cyA9IGZ1bmN0aW9uIGFzc2lnbkNvbnRleHRzICh3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2lzQ2hyb21lU2Vzc2lvbjogdGhpcy5pc0Nocm9tZVNlc3Npb259LCB0aGlzLm9wdHMpO1xuICBjb25zdCB3ZWJ2aWV3cyA9IHdlYnZpZXdIZWxwZXJzLnBhcnNlV2Vidmlld05hbWVzKHdlYnZpZXdzTWFwcGluZywgb3B0cyk7XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTiwgLi4ud2Vidmlld3NdO1xuICBsb2cuZGVidWcoYEF2YWlsYWJsZSBjb250ZXh0czogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnRleHRzKX1gKTtcbiAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG59O1xuXG5oZWxwZXJzLnN3aXRjaENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzd2l0Y2hDb250ZXh0IChuYW1lLCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgLy8gV2UgaGF2ZSBzb21lIG9wdGlvbnMgd2hlbiBpdCBjb21lcyB0byB3ZWJ2aWV3cy4gSWYgd2Ugd2FudCBhXG4gIC8vIENocm9tZWRyaXZlciB3ZWJ2aWV3LCB3ZSBjYW4gb25seSBjb250cm9sIG9uZSBhdCBhIHRpbWUuXG4gIGlmICh0aGlzLmlzQ2hyb21lZHJpdmVyQ29udGV4dChuYW1lKSkge1xuICAgIC8vIHN0YXJ0IHByb3h5aW5nIGNvbW1hbmRzIGRpcmVjdGx5IHRvIGNocm9tZWRyaXZlclxuICAgIGF3YWl0IHRoaXMuc3RhcnRDaHJvbWVkcml2ZXJQcm94eShuYW1lLCB3ZWJ2aWV3c01hcHBpbmcpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICAvLyBpZiB3ZSdyZSBtb3ZpbmcgdG8gYSBub24tY2hyb21lZHJpdmVyIHdlYnZpZXcsIGFuZCBvdXIgY3VycmVudCBjb250ZXh0XG4gICAgLy8gX2lzXyBhIGNocm9tZWRyaXZlciB3ZWJ2aWV3LCBpZiBjYXBzIHJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgaXMgc2V0XG4gICAgLy8gdG8gdHJ1ZSB0aGVuIGtpbGwgY2hyb21lZHJpdmVyIHNlc3Npb24gdXNpbmcgc3RvcENocm9tZWRyaXZlclByb3hpZXMgb3JcbiAgICAvLyBlbHNlIHNpbXBseSBzdXNwZW5kIHByb3h5aW5nIHRvIHRoZSBsYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRzLnJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMpIHtcbiAgICAgIGxvZy5kZWJ1ZygncmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBzZXQgdG8gdHJ1ZTsga2lsbGluZyBleGlzdGluZyBjaHJvbWVkcml2ZXJzJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGlkbid0IGtub3cgaG93IHRvIGhhbmRsZSBzd2l0Y2hpbmcgdG8gY29udGV4dCAnJHtuYW1lfSdgKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIE9uLW9iamVjdCBjb250ZXh0LXJlbGF0ZWQgaGVscGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8vIFRoZSByZWFzb24gdGhpcyBpcyBhIGZ1bmN0aW9uIGFuZCBub3QganVzdCBhIGNvbnN0YW50IGlzIHRoYXQgYm90aCBhbmRyb2lkLVxuLy8gZHJpdmVyIGFuZCBzZWxlbmRyb2lkLWRyaXZlciB1c2UgdGhpcyBsb2dpYywgYW5kIGVhY2ggb25lIHJldHVybnNcbi8vIGEgZGlmZmVyZW50IGRlZmF1bHQgY29udGV4dCBuYW1lXG5oZWxwZXJzLmRlZmF1bHRDb250ZXh0TmFtZSA9IGZ1bmN0aW9uIGRlZmF1bHRDb250ZXh0TmFtZSAoKSB7XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuaGVscGVycy5kZWZhdWx0V2Vidmlld05hbWUgPSBmdW5jdGlvbiBkZWZhdWx0V2Vidmlld05hbWUgKCkge1xuICByZXR1cm4gV0VCVklFV19CQVNFICsgdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG59O1xuXG5oZWxwZXJzLmlzV2ViQ29udGV4dCA9IGZ1bmN0aW9uIGlzV2ViQ29udGV4dCAoKSB7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgIT09IG51bGwgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOO1xufTtcblxuLy8gVHVybiBvbiBwcm94eWluZyB0byBhbiBleGlzdGluZyBDaHJvbWVkcml2ZXIgc2Vzc2lvbiBvciBhIG5ldyBvbmVcbmhlbHBlcnMuc3RhcnRDaHJvbWVkcml2ZXJQcm94eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgKGNvbnRleHQsIHdlYnZpZXdzTWFwcGluZykge1xuICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gY2hyb21lLWJhY2tlZCB3ZWJ2aWV3IGNvbnRleHQgJyR7Y29udGV4dH0nYCk7XG5cbiAgbGV0IGNkO1xuICBpZiAodGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSkge1xuICAgIC8vIGluIHRoZSBjYXNlIHdoZXJlIHdlJ3ZlIGFscmVhZHkgc2V0IHVwIGEgY2hyb21lZHJpdmVyIGZvciBhIGNvbnRleHQsXG4gICAgLy8gd2Ugd2FudCB0byByZWNvbm5lY3QgdG8gaXQsIG5vdCBjcmVhdGUgYSB3aG9sZSBuZXcgb25lXG4gICAgbG9nLmRlYnVnKGBGb3VuZCBleGlzdGluZyBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nLiBVc2luZyBpdC5gKTtcbiAgICBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgYXdhaXQgc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlcihjZCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgIG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcCA9IHRydWU7XG5cbiAgICAvLyBpZiByZXF1ZXN0ZWQsIHRlbGwgY2hyb21lZHJpdmVyIHRvIGF0dGFjaCB0byB0aGUgYW5kcm9pZCBwYWNrYWdlIHdlIGhhdmVcbiAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgbmFtZSwgcmF0aGVyIHRoYW4gdGhlIHBhY2thZ2Ugb2YgdGhlIEFVVC5cbiAgICAvLyBBbmQgdHVybiB0aGlzIG9uIGJ5IGRlZmF1bHQgZm9yIGNocm9tZS0taWYgY2hyb21lIHBvcHMgdXAgd2l0aCBhIHdlYnZpZXdcbiAgICAvLyBhbmQgc29tZW9uZSB3YW50cyB0byBzd2l0Y2ggdG8gaXQsIHdlIHNob3VsZCBsZXQgY2hyb21lZHJpdmVyIGNvbm5lY3QgdG9cbiAgICAvLyBjaHJvbWUgcmF0aGVyIHRoYW4gc3RheWluZyBzdHVjayBvbiB0aGUgQVVUXG4gICAgaWYgKG9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIHx8IGNvbnRleHQgPT09IGAke1dFQlZJRVdfQkFTRX1jaHJvbWVgKSB7XG4gICAgICBsZXQgYW5kcm9pZFBhY2thZ2UgPSBjb250ZXh0Lm1hdGNoKGAke1dFQlZJRVdfQkFTRX0oLispYCk7XG4gICAgICBpZiAoYW5kcm9pZFBhY2thZ2UgJiYgYW5kcm9pZFBhY2thZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gYW5kcm9pZFBhY2thZ2VbMV07XG4gICAgICB9XG4gICAgICBpZiAoIW9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lKSB7XG4gICAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24nKSAmJiAhdGhpcy5vcHRzLmVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgICAgICAgIC8vIFdoZW4gZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIGNhcGFiaWxpdHkgaXMgZXhwbGljaXRseSBkaXNhYmxlZCwgdHJ5IHRvIGlkZW50aWZ5XG4gICAgICAgICAgLy8gY2hyb21lQW5kcm9pZFBhY2thZ2UgYmFzZWQgb24gY29udGV4dHMsIGtub3duIGNocm9tZSB2YXJpYW50IHBhY2thZ2VzIGFuZCBxdWVyeUFwcFN0YXRlIHJlc3VsdFxuICAgICAgICAgIC8vIHNpbmNlIHdlYnZpZXdzTWFwcGluZyBkb2VzIG5vdCBoYXZlIGluZm8gb2JqZWN0XG4gICAgICAgICAgY29uc3QgY29udGV4dHMgPSB3ZWJ2aWV3c01hcHBpbmcubWFwKCh3bSkgPT4gd20ud2Vidmlld05hbWUpO1xuICAgICAgICAgIGZvciAoY29uc3Qga25vd25QYWNrYWdlIG9mIEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTKSB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhjb250ZXh0cywgYCR7V0VCVklFV19CQVNFfSR7a25vd25QYWNrYWdlfWApKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoa25vd25QYWNrYWdlKTtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKFtBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5ELCBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EXSwgYXBwU3RhdGUpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSBrbm93blBhY2thZ2U7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBxdWVyeWluZyBzdGF0ZXMgb2YgQ2hyb21lIGFwcCBwYWNrYWdlc2ApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3bSBvZiB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgICAgICAgICAgIGlmICh3bS53ZWJ2aWV3TmFtZSA9PT0gY29udGV4dCAmJiBfLmhhcyh3bT8uaW5mbywgJ0FuZHJvaWQtUGFja2FnZScpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSB3bS5pbmZvWydBbmRyb2lkLVBhY2thZ2UnXTtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGBJZGVudGlmaWVkIGNocm9tZUFuZHJvaWRQYWNrYWdlIGFzICcke29wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2V9JyBgICtcbiAgICAgICAgICAgICAgICBgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nIGJ5IENEUGApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjZCA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiLCBjb250ZXh0KTtcbiAgICAvLyBiaW5kIG91ciBzdG9wL2V4aXQgaGFuZGxlciwgcGFzc2luZyBpbiBjb250ZXh0IHNvIHdlIGtub3cgd2hpY2hcbiAgICAvLyBvbmUgc3RvcHBlZCB1bmV4cGVjdGVkbHlcbiAgICBjZC5vbihDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgICAgaWYgKG1zZy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoY29udGV4dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gc2F2ZSB0aGUgY2hyb21lZHJpdmVyIG9iamVjdCB1bmRlciB0aGUgY29udGV4dFxuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0gPSBjZDtcbiAgfVxuICAvLyBob29rIHVwIHRoZSBsb2NhbCB2YXJpYWJsZXMgc28gd2UgY2FuIHByb3h5IHRoaXMgYml6XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gY2Q7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmNocm9tZWRyaXZlci5wcm94eVJlcS5iaW5kKHRoaXMuY2hyb21lZHJpdmVyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5KTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG59O1xuXG4vLyBTdG9wIHByb3h5aW5nIHRvIGFueSBDaHJvbWVkcml2ZXJcbmhlbHBlcnMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5ID0gZnVuY3Rpb24gc3VzcGVuZENocm9tZWRyaXZlclByb3h5ICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSBudWxsO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG59O1xuXG4vLyBIYW5kbGUgYW4gb3V0LW9mLWJhbmQgQ2hyb21lZHJpdmVyIHN0b3AgZXZlbnRcbmhlbHBlcnMub25DaHJvbWVkcml2ZXJTdG9wID0gYXN5bmMgZnVuY3Rpb24gb25DaHJvbWVkcml2ZXJTdG9wIChjb250ZXh0KSB7XG4gIGxvZy53YXJuKGBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fSBzdG9wcGVkIHVuZXhwZWN0ZWRseWApO1xuICBpZiAoY29udGV4dCA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgLy8gd2UgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aGlsZSBhdXRvbWF0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHNvIHdhbnRcbiAgICAvLyB0byBzaHV0IGRvd24gdGhlIHNlc3Npb24gYW5kIHJlc3BvbmQgd2l0aCBhbiBlcnJvclxuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoJ0Nocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSBkdXJpbmcgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIENocm9tZWRyaXZlciBpbiB0aGUgbm9uLWFjdGl2ZSBjb250ZXh0IGJhcmZzLCB3ZSBkb24ndCByZWFsbHlcbiAgICAvLyBjYXJlLCB3ZSdsbCBqdXN0IG1ha2UgYSBuZXcgb25lIG5leHQgdGltZSB3ZSBuZWVkIHRoZSBjb250ZXh0LlxuICAgIGxvZy53YXJuKFwiQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5LCBidXQgaXQgd2Fzbid0IHRoZSBhY3RpdmUgXCIgK1xuICAgICAgICAgICAgICAgICdjb250ZXh0LCBpZ25vcmluZycpO1xuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG4vLyBJbnRlbnRpb25hbGx5IHN0b3AgYWxsIHRoZSBjaHJvbWVkcml2ZXJzIGN1cnJlbnRseSBhY3RpdmUsIGFuZCBpZ25vcmVcbi8vIHRoZWlyIGV4aXQgZXZlbnRzXG5oZWxwZXJzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzID0gYXN5bmMgZnVuY3Rpb24gc3RvcENocm9tZWRyaXZlclByb3hpZXMgKCkge1xuICB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpOyAvLyBtYWtlIHN1cmUgd2UgdHVybiBvZmYgdGhlIHByb3h5IGZsYWdcbiAgZm9yIChsZXQgY29udGV4dCBvZiBfLmtleXModGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycykpIHtcbiAgICBsZXQgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGxvZy5kZWJ1ZyhgU3RvcHBpbmcgY2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH1gKTtcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIHN0b3BwZWQgc3RhdGUgZXZlbnRcbiAgICBjZC5yZW1vdmVBbGxMaXN0ZW5lcnMoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjZC5zdG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igc3RvcHBpbmcgQ2hyb21lZHJpdmVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckNvbnRleHQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckNvbnRleHQgKHZpZXdOYW1lKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKHZpZXdOYW1lLCBXRUJWSUVXX1dJTikgfHwgdmlld05hbWUgPT09IENIUk9NSVVNX1dJTjtcbn07XG5cbmhlbHBlcnMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBmdW5jdGlvbiBzaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHJldHVybiAhIXRoaXMub3B0cy5jaHJvbWVPcHRpb25zICYmXG4gICAgICAgICBfLmlzQXJyYXkodGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncykgJiZcbiAgICAgICAgIHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MuaW5jbHVkZXMoJy0tbm8tZmlyc3QtcnVuJyk7XG59O1xuXG5oZWxwZXJzLmRpc21pc3NDaHJvbWVXZWxjb21lID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICBsb2cuaW5mbygnVHJ5aW5nIHRvIGRpc21pc3MgQ2hyb21lIHdlbGNvbWUnKTtcbiAgbGV0IGFjdGl2aXR5ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50QWN0aXZpdHkoKTtcbiAgaWYgKGFjdGl2aXR5ICE9PSAnb3JnLmNocm9taXVtLmNocm9tZS5icm93c2VyLmZpcnN0cnVuLkZpcnN0UnVuQWN0aXZpdHknKSB7XG4gICAgbG9nLmluZm8oJ0Nocm9tZSB3ZWxjb21lIGRpYWxvZyBuZXZlciBzaG93ZWQgdXAhIENvbnRpbnVpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL3Rlcm1zX2FjY2VwdCcsIGZhbHNlKTtcbiAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgdHJ5IHtcbiAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvbmVnYXRpdmVfYnV0dG9uJywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBETyBOT1RISU5HLCBUSElTIERFVklDRSBESUROVCBMQVVOQ0ggVEhFIFNJR05JTiBESUFMT0dcbiAgICAvLyBJVCBNVVNUIEJFIEEgTk9OIEdNUyBERVZJQ0VcbiAgICBsb2cud2FybihgVGhpcyBkZXZpY2UgZGlkIG5vdCBzaG93IENocm9tZSBTaWduSW4gZGlhbG9nLCAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5zdGFydENocm9tZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZVNlc3Npb24gKCkge1xuICBsb2cuaW5mbygnU3RhcnRpbmcgYSBjaHJvbWUtYmFzZWQgYnJvd3NlciBzZXNzaW9uJyk7XG4gIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcblxuICBjb25zdCBrbm93blBhY2thZ2VzID0gW1xuICAgICdvcmcuY2hyb21pdW0uY2hyb21lLnNoZWxsJyxcbiAgICAnY29tLmFuZHJvaWQuY2hyb21lJyxcbiAgICAnY29tLmNocm9tZS5iZXRhJyxcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZScsXG4gICAgJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJyxcbiAgXTtcblxuICBpZiAoXy5pbmNsdWRlcyhrbm93blBhY2thZ2VzLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICBvcHRzLmNocm9tZUJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5jaHJvbWVBbmRyb2lkQWN0aXZpdHkgPSB0aGlzLm9wdHMuYXBwQWN0aXZpdHk7XG4gIH1cbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYik7XG4gIHRoaXMuY2hyb21lZHJpdmVyLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgaWYgKG1zZy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKENIUk9NSVVNX1dJTik7XG4gICAgfVxuICB9KTtcblxuICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgQ2hyb21lIHNlc3Npb24sIHdlIGVuc3VyZSB0aGF0IHRoZSBjb250ZXh0IGlzXG4gIC8vIGFwcHJvcHJpYXRlbHkgc2V0IGFuZCB0aGF0IHRoaXMgY2hyb21lZHJpdmVyIGlzIGFkZGVkIHRvIHRoZSBsaXN0XG4gIC8vIG9mIHNlc3Npb24gY2hyb21lZHJpdmVycyBzbyB3ZSBjYW4gc3dpdGNoIGJhY2sgYW5kIGZvcnRoXG4gIHRoaXMuY3VyQ29udGV4dCA9IENIUk9NSVVNX1dJTjtcbiAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tDSFJPTUlVTV9XSU5dID0gdGhpcy5jaHJvbWVkcml2ZXI7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmNocm9tZWRyaXZlci5wcm94eVJlcS5iaW5kKHRoaXMuY2hyb21lZHJpdmVyKTtcbiAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5KTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgaWYgKHRoaXMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUoKSkge1xuICAgIC8vIGRpc21pc3MgQ2hyb21lIHdlbGNvbWUgZGlhbG9nXG4gICAgYXdhaXQgdGhpcy5kaXNtaXNzQ2hyb21lV2VsY29tZSgpO1xuICB9XG59O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBJbnRlcm5hbCBsaWJyYXJ5IGZ1bmN0aW9uc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciAoY2hyb21lZHJpdmVyKSB7XG4gIC8vIGNoZWNrIHRoZSBzdGF0dXMgYnkgc2VuZGluZyBhIHNpbXBsZSB3aW5kb3ctYmFzZWQgY29tbWFuZCB0byBDaHJvbWVEcml2ZXJcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHdlIHdhbnQgdG8gcmVjcmVhdGUgdGhlIENocm9tZURyaXZlciBzZXNzaW9uXG4gIGlmICghYXdhaXQgY2hyb21lZHJpdmVyLmhhc1dvcmtpbmdXZWJ2aWV3KCkpIHtcbiAgICBsb2cuZGVidWcoJ0Nocm9tZURyaXZlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgJ1JlLWluaXRpYWxpemluZyB0aGUgc2Vzc2lvbi4nKTtcbiAgICBhd2FpdCBjaHJvbWVkcml2ZXIucmVzdGFydCgpO1xuICB9XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59XG5cbi8qKlxuICogRmluZCBhIGZyZWUgcG9ydCB0byBoYXZlIENocm9tZWRyaXZlciBsaXN0ZW4gb24uXG4gKlxuICogQHBhcmFtIHthcnJheX0gW3BvcnRTcGVjXSAtIEFycmF5IHdoaWNoIGlzIGEgbGlzdCBvZiBwb3J0cy4gQSBsaXN0IGl0ZW0gbWF5XG4gKiBhbHNvIGl0c2VsZiBiZSBhbiBhcnJheSBvZiBsZW5ndGggMiBzcGVjaWZ5aW5nIGEgc3RhcnQgYW5kIGVuZCBwb3J0IG9mXG4gKiBhIHJhbmdlLiBTb21lIHZhbGlkIHBvcnQgc3BlY3M6XG4gKiAgICAtIFs4MDAwLCA4MDAxLCA4MDAyXVxuICogICAgLSBbWzgwMDAsIDgwMDVdXVxuICogICAgLSBbODAwMCwgWzkwMDAsIDkxMDBdXVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSBmcmVlIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyUG9ydCAocG9ydFNwZWMpIHtcbiAgY29uc3QgZ2V0UG9ydCA9IEIucHJvbWlzaWZ5KFBvcnRGaW5kZXIuZ2V0UG9ydCwge2NvbnRleHQ6IFBvcnRGaW5kZXJ9KTtcblxuICAvLyBpZiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSB1cyBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgY2hyb21lZHJpdmVyXG4gIC8vIHBvcnQgcmFuZ2VzLCBqdXN0IGZpbmQgYW55IGZyZWUgcG9ydFxuICBpZiAoIXBvcnRTcGVjKSB7XG4gICAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoKTtcbiAgICBsb2cuZGVidWcoYEEgcG9ydCB3YXMgbm90IGdpdmVuLCB1c2luZyByYW5kb20gZnJlZSBwb3J0OiAke3BvcnR9YCk7XG4gICAgcmV0dXJuIHBvcnQ7XG4gIH1cblxuICAvLyBvdGhlcndpc2UgZmluZCB0aGUgZnJlZSBwb3J0IGJhc2VkIG9uIGEgbGlzdCBvciByYW5nZSBwcm92aWRlZCBieSB0aGUgdXNlclxuICBsb2cuZGVidWcoYEZpbmRpbmcgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICBsZXQgZm91bmRQb3J0ID0gbnVsbDtcbiAgZm9yIChjb25zdCBwb3RlbnRpYWxQb3J0IG9mIHBvcnRTcGVjKSB7XG4gICAgbGV0IHBvcnQsIHN0b3BQb3J0O1xuICAgIGlmIChfLmlzQXJyYXkocG90ZW50aWFsUG9ydCkpIHtcbiAgICAgIChbcG9ydCwgc3RvcFBvcnRdID0gcG90ZW50aWFsUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChwb3RlbnRpYWxQb3J0LCAxMCk7IC8vIGVuc3VyZSB3ZSBoYXZlIGEgbnVtYmVyIGFuZCBub3QgYSBzdHJpbmdcbiAgICAgIHN0b3BQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9YCk7XG4gICAgICBmb3VuZFBvcnQgPSBhd2FpdCBnZXRQb3J0KHtwb3J0LCBzdG9wUG9ydH0pO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGBOb3RoaW5nIGluIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fSB3YXMgYXZhaWxhYmxlYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kUG9ydCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBgICtcbiAgICAgICAgICAgICAgICAgICAgYGNocm9tZWRyaXZlclBvcnRzIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIH1cblxuICBsb2cuZGVidWcoYFVzaW5nIGZyZWUgcG9ydCAke2ZvdW5kUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICByZXR1cm4gZm91bmRQb3J0O1xufVxuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCAoKSB7XG4gIGlmICh0aGlzLmlzRmVhdHVyZUVuYWJsZWQoQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxvZy5kZWJ1ZyhgQXV0b21hdGVkIENocm9tZWRyaXZlciBkb3dubG9hZCBpcyBkaXNhYmxlZC4gYCArXG4gICAgYFVzZSAnJHtDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkV9JyBzZXJ2ZXIgZmVhdHVyZSB0byBlbmFibGUgaXRgKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlciA9IGFzeW5jIGZ1bmN0aW9uIHNldHVwTmV3Q2hyb21lZHJpdmVyIChvcHRzLCBjdXJEZXZpY2VJZCwgYWRiLCBjb250ZXh0ID0gbnVsbCkge1xuICBpZiAob3B0cy5jaHJvbWVEcml2ZXJQb3J0KSB7XG4gICAgbG9nLndhcm4oYFRoZSAnY2hyb21lRHJpdmVyUG9ydCcgY2FwYWJpbGl0eSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICdjaHJvbWVkcml2ZXJQb3J0JyBpbnN0ZWFkYCk7XG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gb3B0cy5jaHJvbWVEcml2ZXJQb3J0O1xuICB9XG5cbiAgaWYgKG9wdHMuY2hyb21lZHJpdmVyUG9ydCkge1xuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgdXNlci1zcGVjaWZpZWQgcG9ydCAke29wdHMuY2hyb21lZHJpdmVyUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgc2luZ2xlIHBvcnQgd2Fzbid0IGdpdmVuLCB3ZSdsbCBsb29rIGZvciBhIGZyZWUgb25lXG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyUG9ydChvcHRzLmNocm9tZWRyaXZlclBvcnRzKTtcbiAgfVxuXG4gIGNvbnN0IGRldGFpbHMgPSBjb250ZXh0ID8gd2Vidmlld0hlbHBlcnMuZ2V0V2Vidmlld0RldGFpbHMoYWRiLCBjb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFfLmlzRW1wdHkoZGV0YWlscykpIHtcbiAgICBsb2cuZGVidWcoJ1Bhc3Npbmcgd2ViIHZpZXcgZGV0YWlscyB0byB0aGUgQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRldGFpbHMsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGNvbnN0IGNocm9tZWRyaXZlciA9IG5ldyBDaHJvbWVkcml2ZXIoe1xuICAgIHBvcnQ6IG9wdHMuY2hyb21lZHJpdmVyUG9ydCxcbiAgICBleGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGUsXG4gICAgYWRiLFxuICAgIGNtZEFyZ3M6IG9wdHMuY2hyb21lZHJpdmVyQXJncyxcbiAgICB2ZXJib3NlOiAhIW9wdHMuc2hvd0Nocm9tZWRyaXZlckxvZyxcbiAgICBleGVjdXRhYmxlRGlyOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXIsXG4gICAgbWFwcGluZ1BhdGg6IG9wdHMuY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUsXG4gICAgYnVuZGxlSWQ6IG9wdHMuY2hyb21lQnVuZGxlSWQsXG4gICAgdXNlU3lzdGVtRXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlLFxuICAgIGRpc2FibGVCdWlsZENoZWNrOiBvcHRzLmNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrLFxuICAgIGRldGFpbHMsXG4gICAgaXNBdXRvZG93bmxvYWRFbmFibGVkOiAodGhpcyB8fCB7fSkuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IHRoaXMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkKCkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgY2hyb21lT3B0aW9uc1xuICBvcHRzLmNocm9tZU9wdGlvbnMgPSBvcHRzLmNocm9tZU9wdGlvbnMgfHwge307XG4gIC8vIHRyeSBvdXQgYW55IHByZWZpeGVkIGNocm9tZU9wdGlvbnMsXG4gIC8vIGFuZCBzdHJpcCB0aGUgcHJlZml4XG4gIGZvciAoY29uc3Qgb3B0IG9mIF8ua2V5cyhvcHRzKSkge1xuICAgIGlmIChvcHQuZW5kc1dpdGgoJzpjaHJvbWVPcHRpb25zJykpIHtcbiAgICAgIGxvZy53YXJuKGBNZXJnaW5nICcke29wdH0nIGludG8gJ2Nocm9tZU9wdGlvbnMnLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICBfLm1lcmdlKG9wdHMuY2hyb21lT3B0aW9ucywgb3B0c1tvcHRdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjYXBzID0gd2Vidmlld0hlbHBlcnMuY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyhvcHRzLCBjdXJEZXZpY2VJZCwgZGV0YWlscyk7XG4gIGxvZy5kZWJ1ZyhgQmVmb3JlIHN0YXJ0aW5nIGNocm9tZWRyaXZlciwgYW5kcm9pZFBhY2thZ2UgaXMgJyR7Y2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlfSdgKTtcbiAgYXdhaXQgY2hyb21lZHJpdmVyLnN0YXJ0KGNhcHMpO1xuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufTtcbmNvbnN0IHNldHVwTmV3Q2hyb21lZHJpdmVyID0gaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlcjtcblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzLCBzZXR1cE5ld0Nocm9tZWRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -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.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.helpers = void 0;
8
+ exports.helpers = exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -5,9 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.parseWindows = parseWindows;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
  exports.parseSurfaceLine = parseSurfaceLine;
10
- exports.default = exports.helpers = exports.commands = void 0;
10
+ exports.parseWindows = parseWindows;
11
11
 
12
12
  require("source-map-support/register");
13
13
 
@@ -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.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.NETWORK_KEYS = exports.BATTERY_KEYS = exports.MEMORY_KEYS = exports.CPU_KEYS = exports.SUPPORTED_PERFORMANCE_DATA_TYPES = exports.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = exports.SUPPORTED_PERFORMANCE_DATA_TYPES = exports.NETWORK_KEYS = exports.MEMORY_KEYS = exports.CPU_KEYS = exports.BATTERY_KEYS = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.commonCapConstraints = exports.default = void 0;
6
+ exports.default = exports.commonCapConstraints = void 0;
7
7
 
8
8
  require("source-map-support/register");
9
9
 
@@ -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.helpers = exports.FINGERPRINT_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = void 0;
8
+ exports.helpers = exports.default = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.FINGERPRINT_UNLOCK = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
@@ -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.KNOWN_CHROME_PACKAGE_NAMES = exports.CHROMIUM_WIN = exports.WEBVIEW_BASE = exports.WEBVIEW_WIN = exports.NATIVE_WIN = exports.helpers = exports.default = void 0;
8
+ exports.helpers = exports.default = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.NATIVE_WIN = exports.KNOWN_CHROME_PACKAGE_NAMES = exports.CHROMIUM_WIN = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -232,6 +232,7 @@ helpers.startChromedriverProxy = async function startChromedriverProxy (context,
232
232
  // hook up the local variables so we can proxy this biz
233
233
  this.chromedriver = cd;
234
234
  this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);
235
+ this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);
235
236
  this.jwpProxyActive = true;
236
237
  };
237
238
 
@@ -239,6 +240,7 @@ helpers.startChromedriverProxy = async function startChromedriverProxy (context,
239
240
  helpers.suspendChromedriverProxy = function suspendChromedriverProxy () {
240
241
  this.chromedriver = null;
241
242
  this.proxyReqRes = null;
243
+ this.proxyCommand = null;
242
244
  this.jwpProxyActive = false;
243
245
  };
244
246
 
@@ -336,6 +338,7 @@ helpers.startChromeSession = async function startChromeSession () {
336
338
  this.curContext = CHROMIUM_WIN;
337
339
  this.sessionChromedrivers[CHROMIUM_WIN] = this.chromedriver;
338
340
  this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);
341
+ this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);
339
342
  this.jwpProxyActive = true;
340
343
 
341
344
  if (this.shouldDismissChromeWelcome()) {
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "mobile",
10
10
  "mobile testing"
11
11
  ],
12
- "version": "4.51.0",
12
+ "version": "4.52.0",
13
13
  "author": "appium",
14
14
  "license": "Apache-2.0",
15
15
  "repository": {
@@ -77,6 +77,7 @@
77
77
  "precommit-test"
78
78
  ],
79
79
  "devDependencies": {
80
+ "@xmldom/xmldom": "^0.x",
80
81
  "android-apidemos": "^3.0.0",
81
82
  "appium-gulp-plugins": "^5.4.0",
82
83
  "appium-test-support": "^1.0.0",
@@ -87,8 +88,7 @@
87
88
  "mocha": "^9.0.0",
88
89
  "mock-fs": "^5.0.0",
89
90
  "pre-commit": "^1.1.3",
90
- "sinon": "^11.0.0",
91
- "xmldom": "^0.x",
91
+ "sinon": "^12.0.0",
92
92
  "xpath": "^0.x"
93
93
  }
94
94
  }
@@ -1,19 +0,0 @@
1
- Bootstrap Android
2
- ===
3
-
4
- To install the Android Maven dependencies in your local environment, run the following:
5
-
6
- * Clone https://github.com/mosabua/maven-android-sdk-deployer into your workstation
7
- * Set the ANDROID_HOME environment to the location of the Android SDK, eg. `export ANDROID_HOME=/Developer/adt-bundle-mac-x86_64-20130219/sdk/`
8
- * Run `mvn install -P 4.4` from the `maven-android-sdk-deployer` directory. The build will fail if API 19 and some extra packages are not installed.
9
- * Please install all sdk and api versions of android for building `maven-android-sdk-deployer`.
10
-
11
- You can then compile the bootstrap project by running
12
-
13
- mvn package -P 4.4
14
-
15
- If mvn package fails, try deleting your ANDROID_HOME folder and downloading everything again. If it still doesn't work try:
16
-
17
- android-sdk/tools/android update sdk --no-ui --obsolete --force
18
-
19
- and then run `mvn clean ; mvn install`
package/lib/.DS_Store DELETED
Binary file