appium-uiautomator2-driver 1.71.0 → 1.72.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 +5 -3
- package/build/lib/commands/general.js +2 -1
- package/build/lib/driver.js +2 -1
- package/build/lib/uiautomator2.js +2 -1
- package/lib/commands/general.js +1 -0
- package/lib/driver.js +1 -0
- package/lib/uiautomator2.js +1 -0
- package/package.json +3 -3
- package/lib/.DS_Store +0 -0
package/build/index.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
@@ -15,6 +13,10 @@ var driver = _interopRequireWildcard(require("./lib/driver"));
|
|
|
15
13
|
|
|
16
14
|
var server = _interopRequireWildcard(require("./lib/server"));
|
|
17
15
|
|
|
16
|
+
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); }
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
|
|
18
20
|
const {
|
|
19
21
|
AndroidUiautomator2Driver
|
|
20
22
|
} = driver;
|
|
@@ -47,4 +49,4 @@ var _default = AndroidUiautomator2Driver;
|
|
|
47
49
|
exports.default = _default;require('source-map-support').install();
|
|
48
50
|
|
|
49
51
|
|
|
50
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIiLCJkcml2ZXIiLCJzdGFydFNlcnZlciIsInNlcnZlciIsIkRFRkFVTFRfSE9TVCIsIkRFRkFVTFRfUE9SVCIsIm1haW4iLCJnZXRBcmdWYWx1ZSIsImFyZ05hbWUiLCJhcmdJbmRleCIsInByb2Nlc3MiLCJhcmd2IiwiaW5kZXhPZiIsInBvcnQiLCJwYXJzZUludCIsImhvc3QiLCJyZXF1aXJlIiwibW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7O0FBR0EsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQWdDQyxNQUF0Qzs7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBa0JDLE1BQXhCOztBQUVPLE1BQU1DLFlBQVksR0FBRyxXQUFyQjs7QUFDQSxNQUFNQyxZQUFZLEdBQUcsSUFBckI7OztBQUVQLGVBQWVDLElBQWYsR0FBdUI7QUFDckIsUUFBTUMsV0FBVyxHQUFJQyxPQUFELElBQWE7QUFDL0IsVUFBTUMsUUFBUSxHQUFHQyxPQUFPLENBQUNDLElBQVIsQ0FBYUMsT0FBYixDQUFxQkosT0FBckIsQ0FBakI7QUFDQSxXQUFPQyxRQUFRLEdBQUcsQ0FBWCxHQUFlQyxPQUFPLENBQUNDLElBQVIsQ0FBYUYsUUFBUSxHQUFHLENBQXhCLENBQWYsR0FBNEMsSUFBbkQ7QUFDRCxHQUhEOztBQUlBLFFBQU1JLElBQUksR0FBR0MsUUFBUSxDQUFDUCxXQUFXLENBQUMsUUFBRCxDQUFaLEVBQXdCLEVBQXhCLENBQVIsSUFBdUNGLFlBQXBEO0FBQ0EsUUFBTVUsSUFBSSxHQUFHUixXQUFXLENBQUMsUUFBRCxDQUFYLElBQXlCSCxZQUF0QztBQUNBLFNBQU8sTUFBTUYsV0FBVyxDQUFDVyxJQUFELEVBQU9FLElBQVAsQ0FBeEI7QUFDRDs7QUFFRCxJQUFJQyxPQUFPLENBQUNWLElBQVIsS0FBaUJXLE1BQXJCLEVBQTZCO0FBQzNCLDBCQUFTWCxJQUFUO0FBQ0Q7O2VBR2NOLHlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IHsgYXN5bmNpZnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgKiBhcyBkcml2ZXIgZnJvbSAnLi9saWIvZHJpdmVyJztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL2xpYi9zZXJ2ZXInO1xuXG5cbmNvbnN0IHsgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBzdGFydFNlcnZlciB9ID0gc2VydmVyO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9IT1NUID0gJ2xvY2FsaG9zdCc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QT1JUID0gNDg4NDtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbiAoKSB7XG4gIGNvbnN0IGdldEFyZ1ZhbHVlID0gKGFyZ05hbWUpID0+IHtcbiAgICBjb25zdCBhcmdJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKGFyZ05hbWUpO1xuICAgIHJldHVybiBhcmdJbmRleCA+IDAgPyBwcm9jZXNzLmFyZ3ZbYXJnSW5kZXggKyAxXSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChnZXRBcmdWYWx1ZSgnLS1wb3J0JyksIDEwKSB8fCBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IGhvc3QgPSBnZXRBcmdWYWx1ZSgnLS1ob3N0JykgfHwgREVGQVVMVF9IT1NUO1xuICByZXR1cm4gYXdhaXQgc3RhcnRTZXJ2ZXIocG9ydCwgaG9zdCk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShtYWluKTtcbn1cblxuZXhwb3J0IHsgQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciwgc3RhcnRTZXJ2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
|
|
@@ -244,6 +244,7 @@ helpers.wrapBootstrapDisconnect = async function (wrapped) {
|
|
|
244
244
|
helpers.suspendChromedriverProxy = function () {
|
|
245
245
|
this.chromedriver = null;
|
|
246
246
|
this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);
|
|
247
|
+
this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);
|
|
247
248
|
this.jwpProxyActive = true;
|
|
248
249
|
};
|
|
249
250
|
|
|
@@ -277,4 +278,4 @@ var _default = extensions;
|
|
|
277
278
|
exports.default = _default;require('source-map-support').install();
|
|
278
279
|
|
|
279
280
|
|
|
280
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJnZXRQYWdlU291cmNlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImRvU2VuZEtleXMiLCJwYXJhbXMiLCJrZXlldmVudCIsImtleWNvZGUiLCJtZXRhc3RhdGUiLCJsb2ciLCJkZWJ1ZyIsImJhY2siLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXBrU3RyaW5ncyIsIm9wdHMiLCJhcHAiLCJhcHBQYWNrYWdlIiwiZXJyb3JBbmRUaHJvdyIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInB1bGxBcGsiLCJlcnIiLCJtZXNzYWdlIiwiZnMiLCJleGlzdHMiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJyaW1yYWYiLCJnZXREaXNwbGF5RGVuc2l0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJkcmFnR2VzdHVyZSIsImZsaW5nR2VzdHVyZSIsImRvdWJsZUNsaWNrR2VzdHVyZSIsImNsaWNrR2VzdHVyZSIsImxvbmdDbGlja0dlc3R1cmUiLCJwaW5jaENsb3NlR2VzdHVyZSIsInBpbmNoT3Blbkdlc3R1cmUiLCJzd2lwZUdlc3R1cmUiLCJzY3JvbGxHZXN0dXJlIiwic2Nyb2xsQmFja1RvIiwic2Nyb2xsIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0IiwiZGVlcExpbmsiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImFjY2VwdEFsZXJ0IiwiZGlzbWlzc0FsZXJ0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJ0eXBlIiwic2Vuc29yU2V0IiwiZGVsZXRlRmlsZSIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJkcml2ZXJPbmx5U2V0dGluZ3MiLCJzZXJ2ZXJTZXR0aW5ncyIsInNldHRpbmciLCJCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MiLCJpbmNsdWRlcyIsImlzRW1wdHkiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZVR5cGUiLCJ0ZXh0IiwiaXNVbmRlZmluZWQiLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7QUFDekMsU0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtBQUN4QyxTQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtBQUM1QyxRQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFsQyxFQUEyQyxNQUEzQyxFQUFtREssTUFBbkQsQ0FBTjtB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QUEyQm5HLElBQUksR0FBRyxFQUFsQyxFQUFzQztBQUMxRCxRQUFNO0FBQ0pvRyxJQUFBQTtBQURJLE1BRUZwRyxJQUZKOztBQUdBLE1BQUlOLGdCQUFFMkcsV0FBRixDQUFjRCxJQUFkLENBQUosRUFBeUI7QUFDdkJ0SCxvQkFBSXFCLGFBQUosQ0FBbUIsa0NBQW5CO0FBQ0Q7O0FBQ0QsU0FBTyxNQUFNLEtBQUs1QixHQUFMLENBQVMrSCxXQUFULENBQXFCRixJQUFyQixDQUFiO0FBQ0QsQ0FSRDs7QUF5Q0FwSSxRQUFRLENBQUN1SSx5QkFBVCxHQUFxQyxnQkFBZ0J2RyxJQUFJLEdBQUcsRUFBdkIsRUFBMkI7QUFDOUQsTUFBSSxDQUFDTixnQkFBRThHLE9BQUYsQ0FBVXhHLElBQUksQ0FBQ3lHLElBQWYsQ0FBRCxJQUF5Qi9HLGdCQUFFOEYsT0FBRixDQUFVeEYsSUFBSSxDQUFDeUcsSUFBZixDQUE3QixFQUFtRDtBQUNqRCxVQUFNLElBQUl2Qyx5QkFBT3dDLG9CQUFYLENBQWdDLDhCQUFoQyxDQUFOO0FBQ0Q7O0FBQ0QsUUFBTUQsSUFBSSxHQUFHLE1BQU1FLGtCQUFFQyxHQUFGLENBQU01RyxJQUFJLENBQUN5RyxJQUFMLENBQ3RCSSxHQURzQixDQUNqQjVHLEdBQUQsSUFBUyxLQUFLaEMsT0FBTCxDQUFhNkksWUFBYixDQUEwQjdHLEdBQTFCLEVBQStCLENBQUM4Ryx5QkFBRCxDQUEvQixDQURTLENBQU4sQ0FBbkI7QUFFQSxRQUFNLEtBQUt4SSxHQUFMLENBQVN3RixtQkFBVCxDQUE2QjBDLElBQTdCLEVBQW1DekcsSUFBSSxDQUFDZ0gsT0FBeEMsQ0FBTjtBQUNELENBUEQ7O0FBU0FDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjbkosVUFBZCxFQUEwQkMsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVGLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIGxvZy5kZWJ1ZyhgSWdub3JpbmcgbWV0YXN0YXRlICR7bWV0YXN0YXRlfWApO1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChrZXljb2RlKTtcbn07XG5cbi8vIFVzZSBBREIgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBVaUF1dG9tYXRvclxuY29tbWFuZHMuYmFjayA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoNCk7XG59O1xuXG5jb21tYW5kcy5nZXRTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgbG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhcHApKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICAvLyB3ZSBoYXZlIHNvbWUgc2V0dGluZ3MgdGhhdCBhcmUgc2V0IG9uIHRoZSBzZXR0aW5ncyBvYmplY3QgaW4gdGhlIGRyaXZlclxuICAvLyBvbmx5LCBmb3IgZXhhbXBsZSBpbWFnZSBmaW5kaW5nIHNldHRpbmdzLiBUaGUgdWlhdXRvMiBzZXJ2ZXIgZG9lcyBub3Qga25vd1xuICAvLyB3aGF0IHRvIGRvIHdpdGggdGhlbSwgc28ganVzdCBzZXQgdGhlbSBvbiB0aGlzIGRyaXZlcidzIHNldHRpbmdzIGluc3RhbmNlLFxuICAvLyBhbmQgZG9uJ3QgZm9yd2FyZCB0aGVtIHRvIHRoZSBzZXJ2ZXJcbiAgbGV0IGRyaXZlck9ubHlTZXR0aW5ncyA9IHt9O1xuICBsZXQgc2VydmVyU2V0dGluZ3MgPSB7fTtcbiAgZm9yIChsZXQgW3NldHRpbmcsIHZhbHVlXSBvZiBfLnRvUGFpcnMoc2V0dGluZ3MpKSB7XG4gICAgaWYgKEJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUy5pbmNsdWRlcyhzZXR0aW5nKSkge1xuICAgICAgZHJpdmVyT25seVNldHRpbmdzW3NldHRpbmddID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcnZlclNldHRpbmdzW3NldHRpbmddID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KGRyaXZlck9ubHlTZXR0aW5ncykpIHtcbiAgICBsb2cuaW5mbyhgRm91bmQgc29tZSBzZXR0aW5ncyBkZXNpZ25lZCB0byBiZSBoYW5kbGVkIGJ5IEJhc2VEcml2ZXI6IGAgK1xuICAgICAgICAgICAgIGAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhkcml2ZXJPbmx5U2V0dGluZ3MpKX0uIE5vdCBgICtcbiAgICAgICAgICAgICBgc2VuZGluZyB0aGVzZSBvbiB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlciBhbmQgaW5zdGVhZCBgICtcbiAgICAgICAgICAgICBgc2V0dGluZyBkaXJlY3RseSBvbiB0aGUgZHJpdmVyYCk7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoZHJpdmVyT25seVNldHRpbmdzKTtcbiAgfVxuICBpZiAoIV8uaXNFbXB0eShzZXJ2ZXJTZXR0aW5ncykpIHtcbiAgICBsb2cuaW5mbygnRm9yd2FyZGluZyB0aGUgZm9sbG93aW5nIHNldHRpbmdzIHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyOiAnICtcbiAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShfLmtleXMoc2VydmVyU2V0dGluZ3MpKSk7XG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLFxuICAgICAge3NldHRpbmdzOiBzZXJ2ZXJTZXR0aW5nc30pO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy8gYXMgYWJvdmUsIHdlIG1pZ2h0IGhhdmUgc29tZSBkcml2ZXItb25seSBzZXR0aW5ncyB0byByZXR1cm4gYXMgd2VsbFxuICBjb25zdCBkcml2ZXJPbmx5U2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlck9ubHlTZXR0aW5ncywgLi4uc2VydmVyU2V0dGluZ3N9O1xufTtcblxuLyoqXG4gKiBPdmVycmlkaW5nIGFwcGl1bS1hbmRyb2lkLWRyaXZlcidzIHdyYXBCb290c3RyYXBEaXNjb25uZWN0LFxuICogdW5saWtlIGluIGFwcGl1bS1hbmRyb2lkLWRyaXZlciBhdm9pZGluZyBhZGIgcmVzdGFydGluZyBhcyBpdCBpbnRlcm5cbiAqIGtpbGxzIFVpQXV0b21hdG9yMiBzZXJ2ZXIgcnVubmluZyBpbiB0aGUgZGV2aWNlLlxuICoqL1xuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uICh3cmFwcGVkKSB7XG4gIGF3YWl0IHdyYXBwZWQoKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gdWlhdXRvbWF0b3IyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgaW5mbyBlbnRyaWVzIGNhbiBiZSBmb3VuZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tdWlhdXRvbWF0b3IyLXNlcnZlci9ibG9iL21hc3Rlci9hcHAvc3JjL21haW4vamF2YS9pby9hcHBpdW0vdWlhdXRvbWF0b3IyL2hhbmRsZXIvR2V0RGV2aWNlSW5mby5qYXZhXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZUluZm8gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2luZm8nLCAnR0VUJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFR5cGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ3xudW1iZXJ8Ym9vbGVhbn0gdGV4dCAtIFRoZSB0ZXh0IHRvIHR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge1R5cGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYHRleHRgIHByb3BlcnR5IGhhcyBub3QgYmVlbiBwcm92aWRlZFxuICovXG5jb21tYW5kcy5tb2JpbGVUeXBlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVHlwZSAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0ZXh0LFxuICB9ID0gb3B0cztcbiAgaWYgKF8uaXNVbmRlZmluZWQodGV4dCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlICd0ZXh0JyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIudHlwZVVuaWNvZGUodGV4dCk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBwYXJ0aWFsSW5zdGFsbCBbZmFsc2VdIC0gSW5zdGFsbCBhcGtzIHBhcnRpYWxseS4gSXQgaXMgdXNlZCBmb3IgJ2luc3RhbGwtbXVsdGlwbGUnLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2FuZHJvaWQuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzExMTA2NC93aGF0LWlzLWEtcGFydGlhbC1hcHBsaWNhdGlvbi1pbnN0YWxsLXZpYS1hZGJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxNdWx0aXBsZUFwa3NPcHRpb25zXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGFwa3MgLSBUaGUgbGlzdCBvZiBBUEtzIHRvIGluc3RhbGwuIEVhY2ggQVBLIHNob3VsZCBiZSBhIHBhdGggdG8gYSBhcGtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRvd25sb2FkYWJsZSBVUkwgYXMgSFRUUC9IVFRQUy5cbiAqIEBwcm9wZXJ0eSB7SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEluc3RhbGwgbXVsdGlwbGUgQVBLcyB3aXRoIGBpbnN0YWxsLW11bHRpcGxlYCBvcHRpb24uXG4gKlxuICogQHBhcmFtIHtJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIGVycm9yIG9jY3VyZWQgd2hpbGUgaW5zdGFsbGluZyB0aGUgZ2l2ZW4gQVBLcy5cbiAqL1xuY29tbWFuZHMubW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIChvcHRzID0ge30pIHtcbiAgaWYgKCFfLmlzQXJyYXkob3B0cy5hcGtzKSB8fCBfLmlzRW1wdHkob3B0cy5hcGtzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoJ05vIGFwa3MgYXJlIGdpdmVuIHRvIGluc3RhbGwnKTtcbiAgfVxuICBjb25zdCBhcGtzID0gYXdhaXQgQi5hbGwob3B0cy5hcGtzXG4gICAgLm1hcCgoYXBwKSA9PiB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKGFwcCwgW0FQS19FWFRFTlNJT05dKSkpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsTXVsdGlwbGVBcGtzKGFwa3MsIG9wdHMub3B0aW9ucyk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2dlbmVyYWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
281
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbImV4dGVuc2lvbnMiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJnZXRQYWdlU291cmNlIiwidWlhdXRvbWF0b3IyIiwiandwcm94eSIsImNvbW1hbmQiLCJnZXRDbGlwYm9hcmQiLCJhZGIiLCJnZXRBcGlMZXZlbCIsImRvU2VuZEtleXMiLCJwYXJhbXMiLCJrZXlldmVudCIsImtleWNvZGUiLCJtZXRhc3RhdGUiLCJsb2ciLCJkZWJ1ZyIsImJhY2siLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIl8iLCJ0b1BhaXJzIiwiaXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXBrU3RyaW5ncyIsIm9wdHMiLCJhcHAiLCJhcHBQYWNrYWdlIiwiZXJyb3JBbmRUaHJvdyIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInB1bGxBcGsiLCJlcnIiLCJtZXNzYWdlIiwiZnMiLCJleGlzdHMiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJyaW1yYWYiLCJnZXREaXNwbGF5RGVuc2l0eSIsImdldFdpbmRvd1NpemUiLCJnZXRXaW5kb3dSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ4IiwieSIsImV4ZWN1dGVNb2JpbGUiLCJtb2JpbGVDb21tYW5kIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJkcmFnR2VzdHVyZSIsImZsaW5nR2VzdHVyZSIsImRvdWJsZUNsaWNrR2VzdHVyZSIsImNsaWNrR2VzdHVyZSIsImxvbmdDbGlja0dlc3R1cmUiLCJwaW5jaENsb3NlR2VzdHVyZSIsInBpbmNoT3Blbkdlc3R1cmUiLCJzd2lwZUdlc3R1cmUiLCJzY3JvbGxHZXN0dXJlIiwic2Nyb2xsQmFja1RvIiwic2Nyb2xsIiwidmlld3BvcnRTY3JlZW5zaG90Iiwidmlld3BvcnRSZWN0IiwiZGVlcExpbmsiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImFjY2VwdEFsZXJ0IiwiZGlzbWlzc0FsZXJ0IiwiYmF0dGVyeUluZm8iLCJkZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVGltZSIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic3RhcnRTY3JlZW5TdHJlYW1pbmciLCJzdG9wU2NyZWVuU3RyZWFtaW5nIiwiZ2V0Tm90aWZpY2F0aW9ucyIsImxpc3RTbXMiLCJ0eXBlIiwic2Vuc29yU2V0IiwiZGVsZXRlRmlsZSIsImNsZWFyQXBwIiwic3RhcnRBY3Rpdml0eSIsInN0YXJ0U2VydmljZSIsInN0b3BTZXJ2aWNlIiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJpbnN0YWxsTXVsdGlwbGVBcGtzIiwidW5sb2NrIiwiaGFzIiwiZXJyb3JzIiwiVW5rbm93bkNvbW1hbmRFcnJvciIsImtleXMiLCJtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QiLCJnZXRWaWV3cG9ydFNjcmVlbnNob3QiLCJtb2JpbGVWaWV3UG9ydFJlY3QiLCJnZXRWaWV3UG9ydFJlY3QiLCJzZXRVcmwiLCJ1cmwiLCJzdGFydFVyaSIsIm1vYmlsZURlZXBMaW5rIiwicGFja2FnZSIsInBrZyIsIndhaXRGb3JMYXVuY2giLCJvcGVuTm90aWZpY2F0aW9ucyIsInVwZGF0ZVNldHRpbmdzIiwic2V0dGluZ3MiLCJkcml2ZXJPbmx5U2V0dGluZ3MiLCJzZXJ2ZXJTZXR0aW5ncyIsInNldHRpbmciLCJCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MiLCJpbmNsdWRlcyIsImlzRW1wdHkiLCJ1cGRhdGUiLCJnZXRTZXR0aW5ncyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsImNocm9tZWRyaXZlciIsInByb3h5UmVxUmVzIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cFByb3h5QWN0aXZlIiwibW9iaWxlR2V0RGV2aWNlSW5mbyIsIm1vYmlsZVR5cGUiLCJ0ZXh0IiwiaXNVbmRlZmluZWQiLCJ0eXBlVW5pY29kZSIsIm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MiLCJpc0FycmF5IiwiYXBrcyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiQiIsImFsbCIsIm1hcCIsImNvbmZpZ3VyZUFwcCIsIkFQS19FWFRFTlNJT04iLCJvcHRpb25zIiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQUlBLFVBQVUsR0FBRyxFQUFqQjtBQUFBLElBQ0lDLFFBQVEsR0FBRyxFQURmO0FBQUEsSUFFSUMsT0FBTyxHQUFHLEVBRmQ7O0FBSUFELFFBQVEsQ0FBQ0UsYUFBVCxHQUF5QixrQkFBa0I7QUFDekMsU0FBTyxNQUFNLEtBQUtDLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxTQUFsQyxFQUE2QyxLQUE3QyxFQUFvRCxFQUFwRCxDQUFiO0FBQ0QsQ0FGRDs7QUFJQUwsUUFBUSxDQUFDTSxZQUFULEdBQXdCLGtCQUFrQjtBQUN4QyxTQUFRLE9BQU0sS0FBS0MsR0FBTCxDQUFTQyxXQUFULEVBQU4sSUFBK0IsRUFBaEMsR0FDRixNQUFNLEtBQUtMLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyw4QkFBbEMsRUFBa0UsTUFBbEUsRUFBMEUsRUFBMUUsQ0FESixHQUVGLE1BQU0sS0FBS0UsR0FBTCxDQUFTRCxZQUFULEVBRlg7QUFHRCxDQUpEOztBQU9BTixRQUFRLENBQUNTLFVBQVQsR0FBc0IsZ0JBQWdCQyxNQUFoQixFQUF3QjtBQUM1QyxRQUFNLEtBQUtQLFlBQUwsQ0FBa0JDLE9BQWxCLENBQTBCQyxPQUExQixDQUFrQyxPQUFsQyxFQUEyQyxNQUEzQyxFQUFt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Y2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZXJyb3JzLCBCQVNFRFJJVkVSX0hBTkRMRURfU0VUVElOR1MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgeyBBUEtfRVhURU5TSU9OIH0gZnJvbSAnLi4vZXh0ZW5zaW9ucyc7XG5cbmxldCBleHRlbnNpb25zID0ge30sXG4gICAgY29tbWFuZHMgPSB7fSxcbiAgICBoZWxwZXJzID0ge307XG5cbmNvbW1hbmRzLmdldFBhZ2VTb3VyY2UgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9zb3VyY2UnLCAnR0VUJywge30pO1xufTtcblxuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPCAyOSlcbiAgICA/IChhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnLCAnUE9TVCcsIHt9KSlcbiAgICA6IChhd2FpdCB0aGlzLmFkYi5nZXRDbGlwYm9hcmQoKSk7XG59O1xuXG4vLyBOZWVkIHRvIG92ZXJyaWRlIHRoaXMgZm9yIGNvcnJlY3QgdW5pY29kZSBzdXBwb3J0XG5jb21tYW5kcy5kb1NlbmRLZXlzID0gYXN5bmMgZnVuY3Rpb24gKHBhcmFtcykge1xuICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy9rZXlzJywgJ1BPU1QnLCBwYXJhbXMpO1xufTtcblxuLy8gdWlhdXRvbWF0b3IyIGRvZXNuJ3Qgc3VwcG9ydCBtZXRhc3RhdGUgZm9yIGtleWV2ZW50c1xuY29tbWFuZHMua2V5ZXZlbnQgPSBhc3luYyBmdW5jdGlvbiAoa2V5Y29kZSwgbWV0YXN0YXRlKSB7XG4gIGxvZy5kZWJ1ZyhgSWdub3JpbmcgbWV0YXN0YXRlICR7bWV0YXN0YXRlfWApO1xuICBhd2FpdCB0aGlzLmFkYi5rZXlldmVudChrZXljb2RlKTtcbn07XG5cbi8vIFVzZSBBREIgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBVaUF1dG9tYXRvclxuY29tbWFuZHMuYmFjayA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIua2V5ZXZlbnQoNCk7XG59O1xuXG5jb21tYW5kcy5nZXRTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgbG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIGlmICghdGhpcy5vcHRzLmFwcCAmJiAhdGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhcIk9uZSBvZiAnYXBwJyBvciAnYXBwUGFja2FnZScgY2FwYWJpbGl0aWVzIHNob3VsZCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgfVxuXG4gIGxldCBhcHAgPSB0aGlzLm9wdHMuYXBwO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIHRyeSB7XG4gICAgaWYgKCFhcHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFwcCA9IGF3YWl0IHRoaXMuYWRiLnB1bGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UsIHRtcFJvb3QpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBGYWlsZWQgdG8gcHVsbCBhbiBhcGsgZnJvbSAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhcHApKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGFwcCBhdCAnJHthcHB9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7YXBrU3RyaW5nc30gPSBhd2FpdCB0aGlzLmFkYi5leHRyYWN0U3RyaW5nc0Zyb21BcGsoYXBwLCBsYW5ndWFnZSwgdG1wUm9vdCk7XG4gICAgICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXBrU3RyaW5ncztcbiAgICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcChhcGtTdHJpbmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZXh0cmFjdCBzdHJpbmdzIGZyb20gJyR7YXBwfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gIH1cbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9kaXNwbGF5X2RlbnNpdHknLCAnR0VUJywge30pO1xufTtcblxuLy8gbWVtb2l6ZWQgaW4gY29uc3RydWN0b3JcbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5qd3Byb3h5LmNvbW1hbmQoJy93aW5kb3cvY3VycmVudC9zaXplJywgJ0dFVCcsIHt9KTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gIH07XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBkcmFnR2VzdHVyZTogJ21vYmlsZURyYWdHZXN0dXJlJyxcbiAgICBmbGluZ0dlc3R1cmU6ICdtb2JpbGVGbGluZ0dlc3R1cmUnLFxuICAgIGRvdWJsZUNsaWNrR2VzdHVyZTogJ21vYmlsZURvdWJsZUNsaWNrR2VzdHVyZScsXG4gICAgY2xpY2tHZXN0dXJlOiAnbW9iaWxlQ2xpY2tHZXN0dXJlJyxcbiAgICBsb25nQ2xpY2tHZXN0dXJlOiAnbW9iaWxlTG9uZ0NsaWNrR2VzdHVyZScsXG4gICAgcGluY2hDbG9zZUdlc3R1cmU6ICdtb2JpbGVQaW5jaENsb3NlR2VzdHVyZScsXG4gICAgcGluY2hPcGVuR2VzdHVyZTogJ21vYmlsZVBpbmNoT3Blbkdlc3R1cmUnLFxuICAgIHN3aXBlR2VzdHVyZTogJ21vYmlsZVN3aXBlR2VzdHVyZScsXG4gICAgc2Nyb2xsR2VzdHVyZTogJ21vYmlsZVNjcm9sbEdlc3R1cmUnLFxuICAgIHNjcm9sbEJhY2tUbzogJ21vYmlsZVNjcm9sbEJhY2tUbycsXG4gICAgc2Nyb2xsOiAnbW9iaWxlU2Nyb2xsJyxcbiAgICB2aWV3cG9ydFNjcmVlbnNob3Q6ICdtb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QnLFxuICAgIHZpZXdwb3J0UmVjdDogJ21vYmlsZVZpZXdQb3J0UmVjdCcsXG5cbiAgICBkZWVwTGluazogJ21vYmlsZURlZXBMaW5rJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBhY2NlcHRBbGVydDogJ21vYmlsZUFjY2VwdEFsZXJ0JyxcbiAgICBkaXNtaXNzQWxlcnQ6ICdtb2JpbGVEaXNtaXNzQWxlcnQnLFxuXG4gICAgYmF0dGVyeUluZm86ICdtb2JpbGVHZXRCYXR0ZXJ5SW5mbycsXG5cbiAgICBkZXZpY2VJbmZvOiAnbW9iaWxlR2V0RGV2aWNlSW5mbycsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIHR5cGU6ICdtb2JpbGVUeXBlJyxcbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICBpbnN0YWxsTXVsdGlwbGVBcGtzOiAnbW9iaWxlSW5zdGFsbE11bHRpcGxlQXBrcycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5jb21tYW5kcy5tb2JpbGVWaWV3cG9ydFNjcmVlbnNob3QgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0U2NyZWVuc2hvdCgpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWN0YW5nbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIGxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRoZSB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgUmVjdGFuZ2xlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoIG9mIFJlY3RhbmdsZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIFJlY3RhbmdsZS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICogQHJldHVybnMge1JlY3RhbmdsZX0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICovXG5jb21tYW5kcy5tb2JpbGVWaWV3UG9ydFJlY3QgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVWaWV3UG9ydFJlY3QgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5nZXRWaWV3UG9ydFJlY3QoKTtcbn07XG5cbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJsLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERlZXBMaW5rT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSB1cmwgLSBUaGUgbmFtZSBvZiBVUkwgdG8gc3RhcnQuXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHBhY2thZ2UgLSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzdGFydCB0aGUgVVJJIHdpdGguXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB3YWl0Rm9yTGF1bmNoIFt0cnVlXSAtIGlmIGBmYWxzZWAgdGhlbiBhZGIgd29uJ3Qgd2FpdFxuICogZm9yIHRoZSBzdGFydGVkIGFjdGl2aXR5IHRvIHJldHVybiB0aGUgY29udHJvbFxuICovXG5cbi8qKlxuICogU3RhcnQgVVJMIHRoYXQgdGFrZSB1c2VycyBkaXJlY3RseSB0byBzcGVjaWZpYyBjb250ZW50IGluIHRoZSBhcHBcbiAqIEBwYXJhbSB7RGVlcExpbmtPcHRzfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlZXBMaW5rID0gYXN5bmMgZnVuY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIHBhY2thZ2U6IHBrZyxcbiAgICB3YWl0Rm9yTGF1bmNoLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVybCwgcGtnLCB7IHdhaXRGb3JMYXVuY2ggfSk7XG59O1xuXG5jb21tYW5kcy5vcGVuTm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLmp3cHJveHkuY29tbWFuZCgnL2FwcGl1bS9kZXZpY2Uvb3Blbl9ub3RpZmljYXRpb25zJywgJ1BPU1QnLCB7fSk7XG59O1xuXG5jb21tYW5kcy51cGRhdGVTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uIChzZXR0aW5ncykge1xuICAvLyB3ZSBoYXZlIHNvbWUgc2V0dGluZ3MgdGhhdCBhcmUgc2V0IG9uIHRoZSBzZXR0aW5ncyBvYmplY3QgaW4gdGhlIGRyaXZlclxuICAvLyBvbmx5LCBmb3IgZXhhbXBsZSBpbWFnZSBmaW5kaW5nIHNldHRpbmdzLiBUaGUgdWlhdXRvMiBzZXJ2ZXIgZG9lcyBub3Qga25vd1xuICAvLyB3aGF0IHRvIGRvIHdpdGggdGhlbSwgc28ganVzdCBzZXQgdGhlbSBvbiB0aGlzIGRyaXZlcidzIHNldHRpbmdzIGluc3RhbmNlLFxuICAvLyBhbmQgZG9uJ3QgZm9yd2FyZCB0aGVtIHRvIHRoZSBzZXJ2ZXJcbiAgbGV0IGRyaXZlck9ubHlTZXR0aW5ncyA9IHt9O1xuICBsZXQgc2VydmVyU2V0dGluZ3MgPSB7fTtcbiAgZm9yIChsZXQgW3NldHRpbmcsIHZhbHVlXSBvZiBfLnRvUGFpcnMoc2V0dGluZ3MpKSB7XG4gICAgaWYgKEJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUy5pbmNsdWRlcyhzZXR0aW5nKSkge1xuICAgICAgZHJpdmVyT25seVNldHRpbmdzW3NldHRpbmddID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcnZlclNldHRpbmdzW3NldHRpbmddID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGlmICghXy5pc0VtcHR5KGRyaXZlck9ubHlTZXR0aW5ncykpIHtcbiAgICBsb2cuaW5mbyhgRm91bmQgc29tZSBzZXR0aW5ncyBkZXNpZ25lZCB0byBiZSBoYW5kbGVkIGJ5IEJhc2VEcml2ZXI6IGAgK1xuICAgICAgICAgICAgIGAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhkcml2ZXJPbmx5U2V0dGluZ3MpKX0uIE5vdCBgICtcbiAgICAgICAgICAgICBgc2VuZGluZyB0aGVzZSBvbiB0byB0aGUgVWlBdXRvbWF0b3IyIHNlcnZlciBhbmQgaW5zdGVhZCBgICtcbiAgICAgICAgICAgICBgc2V0dGluZyBkaXJlY3RseSBvbiB0aGUgZHJpdmVyYCk7XG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy51cGRhdGUoZHJpdmVyT25seVNldHRpbmdzKTtcbiAgfVxuICBpZiAoIV8uaXNFbXB0eShzZXJ2ZXJTZXR0aW5ncykpIHtcbiAgICBsb2cuaW5mbygnRm9yd2FyZGluZyB0aGUgZm9sbG93aW5nIHNldHRpbmdzIHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyOiAnICtcbiAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShfLmtleXMoc2VydmVyU2V0dGluZ3MpKSk7XG4gICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLFxuICAgICAge3NldHRpbmdzOiBzZXJ2ZXJTZXR0aW5nc30pO1xuICB9XG59O1xuXG5jb21tYW5kcy5nZXRTZXR0aW5ncyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgLy8gYXMgYWJvdmUsIHdlIG1pZ2h0IGhhdmUgc29tZSBkcml2ZXItb25seSBzZXR0aW5ncyB0byByZXR1cm4gYXMgd2VsbFxuICBjb25zdCBkcml2ZXJPbmx5U2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IHNlcnZlclNldHRpbmdzID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ0dFVCcpO1xuICByZXR1cm4gey4uLmRyaXZlck9ubHlTZXR0aW5ncywgLi4uc2VydmVyU2V0dGluZ3N9O1xufTtcblxuLyoqXG4gKiBPdmVycmlkaW5nIGFwcGl1bS1hbmRyb2lkLWRyaXZlcidzIHdyYXBCb290c3RyYXBEaXNjb25uZWN0LFxuICogdW5saWtlIGluIGFwcGl1bS1hbmRyb2lkLWRyaXZlciBhdm9pZGluZyBhZGIgcmVzdGFydGluZyBhcyBpdCBpbnRlcm5cbiAqIGtpbGxzIFVpQXV0b21hdG9yMiBzZXJ2ZXIgcnVubmluZyBpbiB0aGUgZGV2aWNlLlxuICoqL1xuaGVscGVycy53cmFwQm9vdHN0cmFwRGlzY29ubmVjdCA9IGFzeW5jIGZ1bmN0aW9uICh3cmFwcGVkKSB7XG4gIGF3YWl0IHdyYXBwZWQoKTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlciBhbmQgcmVkaXJlY3QgdG8gdWlhdXRvbWF0b3IyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlDb21tYW5kLmJpbmQodGhpcy51aWF1dG9tYXRvcjIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGluZm8gZW50cmllcyBjYW4gYmUgZm91bmQgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXIvYmxvYi9tYXN0ZXIvYXBwL3NyYy9tYWluL2phdmEvaW8vYXBwaXVtL3VpYXV0b21hdG9yMi9oYW5kbGVyL0dldERldmljZUluZm8uamF2YVxuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VJbmZvID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvYXBwaXVtL2RldmljZS9pbmZvJywgJ0dFVCcpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBUeXBpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd8bnVtYmVyfGJvb2xlYW59IHRleHQgLSBUaGUgdGV4dCB0byB0eXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtUeXBpbmdPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICogQHRocm93cyB7RXJyb3J9IGlmIGB0ZXh0YCBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gcHJvdmlkZWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVHlwZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVR5cGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGV4dCxcbiAgfSA9IG9wdHM7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHRleHQpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSAndGV4dCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnR5cGVVbmljb2RlKHRleHQpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGFydGlhbEluc3RhbGwgW2ZhbHNlXSAtIEluc3RhbGwgYXBrcyBwYXJ0aWFsbHkuIEl0IGlzIHVzZWQgZm9yICdpbnN0YWxsLW11bHRpcGxlJy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9hbmRyb2lkLnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8xMTEwNjQvd2hhdC1pcy1hLXBhcnRpYWwtYXBwbGljYXRpb24taW5zdGFsbC12aWEtYWRiXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBJbnN0YWxsTXVsdGlwbGVBcGtzT3B0aW9uc1xuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBhcGtzIC0gVGhlIGxpc3Qgb2YgQVBLcyB0byBpbnN0YWxsLiBFYWNoIEFQSyBzaG91bGQgYmUgYSBwYXRoIHRvIGEgYXBrXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkb3dubG9hZGFibGUgVVJMIGFzIEhUVFAvSFRUUFMuXG4gKiBAcHJvcGVydHkge0luc3RhbGxPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxsIG11bHRpcGxlIEFQS3Mgd2l0aCBgaW5zdGFsbC1tdWx0aXBsZWAgb3B0aW9uLlxuICpcbiAqIEBwYXJhbSB7SW5zdGFsbE11bHRpcGxlQXBrc09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBhbiBlcnJvciBvY2N1cmVkIHdoaWxlIGluc3RhbGxpbmcgdGhlIGdpdmVuIEFQS3MuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxNdWx0aXBsZUFwa3MgPSBhc3luYyBmdW5jdGlvbiAob3B0cyA9IHt9KSB7XG4gIGlmICghXy5pc0FycmF5KG9wdHMuYXBrcykgfHwgXy5pc0VtcHR5KG9wdHMuYXBrcykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKCdObyBhcGtzIGFyZSBnaXZlbiB0byBpbnN0YWxsJyk7XG4gIH1cbiAgY29uc3QgYXBrcyA9IGF3YWl0IEIuYWxsKG9wdHMuYXBrc1xuICAgIC5tYXAoKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsIFtBUEtfRVhURU5TSU9OXSkpKTtcbiAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbE11bHRpcGxlQXBrcyhhcGtzLCBvcHRzLm9wdGlvbnMpO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IGV4dGVuc2lvbnM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
package/build/lib/driver.js
CHANGED
|
@@ -367,6 +367,7 @@ class AndroidUiautomator2Driver extends _appiumBaseDriver.BaseDriver {
|
|
|
367
367
|
};
|
|
368
368
|
this.uiautomator2 = new _uiautomator.UiAutomator2Server(uiautomator2Opts);
|
|
369
369
|
this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);
|
|
370
|
+
this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);
|
|
370
371
|
|
|
371
372
|
if (this.opts.skipServerInstallation) {
|
|
372
373
|
_logger.default.info(`'skipServerInstallation' is set. Skipping UIAutomator2 server installation.`);
|
|
@@ -645,4 +646,4 @@ var _default = AndroidUiautomator2Driver;
|
|
|
645
646
|
exports.default = _default;require('source-map-support').install();
|
|
646
647
|
|
|
647
648
|
|
|
648
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsIk9iamVjdCIsImFzc2lnbiIsInVpYXV0b21hdG9yMkhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIkRFVklDRV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsIkRFVklDRV9QT1JUIiwiTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUIiwiTE9DQUxIT1NUX0lQNCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiTUVNT0laRURfRlVOQ1RJT05TIiwiQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwidWlhdXRvbWF0b3IyIiwiandwUHJveHlBY3RpdmUiLCJkZWZhdWx0SU1FIiwiandwUHJveHlBdm9pZCIsImFwa1N0cmluZ3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsImFsbG93SW52aXNpYmxlRWxlbWVudHMiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiZm4iLCJfIiwibWVtb2l6ZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJkZWZhdWx0T3B0cyIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwiaXNDaHJvbWVTZXNzaW9uIiwibG9nZ2VyIiwiaW5mbyIsInBrZyIsImFjdGl2aXR5IiwiZ2V0Q2hyb21lUGtnIiwiYnJvd3Nlck5hbWUiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwiYXBwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIkFQS1NfRVhURU5TSU9OIiwiY2hlY2tBcHBQcmVzZW50Iiwic3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uIiwiZmlsbERldmljZURldGFpbHMiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJzdGFydCIsImUiLCJkZWxldGVTZXNzaW9uIiwicGl4ZWxSYXRpbyIsImdldERldmljZVBpeGVsUmF0aW8iLCJzdGF0QmFySGVpZ2h0IiwiZ2V0U3RhdHVzQmFySGVpZ2h0Iiwidmlld3BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0IiwiZHJpdmVyRGF0YSIsImdldFNlc3Npb24iLCJzZXNzaW9uRGF0YSIsImRlYnVnIiwidWlhMkRhdGEiLCJqd3Byb3h5IiwiY29tbWFuZCIsImlzRW11bGF0b3IiLCJhZGIiLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJhbGxvY2F0ZVN5c3RlbVBvcnQiLCJmb3J3YXJkUG9ydCIsImxvY2FsUG9ydCIsInN5c3RlbVBvcnQiLCJfaGFzU3lzdGVtUG9ydEluQ2FwcyIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsInVpYXV0b21hdG9yMk9wdHMiLCJob3N0IiwicmVtb3RlQWRiSG9zdCIsImRldmljZVBvcnQiLCJhcGsiLCJ0bXBEaXIiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInJlYWRUaW1lb3V0IiwidWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQiLCJVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJwcm94eVJlcVJlcyIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJpbnN0YWxsU2VydmVyQXBrIiwidWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VSVkVSX1BBQ0tBR0VfSUQiLCJTRVJWRVJfVEVTVF9QQUNLQUdFX0lEIiwic3RkZXJyIiwibWVzc2FnZSIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJwYXJzZUFycmF5Iiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJub1Jlc2V0IiwiaXNBcHBJbnN0YWxsZWQiLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJyZXF1aXJlRGVmYXVsdENlcnQiLCJzaWduQXBwIiwic2tpcFVuaW5zdGFsbCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYW5kcm9pZENvdmVyYWdlIiwic3RhcnRBcHAiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsImRvbnRTdG9wQXBwT25SZXNldCIsInJldHJ5IiwidXNlciIsInVzZXJQcm9maWxlIiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsImlnbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJlbmRBbmRyb2lkQ292ZXJhZ2UiLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJicm9hZGNhc3QiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiZXJyb3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInN0b3AiLCJmcyIsImV4aXN0cyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInJlc3RhcnQiLCJwcm94eUFjdGl2ZSIsImNhblByb3h5IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiY21kIiwidG9QYWlycyIsImFuZHJvaWRDb21tYW5kcyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkMsZ0JBQWxCLEVBQXVDQyxtQ0FBdkMsQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENBQTFCOztBQUlBLE1BQU1D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OztBQUdBLFFBQUkzQyxvQkFBS2lJLFFBQUwsQ0FBYyxLQUFLL0YsWUFBbkIsQ0FBSixFQUFzQztBQUVwQyxXQUFLUixhQUFMLEdBQXFCYixlQUFyQjtBQUNELEtBSEQsTUFHTztBQUNMLFdBQUthLGFBQUwsR0FBcUJmLFFBQXJCO0FBQ0Q7O0FBQ0QsUUFBSSxLQUFLTyxJQUFMLENBQVVpUCxtQkFBZCxFQUFtQztBQUNqQyxXQUFLek8sYUFBTCxHQUFxQixDQUFDLEdBQUcsS0FBS0EsYUFBVCxFQUF3QixDQUFDLEtBQUQsRUFBUSxJQUFJZCxNQUFKLENBQVcsNEJBQVgsQ0FBUixDQUF4QixDQUFyQjtBQUNEOztBQUVELFdBQU8sS0FBS2MsYUFBWjtBQUNEOztBQUVrQixNQUFmcUMsZUFBZSxHQUFJO0FBQ3JCLFdBQU90RSxPQUFPLENBQUMyUSxlQUFSLENBQXdCLEtBQUtsUCxJQUFMLENBQVVtRCxXQUFsQyxDQUFQO0FBQ0Q7O0FBdm1CZ0Q7Ozs7QUEybUJuRCxLQUFLLElBQUksQ0FBQ2dNLEdBQUQsRUFBTWpPLEVBQU4sQ0FBVCxJQUFzQkMsZ0JBQUVpTyxPQUFGLENBQVVDLG9DQUFWLENBQXRCLEVBQWtEO0FBQ2hEeFAsRUFBQUEseUJBQXlCLENBQUN5UCxTQUExQixDQUFvQ0gsR0FBcEMsSUFBMkNqTyxFQUEzQztBQUNEOztBQUdELEtBQUssSUFBSSxDQUFDaU8sR0FBRCxFQUFNak8sRUFBTixDQUFULElBQXNCQyxnQkFBRWlPLE9BQUYsQ0FBVUcsY0FBVixDQUF0QixFQUEyQztBQUN6QzFQLEVBQUFBLHlCQUF5QixDQUFDeVAsU0FBMUIsQ0FBb0NILEdBQXBDLElBQTJDak8sRUFBM0M7QUFDRDs7ZUFHY3JCLHlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJhc2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7XG4gIFVpQXV0b21hdG9yMlNlcnZlciwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURcbn0gZnJvbSAnLi91aWF1dG9tYXRvcjInO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1qcGVnIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHVpYXV0b21hdG9yMkhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gIGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSURcbn0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OIH0gZnJvbSAnLi9leHRlbnNpb25zJztcblxuXG5jb25zdCBoZWxwZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdWlhdXRvbWF0b3IySGVscGVycywgYW5kcm9pZEhlbHBlcnMpO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gVWlBdXRvbWF0b3IyIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IERFVklDRV9QT1JUX1JBTkdFID0gWzgyMDAsIDgyOTldO1xuXG4vLyBUaGUgZ3VhcmQgaXMgbmVlZGVkIHRvIGF2b2lkIGR5bmFtaWMgc3lzdGVtIHBvcnQgYWxsb2NhdGlvbiBjb25mbGljdHMgZm9yXG4vLyBwYXJhbGxlbCBkcml2ZXIgc2Vzc2lvbnNcbmNvbnN0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3VpYTJfZGV2aWNlX3BvcnRfZ3VhcmQnKSxcbiAge3RpbWVvdXQ6IDI1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCBVaUF1dG9tYXRvcjIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsIGZvcndhcmRcbi8vIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MDtcbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuXG4vLyBXZSB3aWxsIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGVcbi8vIGRldmljZS5cbmNvbnN0IE1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCA9IDc4MTA7XG5cbmNvbnN0IExPQ0FMSE9TVF9JUDQgPSAnMTI3LjAuMC4xJztcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gVWlBdXRvbWF0b3IyIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnRfW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9hdHRyaWJ1dGUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZGlzcGxheWVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VuYWJsZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvbG9jYXRpb25faW5fdmlldycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9uYW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2VsZWN0ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvW14vXStfYWxlcnQkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWN0aW9ucycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwL1teL10nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS8oPyFzZXRfY2xpcGJvYXJkKVteL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvcmVwbGFjZV92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vLipldmVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsva2V5cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgLy8gVzNDIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3dpbmRvdy9yZWN0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcyQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5dO1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG5dO1xuXG5jbGFzcyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2UsIGFsbG93SW52aXNpYmxlRWxlbWVudHM6IGZhbHNlfSxcbiAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIC8vIGhhbmRsZSB3ZWJ2aWV3IG1lY2hhbmljcyBmcm9tIEFuZHJvaWREcml2ZXJcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykgJiYgYW5kcm9pZEhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2FwcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiV2UncmUgZ29pbmcgdG8gcnVuIGEgQ2hyb21lLWJhc2VkIHNlc3Npb25cIik7XG4gICAgICAgIGxldCB7cGtnLCBhY3Rpdml0eX0gPSBoZWxwZXJzLmdldENocm9tZVBrZyh0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwQWN0aXZpdHkgPSB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENocm9tZS10eXBlIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZSAke3BrZ30gYW5kICR7YWN0aXZpdHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBOZWl0aGVyICdhcHAnIG5vciAnYXBwUGFja2FnZScgd2FzIHNldC4gU3RhcnRpbmcgVWlBdXRvbWF0b3IyIGAgK1xuICAgICAgICAgICd3aXRob3V0IHRoZSB0YXJnZXQgYXBwbGljYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFVpQXV0b21hdG9yMlNlc3Npb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERldmljZURldGFpbHMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsbERldmljZURldGFpbHMgKCkge1xuICAgIHRoaXMuY2Fwcy5waXhlbFJhdGlvID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgdGhpcy5jYXBzLnN0YXRCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAgIHRoaXMuY2Fwcy52aWV3cG9ydFJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgbGV0IHNlc3Npb25EYXRhID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIGxvZ2dlci5kZWJ1ZygnR2V0dGluZyBzZXNzaW9uIGRldGFpbHMgZnJvbSBzZXJ2ZXIgdG8gbWl4IGluJyk7XG4gICAgbGV0IHVpYTJEYXRhID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvJywgJ0dFVCcsIHt9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbkRhdGEsIHVpYTJEYXRhKTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlU3lzdGVtUG9ydCAoKSB7XG4gICAgY29uc3QgZm9yd2FyZFBvcnQgPSBhc3luYyAobG9jYWxQb3J0KSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvcndhcmRpbmcgVWlBdXRvbWF0b3IyIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvIGxvY2FsIHBvcnQgJHtsb2NhbFBvcnR9YCk7XG4gICAgICBpZiAoKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyhsb2NhbFBvcnQsIExPQ0FMSE9TVF9JUDQpKSA9PT0gJ29wZW4nKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVaUF1dG9tYXRvcjIgU2VydmVyIGNhbm5vdCBzdGFydCBiZWNhdXNlIHRoZSBsb2NhbCBwb3J0ICMke2xvY2FsUG9ydH0gaXMgYnVzeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgcG9ydCB5b3UgcHJvdmlkZSB2aWEgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHkgaXMgbm90IG9jY3VwaWVkLiBgICtcbiAgICAgICAgICBgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2Z0ZW4gYmUgYSByZXN1bHQgb2YgYW4gaW5hY2N1cmF0ZSBzZXNzaW9ucyBtYW5hZ2VtZW50LCBlLmcuIGAgK1xuICAgICAgICAgIGBvbGQgYXV0b21hdGlvbiBzZXNzaW9ucyBvbiB0aGUgc2FtZSBkZXZpY2UgbXVzdCBhbHdheXMgYmUgY2xvc2VkIGJlZm9yZSBzdGFydGluZyBuZXcgb25lcy5gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KGxvY2FsUG9ydCwgREVWSUNFX1BPUlQpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQpIHtcbiAgICAgIHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWSUNFX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fX0uIGAgK1xuICAgICAgICAgIGBQbGVhc2Ugc2V0IHRoZSBhdmFpbGFibGUgcG9ydCBudW1iZXIgYnkgcHJvdmlkaW5nIHRoZSBzeXN0ZW1Qb3J0IGNhcGFiaWxpdHkgb3IgYCArXG4gICAgICAgICAgYGRvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZVN5c3RlbVBvcnQgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLnN5c3RlbVBvcnQgfHwgIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCwgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uICgpIHtcbiAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG5cbiAgICBpZiAoYXBpTGV2ZWwgPCAyMSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coJ1VJQXV0b21hdG9yMiBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBBbmRyb2lkIDUuMCAoTG9sbGlwb3ApLiAnICtcbiAgICAgICAgJ1lvdSBjb3VsZCBzdGlsbCB1c2Ugb3RoZXIgc3VwcG9ydGVkIGJhY2tlbmRzIGluIG9yZGVyIHRvIGF1dG9tYXRlIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKGFwaUxldmVsID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgbG9nZ2VyLmluZm8oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBTb3JyeSEgJ2dwc0VuYWJsZWQnIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9yc2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBhcHBQYWNrYWdlIGV0IGFsIGZyb20gbWFuaWZlc3QgaWYgbmVjZXNzYXJ5XG4gICAgY29uc3QgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8gfHwge30pO1xuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZCwgcGxhdGZvcm0gdmVyc2lvbiwgc2NyZWVuIHNpemUsIHNjcmVlbiBkZW5zaXR5LCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHNcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzdGFydCBhbiBhdmQsIHNldCB0aGUgbGFuZ3VhZ2UvbG9jYWxlLCBwaWNrIGFuIGVtdWxhdG9yLCBldGMuLi5cbiAgICAvLyBUT0RPIHdpdGggbXVsdGlwbGUgZGV2aWNlcyB3ZSdsbCBuZWVkIHRvIHBhcmFtZXRlcml6ZSB0aGlzXG4gICAgdGhpcy5kZWZhdWx0SU1FID0gYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBwb3J0XG4gICAgLy8gVGhpcyBjYWxsIG11dGF0ZXMgdGhpcy5vcHRzLnN5c3RlbVBvcnQgaWYgaXQgaXMgbm90IHNldCBleHBsaWNpdGx5XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIHBvcnQgKGlmXG4gICAgLy8gYXBwbGljYWJsZSlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIFVpQXV0b21hdG9yMiBzZXJ2ZXIgZXRjXG4gICAgYXdhaXQgdGhpcy5pbml0VWlBdXRvbWF0b3IyU2VydmVyKCk7XG5cbiAgICAvLyBTaG91bGQgYmUgYWZ0ZXIgaW5zdGFsbGluZyBpby5hcHBpdW0uc2V0dGluZ3MgaW4gaGVscGVycy5pbml0RGV2aWNlXG4gICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uICYmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgMjYpKSB7IC8vIEFQSSBsZXZlbCAyNiBpcyBBbmRyb2lkIDguMC5cbiAgICAgIC8vIEdyYW50aW5nIGFuZHJvaWQucGVybWlzc2lvbi5TRVRfQU5JTUFUSU9OX1NDQUxFIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUgYW5pbWF0aW9ucyB1bmRlciBBUEkgbGV2ZWwgMjZcbiAgICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgICAvLyBgLS1uby13aW5kb3ctYW5pbWF0aW9uYCB3b3JrcyBvdmVyIEFuZHJvaWQgOCB0byBkaXNhYmxlIGFsbCBvZiBhbmltYXRpb25zXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdEaXNhYmxpbmcgYW5pbWF0aW9uIHZpYSBpby5hcHBpdW0uc2V0dGluZ3MnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmIGFwcEluZm8pIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBVaUF1dG9tYXRvcjIgYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG5cbiAgICAvLyBVbmxvY2sgdGhlIGRldmljZSBhZnRlciB0aGUgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikgeyAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbih0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUFwcFN0YXJ0cygpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBpbml0aWFsIG9yaWVudGF0aW9uIGlzIHJlcXVlc3RlZCwgc2V0IGl0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgICBsb2dnZXIuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIHVpYXV0b21hdG9yMlxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGFzeW5jIGluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIgKCkge1xuICAgIC8vIGJyb2tlbiBvdXQgZm9yIHJlYWRhYmlsaXR5XG4gICAgY29uc3QgdWlhdXRvbWF0b3IyT3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8IExPQ0FMSE9TVF9JUDQsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb246ICEhdGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgICAgcmVhZFRpbWVvdXQ6IHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCxcbiAgICB9O1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyB1aWF1dG9tYXRvcjIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uc1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbmV3IFVpQXV0b21hdG9yMlNlcnZlcih1aWF1dG9tYXRvcjJPcHRzKTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKGAnc2tpcFNlcnZlckluc3RhbGxhdGlvbicgaXMgc2V0LiBTa2lwcGluZyBVSUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGxhdGlvbi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuaW5zdGFsbFNlcnZlckFwayh0aGlzLm9wdHMudWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFxuICAgICAgICAgIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgQ2Fubm90IGFkZCBzZXJ2ZXIgcGFja2FnZXMgdG8gdGhlIERvemUgd2hpdGVsaXN0LiBPcmlnaW5hbCBlcnJvcjogYCArXG4gICAgICAgICAgKGUuc3RkZXJyIHx8IGUubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwc1xuICAgICAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhKGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSlcbiAgICAgICAgICB8fCAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmFwcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdub1Jlc2V0IGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlIGFwcCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gRG9pbmcgbm90aGluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfS8ke3RoaXMub3B0cy5hcHBBY3Rpdml0eX0gYCArXG4gICAgICBgYW5kIHdhaXRpbmcgZm9yICcke2FwcFdhaXRQYWNrYWdlfS8ke2FwcFdhaXRBY3Rpdml0eX0nYCk7XG5cbiAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYGFuZHJvaWRDb3ZlcmFnZSBpcyBjb25maWd1cmVkLiBgICtcbiAgICAgICAgYCBTdGFydGluZyBpbnN0cnVtZW50YXRpb24gb2YgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZX0nLi4uYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5hbmRyb2lkQ292ZXJhZ2UodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRGVsZXRpbmcgVWlBdXRvbWF0b3IyIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzdG9wIENocm9tZURyaXZlciBwcm94aWVzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5kZWxldGVTZXNzaW9uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcHJveHkgZGVsZXRlU2Vzc2lvbiB0byBVaUF1dG9tYXRvcjI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcmVzZXQgSU1FOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgICBsb2dnZXIuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFNlbmRpbmcgaW50ZW50IGJyb2FkY2FzdCAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50fScgYXQgdGhlIGVuZCBvZiBpbnN0cnVtZW50aW5nLmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmJyb2FkY2FzdCh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybignTm8gYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IGlzIGNvbmZpZ3VyZWQgaW4gY2Fwcy4gUG9zc2libHkgeW91IGNhbm5vdCBnZXQgY292ZXJhZ2UgZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FwYWJpbGl0eSAnZnVsbFJlc2V0JyBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byB1bmluc3RhbGwgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBpZiB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgPD0gMjZcbiAgICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBzeXN0ZW0gcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBNSlBFRyBzZXJ2ZXIgcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gY2xvc2UgZW11bGF0b3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJyR7dGhpcy5vcHRzLmFwcH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgdWlhdXRvMiBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgLy8gTmVlZCB0byBvdmVycmlkZSBhbmRyb2lkLWRyaXZlcidzIHZlcnNpb24gb2YgdGhpcyBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseVxuICAvLyBoYXZlIGEgYm9vdHN0cmFwOyBpbnN0ZWFkIHdlIGp1c3QgcmVzdGFydCBhZGIgYW5kIHJlLWZvcndhcmQgdGhlIFVpQXV0b21hdG9yMlxuICAvLyBwb3J0XG4gIGFzeW5jIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIHVpYXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIHVpYXV0b21hdG9yMihOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgd2VidmlldyhjaHJvbWVkcml2ZXIpLCB0aGVuIHJldHVybiBDSFJPTUVfTk9fUFJPWFkgbGlzdFxuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gQ0hST01FX05PX1BST1hZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgdWlhdXRvbWF0b3IyLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
649
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiaGVscGVycyIsIk9iamVjdCIsImFzc2lnbiIsInVpYXV0b21hdG9yMkhlbHBlcnMiLCJhbmRyb2lkSGVscGVycyIsIkRFVklDRV9QT1JUX1JBTkdFIiwiREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRCIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwicGF0aCIsInJlc29sdmUiLCJvcyIsInRtcGRpciIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsIkRFVklDRV9QT1JUIiwiTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUIiwiTE9DQUxIT1NUX0lQNCIsIk5PX1BST1hZIiwiUmVnRXhwIiwiQ0hST01FX05PX1BST1hZIiwiTUVNT0laRURfRlVOQ1RJT05TIiwiQW5kcm9pZFVpYXV0b21hdG9yMkRyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJzaGVsbCIsImxvY2F0b3JTdHJhdGVnaWVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwidWlhdXRvbWF0b3IyIiwiandwUHJveHlBY3RpdmUiLCJkZWZhdWx0SU1FIiwiandwUHJveHlBdm9pZCIsImFwa1N0cmluZ3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiaWdub3JlVW5pbXBvcnRhbnRWaWV3cyIsImFsbG93SW52aXNpYmxlRWxlbWVudHMiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiZm4iLCJfIiwibWVtb2l6ZSIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJjYXBzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJzZXJ2ZXJEZXRhaWxzIiwicGxhdGZvcm0iLCJ3ZWJTdG9yYWdlRW5hYmxlZCIsInRha2VzU2NyZWVuc2hvdCIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwibG9jYXRpb25Db250ZXh0RW5hYmxlZCIsIndhcm5pbmdzIiwiZGVzaXJlZCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJkZWZhdWx0T3B0cyIsImZ1bGxSZXNldCIsImF1dG9MYXVuY2giLCJhZGJQb3J0IiwiREVGQVVMVF9BREJfUE9SVCIsImFuZHJvaWRJbnN0YWxsVGltZW91dCIsImRlZmF1bHRzIiwiaXNDaHJvbWVTZXNzaW9uIiwibG9nZ2VyIiwiaW5mbyIsInBrZyIsImFjdGl2aXR5IiwiZ2V0Q2hyb21lUGtnIiwiYnJvd3Nlck5hbWUiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwiYXBwIiwiY29uZmlndXJlQXBwIiwiQVBLX0VYVEVOU0lPTiIsIkFQS1NfRVhURU5TSU9OIiwiY2hlY2tBcHBQcmVzZW50Iiwic3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uIiwiZmlsbERldmljZURldGFpbHMiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJzdGFydCIsImUiLCJkZWxldGVTZXNzaW9uIiwicGl4ZWxSYXRpbyIsImdldERldmljZVBpeGVsUmF0aW8iLCJzdGF0QmFySGVpZ2h0IiwiZ2V0U3RhdHVzQmFySGVpZ2h0Iiwidmlld3BvcnRSZWN0IiwiZ2V0Vmlld1BvcnRSZWN0IiwiZHJpdmVyRGF0YSIsImdldFNlc3Npb24iLCJzZXNzaW9uRGF0YSIsImRlYnVnIiwidWlhMkRhdGEiLCJqd3Byb3h5IiwiY29tbWFuZCIsImlzRW11bGF0b3IiLCJhZGIiLCJhdmQiLCJkZXZpY2VOYW1lIiwiZXJyb3JBbmRUaHJvdyIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsInJlcGxhY2UiLCJhbGxvY2F0ZVN5c3RlbVBvcnQiLCJmb3J3YXJkUG9ydCIsImxvY2FsUG9ydCIsInN5c3RlbVBvcnQiLCJfaGFzU3lzdGVtUG9ydEluQ2FwcyIsInN0YXJ0UG9ydCIsImVuZFBvcnQiLCJyZWxlYXNlU3lzdGVtUG9ydCIsInJlbW92ZVBvcnRGb3J3YXJkIiwiYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQiLCJtanBlZ1NlcnZlclBvcnQiLCJyZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0IiwidWRpZCIsImVtUG9ydCIsImdldERldmljZUluZm9Gcm9tQ2FwcyIsImNyZWF0ZUFEQiIsImFwaUxldmVsIiwiZ2V0QXBpTGV2ZWwiLCJzZXRIaWRkZW5BcGlQb2xpY3kiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsImhhc1ZhbHVlIiwiZ3BzRW5hYmxlZCIsInRvZ2dsZUdQU0xvY2F0aW9uUHJvdmlkZXIiLCJ3YXJuIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJjdXJEZXZpY2VJZCIsImRldmljZVVESUQiLCJpbml0RGV2aWNlIiwiaW5pdFVpQXV0b21hdG9yMlNlcnZlciIsImRpc2FibGVXaW5kb3dBbmltYXRpb24iLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJfd2FzV2luZG93QW5pbWF0aW9uRGlzYWJsZWQiLCJpbml0QVVUIiwic3RhcnRTZXNzaW9uIiwiYWRkRGV2aWNlSW5mb1RvQ2FwcyIsInNraXBVbmxvY2siLCJ1bmxvY2siLCJzdGFydENocm9tZVNlc3Npb24iLCJlbnN1cmVBcHBTdGFydHMiLCJvcmllbnRhdGlvbiIsInNldE9yaWVudGF0aW9uIiwiYXV0b1dlYnZpZXciLCJ2aWV3TmFtZSIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImF1dG9XZWJ2aWV3VGltZW91dCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsInVpYXV0b21hdG9yMk9wdHMiLCJob3N0IiwicmVtb3RlQWRiSG9zdCIsImRldmljZVBvcnQiLCJhcGsiLCJ0bXBEaXIiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInJlYWRUaW1lb3V0IiwidWlhdXRvbWF0b3IyU2VydmVyUmVhZFRpbWVvdXQiLCJVaUF1dG9tYXRvcjJTZXJ2ZXIiLCJwcm94eVJlcVJlcyIsInByb3h5Q29tbWFuZCIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJpbnN0YWxsU2VydmVyQXBrIiwidWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VSVkVSX1BBQ0tBR0VfSUQiLCJTRVJWRVJfVEVTVF9QQUNLQUdFX0lEIiwic3RkZXJyIiwibWVzc2FnZSIsInVuaW5zdGFsbE90aGVyUGFja2FnZXMiLCJwYXJzZUFycmF5Iiwib3RoZXJBcHBzIiwiQiIsImFsbCIsIm1hcCIsImluc3RhbGxPdGhlckFwa3MiLCJub1Jlc2V0IiwiaXNBcHBJbnN0YWxsZWQiLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJyZXF1aXJlRGVmYXVsdENlcnQiLCJzaWduQXBwIiwic2tpcFVuaW5zdGFsbCIsInVuaW5zdGFsbEFwayIsImluc3RhbGxBcGsiLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsImFwcFdhaXRQYWNrYWdlIiwiYXBwV2FpdEFjdGl2aXR5IiwiYW5kcm9pZENvdmVyYWdlIiwic3RhcnRBcHAiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsImRvbnRTdG9wQXBwT25SZXNldCIsInJldHJ5IiwidXNlciIsInVzZXJQcm9maWxlIiwiaXNFbXB0eSIsIl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzIiwic3RvcFJlY29yZGluZ1NjcmVlbiIsImlnbiIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsImVyciIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJlbmRBbmRyb2lkQ292ZXJhZ2UiLCJhbmRyb2lkQ292ZXJhZ2VFbmRJbnRlbnQiLCJicm9hZGNhc3QiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiZXJyb3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInN0b3AiLCJmcyIsImV4aXN0cyIsIndyYXBCb290c3RyYXBEaXNjb25uZWN0Iiwid3JhcHBlZCIsInJlc3RhcnQiLCJwcm94eUFjdGl2ZSIsImNhblByb3h5IiwiZ2V0UHJveHlBdm9pZExpc3QiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiY21kIiwidG9QYWlycyIsImFuZHJvaWRDb21tYW5kcyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkMsZ0JBQWxCLEVBQXVDQyxtQ0FBdkMsQ0FBaEI7QUFJQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLElBQUQsRUFBTyxJQUFQLENB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c2VEcml2ZXIsIERldmljZVNldHRpbmdzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7XG4gIFVpQXV0b21hdG9yMlNlcnZlciwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURcbn0gZnJvbSAnLi91aWF1dG9tYXRvcjInO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1qcGVnIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IGNvbW1hbmRzIGZyb20gJy4vY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0IHsgREVGQVVMVF9BREJfUE9SVCB9IGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHVpYXV0b21hdG9yMkhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gIGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSURcbn0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UsIGNoZWNrUG9ydFN0YXR1cyB9IGZyb20gJ3BvcnRzY2FubmVyJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFQS19FWFRFTlNJT04sIEFQS1NfRVhURU5TSU9OIH0gZnJvbSAnLi9leHRlbnNpb25zJztcblxuXG5jb25zdCBoZWxwZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdWlhdXRvbWF0b3IySGVscGVycywgYW5kcm9pZEhlbHBlcnMpO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gVWlBdXRvbWF0b3IyIEhUVFAgc2VydmVyIG9uIHRoZSBkZXZpY2VcbmNvbnN0IERFVklDRV9QT1JUX1JBTkdFID0gWzgyMDAsIDgyOTldO1xuXG4vLyBUaGUgZ3VhcmQgaXMgbmVlZGVkIHRvIGF2b2lkIGR5bmFtaWMgc3lzdGVtIHBvcnQgYWxsb2NhdGlvbiBjb25mbGljdHMgZm9yXG4vLyBwYXJhbGxlbCBkcml2ZXIgc2Vzc2lvbnNcbmNvbnN0IERFVklDRV9QT1JUX0FMTE9DQVRJT05fR1VBUkQgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQoXG4gIHBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSwgJ3VpYTJfZGV2aWNlX3BvcnRfZ3VhcmQnKSxcbiAge3RpbWVvdXQ6IDI1LCB0cnlSZWNvdmVyeTogdHJ1ZX1cbik7XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCBVaUF1dG9tYXRvcjIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsIGZvcndhcmRcbi8vIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MDtcbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgVWlBdXRvbWF0b3IyIE1KUEVHIHNlcnZlciBsaXN0ZW5zIHRvIG9uIHRoZSBkZXZpY2UuXG4vLyBXZSB3aWxsIGZvcndhcmQgb25lIG9mIHRoZSBwb3J0cyBhYm92ZSBvbiB0aGUgc3lzdGVtIHRvIHRoaXMgcG9ydCBvbiB0aGVcbi8vIGRldmljZS5cbmNvbnN0IE1KUEVHX1NFUlZFUl9ERVZJQ0VfUE9SVCA9IDc4MTA7XG5cbmNvbnN0IExPQ0FMSE9TVF9JUDQgPSAnMTI3LjAuMC4xJztcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBVaUF1dG9tYXRvcjIgc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gVWlBdXRvbWF0b3IyIHNlcnZlci5cbi8vIFRPRE86IE5lZWQgdG8gc2VncmVnYXRlIHRoZSBwYXRocyBiZXR0ZXIgd2F5IHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hlcmV2ZXIgYXBwbGljYWJsZS5cbi8vIChOb3Qgc2VncmVnYXRpbmcgcmlnaHQgYXdheSBiZWNhdXNlIG1vcmUgcGF0aHMgdG8gYmUgYWRkZWQgaW4gdGhlIE5PX1BST1hZIGxpc3QpXG5jb25zdCBOT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKD8hLiovKScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWxlcnRfW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL1teL10rL2N1cnJlbnRfcGFja2FnZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9hdHRyaWJ1dGUnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvZGlzcGxheWVkJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL2VuYWJsZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvbG9jYXRpb25faW5fdmlldycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9uYW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3NjcmVlbnNob3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvc2VsZWN0ZWQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9jYXRpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90aW1lb3V0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvW14vXStfYWxlcnQkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYWN0aW9ucycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FsZXJ0L1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwL1teL10nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vW14vXSsvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS8oPyFzZXRfY2xpcGJvYXJkKVteL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2VsZW1lbnQvW14vXSsvcmVwbGFjZV92YWx1ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9lbGVtZW50L1teL10rL3ZhbHVlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2dldFBlcmZvcm1hbmNlRGF0YScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9wZXJmb3JtYW5jZURhdGEvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZXhlY3V0ZV9kcml2ZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RhcnRfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdG9wX3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vLipldmVudCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsva2V5cycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcblxuICAvLyBNSlNPTldQIGNvbW1hbmRzXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgLy8gVzNDIGNvbW1hbmRzXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3dpbmRvdy9yZWN0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbl07XG5cbi8vIFRoaXMgaXMgYSBzZXQgb2YgbWV0aG9kcyBhbmQgcGF0aHMgdGhhdCB3ZSBuZXZlciB3YW50IHRvIHByb3h5IHRvIENocm9tZWRyaXZlci5cbmNvbnN0IENIUk9NRV9OT19QUk9YWSA9IFtcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9lbGVtZW50L1teL10rL3JlY3QnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZy90eXBlcyQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL29yaWVudGF0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvZyQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5dO1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG5dO1xuXG5jbGFzcyBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICAvLyBgc2hlbGxgIG92ZXJ3cml0ZXMgYWRiLnNoZWxsLCBzbyByZW1vdmVcbiAgICBkZWxldGUgb3B0cy5zaGVsbDtcblxuICAgIHN1cGVyKG9wdHMsIHNob3VsZFZhbGlkYXRlQ2Fwcyk7XG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAnLWFuZHJvaWQgdWlhdXRvbWF0b3InXG4gICAgXTtcbiAgICB0aGlzLmRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBDb25zdHJhaW50cztcbiAgICB0aGlzLnVpYXV0b21hdG9yMiA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG4gICAgdGhpcy5hcGtTdHJpbmdzID0ge307IC8vIG1hcCBvZiBsYW5ndWFnZSAtPiBzdHJpbmdzIG9ialxuXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7aWdub3JlVW5pbXBvcnRhbnRWaWV3czogZmFsc2UsIGFsbG93SW52aXNpYmxlRWxlbWVudHM6IGZhbHNlfSxcbiAgICAgICAgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIC8vIGhhbmRsZSB3ZWJ2aWV3IG1lY2hhbmljcyBmcm9tIEFuZHJvaWREcml2ZXJcbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlRGVzaXJlZENhcHMoY2FwcykgJiYgYW5kcm9pZEhlbHBlcnMudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IHRoaXMuY2FwcyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiV2UncmUgZ29pbmcgdG8gcnVuIGEgQ2hyb21lLWJhc2VkIHNlc3Npb25cIik7XG4gICAgICAgIGxldCB7cGtnLCBhY3Rpdml0eX0gPSBoZWxwZXJzLmdldENocm9tZVBrZyh0aGlzLm9wdHMuYnJvd3Nlck5hbWUpO1xuICAgICAgICB0aGlzLm9wdHMuYXBwUGFja2FnZSA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gcGtnO1xuICAgICAgICB0aGlzLm9wdHMuYXBwQWN0aXZpdHkgPSB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgICAgICAgbG9nZ2VyLmluZm8oYENocm9tZS10eXBlIHBhY2thZ2UgYW5kIGFjdGl2aXR5IGFyZSAke3BrZ30gYW5kICR7YWN0aXZpdHl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgLy8gZmluZCBhbmQgY29weSwgb3IgZG93bmxvYWQgYW5kIHVuemlwIGFuIGFwcCB1cmwgb3IgcGF0aFxuICAgICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcFBhY2thZ2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGluZyAnJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0nIGRpcmVjdGx5IG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBOZWl0aGVyICdhcHAnIG5vciAnYXBwUGFja2FnZScgd2FzIHNldC4gU3RhcnRpbmcgVWlBdXRvbWF0b3IyIGAgK1xuICAgICAgICAgICd3aXRob3V0IHRoZSB0YXJnZXQgYXBwbGljYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0cy5hZGJQb3J0ID0gdGhpcy5vcHRzLmFkYlBvcnQgfHwgREVGQVVMVF9BREJfUE9SVDtcblxuICAgICAgYXdhaXQgdGhpcy5zdGFydFVpQXV0b21hdG9yMlNlc3Npb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERldmljZURldGFpbHMoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgdGhpcy5jYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmlsbERldmljZURldGFpbHMgKCkge1xuICAgIHRoaXMuY2Fwcy5waXhlbFJhdGlvID0gYXdhaXQgdGhpcy5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XG4gICAgdGhpcy5jYXBzLnN0YXRCYXJIZWlnaHQgPSBhd2FpdCB0aGlzLmdldFN0YXR1c0JhckhlaWdodCgpO1xuICAgIHRoaXMuY2Fwcy52aWV3cG9ydFJlY3QgPSBhd2FpdCB0aGlzLmdldFZpZXdQb3J0UmVjdCgpO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbiAoKSB7XG4gICAgbGV0IHNlc3Npb25EYXRhID0gYXdhaXQgc3VwZXIuZ2V0U2Vzc2lvbigpO1xuICAgIGxvZ2dlci5kZWJ1ZygnR2V0dGluZyBzZXNzaW9uIGRldGFpbHMgZnJvbSBzZXJ2ZXIgdG8gbWl4IGluJyk7XG4gICAgbGV0IHVpYTJEYXRhID0gYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuandwcm94eS5jb21tYW5kKCcvJywgJ0dFVCcsIHt9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbkRhdGEsIHVpYTJEYXRhKTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIGRldmljZU5hbWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlcycpO1xuICAgICAgfVxuICAgICAgaWYgKCFjYXBzLnBsYXRmb3JtVmVyc2lvbikge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlU3lzdGVtUG9ydCAoKSB7XG4gICAgY29uc3QgZm9yd2FyZFBvcnQgPSBhc3luYyAobG9jYWxQb3J0KSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoYEZvcndhcmRpbmcgVWlBdXRvbWF0b3IyIFNlcnZlciBwb3J0ICR7REVWSUNFX1BPUlR9IHRvIGxvY2FsIHBvcnQgJHtsb2NhbFBvcnR9YCk7XG4gICAgICBpZiAoKGF3YWl0IGNoZWNrUG9ydFN0YXR1cyhsb2NhbFBvcnQsIExPQ0FMSE9TVF9JUDQpKSA9PT0gJ29wZW4nKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVaUF1dG9tYXRvcjIgU2VydmVyIGNhbm5vdCBzdGFydCBiZWNhdXNlIHRoZSBsb2NhbCBwb3J0ICMke2xvY2FsUG9ydH0gaXMgYnVzeS4gYCArXG4gICAgICAgICAgYE1ha2Ugc3VyZSB0aGUgcG9ydCB5b3UgcHJvdmlkZSB2aWEgJ3N5c3RlbVBvcnQnIGNhcGFiaWxpdHkgaXMgbm90IG9jY3VwaWVkLiBgICtcbiAgICAgICAgICBgVGhpcyBzaXR1YXRpb24gbWlnaHQgb2Z0ZW4gYmUgYSByZXN1bHQgb2YgYW4gaW5hY2N1cmF0ZSBzZXNzaW9ucyBtYW5hZ2VtZW50LCBlLmcuIGAgK1xuICAgICAgICAgIGBvbGQgYXV0b21hdGlvbiBzZXNzaW9ucyBvbiB0aGUgc2FtZSBkZXZpY2UgbXVzdCBhbHdheXMgYmUgY2xvc2VkIGJlZm9yZSBzdGFydGluZyBuZXcgb25lcy5gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KGxvY2FsUG9ydCwgREVWSUNFX1BPUlQpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnN5c3RlbVBvcnQpIHtcbiAgICAgIHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIGF3YWl0IGZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9XG5cbiAgICBhd2FpdCBERVZJQ0VfUE9SVF9BTExPQ0FUSU9OX0dVQVJEKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFtzdGFydFBvcnQsIGVuZFBvcnRdID0gREVWSUNFX1BPUlRfUkFOR0U7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKHN0YXJ0UG9ydCwgZW5kUG9ydCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KFxuICAgICAgICAgIGBDYW5ub3QgZmluZCBhbnkgZnJlZSBwb3J0IGluIHJhbmdlICR7c3RhcnRQb3J0fS4uJHtlbmRQb3J0fX0uIGAgK1xuICAgICAgICAgIGBQbGVhc2Ugc2V0IHRoZSBhdmFpbGFibGUgcG9ydCBudW1iZXIgYnkgcHJvdmlkaW5nIHRoZSBzeXN0ZW1Qb3J0IGNhcGFiaWxpdHkgb3IgYCArXG4gICAgICAgICAgYGRvdWJsZSBjaGVjayB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIGxvY2tpbmcgcG9ydHMgd2l0aGluIHRoaXMgcmFuZ2UgYW5kIHRlcm1pbmF0ZSBgICtcbiAgICAgICAgICBgdGhlc2Ugd2hpY2ggYXJlIG5vdCBuZWVkZWQgYW55bW9yZWApO1xuICAgICAgfVxuICAgICAgYXdhaXQgZm9yd2FyZFBvcnQodGhpcy5vcHRzLnN5c3RlbVBvcnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZVN5c3RlbVBvcnQgKCkge1xuICAgIGlmICghdGhpcy5vcHRzLnN5c3RlbVBvcnQgfHwgIXRoaXMuYWRiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc1N5c3RlbVBvcnRJbkNhcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnJlbW92ZVBvcnRGb3J3YXJkKHRoaXMub3B0cy5zeXN0ZW1Qb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgREVWSUNFX1BPUlRfQUxMT0NBVElPTl9HVUFSRChhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCwgTUpQRUdfU0VSVkVSX0RFVklDRV9QT1JUKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIucmVtb3ZlUG9ydEZvcndhcmQodGhpcy5vcHRzLm1qcGVnU2VydmVyUG9ydCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRVaUF1dG9tYXRvcjJTZXNzaW9uICgpIHtcbiAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgIGxldCB7dWRpZCwgZW1Qb3J0fSA9IGF3YWl0IGhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzKHRoaXMub3B0cyk7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG5cbiAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgIC8vIEFEQiBpbnN0YW5jZVxuICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICBjb25zdCBhcGlMZXZlbCA9IGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCk7XG5cbiAgICBpZiAoYXBpTGV2ZWwgPCAyMSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coJ1VJQXV0b21hdG9yMiBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSBBbmRyb2lkIDUuMCAoTG9sbGlwb3ApLiAnICtcbiAgICAgICAgJ1lvdSBjb3VsZCBzdGlsbCB1c2Ugb3RoZXIgc3VwcG9ydGVkIGJhY2tlbmRzIGluIG9yZGVyIHRvIGF1dG9tYXRlIG9sZGVyIEFuZHJvaWQgdmVyc2lvbnMuJyk7XG4gICAgfVxuXG4gICAgaWYgKGFwaUxldmVsID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgbG9nZ2VyLmluZm8oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBlbmFibGUvZGlzYWJsZSBncHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmdwc0VuYWJsZWQpKSB7XG4gICAgICBpZiAodGhpcy5pc0VtdWxhdG9yKCkpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFRyeWluZyB0byAke3RoaXMub3B0cy5ncHNFbmFibGVkID8gJ2VuYWJsZScgOiAnZGlzYWJsZSd9IGdwcyBsb2NhdGlvbiBwcm92aWRlcmApO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi50b2dnbGVHUFNMb2NhdGlvblByb3ZpZGVyKHRoaXMub3B0cy5ncHNFbmFibGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBTb3JyeSEgJ2dwc0VuYWJsZWQnIGNhcGFiaWxpdHkgaXMgb25seSBhdmFpbGFibGUgZm9yIGVtdWxhdG9yc2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBhcHBQYWNrYWdlIGV0IGFsIGZyb20gbWFuaWZlc3QgaWYgbmVjZXNzYXJ5XG4gICAgY29uc3QgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8gfHwge30pO1xuXG4gICAgLy8gc2V0IGFjdHVhbCBkZXZpY2UgbmFtZSwgdWRpZCwgcGxhdGZvcm0gdmVyc2lvbiwgc2NyZWVuIHNpemUsIHNjcmVlbiBkZW5zaXR5LCBtb2RlbCBhbmQgbWFudWZhY3R1cmVyIGRldGFpbHNcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzdGFydCBhbiBhdmQsIHNldCB0aGUgbGFuZ3VhZ2UvbG9jYWxlLCBwaWNrIGFuIGVtdWxhdG9yLCBldGMuLi5cbiAgICAvLyBUT0RPIHdpdGggbXVsdGlwbGUgZGV2aWNlcyB3ZSdsbCBuZWVkIHRvIHBhcmFtZXRlcml6ZSB0aGlzXG4gICAgdGhpcy5kZWZhdWx0SU1FID0gYXdhaXQgaGVscGVycy5pbml0RGV2aWNlKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gUHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIFVpQXV0b21hdG9yMiBwb3J0XG4gICAgLy8gVGhpcyBjYWxsIG11dGF0ZXMgdGhpcy5vcHRzLnN5c3RlbVBvcnQgaWYgaXQgaXMgbm90IHNldCBleHBsaWNpdGx5XG4gICAgYXdhaXQgdGhpcy5hbGxvY2F0ZVN5c3RlbVBvcnQoKTtcblxuICAgIC8vIFByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBVaUF1dG9tYXRvcjIgTUpQRUcgc2VydmVyIHBvcnQgKGlmXG4gICAgLy8gYXBwbGljYWJsZSlcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlTWpwZWdTZXJ2ZXJQb3J0KCk7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIFVpQXV0b21hdG9yMiBzZXJ2ZXIgZXRjXG4gICAgYXdhaXQgdGhpcy5pbml0VWlBdXRvbWF0b3IyU2VydmVyKCk7XG5cbiAgICAvLyBTaG91bGQgYmUgYWZ0ZXIgaW5zdGFsbGluZyBpby5hcHBpdW0uc2V0dGluZ3MgaW4gaGVscGVycy5pbml0RGV2aWNlXG4gICAgaWYgKHRoaXMub3B0cy5kaXNhYmxlV2luZG93QW5pbWF0aW9uICYmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpIDwgMjYpKSB7IC8vIEFQSSBsZXZlbCAyNiBpcyBBbmRyb2lkIDguMC5cbiAgICAgIC8vIEdyYW50aW5nIGFuZHJvaWQucGVybWlzc2lvbi5TRVRfQU5JTUFUSU9OX1NDQUxFIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUgYW5pbWF0aW9ucyB1bmRlciBBUEkgbGV2ZWwgMjZcbiAgICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcHVsbC8xMTY0MCNpc3N1ZWNvbW1lbnQtNDM4MjYwNDc3XG4gICAgICAvLyBgLS1uby13aW5kb3ctYW5pbWF0aW9uYCB3b3JrcyBvdmVyIEFuZHJvaWQgOCB0byBkaXNhYmxlIGFsbCBvZiBhbmltYXRpb25zXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuaXNBbmltYXRpb25PbigpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdEaXNhYmxpbmcgYW5pbWF0aW9uIHZpYSBpby5hcHBpdW0uc2V0dGluZ3MnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbygnV2luZG93IGFuaW1hdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2V0IHVwIGFwcCB1bmRlciB0ZXN0XG4gICAgLy8gcHJlcGFyZSBvdXIgYWN0dWFsIEFVVCwgZ2V0IGl0IG9uIHRoZSBkZXZpY2UsIGV0Yy4uLlxuICAgIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuXG4gICAgLy8gQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmIGFwcEluZm8pIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBQYWNrYWdlID0gYXBwSW5mby5hcHBQYWNrYWdlO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBVaUF1dG9tYXRvcjIgYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMudWlhdXRvbWF0b3IyLnN0YXJ0U2Vzc2lvbih0aGlzLmNhcHMpO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG5cbiAgICAvLyBVbmxvY2sgdGhlIGRldmljZSBhZnRlciB0aGUgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICAgIGlmICghdGhpcy5vcHRzLnNraXBVbmxvY2spIHtcbiAgICAgIC8vIHVubG9jayB0aGUgZGV2aWNlIHRvIHByZXBhcmUgaXQgZm9yIHRlc3RpbmdcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB0aGlzLmNhcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikgeyAvLyBzdGFydCBhIGNocm9tZWRyaXZlciBzZXNzaW9uXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbih0aGlzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5hdXRvTGF1bmNoICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUFwcFN0YXJ0cygpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBpbml0aWFsIG9yaWVudGF0aW9uIGlzIHJlcXVlc3RlZCwgc2V0IGl0XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLm9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gdG8gJyR7dGhpcy5vcHRzLm9yaWVudGF0aW9ufSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuc2V0T3JpZW50YXRpb24odGhpcy5vcHRzLm9yaWVudGF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5kZWZhdWx0V2Vidmlld05hbWUoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgICBsb2dnZXIuaW5mbyhgU2V0dGluZyBhdXRvIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwodGltZW91dCAvIDUwMCwgNTAwLCB0aGlzLnNldENvbnRleHQuYmluZCh0aGlzKSwgdmlld05hbWUpO1xuICAgIH1cblxuICAgIC8vIG5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5LCB0dXJuIG9uIHByb3h5aW5nIHNvIGFsbFxuICAgIC8vIHN1YnNlcXVlbnQgc2Vzc2lvbiByZXF1ZXN0cyBnbyBzdHJhaWdodCB0by9mcm9tIHVpYXV0b21hdG9yMlxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgYWRkRGV2aWNlSW5mb1RvQ2FwcyAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHBsYXRmb3JtVmVyc2lvbixcbiAgICAgIG1hbnVmYWN0dXJlcixcbiAgICAgIG1vZGVsLFxuICAgICAgcmVhbERpc3BsYXlTaXplLFxuICAgICAgZGlzcGxheURlbnNpdHksXG4gICAgfSA9IGF3YWl0IHRoaXMubW9iaWxlR2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VBcGlMZXZlbCA9IHBhcnNlSW50KGFwaVZlcnNpb24sIDEwKTtcbiAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gcGxhdGZvcm1WZXJzaW9uO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5TaXplID0gcmVhbERpc3BsYXlTaXplO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VTY3JlZW5EZW5zaXR5ID0gZGlzcGxheURlbnNpdHk7XG4gICAgdGhpcy5jYXBzLmRldmljZU1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jYXBzLmRldmljZU1hbnVmYWN0dXJlciA9IG1hbnVmYWN0dXJlcjtcbiAgfVxuXG4gIGFzeW5jIGluaXRVaUF1dG9tYXRvcjJTZXJ2ZXIgKCkge1xuICAgIC8vIGJyb2tlbiBvdXQgZm9yIHJlYWRhYmlsaXR5XG4gICAgY29uc3QgdWlhdXRvbWF0b3IyT3B0cyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8IExPQ0FMSE9TVF9JUDQsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb246ICEhdGhpcy5vcHRzLmRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgICBkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZTogdGhpcy5vcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlLFxuICAgICAgcmVhZFRpbWVvdXQ6IHRoaXMub3B0cy51aWF1dG9tYXRvcjJTZXJ2ZXJSZWFkVGltZW91dCxcbiAgICB9O1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyB1aWF1dG9tYXRvcjIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uc1xuICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbmV3IFVpQXV0b21hdG9yMlNlcnZlcih1aWF1dG9tYXRvcjJPcHRzKTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy51aWF1dG9tYXRvcjIucHJveHlSZXFSZXMuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG4gICAgdGhpcy5wcm94eUNvbW1hbmQgPSB0aGlzLnVpYXV0b21hdG9yMi5wcm94eUNvbW1hbmQuYmluZCh0aGlzLnVpYXV0b21hdG9yMik7XG5cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKGAnc2tpcFNlcnZlckluc3RhbGxhdGlvbicgaXMgc2V0LiBTa2lwcGluZyBVSUF1dG9tYXRvcjIgc2VydmVyIGluc3RhbGxhdGlvbi5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51aWF1dG9tYXRvcjIuaW5zdGFsbFNlcnZlckFwayh0aGlzLm9wdHMudWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFxuICAgICAgICAgIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFNFUlZFUl9QQUNLQUdFX0lELCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgQ2Fubm90IGFkZCBzZXJ2ZXIgcGFja2FnZXMgdG8gdGhlIERvemUgd2hpdGVsaXN0LiBPcmlnaW5hbCBlcnJvcjogYCArXG4gICAgICAgICAgKGUuc3RkZXJyIHx8IGUubWVzc2FnZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSURdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgYW55IFwib3RoZXJBcHBzXCIgdGhhdCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy5vdGhlckFwcHMpIHtcbiAgICAgIGxldCBvdGhlckFwcHM7XG4gICAgICB0cnkge1xuICAgICAgICBvdGhlckFwcHMgPSBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIG90aGVyQXBwcyA9IGF3YWl0IEIuYWxsKG90aGVyQXBwc1xuICAgICAgICAubWFwKChhcHApID0+IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwLCBbQVBLX0VYVEVOU0lPTiwgQVBLU19FWFRFTlNJT05dKSkpO1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsT3RoZXJBcGtzKG90aGVyQXBwcywgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCAmJiAhKGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSlcbiAgICAgICAgICB8fCAhdGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdHMubm9TaWduICYmICFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5vcHRzLmFwcCwgdGhpcy5vcHRzLmFwcFBhY2thZ2UsIHtcbiAgICAgICAgICByZXF1aXJlRGVmYXVsdENlcnQ6IGZhbHNlLFxuICAgICAgICB9KSkge1xuICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzLmFwcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdub1Jlc2V0IGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlIGFwcCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gRG9pbmcgbm90aGluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCkge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0ICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW5zdXJlQXBwU3RhcnRzICgpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbiBhY3Rpdml0eSBhbmQgcGFja2FnZSB0byB3YWl0IGZvclxuICAgIGNvbnN0IGFwcFdhaXRQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICAgIGNvbnN0IGFwcFdhaXRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuXG4gICAgbG9nZ2VyLmluZm8oYFN0YXJ0aW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfS8ke3RoaXMub3B0cy5hcHBBY3Rpdml0eX0gYCArXG4gICAgICBgYW5kIHdhaXRpbmcgZm9yICcke2FwcFdhaXRQYWNrYWdlfS8ke2FwcFdhaXRBY3Rpdml0eX0nYCk7XG5cbiAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgbG9nZ2VyLmluZm8oYGFuZHJvaWRDb3ZlcmFnZSBpcyBjb25maWd1cmVkLiBgICtcbiAgICAgICAgYCBTdGFydGluZyBpbnN0cnVtZW50YXRpb24gb2YgJyR7dGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZX0nLi4uYCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5hbmRyb2lkQ292ZXJhZ2UodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQsXG4gICAgICAgIHJldHJ5OiB0cnVlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKCkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRGVsZXRpbmcgVWlBdXRvbWF0b3IyIHNlc3Npb24nKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChpZ24pIHt9XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZygpO1xuXG4gICAgaWYgKHRoaXMudWlhdXRvbWF0b3IyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzdG9wIENocm9tZURyaXZlciBwcm94aWVzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuandwUHJveHlBY3RpdmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVpYXV0b21hdG9yMi5kZWxldGVTZXNzaW9uKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcHJveHkgZGVsZXRlU2Vzc2lvbiB0byBVaUF1dG9tYXRvcjI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudWlhdXRvbWF0b3IyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYWRiKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCAmJiB0aGlzLm9wdHMucmVzZXRLZXlib2FyZCAmJiB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNldHRpbmcgSU1FIHRvICcke3RoaXMuZGVmYXVsdElNRX0nYCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gcmVzZXQgSU1FOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYXBzLmFuZHJvaWRDb3ZlcmFnZSkge1xuICAgICAgICBsb2dnZXIuaW5mbygnU2h1dHRpbmcgZG93biB0aGUgYWRiIHByb2Nlc3Mgb2YgaW5zdHJ1bWVudGF0aW9uLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmVuZEFuZHJvaWRDb3ZlcmFnZSgpO1xuICAgICAgICAvLyBVc2UgdGhpcyBicm9hZGNhc3QgaW50ZW50IHRvIG5vdGlmeSBpdCdzIHRpbWUgdG8gZHVtcCBjb3ZlcmFnZSB0byBmaWxlXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFNlbmRpbmcgaW50ZW50IGJyb2FkY2FzdCAnJHt0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50fScgYXQgdGhlIGVuZCBvZiBpbnN0cnVtZW50aW5nLmApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmJyb2FkY2FzdCh0aGlzLmNhcHMuYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybignTm8gYW5kcm9pZENvdmVyYWdlRW5kSW50ZW50IGlzIGNvbmZpZ3VyZWQgaW4gY2Fwcy4gUG9zc2libHkgeW91IGNhbm5vdCBnZXQgY292ZXJhZ2UgZmlsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy5hcHBQYWNrYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Nocm9tZVNlc3Npb24gJiYgIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZm9yY2Ugc3RvcCBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0ICYmICF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FwYWJpbGl0eSAnZnVsbFJlc2V0JyBzZXQgdG8gJ3RydWUnLCBVbmluc3RhbGxpbmcgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9J2ApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byB1bmluc3RhbGwgYXBwOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBpZiB0ZXN0IHRhcmdldCBkZXZpY2UgaXMgPD0gMjZcbiAgICAgIGlmICh0aGlzLl93YXNXaW5kb3dBbmltYXRpb25EaXNhYmxlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbygnUmVzdG9yaW5nIHdpbmRvdyBhbmltYXRpb24gc3RhdGUnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zdG9wTG9nY2F0KCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbGVhc2VTeXN0ZW1Qb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBzeXN0ZW0gcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWxlYXNlTWpwZWdTZXJ2ZXJQb3J0KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlbW92ZSBNSlBFRyBzZXJ2ZXIgcG9ydCBmb3J3YXJkOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIC8vIElnbm9yZSwgdGhpcyBibG9jayB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gd2UgZmFsbCBpbiBjYXRjaCBibG9ja1xuICAgICAgICAvLyBhbmQgYmVmb3JlIGV2ZW4gcG9ydCBmb3J3YXJkLlxuICAgICAgfVxuXG4gICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5yZWJvb3QpIHtcbiAgICAgICAgbGV0IGF2ZE5hbWUgPSB0aGlzLm9wdHMuYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5raWxsRW11bGF0b3IoYXZkTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gY2xvc2UgZW11bGF0b3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMubWpwZWdTdHJlYW0pIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdDbG9zaW5nIE1KUEVHIHN0cmVhbScpO1xuICAgICAgdGhpcy5tanBlZ1N0cmVhbS5zdG9wKCk7XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQXBwUHJlc2VudCAoKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdDaGVja2luZyB3aGV0aGVyIGFwcCBpcyBhY3R1YWxseSBwcmVzZW50Jyk7XG4gICAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHRoaXMub3B0cy5hcHApKSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIGFwcCBhcGsgYXQgJyR7dGhpcy5vcHRzLmFwcH0nYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoKSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBkbyBub3RoaW5nIGhlcmUsIHNpbmNlIGNvbW1hbmRzLnVwZGF0ZVNldHRpbmdzIHByb3hpZXNcbiAgICAvLyBzZXR0aW5ncyB0byB0aGUgdWlhdXRvMiBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgLy8gTmVlZCB0byBvdmVycmlkZSBhbmRyb2lkLWRyaXZlcidzIHZlcnNpb24gb2YgdGhpcyBzaW5jZSB3ZSBkb24ndCBhY3R1YWxseVxuICAvLyBoYXZlIGEgYm9vdHN0cmFwOyBpbnN0ZWFkIHdlIGp1c3QgcmVzdGFydCBhZGIgYW5kIHJlLWZvcndhcmQgdGhlIFVpQXV0b21hdG9yMlxuICAvLyBwb3J0XG4gIGFzeW5jIHdyYXBCb290c3RyYXBEaXNjb25uZWN0ICh3cmFwcGVkKSB7XG4gICAgYXdhaXQgd3JhcHBlZCgpO1xuICAgIGF3YWl0IHRoaXMuYWRiLnJlc3RhcnQoKTtcbiAgICBhd2FpdCB0aGlzLmFsbG9jYXRlU3lzdGVtUG9ydCgpO1xuICAgIGF3YWl0IHRoaXMuYWxsb2NhdGVNanBlZ1NlcnZlclBvcnQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5wcm94eUFjdGl2ZShzZXNzaW9uSWQpO1xuXG4gICAgLy8gd2UgYWx3YXlzIGhhdmUgYW4gYWN0aXZlIHByb3h5IHRvIHRoZSBVaUF1dG9tYXRvcjIgc2VydmVyXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgc3VwZXIuY2FuUHJveHkoc2Vzc2lvbklkKTtcblxuICAgIC8vIHdlIGNhbiBhbHdheXMgcHJveHkgdG8gdGhlIHVpYXV0b21hdG9yMiBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIHVpYXV0b21hdG9yMihOT19QUk9YWSksIGJhc2VkIG9uIGN1cnJlbnQgY29udGV4dCB3aWxsIHJldHVybiByZWxhdGVkIE5PX1BST1hZIGxpc3RcbiAgICBpZiAodXRpbC5oYXNWYWx1ZSh0aGlzLmNocm9tZWRyaXZlcikpIHtcbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgd2VidmlldyhjaHJvbWVkcml2ZXIpLCB0aGVuIHJldHVybiBDSFJPTUVfTk9fUFJPWFkgbGlzdFxuICAgICAgdGhpcy5qd3BQcm94eUF2b2lkID0gQ0hST01FX05PX1BST1hZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cbn1cblxuLy8gZmlyc3QgYWRkIHRoZSBhbmRyb2lkLWRyaXZlciBjb21tYW5kcyB3aGljaCB3ZSB3aWxsIGZhbGwgYmFjayB0b1xuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhhbmRyb2lkQ29tbWFuZHMpKSB7XG4gIEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuLy8gdGhlbiBvdmVyd3JpdGUgd2l0aCBhbnkgdWlhdXRvbWF0b3IyLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBBbmRyb2lkVWlhdXRvbWF0b3IyRHJpdmVyLnByb3RvdHlwZVtjbWRdID0gZm47XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXIgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRVaWF1dG9tYXRvcjJEcml2ZXI7XG4iXSwiZmlsZSI6ImxpYi9kcml2ZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
@@ -76,6 +76,7 @@ class UiAutomator2Server {
|
|
|
76
76
|
|
|
77
77
|
this.jwproxy = new UIA2Proxy(proxyOpts);
|
|
78
78
|
this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
|
|
79
|
+
this.proxyCommand = this.jwproxy.command.bind(this.jwproxy);
|
|
79
80
|
this.jwproxy.didInstrumentationExit = false;
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -387,4 +388,4 @@ var _default = UiAutomator2Server;
|
|
|
387
388
|
exports.default = _default;require('source-map-support').install();
|
|
388
389
|
|
|
389
390
|
|
|
390
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvcjIuanMiXSwibmFtZXMiOlsiUkVRRF9QQVJBTVMiLCJTRVJWRVJfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfSU5TVEFMTF9SRVRSSUVTIiwiU0VSVklDRVNfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJJTlNUUlVNRU5UQVRJT05fVEFSR0VUIiwiaW5zdHJ1bWVudGF0aW9uTG9nZ2VyIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVUlBMlByb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRJbnN0cnVtZW50YXRpb25FeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlVpQXV0b21hdG9yMlNlcnZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJwcm94eU9wdHMiLCJzZXJ2ZXIiLCJob3N0IiwicG9ydCIsInN5c3RlbVBvcnQiLCJrZWVwQWxpdmUiLCJyZWFkVGltZW91dCIsInRpbWVvdXQiLCJqd3Byb3h5IiwicHJveHlSZXFSZXMiLCJiaW5kIiwiaW5zdGFsbFNlcnZlckFwayIsImluc3RhbGxUaW1lb3V0IiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwicGFja2FnZUluZm9zTWFwcGVyIiwiYXBwUGF0aCIsImFwcElkIiwiaGVscGVycyIsImlzV3JpdGVhYmxlIiwibG9nIiwiaW5mbyIsImRzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImJhc2VuYW1lIiwiZnMiLCJjb3B5RmlsZSIsInBhY2thZ2VzSW5mbyIsIkIiLCJhbGwiLCJtYXAiLCJhcGtQYXRoIiwidGVzdEFwa1BhdGgiLCJzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyIsInNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyIsImlzQXBwSW5zdGFsbGVkIiwiYWRiIiwiY2hlY2tBcGtDZXJ0Iiwic2lnbkFwcCIsImFwcFN0YXRlIiwiZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUiLCJkZWJ1ZyIsIkFQUF9JTlNUQUxMX1NUQVRFIiwiT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJORVdFUl9WRVJTSU9OX0lOU1RBTExFRCIsImluY2x1ZGVzIiwiTk9UX0lOU1RBTExFRCIsInVuaW5zdGFsbEFwayIsImVyciIsIndhcm4iLCJtZXNzYWdlIiwiaW5zdGFsbCIsIm5vSW5jcmVtZW50YWwiLCJyZXBsYWNlIiwidGltZW91dENhcE5hbWUiLCJyaW1yYWYiLCJ2ZXJpZnlTZXJ2aWNlc0F2YWlsYWJpbGl0eSIsImlzUG1TZXJ2aWNlQXZhaWxhYmxlIiwicG1PdXRwdXQiLCJwbUVycm9yIiwic2hlbGwiLCJlIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVycm9yIiwibGluZSIsInNwbGl0Iiwic3RhcnRTZXNzaW9uIiwiY2FwcyIsImNsZWFudXBBdXRvbWF0aW9uTGVmdG92ZXJzIiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInNlcnZlclZlcnNpb24iLCJ1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwicmV0cmllcyIsIm1heFJldHJpZXMiLCJkZWxheUJldHdlZW5SZXRyaWVzIiwic3RhcnRJbnN0cnVtZW50YXRpb25Qcm9jZXNzIiwiY29tbWFuZCIsImVycm9yQW5kVGhyb3ciLCJkZWxheSIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwiY21kIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInB1c2giLCJfIiwiaXNCb29sZWFuIiwiaW5zdHJ1bWVudGF0aW9uUHJvY2VzcyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInRyaW0iLCJjb2RlIiwiZGVsZXRlU2Vzc2lvbiIsInN0cmljdENsZWFudXAiLCJ2YWx1ZSIsImRhdGEiLCJhY3RpdmVTZXNzaW9uSWRzIiwiaWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsdXJhbGl6ZSIsImF4aW9zIiwiZGVsZXRlIiwiZm9yY2VTdG9wIiwiaWdub3JlIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixNQUFsQixFQUEwQixZQUExQixFQUF3QyxZQUF4QyxFQUFzRCx3QkFBdEQsQ0FBcEI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxLQUE5QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLEVBQS9CO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsS0FBaEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRywrQkFBMUI7O0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUQsaUJBQWtCLE9BQXBEOztBQUNBLE1BQU1FLHNCQUFzQixHQUFJLEdBQUVELHNCQUF1QiwwQ0FBekQ7OztBQUNBLE1BQU1FLHFCQUFxQixHQUFHQyxzQkFBT0MsU0FBUCxDQUFpQixpQkFBakIsQ0FBOUI7O0FBRUEsTUFBTUMsU0FBTixTQUF3QkMseUJBQXhCLENBQWdDO0FBQ1osUUFBWkMsWUFBWSxDQUFFQyxHQUFGLEVBQU9DLE1BQVAsRUFBZUMsSUFBSSxHQUFHLElBQXRCLEVBQTRCO0FBQzVDLFFBQUksS0FBS0Msc0JBQVQsRUFBaUM7QUFDL0IsWUFBTSxJQUFJQyx5QkFBT0MsbUJBQVgsQ0FDSCxJQUFHSixNQUFPLElBQUdELEdBQUkscURBQWxCLEdBQ0EsaUVBREEsR0FFQSxnRUFISSxDQUFOO0FBSUQ7O0FBQ0Qs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OFNWaEksa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSldQcm94eSwgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIFNFUlZFUl9BUEtfUEFUSCBhcyBhcGtQYXRoLFxuICBURVNUX0FQS19QQVRIIGFzIHRlc3RBcGtQYXRoLFxuICB2ZXJzaW9uIGFzIHNlcnZlclZlcnNpb25cbn0gZnJvbSAnYXBwaXVtLXVpYXV0b21hdG9yMi1zZXJ2ZXInO1xuaW1wb3J0IHtcbiAgdXRpbCwgbG9nZ2VyLCB0ZW1wRGlyLCBmcywgdGltaW5nXG59IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBoZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmNvbnN0IFJFUURfUEFSQU1TID0gWydhZGInLCAndG1wRGlyJywgJ2hvc3QnLCAnc3lzdGVtUG9ydCcsICdkZXZpY2VQb3J0JywgJ2Rpc2FibGVXaW5kb3dBbmltYXRpb24nXTtcbmNvbnN0IFNFUlZFUl9MQVVOQ0hfVElNRU9VVCA9IDMwMDAwO1xuY29uc3QgU0VSVkVSX0lOU1RBTExfUkVUUklFUyA9IDIwO1xuY29uc3QgU0VSVklDRVNfTEFVTkNIX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IFNFUlZFUl9QQUNLQUdFX0lEID0gJ2lvLmFwcGl1bS51aWF1dG9tYXRvcjIuc2VydmVyJztcbmNvbnN0IFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQgPSBgJHtTRVJWRVJfUEFDS0FHRV9JRH0udGVzdGA7XG5jb25zdCBJTlNUUlVNRU5UQVRJT05fVEFSR0VUID0gYCR7U0VSVkVSX1RFU1RfUEFDS0FHRV9JRH0vYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyYDtcbmNvbnN0IGluc3RydW1lbnRhdGlvbkxvZ2dlciA9IGxvZ2dlci5nZXRMb2dnZXIoJ0luc3RydW1lbnRhdGlvbicpO1xuXG5jbGFzcyBVSUEyUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5kaWRJbnN0cnVtZW50YXRpb25FeGl0KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRDb250ZXh0RXJyb3IoXG4gICAgICAgIGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gVWlBdXRvbWF0b3IyIHNlcnZlciBiZWNhdXNlIGAgK1xuICAgICAgICAndGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGlzIG5vdCBydW5uaW5nIChwcm9iYWJseSBjcmFzaGVkKS4gJyArXG4gICAgICAgICdDaGVjayB0aGUgc2VydmVyIGxvZyBhbmQvb3IgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscycpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5jbGFzcyBVaUF1dG9tYXRvcjJTZXJ2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgZm9yIChsZXQgcmVxIG9mIFJFUURfUEFSQU1TKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgIXV0aWwuaGFzVmFsdWUob3B0c1tyZXFdKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wdGlvbiAnJHtyZXF9JyBpcyByZXF1aXJlZCFgKTtcbiAgICAgIH1cbiAgICAgIHRoaXNbcmVxXSA9IG9wdHNbcmVxXTtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG4gICAgY29uc3QgcHJveHlPcHRzID0ge1xuICAgICAgc2VydmVyOiB0aGlzLmhvc3QsXG4gICAgICBwb3J0OiB0aGlzLnN5c3RlbVBvcnQsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgfTtcbiAgICBpZiAob3B0cy5yZWFkVGltZW91dCAmJiBvcHRzLnJlYWRUaW1lb3V0ID4gMCkge1xuICAgICAgcHJveHlPcHRzLnRpbWVvdXQgPSBvcHRzLnJlYWRUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgVUlBMlByb3h5KHByb3h5T3B0cyk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuandwcm94eS5wcm94eVJlcVJlcy5iaW5kKHRoaXMuandwcm94eSk7XG4gICAgdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyB0aGUgYXBrcyBvbiB0byB0aGUgZGV2aWNlIG9yIGVtdWxhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5zdGFsbFRpbWVvdXQgLSBJbnN0YWxsYXRpb24gdGltZW91dFxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFNlcnZlckFwayAoaW5zdGFsbFRpbWVvdXQgPSBTRVJWRVJfSU5TVEFMTF9SRVRSSUVTICogMTAwMCkge1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBjb25zdCBwYWNrYWdlSW5mb3NNYXBwZXIgPSBhc3luYyAoe2FwcFBhdGgsIGFwcElkfSkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGhlbHBlcnMuaXNXcml0ZWFibGUoYXBwUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHsgYXBwUGF0aCwgYXBwSWQgfTtcbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oYFNlcnZlciBwYWNrYWdlIGF0ICcke2FwcFBhdGh9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgICAgYFdpbGwgY29weSBpdCBpbnRvIHRoZSB0ZW1wb3JhcnkgbG9jYXRpb24gYXQgJyR7dG1wUm9vdH0nIGFzIGEgd29ya2Fyb3VuZC4gYCArXG4gICAgICAgIGBDb25zaWRlciBtYWtpbmcgdGhpcyBmaWxlIHdyaXRlYWJsZSBtYW51YWxseSBpbiBvcmRlciB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBzZXNzaW9uIHN0YXJ0dXAuYCk7XG4gICAgICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKHRtcFJvb3QsIHBhdGguYmFzZW5hbWUoYXBwUGF0aCkpO1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoYXBwUGF0aCwgZHN0UGF0aCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcHBQYXRoOiBkc3RQYXRoLFxuICAgICAgICBhcHBJZCxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWNrYWdlc0luZm8gPSBhd2FpdCBCLmFsbChCLm1hcChbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBQYXRoOiBhcGtQYXRoLFxuICAgICAgICAgIGFwcElkOiBTRVJWRVJfUEFDS0FHRV9JRCxcbiAgICAgICAgfSwge1xuICAgICAgICAgIGFwcFBhdGg6IHRlc3RBcGtQYXRoLFxuICAgICAgICAgIGFwcElkOiBTRVJWRVJfVEVTVF9QQUNLQUdFX0lELFxuICAgICAgICB9LFxuICAgICAgXSwgcGFja2FnZUluZm9zTWFwcGVyKSk7XG5cbiAgICAgIGxldCBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IGZhbHNlO1xuICAgICAgbGV0IHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCB7YXBwSWQsIGFwcFBhdGh9IG9mIHBhY2thZ2VzSW5mbykge1xuICAgICAgICBpZiAoYXBwSWQgPT09IFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQpIHtcbiAgICAgICAgICBjb25zdCBpc0FwcEluc3RhbGxlZCA9IGF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcblxuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IGluIGdldHRpbmcgdGhlIHN0YXRlIGZvciB0ZXN0IHNlcnZlcixcbiAgICAgICAgICAvLyBzaW5jZSBpdCBkb2VzIG5vdCBjb250YWluIHZlcnNpb24gaW5mb1xuICAgICAgICAgIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcFBhdGgsIGFwcElkKSkge1xuICAgICAgICAgICAgYXdhaXQgaGVscGVycy5zaWduQXBwKHRoaXMuYWRiLCBhcHBQYXRoKTtcbiAgICAgICAgICAgIHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgfHwgaXNBcHBJbnN0YWxsZWQ7XG4gICAgICAgICAgICBzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXNBcHBJbnN0YWxsZWQpIHtcbiAgICAgICAgICAgIHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZShhcHBQYXRoLCBhcHBJZCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgJHthcHBJZH0gaW5zdGFsbGF0aW9uIHN0YXRlOiAke2FwcFN0YXRlfWApO1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcFBhdGgsIGFwcElkKSkge1xuICAgICAgICAgIHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgfHwgW1xuICAgICAgICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuT0xERVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICAgICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5ORVdFUl9WRVJTSU9OX0lOU1RBTExFRCxcbiAgICAgICAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBoZWxwZXJzLnNpZ25BcHAodGhpcy5hZGIsIGFwcFBhdGgpO1xuICAgICAgICAgIHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgfHwgIVtcbiAgICAgICAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRUQsXG4gICAgICAgICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzID0gc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IFtcbiAgICAgICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVELFxuICAgICAgICBdLmluY2x1ZGVzKGFwcFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGBTZXJ2ZXIgcGFja2FnZXMgYXJlICR7c2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzID8gJycgOiAnbm90ICd9Z29pbmcgdG8gYmUgKHJlKWluc3RhbGxlZGApO1xuICAgICAgaWYgKHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyAmJiBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcykge1xuICAgICAgICBsb2cuaW5mbygnRnVsbCBwYWNrYWdlcyByZWluc3RhbGwgaXMgZ29pbmcgdG8gYmUgcGVyZm9ybWVkJyk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHthcHBJZCwgYXBwUGF0aH0gb2YgcGFja2FnZXNJbmZvKSB7XG4gICAgICAgIGlmIChzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsoYXBwSWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgbG9nLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHthcHBJZH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbChhcHBQYXRoLCB7XG4gICAgICAgICAgICBub0luY3JlbWVudGFsOiB0cnVlLFxuICAgICAgICAgICAgcmVwbGFjZTogdHJ1ZSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IGluc3RhbGxUaW1lb3V0LFxuICAgICAgICAgICAgdGltZW91dENhcE5hbWU6ICd1aWF1dG9tYXRvcjJTZXJ2ZXJJbnN0YWxsVGltZW91dCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5yaW1yYWYodG1wUm9vdCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy52ZXJpZnlTZXJ2aWNlc0F2YWlsYWJpbGl0eSgpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U2VydmljZXNBdmFpbGFiaWxpdHkgKCkge1xuICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke1NFUlZJQ0VTX0xBVU5DSF9USU1FT1VUfW1zIGZvciBzZXJ2aWNlcyB0byBiZSBhdmFpbGFibGVgKTtcbiAgICBsZXQgaXNQbVNlcnZpY2VBdmFpbGFibGUgPSBmYWxzZTtcbiAgICBsZXQgcG1PdXRwdXQgPSAnJztcbiAgICBsZXQgcG1FcnJvciA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIWlzUG1TZXJ2aWNlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgcG1FcnJvciA9IG51bGw7XG4gICAgICAgICAgcG1PdXRwdXQgPSAnJztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcG1PdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3BtJywgJ2xpc3QnLCAnaW5zdHJ1bWVudGF0aW9uJ10pO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHBtRXJyb3IgPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG1PdXRwdXQuaW5jbHVkZXMoJ0NvdWxkIG5vdCBhY2Nlc3MgdGhlIFBhY2thZ2UgTWFuYWdlcicpKSB7XG4gICAgICAgICAgICBwbUVycm9yID0gbmV3IEVycm9yKGBQcm9ibGVtIHJ1bm5pbmcgUGFja2FnZSBNYW5hZ2VyOiAke3BtT3V0cHV0fWApO1xuICAgICAgICAgICAgcG1PdXRwdXQgPSAnJzsgLy8gcmVtb3ZlIG91dHB1dCwgc28gaXQgaXMgbm90IHByaW50ZWQgYmVsb3dcbiAgICAgICAgICB9IGVsc2UgaWYgKHBtT3V0cHV0LmluY2x1ZGVzKElOU1RSVU1FTlRBVElPTl9UQVJHRVQpKSB7XG4gICAgICAgICAgICBwbU91dHB1dCA9ICcnOyAvLyByZW1vdmUgb3V0cHV0LCBzbyBpdCBpcyBub3QgcHJpbnRlZCBiZWxvd1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBJbnN0cnVtZW50YXRpb24gdGFyZ2V0ICcke0lOU1RSVU1FTlRBVElPTl9UQVJHRVR9JyBpcyBhdmFpbGFibGVgKTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzXG4gICAgICAgICAgICBpc1BtU2VydmljZUF2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICghcG1FcnJvcikge1xuICAgICAgICAgICAgcG1FcnJvciA9IG5ldyBFcnJvcignVGhlIGluc3RydW1lbnRhdGlvbiB0YXJnZXQgaXMgbm90IGxpc3RlZCBieSBQYWNrYWdlIE1hbmFnZXInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUG1TZXJ2aWNlQXZhaWxhYmxlO1xuICAgICAgfSwge1xuICAgICAgICB3YWl0TXM6IFNFUlZJQ0VTX0xBVU5DSF9USU1FT1VULFxuICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3IoYFVuYWJsZSB0byBmaW5kIGluc3RydW1lbnRhdGlvbiB0YXJnZXQgJyR7SU5TVFJVTUVOVEFUSU9OX1RBUkdFVH0nOiAkeyhwbUVycm9yIHx8IHt9KS5tZXNzYWdlfWApO1xuICAgICAgaWYgKHBtT3V0cHV0KSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnQXZhaWxhYmxlIHRhcmdldHM6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBwbU91dHB1dC5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICBsb2cuZGVidWcoYCAgICAke2xpbmUucmVwbGFjZSgnaW5zdHJ1bWVudGF0aW9uOicsICcnKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2Vzc2lvbiAoY2Fwcykge1xuICAgIGF3YWl0IHRoaXMuY2xlYW51cEF1dG9tYXRpb25MZWZ0b3ZlcnMoKTtcbiAgICBpZiAoY2Fwcy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICBsb2cuaW5mbyhgJ3NraXBTZXJ2ZXJJbnN0YWxsYXRpb24nIGlzIHNldC4gQXR0ZW1wdGluZyB0byB1c2UgVUlBdXRvbWF0b3IyIHNlcnZlciBmcm9tIHRoZSBkZXZpY2VgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgJHtzZXJ2ZXJWZXJzaW9ufWApO1xuICAgICAgbG9nLmluZm8oYFVzaW5nIFVJQXV0b21hdG9yMiBzZXJ2ZXIgZnJvbSAnJHthcGtQYXRofScgYW5kIHRlc3QgZnJvbSAnJHt0ZXN0QXBrUGF0aH0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dCA9IGNhcHMudWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCB8fCBTRVJWRVJfTEFVTkNIX1RJTUVPVVQ7XG4gICAgY29uc3QgdGltZXIgPSBuZXcgdGltaW5nLlRpbWVyKCkuc3RhcnQoKTtcbiAgICBsZXQgcmV0cmllcyA9IDA7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IDI7XG4gICAgY29uc3QgZGVsYXlCZXR3ZWVuUmV0cmllcyA9IDMwMDA7XG4gICAgd2hpbGUgKHJldHJpZXMgPCBtYXhSZXRyaWVzKSB7XG4gICAgICBsb2cuaW5mbyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXR9bXMgZm9yIFVpQXV0b21hdG9yMiB0byBiZSBvbmxpbmUuLi5gKTtcbiAgICAgIHRoaXMuandwcm94eS5kaWRJbnN0cnVtZW50YXRpb25FeGl0ID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0SW5zdHJ1bWVudGF0aW9uUHJvY2VzcygpO1xuICAgICAgaWYgKCF0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIHNob3J0IGNpcmN1aXQgdG8gcmV0cnkgb3IgZmFpbCBmYXN0XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICAgICAgICBpbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoaW4gJHt0aW1lb3V0fW1zIHRpbWVvdXQuIGBcbiAgICAgICAgICAgICsgJ01ha2Ugc3VyZSB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCBkb2VzIG5vdCBjcmFzaCBhbmQgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQuICdcbiAgICAgICAgICAgICsgYFlvdSBjb3VsZCBhbHNvIHRyeSB0byBpbmNyZWFzZSB0aGUgdmFsdWUgb2YgJ3VpYXV0b21hdG9yMlNlcnZlckxhdW5jaFRpbWVvdXQnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0cmllcysrO1xuICAgICAgaWYgKHJldHJpZXMgPj0gbWF4UmV0cmllcykge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygnVGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGNhbm5vdCBiZSBpbml0aWFsaXplZC4gJ1xuICAgICAgICAgICsgJ01ha2Ugc3VyZSB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCBkb2VzIG5vdCBjcmFzaCBhbmQgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQuJyk7XG4gICAgICB9XG4gICAgICBsb2cud2FybihgVGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGhhcyBiZWVuIHVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkLiBgXG4gICAgICAgICsgYFJldHJ5aW5nIFVpQXV0b21hdG9yMiBzdGFydHVwICgjJHtyZXRyaWVzfSBvZiAke21heFJldHJpZXMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHRoaXMuY2xlYW51cEF1dG9tYXRpb25MZWZ0b3ZlcnModHJ1ZSk7XG4gICAgICBhd2FpdCBCLmRlbGF5KGRlbGF5QmV0d2VlblJldHJpZXMpO1xuICAgIH1cblxuICAgIGxvZy5kZWJ1ZyhgVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyB0b29rIGBcbiAgICAgICsgYCR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW2NhcHNdLFxuICAgICAgICBhbHdheXNNYXRjaDoge30sXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydEluc3RydW1lbnRhdGlvblByb2Nlc3MgKCkge1xuICAgIGNvbnN0IGNtZCA9IFsnYW0nLCAnaW5zdHJ1bWVudCcsICctdyddO1xuICAgIGlmICh0aGlzLmRpc2FibGVXaW5kb3dBbmltYXRpb24pIHtcbiAgICAgIGNtZC5wdXNoKCctLW5vLXdpbmRvdy1hbmltYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKF8uaXNCb29sZWFuKHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpKSB7XG4gICAgICBjbWQucHVzaCgnLWUnLCAnRElTQUJMRV9TVVBQUkVTU19BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTJywgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSk7XG4gICAgfVxuICAgIC8vIERpc2FibGUgR29vZ2xlIGFuYWx5dGljcyB0byBwcmV2ZW50IHBvc3NpYmxlIGZhdGFsIGV4Y2VwdGlvblxuICAgIGNtZC5wdXNoKCctZScsICdkaXNhYmxlQW5hbHl0aWNzJywgdHJ1ZSk7XG4gICAgY21kLnB1c2goSU5TVFJVTUVOVEFUSU9OX1RBUkdFVCk7XG4gICAgY29uc3QgaW5zdHJ1bWVudGF0aW9uUHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoWydzaGVsbCcsIC4uLmNtZF0pO1xuICAgIGluc3RydW1lbnRhdGlvblByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gXy50cmltKHN0ZG91dCB8fCBzdGRlcnIpO1xuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBpbnN0cnVtZW50YXRpb25Mb2dnZXIuZGVidWcob3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0cnVtZW50YXRpb25Qcm9jZXNzLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgIGluc3RydW1lbnRhdGlvbkxvZ2dlci5kZWJ1ZyhgVGhlIHByb2Nlc3MgaGFzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApO1xuICAgICAgdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQgPSB0cnVlO1xuICAgIH0pO1xuICAgIGF3YWl0IGluc3RydW1lbnRhdGlvblByb2Nlc3Muc3RhcnQoMCk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBsb2cuZGVidWcoJ0RlbGV0aW5nIFVpQXV0b21hdG9yMiBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBEaWQgbm90IGdldCBjb25maXJtYXRpb24gVWlBdXRvbWF0b3IyIGRlbGV0ZVNlc3Npb24gd29ya2VkOyBgICtcbiAgICAgICAgICBgRXJyb3Igd2FzOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhbnVwQXV0b21hdGlvbkxlZnRvdmVycyAoc3RyaWN0Q2xlYW51cCA9IGZhbHNlKSB7XG4gICAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nICR7c3RyaWN0Q2xlYW51cCA/ICdzdHJpY3QnIDogJ3NoYWxsb3cnfSBjbGVhbnVwIG9mIGF1dG9tYXRpb24gbGVmdG92ZXJzYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge3ZhbHVlfSA9IChhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybDogYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3dkL2h1Yi9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoe2lkfSkgPT4gaWQpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZSBmb2xsb3dpbmcgb2Jzb2xldGUgc2Vzc2lvbnMgYXJlIHN0aWxsIHJ1bm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkoYWN0aXZlU2Vzc2lvbklkcyl9YCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHt1dGlsLnBsdXJhbGl6ZSgnb2Jzb2xldGUgc2Vzc2lvbicsIGFjdGl2ZVNlc3Npb25JZHMubGVuZ3RoLCB0cnVlKX1gKTtcbiAgICAgICAgYXdhaXQgQi5hbGwoYWN0aXZlU2Vzc2lvbklkc1xuICAgICAgICAgIC5tYXAoKGlkKSA9PiBheGlvcy5kZWxldGUoYGh0dHA6Ly8ke3RoaXMuaG9zdH06JHt0aGlzLnN5c3RlbVBvcnR9L3dkL2h1Yi9zZXNzaW9uLyR7aWR9YCkpXG4gICAgICAgICk7XG4gICAgICAgIC8vIExldCBhbGwgc2Vzc2lvbnMgdG8gYmUgcHJvcGVybHkgdGVybWluYXRlZCBiZWZvcmUgY29udGludWluZ1xuICAgICAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKCdObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoYE5vIG9ic29sZXRlIHNlc3Npb25zIGhhdmUgYmVlbiBkZXRlY3RlZCAoJHtlLm1lc3NhZ2V9KWApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCk7XG4gICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgIGlmICghc3RyaWN0Q2xlYW51cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTA3NDlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbFByb2Nlc3Nlc0J5TmFtZSgndWlhdXRvbWF0b3InKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG4gIH1cbn1cblxuZXhwb3J0IHsgVWlBdXRvbWF0b3IyU2VydmVyLCBJTlNUUlVNRU5UQVRJT05fVEFSR0VULCBTRVJWRVJfUEFDS0FHRV9JRCwgU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCB9O1xuZXhwb3J0IGRlZmF1bHQgVWlBdXRvbWF0b3IyU2VydmVyO1xuIl0sImZpbGUiOiJsaWIvdWlhdXRvbWF0b3IyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
391
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91aWF1dG9tYXRvcjIuanMiXSwibmFtZXMiOlsiUkVRRF9QQVJBTVMiLCJTRVJWRVJfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfSU5TVEFMTF9SRVRSSUVTIiwiU0VSVklDRVNfTEFVTkNIX1RJTUVPVVQiLCJTRVJWRVJfUEFDS0FHRV9JRCIsIlNFUlZFUl9URVNUX1BBQ0tBR0VfSUQiLCJJTlNUUlVNRU5UQVRJT05fVEFSR0VUIiwiaW5zdHJ1bWVudGF0aW9uTG9nZ2VyIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiVUlBMlByb3h5IiwiSldQcm94eSIsInByb3h5Q29tbWFuZCIsInVybCIsIm1ldGhvZCIsImJvZHkiLCJkaWRJbnN0cnVtZW50YXRpb25FeGl0IiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIlVpQXV0b21hdG9yMlNlcnZlciIsImNvbnN0cnVjdG9yIiwib3B0cyIsInJlcSIsInV0aWwiLCJoYXNWYWx1ZSIsIkVycm9yIiwiZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UiLCJwcm94eU9wdHMiLCJzZXJ2ZXIiLCJob3N0IiwicG9ydCIsInN5c3RlbVBvcnQiLCJrZWVwQWxpdmUiLCJyZWFkVGltZW91dCIsInRpbWVvdXQiLCJqd3Byb3h5IiwicHJveHlSZXFSZXMiLCJiaW5kIiwiY29tbWFuZCIsImluc3RhbGxTZXJ2ZXJBcGsiLCJpbnN0YWxsVGltZW91dCIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInBhY2thZ2VJbmZvc01hcHBlciIsImFwcFBhdGgiLCJhcHBJZCIsImhlbHBlcnMiLCJpc1dyaXRlYWJsZSIsImxvZyIsImluZm8iLCJkc3RQYXRoIiwicGF0aCIsInJlc29sdmUiLCJiYXNlbmFtZSIsImZzIiwiY29weUZpbGUiLCJwYWNrYWdlc0luZm8iLCJCIiwiYWxsIiwibWFwIiwiYXBrUGF0aCIsInRlc3RBcGtQYXRoIiwic2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMiLCJzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMiLCJpc0FwcEluc3RhbGxlZCIsImFkYiIsImNoZWNrQXBrQ2VydCIsInNpZ25BcHAiLCJhcHBTdGF0ZSIsImdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlIiwiZGVidWciLCJBUFBfSU5TVEFMTF9TVEFURSIsIk9MREVSX1ZFUlNJT05fSU5TVEFMTEVEIiwiTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQiLCJpbmNsdWRlcyIsIk5PVF9JTlNUQUxMRUQiLCJ1bmluc3RhbGxBcGsiLCJlcnIiLCJ3YXJuIiwibWVzc2FnZSIsImluc3RhbGwiLCJub0luY3JlbWVudGFsIiwicmVwbGFjZSIsInRpbWVvdXRDYXBOYW1lIiwicmltcmFmIiwidmVyaWZ5U2VydmljZXNBdmFpbGFiaWxpdHkiLCJpc1BtU2VydmljZUF2YWlsYWJsZSIsInBtT3V0cHV0IiwicG1FcnJvciIsInNoZWxsIiwiZSIsIndhaXRNcyIsImludGVydmFsTXMiLCJlcnJvciIsImxpbmUiLCJzcGxpdCIsInN0YXJ0U2Vzc2lvbiIsImNhcHMiLCJjbGVhbnVwQXV0b21hdGlvbkxlZnRvdmVycyIsInNraXBTZXJ2ZXJJbnN0YWxsYXRpb24iLCJzZXJ2ZXJWZXJzaW9uIiwidWlhdXRvbWF0b3IyU2VydmVyTGF1bmNoVGltZW91dCIsInRpbWVyIiwidGltaW5nIiwiVGltZXIiLCJzdGFydCIsInJldHJpZXMiLCJtYXhSZXRyaWVzIiwiZGVsYXlCZXR3ZWVuUmV0cmllcyIsInN0YXJ0SW5zdHJ1bWVudGF0aW9uUHJvY2VzcyIsImVycm9yQW5kVGhyb3ciLCJkZWxheSIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJ0b0ZpeGVkIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwiY21kIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInB1c2giLCJfIiwiaXNCb29sZWFuIiwiaW5zdHJ1bWVudGF0aW9uUHJvY2VzcyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInRyaW0iLCJjb2RlIiwiZGVsZXRlU2Vzc2lvbiIsInN0cmljdENsZWFudXAiLCJ2YWx1ZSIsImRhdGEiLCJhY3RpdmVTZXNzaW9uSWRzIiwiaWQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsdXJhbGl6ZSIsImF4aW9zIiwiZGVsZXRlIiwiZm9yY2VTdG9wIiwiaWdub3JlIiwia2lsbFByb2Nlc3Nlc0J5TmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxXQUFXLEdBQUcsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixNQUFsQixFQUEwQixZQUExQixFQUF3QyxZQUF4QyxFQUFzRCx3QkFBdEQsQ0FBcEI7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRyxLQUE5QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLEVBQS9CO0FBQ0EsTUFBTUMsdUJBQXVCLEdBQUcsS0FBaEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRywrQkFBMUI7O0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUQsaUJBQWtCLE9BQXBEOztBQUNBLE1BQU1FLHNCQUFzQixHQUFJLEdBQUVELHNCQUF1QiwwQ0FBekQ7OztBQUNBLE1BQU1FLHFCQUFxQixHQUFHQyxzQkFBT0MsU0FBUCxDQUFpQixpQkFBakIsQ0FBOUI7O0FBRUEsTUFBTUMsU0FBTixTQUF3QkMseUJBQXhCLENBQWdDO0FBQ1osUUFBWkMsWUFBWSxDQUFFQyxHQUFGLEVBQU9DLE1BQVAsRUFBZUMsSUFBSSxHQUFHLElBQXRCLEVBQTRCO0FBQzVDLFFBQUksS0FBS0Msc0JBQVQsRUFBaUM7QUFDL0IsWUFBTSxJQUFJQyx5QkFBT0MsbUJBQVgsQ0FDSCxJQUFHSixNQUFPLElBQUdELEdBQUkscURBQWxCLEdBQ0EsaUVBREEsR0FFQSxnRUFISSxDQUFOO0FBSUQ7O0FBQ0Qs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QVNrRixtQkFBVCxDQUE2QixhQUE3QixDQUFOO0FBQ0QsS0FGRCxDQUVFLE9BQU9ELE1BQVAsRUFBZSxDQUFFO0FBQ3BCOztBQTNTc0I7OztlQStTVmhJLGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQge1xuICBTRVJWRVJfQVBLX1BBVEggYXMgYXBrUGF0aCxcbiAgVEVTVF9BUEtfUEFUSCBhcyB0ZXN0QXBrUGF0aCxcbiAgdmVyc2lvbiBhcyBzZXJ2ZXJWZXJzaW9uXG59IGZyb20gJ2FwcGl1bS11aWF1dG9tYXRvcjItc2VydmVyJztcbmltcG9ydCB7XG4gIHV0aWwsIGxvZ2dlciwgdGVtcERpciwgZnMsIHRpbWluZ1xufSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5jb25zdCBSRVFEX1BBUkFNUyA9IFsnYWRiJywgJ3RtcERpcicsICdob3N0JywgJ3N5c3RlbVBvcnQnLCAnZGV2aWNlUG9ydCcsICdkaXNhYmxlV2luZG93QW5pbWF0aW9uJ107XG5jb25zdCBTRVJWRVJfTEFVTkNIX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IFNFUlZFUl9JTlNUQUxMX1JFVFJJRVMgPSAyMDtcbmNvbnN0IFNFUlZJQ0VTX0xBVU5DSF9USU1FT1VUID0gMzAwMDA7XG5jb25zdCBTRVJWRVJfUEFDS0FHRV9JRCA9ICdpby5hcHBpdW0udWlhdXRvbWF0b3IyLnNlcnZlcic7XG5jb25zdCBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEID0gYCR7U0VSVkVSX1BBQ0tBR0VfSUR9LnRlc3RgO1xuY29uc3QgSU5TVFJVTUVOVEFUSU9OX1RBUkdFVCA9IGAke1NFUlZFUl9URVNUX1BBQ0tBR0VfSUR9L2FuZHJvaWR4LnRlc3QucnVubmVyLkFuZHJvaWRKVW5pdFJ1bm5lcmA7XG5jb25zdCBpbnN0cnVtZW50YXRpb25Mb2dnZXIgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdJbnN0cnVtZW50YXRpb24nKTtcblxuY2xhc3MgVUlBMlByb3h5IGV4dGVuZHMgSldQcm94eSB7XG4gIGFzeW5jIHByb3h5Q29tbWFuZCAodXJsLCBtZXRob2QsIGJvZHkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKFxuICAgICAgICBgJyR7bWV0aG9kfSAke3VybH0nIGNhbm5vdCBiZSBwcm94aWVkIHRvIFVpQXV0b21hdG9yMiBzZXJ2ZXIgYmVjYXVzZSBgICtcbiAgICAgICAgJ3RoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBpcyBub3QgcnVubmluZyAocHJvYmFibHkgY3Jhc2hlZCkuICcgK1xuICAgICAgICAnQ2hlY2sgdGhlIHNlcnZlciBsb2cgYW5kL29yIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLnByb3h5Q29tbWFuZCh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cbn1cblxuY2xhc3MgVWlBdXRvbWF0b3IyU2VydmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFEX1BBUkFNUykge1xuICAgICAgaWYgKCFvcHRzIHx8ICF1dGlsLmhhc1ZhbHVlKG9wdHNbcmVxXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcHRpb24gJyR7cmVxfScgaXMgcmVxdWlyZWQhYCk7XG4gICAgICB9XG4gICAgICB0aGlzW3JlcV0gPSBvcHRzW3JlcV07XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UgPSBvcHRzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlO1xuICAgIGNvbnN0IHByb3h5T3B0cyA9IHtcbiAgICAgIHNlcnZlcjogdGhpcy5ob3N0LFxuICAgICAgcG9ydDogdGhpcy5zeXN0ZW1Qb3J0LFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH07XG4gICAgaWYgKG9wdHMucmVhZFRpbWVvdXQgJiYgb3B0cy5yZWFkVGltZW91dCA+IDApIHtcbiAgICAgIHByb3h5T3B0cy50aW1lb3V0ID0gb3B0cy5yZWFkVGltZW91dDtcbiAgICB9XG4gICAgdGhpcy5qd3Byb3h5ID0gbmV3IFVJQTJQcm94eShwcm94eU9wdHMpO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5qd3Byb3h5LmNvbW1hbmQuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5kaWRJbnN0cnVtZW50YXRpb25FeGl0ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgdGhlIGFwa3Mgb24gdG8gdGhlIGRldmljZSBvciBlbXVsYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluc3RhbGxUaW1lb3V0IC0gSW5zdGFsbGF0aW9uIHRpbWVvdXRcbiAgICovXG4gIGFzeW5jIGluc3RhbGxTZXJ2ZXJBcGsgKGluc3RhbGxUaW1lb3V0ID0gU0VSVkVSX0lOU1RBTExfUkVUUklFUyAqIDEwMDApIHtcbiAgICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgY29uc3QgcGFja2FnZUluZm9zTWFwcGVyID0gYXN5bmMgKHthcHBQYXRoLCBhcHBJZH0pID0+IHtcbiAgICAgIGlmIChhd2FpdCBoZWxwZXJzLmlzV3JpdGVhYmxlKGFwcFBhdGgpKSB7XG4gICAgICAgIHJldHVybiB7IGFwcFBhdGgsIGFwcElkIH07XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKGBTZXJ2ZXIgcGFja2FnZSBhdCAnJHthcHBQYXRofScgaXMgbm90IHdyaXRlYWJsZS4gYCArXG4gICAgICAgIGBXaWxsIGNvcHkgaXQgaW50byB0aGUgdGVtcG9yYXJ5IGxvY2F0aW9uIGF0ICcke3RtcFJvb3R9JyBhcyBhIHdvcmthcm91bmQuIGAgK1xuICAgICAgICBgQ29uc2lkZXIgbWFraW5nIHRoaXMgZmlsZSB3cml0ZWFibGUgbWFudWFsbHkgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc2Vzc2lvbiBzdGFydHVwLmApO1xuICAgICAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZSh0bXBSb290LCBwYXRoLmJhc2VuYW1lKGFwcFBhdGgpKTtcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKGFwcFBhdGgsIGRzdFBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXBwUGF0aDogZHN0UGF0aCxcbiAgICAgICAgYXBwSWQsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFja2FnZXNJbmZvID0gYXdhaXQgQi5hbGwoQi5tYXAoW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwUGF0aDogYXBrUGF0aCxcbiAgICAgICAgICBhcHBJZDogU0VSVkVSX1BBQ0tBR0VfSUQsXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBhcHBQYXRoOiB0ZXN0QXBrUGF0aCxcbiAgICAgICAgICBhcHBJZDogU0VSVkVSX1RFU1RfUEFDS0FHRV9JRCxcbiAgICAgICAgfSxcbiAgICAgIF0sIHBhY2thZ2VJbmZvc01hcHBlcikpO1xuXG4gICAgICBsZXQgc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMgPSBmYWxzZTtcbiAgICAgIGxldCBzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qge2FwcElkLCBhcHBQYXRofSBvZiBwYWNrYWdlc0luZm8pIHtcbiAgICAgICAgaWYgKGFwcElkID09PSBTRVJWRVJfVEVTVF9QQUNLQUdFX0lEKSB7XG4gICAgICAgICAgY29uc3QgaXNBcHBJbnN0YWxsZWQgPSBhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCk7XG5cbiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBwb2ludCBpbiBnZXR0aW5nIHRoZSBzdGF0ZSBmb3IgdGVzdCBzZXJ2ZXIsXG4gICAgICAgICAgLy8gc2luY2UgaXQgZG9lcyBub3QgY29udGFpbiB2ZXJzaW9uIGluZm9cbiAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBQYXRoLCBhcHBJZCkpIHtcbiAgICAgICAgICAgIGF3YWl0IGhlbHBlcnMuc2lnbkFwcCh0aGlzLmFkYiwgYXBwUGF0aCk7XG4gICAgICAgICAgICBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IGlzQXBwSW5zdGFsbGVkO1xuICAgICAgICAgICAgc2hvdWxkSW5zdGFsbFNlcnZlclBhY2thZ2VzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWlzQXBwSW5zdGFsbGVkKSB7XG4gICAgICAgICAgICBzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5hZGIuZ2V0QXBwbGljYXRpb25JbnN0YWxsU3RhdGUoYXBwUGF0aCwgYXBwSWQpO1xuICAgICAgICBsb2cuZGVidWcoYCR7YXBwSWR9IGluc3RhbGxhdGlvbiBzdGF0ZTogJHthcHBTdGF0ZX1gKTtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmNoZWNrQXBrQ2VydChhcHBQYXRoLCBhcHBJZCkpIHtcbiAgICAgICAgICBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8IFtcbiAgICAgICAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk9MREVSX1ZFUlNJT05fSU5TVEFMTEVELFxuICAgICAgICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTkVXRVJfVkVSU0lPTl9JTlNUQUxMRUQsXG4gICAgICAgICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgaGVscGVycy5zaWduQXBwKHRoaXMuYWRiLCBhcHBQYXRoKTtcbiAgICAgICAgICBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZFVuaW5zdGFsbFNlcnZlclBhY2thZ2VzIHx8ICFbXG4gICAgICAgICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVELFxuICAgICAgICAgIF0uaW5jbHVkZXMoYXBwU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA9IHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyB8fCBzaG91bGRVbmluc3RhbGxTZXJ2ZXJQYWNrYWdlcyB8fCBbXG4gICAgICAgICAgdGhpcy5hZGIuQVBQX0lOU1RBTExfU1RBVEUuTk9UX0lOU1RBTExFRCxcbiAgICAgICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgU2VydmVyIHBhY2thZ2VzIGFyZSAke3Nob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcyA/ICcnIDogJ25vdCAnfWdvaW5nIHRvIGJlIChyZSlpbnN0YWxsZWRgKTtcbiAgICAgIGlmIChzaG91bGRJbnN0YWxsU2VydmVyUGFja2FnZXMgJiYgc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMpIHtcbiAgICAgICAgbG9nLmluZm8oJ0Z1bGwgcGFja2FnZXMgcmVpbnN0YWxsIGlzIGdvaW5nIHRvIGJlIHBlcmZvcm1lZCcpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB7YXBwSWQsIGFwcFBhdGh9IG9mIHBhY2thZ2VzSW5mbykge1xuICAgICAgICBpZiAoc2hvdWxkVW5pbnN0YWxsU2VydmVyUGFja2FnZXMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKGFwcElkKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBFcnJvciB1bmluc3RhbGxpbmcgJyR7YXBwSWR9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZEluc3RhbGxTZXJ2ZXJQYWNrYWdlcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwoYXBwUGF0aCwge1xuICAgICAgICAgICAgbm9JbmNyZW1lbnRhbDogdHJ1ZSxcbiAgICAgICAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICAgICAgICB0aW1lb3V0OiBpbnN0YWxsVGltZW91dCxcbiAgICAgICAgICAgIHRpbWVvdXRDYXBOYW1lOiAndWlhdXRvbWF0b3IyU2VydmVySW5zdGFsbFRpbWVvdXQnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudmVyaWZ5U2VydmljZXNBdmFpbGFiaWxpdHkoKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVNlcnZpY2VzQXZhaWxhYmlsaXR5ICgpIHtcbiAgICBsb2cuZGVidWcoYFdhaXRpbmcgdXAgdG8gJHtTRVJWSUNFU19MQVVOQ0hfVElNRU9VVH1tcyBmb3Igc2VydmljZXMgdG8gYmUgYXZhaWxhYmxlYCk7XG4gICAgbGV0IGlzUG1TZXJ2aWNlQXZhaWxhYmxlID0gZmFsc2U7XG4gICAgbGV0IHBtT3V0cHV0ID0gJyc7XG4gICAgbGV0IHBtRXJyb3IgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFpc1BtU2VydmljZUF2YWlsYWJsZSkge1xuICAgICAgICAgIHBtRXJyb3IgPSBudWxsO1xuICAgICAgICAgIHBtT3V0cHV0ID0gJyc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBtT3V0cHV0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ2luc3RydW1lbnRhdGlvbiddKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBwbUVycm9yID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBtT3V0cHV0LmluY2x1ZGVzKCdDb3VsZCBub3QgYWNjZXNzIHRoZSBQYWNrYWdlIE1hbmFnZXInKSkge1xuICAgICAgICAgICAgcG1FcnJvciA9IG5ldyBFcnJvcihgUHJvYmxlbSBydW5uaW5nIFBhY2thZ2UgTWFuYWdlcjogJHtwbU91dHB1dH1gKTtcbiAgICAgICAgICAgIHBtT3V0cHV0ID0gJyc7IC8vIHJlbW92ZSBvdXRwdXQsIHNvIGl0IGlzIG5vdCBwcmludGVkIGJlbG93XG4gICAgICAgICAgfSBlbHNlIGlmIChwbU91dHB1dC5pbmNsdWRlcyhJTlNUUlVNRU5UQVRJT05fVEFSR0VUKSkge1xuICAgICAgICAgICAgcG1PdXRwdXQgPSAnJzsgLy8gcmVtb3ZlIG91dHB1dCwgc28gaXQgaXMgbm90IHByaW50ZWQgYmVsb3dcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgSW5zdHJ1bWVudGF0aW9uIHRhcmdldCAnJHtJTlNUUlVNRU5UQVRJT05fVEFSR0VUfScgaXMgYXZhaWxhYmxlYCk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlc1xuICAgICAgICAgICAgaXNQbVNlcnZpY2VBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXBtRXJyb3IpIHtcbiAgICAgICAgICAgIHBtRXJyb3IgPSBuZXcgRXJyb3IoJ1RoZSBpbnN0cnVtZW50YXRpb24gdGFyZ2V0IGlzIG5vdCBsaXN0ZWQgYnkgUGFja2FnZSBNYW5hZ2VyJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1BtU2VydmljZUF2YWlsYWJsZTtcbiAgICAgIH0sIHtcbiAgICAgICAgd2FpdE1zOiBTRVJWSUNFU19MQVVOQ0hfVElNRU9VVCxcbiAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGBVbmFibGUgdG8gZmluZCBpbnN0cnVtZW50YXRpb24gdGFyZ2V0ICcke0lOU1RSVU1FTlRBVElPTl9UQVJHRVR9JzogJHsocG1FcnJvciB8fCB7fSkubWVzc2FnZX1gKTtcbiAgICAgIGlmIChwbU91dHB1dCkge1xuICAgICAgICBsb2cuZGVidWcoJ0F2YWlsYWJsZSB0YXJnZXRzOicpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcG1PdXRwdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGAgICAgJHtsaW5lLnJlcGxhY2UoJ2luc3RydW1lbnRhdGlvbjonLCAnJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKGNhcHMpIHtcbiAgICBhd2FpdCB0aGlzLmNsZWFudXBBdXRvbWF0aW9uTGVmdG92ZXJzKCk7XG4gICAgaWYgKGNhcHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbikge1xuICAgICAgbG9nLmluZm8oYCdza2lwU2VydmVySW5zdGFsbGF0aW9uJyBpcyBzZXQuIEF0dGVtcHRpbmcgdG8gdXNlIFVJQXV0b21hdG9yMiBzZXJ2ZXIgZnJvbSB0aGUgZGV2aWNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGBTdGFydGluZyBVSUF1dG9tYXRvcjIgc2VydmVyICR7c2VydmVyVmVyc2lvbn1gKTtcbiAgICAgIGxvZy5pbmZvKGBVc2luZyBVSUF1dG9tYXRvcjIgc2VydmVyIGZyb20gJyR7YXBrUGF0aH0nIGFuZCB0ZXN0IGZyb20gJyR7dGVzdEFwa1BhdGh9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVvdXQgPSBjYXBzLnVpYXV0b21hdG9yMlNlcnZlckxhdW5jaFRpbWVvdXQgfHwgU0VSVkVSX0xBVU5DSF9USU1FT1VUO1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbGV0IHJldHJpZXMgPSAwO1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSAyO1xuICAgIGNvbnN0IGRlbGF5QmV0d2VlblJldHJpZXMgPSAzMDAwO1xuICAgIHdoaWxlIChyZXRyaWVzIDwgbWF4UmV0cmllcykge1xuICAgICAgbG9nLmluZm8oYFdhaXRpbmcgdXAgdG8gJHt0aW1lb3V0fW1zIGZvciBVaUF1dG9tYXRvcjIgdG8gYmUgb25saW5lLi4uYCk7XG4gICAgICB0aGlzLmp3cHJveHkuZGlkSW5zdHJ1bWVudGF0aW9uRXhpdCA9IGZhbHNlO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydEluc3RydW1lbnRhdGlvblByb2Nlc3MoKTtcbiAgICAgIGlmICghdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAvLyBzaG9ydCBjaXJjdWl0IHRvIHJldHJ5IG9yIGZhaWwgZmFzdFxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgd2FpdE1zOiB0aW1lb3V0LFxuICAgICAgICAgICAgaW50ZXJ2YWxNczogMTAwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aGluICR7dGltZW91dH1tcyB0aW1lb3V0LiBgXG4gICAgICAgICAgICArICdNYWtlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QgZG9lcyBub3QgY3Jhc2ggYW5kIGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0LiAnXG4gICAgICAgICAgICArIGBZb3UgY291bGQgYWxzbyB0cnkgdG8gaW5jcmVhc2UgdGhlIHZhbHVlIG9mICd1aWF1dG9tYXRvcjJTZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5qd3Byb3h5LmRpZEluc3RydW1lbnRhdGlvbkV4aXQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHJpZXMrKztcbiAgICAgIGlmIChyZXRyaWVzID49IG1heFJldHJpZXMpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ1RoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuICdcbiAgICAgICAgICArICdNYWtlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHVuZGVyIHRlc3QgZG9lcyBub3QgY3Jhc2ggYW5kIGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0LicpO1xuICAgICAgfVxuICAgICAgbG9nLndhcm4oYFRoZSBpbnN0cnVtZW50YXRpb24gcHJvY2VzcyBoYXMgYmVlbiB1bmV4cGVjdGVkbHkgdGVybWluYXRlZC4gYFxuICAgICAgICArIGBSZXRyeWluZyBVaUF1dG9tYXRvcjIgc3RhcnR1cCAoIyR7cmV0cmllc30gb2YgJHttYXhSZXRyaWVzIC0gMX0pYCk7XG4gICAgICBhd2FpdCB0aGlzLmNsZWFudXBBdXRvbWF0aW9uTGVmdG92ZXJzKHRydWUpO1xuICAgICAgYXdhaXQgQi5kZWxheShkZWxheUJldHdlZW5SZXRyaWVzKTtcbiAgICB9XG5cbiAgICBsb2cuZGVidWcoYFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgaW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgdG9vayBgXG4gICAgICArIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc2Vzc2lvbicsICdQT1NUJywge1xuICAgICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICAgIGZpcnN0TWF0Y2g6IFtjYXBzXSxcbiAgICAgICAgYWx3YXlzTWF0Y2g6IHt9LFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRJbnN0cnVtZW50YXRpb25Qcm9jZXNzICgpIHtcbiAgICBjb25zdCBjbWQgPSBbJ2FtJywgJ2luc3RydW1lbnQnLCAnLXcnXTtcbiAgICBpZiAodGhpcy5kaXNhYmxlV2luZG93QW5pbWF0aW9uKSB7XG4gICAgICBjbWQucHVzaCgnLS1uby13aW5kb3ctYW5pbWF0aW9uJyk7XG4gICAgfVxuICAgIGlmIChfLmlzQm9vbGVhbih0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKSkge1xuICAgICAgY21kLnB1c2goJy1lJywgJ0RJU0FCTEVfU1VQUFJFU1NfQUNDRVNTSUJJTElUWV9TRVJWSUNFUycsIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpO1xuICAgIH1cbiAgICAvLyBEaXNhYmxlIEdvb2dsZSBhbmFseXRpY3MgdG8gcHJldmVudCBwb3NzaWJsZSBmYXRhbCBleGNlcHRpb25cbiAgICBjbWQucHVzaCgnLWUnLCAnZGlzYWJsZUFuYWx5dGljcycsIHRydWUpO1xuICAgIGNtZC5wdXNoKElOU1RSVU1FTlRBVElPTl9UQVJHRVQpO1xuICAgIGNvbnN0IGluc3RydW1lbnRhdGlvblByb2Nlc3MgPSB0aGlzLmFkYi5jcmVhdGVTdWJQcm9jZXNzKFsnc2hlbGwnLCAuLi5jbWRdKTtcbiAgICBpbnN0cnVtZW50YXRpb25Qcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IF8udHJpbShzdGRvdXQgfHwgc3RkZXJyKTtcbiAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uTG9nZ2VyLmRlYnVnKG91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5zdHJ1bWVudGF0aW9uUHJvY2Vzcy5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICBpbnN0cnVtZW50YXRpb25Mb2dnZXIuZGVidWcoYFRoZSBwcm9jZXNzIGhhcyBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKTtcbiAgICAgIHRoaXMuandwcm94eS5kaWRJbnN0cnVtZW50YXRpb25FeGl0ID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhd2FpdCBpbnN0cnVtZW50YXRpb25Qcm9jZXNzLnN0YXJ0KDApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nLmRlYnVnKCdEZWxldGluZyBVaUF1dG9tYXRvcjIgc2VydmVyIHNlc3Npb24nKTtcbiAgICAvLyByZWx5IG9uIGp3cHJveHkncyBpbnRlbGxpZ2VuY2UgdG8ga25vdyB3aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgYW5kXG4gICAgLy8gZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy8nLCAnREVMRVRFJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRGlkIG5vdCBnZXQgY29uZmlybWF0aW9uIFVpQXV0b21hdG9yMiBkZWxldGVTZXNzaW9uIHdvcmtlZDsgYCArXG4gICAgICAgICAgYEVycm9yIHdhczogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xlYW51cEF1dG9tYXRpb25MZWZ0b3ZlcnMgKHN0cmljdENsZWFudXAgPSBmYWxzZSkge1xuICAgIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyAke3N0cmljdENsZWFudXAgPyAnc3RyaWN0JyA6ICdzaGFsbG93J30gY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVyc2ApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS93ZC9odWIvc2Vzc2lvbnNgLFxuICAgICAgICB0aW1lb3V0OiA1MDAsXG4gICAgICB9KSkuZGF0YTtcbiAgICAgIGNvbnN0IGFjdGl2ZVNlc3Npb25JZHMgPSB2YWx1ZS5tYXAoKHtpZH0pID0+IGlkKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIG9ic29sZXRlIHNlc3Npb25zIGFyZSBzdGlsbCBydW5uaW5nOiAke0pTT04uc3RyaW5naWZ5KGFjdGl2ZVNlc3Npb25JZHMpfWApO1xuICAgICAgICBsb2cuZGVidWcoYENsZWFuaW5nIHVwICR7dXRpbC5wbHVyYWxpemUoJ29ic29sZXRlIHNlc3Npb24nLCBhY3RpdmVTZXNzaW9uSWRzLmxlbmd0aCwgdHJ1ZSl9YCk7XG4gICAgICAgIGF3YWl0IEIuYWxsKGFjdGl2ZVNlc3Npb25JZHNcbiAgICAgICAgICAubWFwKChpZCkgPT4gYXhpb3MuZGVsZXRlKGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS93ZC9odWIvc2Vzc2lvbi8ke2lkfWApKVxuICAgICAgICApO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGBObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQgKCR7ZS5tZXNzYWdlfSlgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQpO1xuICAgIH0gY2F0Y2ggKGlnbm9yZSkge31cbiAgICBpZiAoIXN0cmljdENsZWFudXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzEwNzQ5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmtpbGxQcm9jZXNzZXNCeU5hbWUoJ3VpYXV0b21hdG9yJyk7XG4gICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICB9XG59XG5cbmV4cG9ydCB7IFVpQXV0b21hdG9yMlNlcnZlciwgSU5TVFJVTUVOVEFUSU9OX1RBUkdFVCwgU0VSVkVSX1BBQ0tBR0VfSUQsIFNFUlZFUl9URVNUX1BBQ0tBR0VfSUQgfTtcbmV4cG9ydCBkZWZhdWx0IFVpQXV0b21hdG9yMlNlcnZlcjtcbiJdLCJmaWxlIjoibGliL3VpYXV0b21hdG9yMi5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
package/lib/commands/general.js
CHANGED
|
@@ -277,6 +277,7 @@ helpers.wrapBootstrapDisconnect = async function (wrapped) {
|
|
|
277
277
|
helpers.suspendChromedriverProxy = function () {
|
|
278
278
|
this.chromedriver = null;
|
|
279
279
|
this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);
|
|
280
|
+
this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);
|
|
280
281
|
this.jwpProxyActive = true;
|
|
281
282
|
};
|
|
282
283
|
|
package/lib/driver.js
CHANGED
|
@@ -487,6 +487,7 @@ class AndroidUiautomator2Driver extends BaseDriver {
|
|
|
487
487
|
// uiautomator2 with the appropriate options
|
|
488
488
|
this.uiautomator2 = new UiAutomator2Server(uiautomator2Opts);
|
|
489
489
|
this.proxyReqRes = this.uiautomator2.proxyReqRes.bind(this.uiautomator2);
|
|
490
|
+
this.proxyCommand = this.uiautomator2.proxyCommand.bind(this.uiautomator2);
|
|
490
491
|
|
|
491
492
|
if (this.opts.skipServerInstallation) {
|
|
492
493
|
logger.info(`'skipServerInstallation' is set. Skipping UIAutomator2 server installation.`);
|
package/lib/uiautomator2.js
CHANGED
|
@@ -55,6 +55,7 @@ class UiAutomator2Server {
|
|
|
55
55
|
}
|
|
56
56
|
this.jwproxy = new UIA2Proxy(proxyOpts);
|
|
57
57
|
this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
|
|
58
|
+
this.proxyCommand = this.jwproxy.command.bind(this.jwproxy);
|
|
58
59
|
this.jwproxy.didInstrumentationExit = false;
|
|
59
60
|
}
|
|
60
61
|
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"automated testing",
|
|
8
8
|
"android"
|
|
9
9
|
],
|
|
10
|
-
"version": "1.
|
|
10
|
+
"version": "1.72.0",
|
|
11
11
|
"author": "appium",
|
|
12
12
|
"license": "Apache-2.0",
|
|
13
13
|
"repository": {
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"test"
|
|
82
82
|
],
|
|
83
83
|
"devDependencies": {
|
|
84
|
+
"@xmldom/xmldom": "^0.x",
|
|
84
85
|
"android-apidemos": "^3.0.0",
|
|
85
86
|
"appium-gulp-plugins": "^5.4.0",
|
|
86
87
|
"appium-test-support": "^1.0.0",
|
|
@@ -95,10 +96,9 @@
|
|
|
95
96
|
"pngjs": "^6.0.0",
|
|
96
97
|
"pre-commit": "^1.2.2",
|
|
97
98
|
"rimraf": "^3.0.0",
|
|
98
|
-
"sinon": "^
|
|
99
|
+
"sinon": "^12.0.0",
|
|
99
100
|
"unzipper": "^0.10.0",
|
|
100
101
|
"wd": "^1.10.3",
|
|
101
|
-
"xmldom": "^0.x",
|
|
102
102
|
"xpath": "^0.x"
|
|
103
103
|
}
|
|
104
104
|
}
|
package/lib/.DS_Store
DELETED
|
Binary file
|