appium-adb 8.16.2 → 9.1.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/README.md +0 -2
- package/build/index.js +1 -1
- package/build/lib/adb.js +1 -1
- package/build/lib/helpers.js +54 -49
- package/build/lib/logcat.js +4 -4
- package/build/lib/logger.js +3 -3
- package/build/lib/tools/aab-utils.js +157 -0
- package/build/lib/tools/adb-commands.js +11 -11
- package/build/lib/tools/adb-emu-commands.js +35 -27
- package/build/lib/tools/android-manifest.js +13 -13
- package/build/lib/tools/apk-signing.js +19 -19
- package/build/lib/tools/apk-utils.js +13 -13
- package/build/lib/tools/apks-utils.js +13 -14
- package/build/lib/tools/index.js +5 -3
- package/build/lib/tools/lockmgmt.js +3 -3
- package/build/lib/tools/settings-client-commands.js +72 -8
- package/build/lib/tools/system-calls.js +27 -27
- package/lib/helpers.js +1 -1
- package/lib/logcat.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/tools/aab-utils.js +158 -0
- package/lib/tools/adb-commands.js +1 -1
- package/lib/tools/adb-emu-commands.js +33 -20
- package/lib/tools/android-manifest.js +1 -1
- package/lib/tools/apk-signing.js +1 -1
- package/lib/tools/apk-utils.js +6 -7
- package/lib/tools/apks-utils.js +6 -6
- package/lib/tools/index.js +2 -0
- package/lib/tools/lockmgmt.js +1 -1
- package/lib/tools/settings-client-commands.js +106 -5
- package/lib/tools/system-calls.js +1 -1
- package/package.json +14 -8
- package/lib/.DS_Store +0 -0
package/build/lib/logcat.js
CHANGED
|
@@ -11,7 +11,7 @@ require("source-map-support/register");
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _support = require("@appium/support");
|
|
15
15
|
|
|
16
16
|
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
17
17
|
|
|
@@ -23,7 +23,7 @@ const {
|
|
|
23
23
|
EventEmitter
|
|
24
24
|
} = _events.default;
|
|
25
25
|
|
|
26
|
-
const log =
|
|
26
|
+
const log = _support.logger.getLogger('Logcat');
|
|
27
27
|
|
|
28
28
|
const MAX_BUFFER_SIZE = 10000;
|
|
29
29
|
const LOGCAT_PROC_STARTUP_TIMEOUT = 10000;
|
|
@@ -111,7 +111,7 @@ class Logcat extends EventEmitter {
|
|
|
111
111
|
filterSpecs = []
|
|
112
112
|
} = opts;
|
|
113
113
|
const cmd = [...this.adb.defaultArgs, 'logcat', '-v', requireFormat(format), ...formatFilterSpecs(filterSpecs)];
|
|
114
|
-
log.debug(`Starting logs capture with command: ${
|
|
114
|
+
log.debug(`Starting logs capture with command: ${_support.util.quote([this.adb.path, ...cmd])}`);
|
|
115
115
|
this.proc = new _teen_process.SubProcess(this.adb.path, cmd);
|
|
116
116
|
this.proc.on('exit', (code, signal) => {
|
|
117
117
|
log.error(`Logcat terminated with code ${code}, signal ${signal}`);
|
|
@@ -218,4 +218,4 @@ var _default = Logcat;
|
|
|
218
218
|
exports.default = _default;require('source-map-support').install();
|
|
219
219
|
|
|
220
220
|
|
|
221
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2djYXQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwiZXZlbnRzIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiTUFYX0JVRkZFUl9TSVpFIiwiTE9HQ0FUX1BST0NfU1RBUlRVUF9USU1FT1VUIiwiU1VQUE9SVEVEX0ZPUk1BVFMiLCJTVVBQT1JURURfUFJJT1JJVElFUyIsIkRFRkFVTFRfUFJJT1JJVFkiLCJERUZBVUxUX1RBRyIsIkRFRkFVTFRfRk9STUFUIiwicmVxdWlyZUZvcm1hdCIsImZvcm1hdCIsImluY2x1ZGVzIiwiaW5mbyIsInJlcXVpcmVTcGVjIiwic3BlYyIsInRhZyIsInByaW9yaXR5Iiwic3BsaXQiLCJyZXN1bHRUYWciLCJzb21lIiwicCIsIl8iLCJ0b0xvd2VyIiwiZm9ybWF0RmlsdGVyU3BlY3MiLCJmaWx0ZXJTcGVjcyIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpc1N0cmluZyIsInN0YXJ0c1dpdGgiLCJtYXAiLCJMb2djYXQiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJhZGIiLCJjbGVhckxvZ3MiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiZGVidWciLCJkZWJ1Z1RyYWNlIiwibWF4QnVmZmVyU2l6ZSIsImxvZ3MiLCJsb2dJZHhTaW5jZUxhc3RSZXF1ZXN0Iiwic3RhcnRDYXB0dXJlIiwic3RhcnRlZCIsIkIiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJyZXNvbHZlIiwiYXJncyIsInJlamVjdCIsImNsZWFyIiwiY21kIiwiZGVmYXVsdEFyZ3MiLCJ1dGlsIiwicXVvdGUiLCJwYXRoIiwicHJvYyIsIlN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJlcnJvciIsIndhcm4iLCJsaW5lcyIsImxpbmUiLCJ0ZXN0IiwiRXJyb3IiLCJvdXRwdXRIYW5kbGVyIiwidHJpbSIsInN0YXJ0Iiwic2V0VGltZW91dCIsIm91dHB1dCIsInByZWZpeCIsImxlbmd0aCIsInNoaWZ0Iiwib3V0cHV0T2JqIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImxldmVsIiwibWVzc2FnZSIsInB1c2giLCJlbWl0IiwiaXNUcmFjZSIsInN0b3BDYXB0dXJlIiwiaXNSdW5uaW5nIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsImdldExvZ3MiLCJyZXN1bHQiLCJzbGljZSIsImdldEFsbExvZ3MiLCJlcnIiLCJzdGRlcnIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBREEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQW1CQyxlQUF6Qjs7QUFHQSxNQUFNQyxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQVo7O0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsS0FBcEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLEtBQXJCLEVBQTRCLFFBQTVCLEVBQXNDLEtBQXRDLEVBQTZDLE1BQTdDLEVBQXFELFlBQXJELEVBQW1FLE1BQW5FLENBQTFCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsR0FBckIsRUFBMEIsR0FBMUIsRUFBK0IsR0FBL0IsQ0FBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxHQUF6QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxHQUFwQjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxZQUF2Qjs7QUFFQSxTQUFTQyxhQUFULENBQXdCQyxNQUF4QixFQUFnQztBQUM5QixNQUFJLENBQUNOLGlCQUFpQixDQUFDTyxRQUFsQixDQUEyQkQsTUFBM0IsQ0FBTCxFQUF5QztBQUN2Q1gsSUFBQUEsR0FBRyxDQUFDYSxJQUFKLENBQVUscUJBQW9CRixNQUFPLHVDQUFzQ04saUJBQWtCLEVBQTdGO0FBQ0FMLElBQUFBLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLGtCQUFpQkosY0FBZSxHQUEx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QVVpQyxNQUF4QztBQUNBLGFBQU9nQixNQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxFQUFQO0FBQ0Q7O0FBRURFLEVBQUFBLFVBQVUsR0FBSTtBQUNaLFdBQU8sS0FBS25ELElBQVo7QUFDRDs7QUFFVSxRQUFMVSxLQUFLLEdBQUk7QUFDYmxELElBQUFBLEdBQUcsQ0FBQ3FDLEtBQUosQ0FBVSxrQ0FBVjs7QUFDQSxRQUFJO0FBQ0YsWUFBTVcsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLZCxHQUFMLENBQVNrQixXQUFiLEVBQTBCLFFBQTFCLEVBQW9DLElBQXBDLENBQWI7QUFDQSxZQUFNLHdCQUFLLEtBQUtsQixHQUFMLENBQVNxQixJQUFkLEVBQW9CUCxJQUFwQixDQUFOO0FBQ0QsS0FIRCxDQUdFLE9BQU80QyxHQUFQLEVBQVk7QUFDWjVGLE1BQUFBLEdBQUcsQ0FBQzhELElBQUosQ0FBVSxnQ0FBK0I4QixHQUFHLENBQUNDLE1BQUosSUFBY0QsR0FBRyxDQUFDWixPQUFRLEVBQW5FO0FBQ0Q7QUFDRjs7QUEvSCtCOztlQWtJbkJqRCxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGxvZ2dlciwgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignTG9nY2F0Jyk7XG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAwMDtcbmNvbnN0IExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgU1VQUE9SVEVEX0ZPUk1BVFMgPSBbJ2JyaWVmJywgJ3Byb2Nlc3MnLCAndGFnJywgJ3RocmVhZCcsICdyYXcnLCAndGltZScsICd0aHJlYWR0aW1lJywgJ2xvbmcnXTtcbmNvbnN0IFNVUFBPUlRFRF9QUklPUklUSUVTID0gWyd2JywgJ2QnLCAnaScsICd3JywgJ2UnLCAnZicsICdzJ107XG5jb25zdCBERUZBVUxUX1BSSU9SSVRZID0gJ3YnO1xuY29uc3QgREVGQVVMVF9UQUcgPSAnKic7XG5jb25zdCBERUZBVUxUX0ZPUk1BVCA9ICd0aHJlYWR0aW1lJztcblxuZnVuY3Rpb24gcmVxdWlyZUZvcm1hdCAoZm9ybWF0KSB7XG4gIGlmICghU1VQUE9SVEVEX0ZPUk1BVFMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgIGxvZy5pbmZvKGBUaGUgZm9ybWF0IHZhbHVlICcke2Zvcm1hdH0nIGlzIHVua25vd24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke1NVUFBPUlRFRF9GT1JNQVRTfWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfRk9STUFUfSdgKTtcbiAgICByZXR1cm4gREVGQVVMVF9GT1JNQVQ7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZVNwZWMgKHNwZWMpIHtcbiAgY29uc3QgW3RhZywgcHJpb3JpdHldID0gc3BlYy5zcGxpdCgnOicpO1xuICBsZXQgcmVzdWx0VGFnID0gdGFnO1xuICBpZiAoIXJlc3VsdFRhZykge1xuICAgIGxvZy5pbmZvKGBUaGUgdGFnIHZhbHVlIGluIHNwZWMgJyR7c3BlY30nIGNhbm5vdCBiZSBlbXB0eWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfVEFHfSdgKTtcbiAgICByZXN1bHRUYWcgPSBERUZBVUxUX1RBRztcbiAgfVxuICBpZiAoIXByaW9yaXR5KSB7XG4gICAgbG9nLmluZm8oYFRoZSBwcmlvcml0eSB2YWx1ZSBpbiBzcGVjICcke3NwZWN9JyBpcyBlbXB0eS4gRGVmYXVsdGluZyB0byBWZXJib3NlICgke0RFRkFVTFRfUFJJT1JJVFl9KWApO1xuICAgIHJldHVybiBgJHtyZXN1bHRUYWd9OiR7REVGQVVMVF9QUklPUklUWX1gO1xuICB9XG4gIGlmICghU1VQUE9SVEVEX1BSSU9SSVRJRVMuc29tZSgocCkgPT4gXy50b0xvd2VyKHByaW9yaXR5KSA9PT0gXy50b0xvd2VyKHApKSkge1xuICAgIGxvZy5pbmZvKGBUaGUgcHJpb3JpdHkgdmFsdWUgaW4gc3BlYyAnJHtzcGVjfScgaXMgdW5rbm93bi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7U1VQUE9SVEVEX1BSSU9SSVRJRVN9YCk7XG4gICAgbG9nLmluZm8oYERlZmF1bHRpbmcgdG8gVmVyYm9zZSAoJHtERUZBVUxUX1BSSU9SSVRZfSlgKTtcbiAgICByZXR1cm4gYCR7cmVzdWx0VGFnfToke0RFRkFVTFRfUFJJT1JJVFl9YDtcbiAgfVxuICByZXR1cm4gc3BlYztcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyU3BlY3MgKGZpbHRlclNwZWNzKSB7XG4gIGlmICghXy5pc0FycmF5KGZpbHRlclNwZWNzKSkge1xuICAgIGZpbHRlclNwZWNzID0gW2ZpbHRlclNwZWNzXTtcbiAgfVxuICByZXR1cm4gZmlsdGVyU3BlY3NcbiAgICAuZmlsdGVyKChzcGVjKSA9PiBzcGVjICYmIF8uaXNTdHJpbmcoc3BlYykgJiYgIXNwZWMuc3RhcnRzV2l0aCgnLScpKVxuICAgIC5tYXAoKHNwZWMpID0+IHNwZWMuaW5jbHVkZXMoJzonKSA/IHJlcXVpcmVTcGVjKHNwZWMpIDogc3BlYyk7XG59XG5cblxuY2xhc3MgTG9nY2F0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBvcHRzLmFkYjtcbiAgICB0aGlzLmNsZWFyTG9ncyA9IG9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCB8fCBmYWxzZTtcbiAgICB0aGlzLmRlYnVnID0gb3B0cy5kZWJ1ZztcbiAgICB0aGlzLmRlYnVnVHJhY2UgPSBvcHRzLmRlYnVnVHJhY2U7XG4gICAgdGhpcy5tYXhCdWZmZXJTaXplID0gb3B0cy5tYXhCdWZmZXJTaXplIHx8IE1BWF9CVUZGRVJfU0laRTtcbiAgICB0aGlzLmxvZ3MgPSBbXTtcbiAgICB0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPSAwO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDYXB0dXJlIChvcHRzID0ge30pIHtcbiAgICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAoX3Jlc29sdmUsIF9yZWplY3QpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgICBjb25zdCByZXNvbHZlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIF9yZXNvbHZlKC4uLmFyZ3MpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfcmVqZWN0KC4uLmFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuY2xlYXJMb2dzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmb3JtYXQgPSBERUZBVUxUX0ZPUk1BVCxcbiAgICAgICAgZmlsdGVyU3BlY3MgPSBbXSxcbiAgICAgIH0gPSBvcHRzO1xuICAgICAgY29uc3QgY21kID0gW1xuICAgICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICAgJ2xvZ2NhdCcsXG4gICAgICAgICctdicsIHJlcXVpcmVGb3JtYXQoZm9ybWF0KSxcbiAgICAgICAgLi4uZm9ybWF0RmlsdGVyU3BlY3MoZmlsdGVyU3BlY3MpLFxuICAgICAgXTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgbG9ncyBjYXB0dXJlIHdpdGggY29tbWFuZDogJHt1dGlsLnF1b3RlKFt0aGlzLmFkYi5wYXRoLCAuLi5jbWRdKX1gKTtcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuYWRiLnBhdGgsIGNtZCk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgTG9nY2F0IHRlcm1pbmF0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ0xvZ2NhdCBub3Qgc3RhcnRlZC4gQ29udGludWluZycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZGVycicsIChsaW5lcykgPT4ge1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgaWYgKC9leGVjdnBcXChcXCkvLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignTG9nY2F0IHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0Jyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBMb2djYXQgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIHN0ZGVycjogJHtsaW5lfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vdXRwdXRIYW5kbGVyKF8udHJpbShsaW5lKSwgJ1NUREVSUjogJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZG91dCcsIChsaW5lcykgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEhhbmRsZXIoXy50cmltKGxpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgICAvLyByZXNvbHZlIGFmdGVyIGEgdGltZW91dCwgZXZlbiBpZiBubyBvdXRwdXQgd2FzIHJlY29yZGVkXG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCk7XG4gICAgfSk7XG4gIH1cblxuICBvdXRwdXRIYW5kbGVyIChvdXRwdXQsIHByZWZpeCA9ICcnKSB7XG4gICAgaWYgKCFvdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dzLmxlbmd0aCA+PSB0aGlzLm1heEJ1ZmZlclNpemUpIHtcbiAgICAgIHRoaXMubG9ncy5zaGlmdCgpO1xuICAgICAgaWYgKHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA+IDApIHtcbiAgICAgICAgLS10aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dE9iaiA9IHtcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGxldmVsOiAnQUxMJyxcbiAgICAgIG1lc3NhZ2U6IG91dHB1dCxcbiAgICB9O1xuICAgIHRoaXMubG9ncy5wdXNoKG91dHB1dE9iaik7XG4gICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBvdXRwdXRPYmopO1xuICAgIGNvbnN0IGlzVHJhY2UgPSAvV1xcL1RyYWNlLy50ZXN0KG91dHB1dCk7XG4gICAgaWYgKHRoaXMuZGVidWcgJiYgKCFpc1RyYWNlIHx8IHRoaXMuZGVidWdUcmFjZSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhwcmVmaXggKyBvdXRwdXQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3BDYXB0dXJlICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIGxvZ2NhdCBjYXB0dXJlJyk7XG4gICAgaWYgKCF0aGlzLnByb2MgfHwgIXRoaXMucHJvYy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTG9nY2F0IGFscmVhZHkgc3RvcHBlZCcpO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jLnJlbW92ZUFsbExpc3RlbmVycygnZXhpdCcpO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgfVxuXG4gIGdldExvZ3MgKCkge1xuICAgIGlmICh0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPCB0aGlzLmxvZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmxvZ3Muc2xpY2UodGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0KTtcbiAgICAgIHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA9IHRoaXMubG9ncy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRBbGxMb2dzICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dzO1xuICB9XG5cbiAgYXN5bmMgY2xlYXIgKCkge1xuICAgIGxvZy5kZWJ1ZygnQ2xlYXJpbmcgbG9nY2F0IGxvZ3MgZnJvbSBkZXZpY2UnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi50aGlzLmFkYi5kZWZhdWx0QXJncywgJ2xvZ2NhdCcsICctYyddO1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmFkYi5wYXRoLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8gY2xlYXIgbG9nY2F0IGxvZ3M6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nY2F0O1xuIl0sImZpbGUiOiJsaWIvbG9nY2F0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2djYXQuanMiXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwiZXZlbnRzIiwibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiTUFYX0JVRkZFUl9TSVpFIiwiTE9HQ0FUX1BST0NfU1RBUlRVUF9USU1FT1VUIiwiU1VQUE9SVEVEX0ZPUk1BVFMiLCJTVVBQT1JURURfUFJJT1JJVElFUyIsIkRFRkFVTFRfUFJJT1JJVFkiLCJERUZBVUxUX1RBRyIsIkRFRkFVTFRfRk9STUFUIiwicmVxdWlyZUZvcm1hdCIsImZvcm1hdCIsImluY2x1ZGVzIiwiaW5mbyIsInJlcXVpcmVTcGVjIiwic3BlYyIsInRhZyIsInByaW9yaXR5Iiwic3BsaXQiLCJyZXN1bHRUYWciLCJzb21lIiwicCIsIl8iLCJ0b0xvd2VyIiwiZm9ybWF0RmlsdGVyU3BlY3MiLCJmaWx0ZXJTcGVjcyIsImlzQXJyYXkiLCJmaWx0ZXIiLCJpc1N0cmluZyIsInN0YXJ0c1dpdGgiLCJtYXAiLCJMb2djYXQiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJhZGIiLCJjbGVhckxvZ3MiLCJjbGVhckRldmljZUxvZ3NPblN0YXJ0IiwiZGVidWciLCJkZWJ1Z1RyYWNlIiwibWF4QnVmZmVyU2l6ZSIsImxvZ3MiLCJsb2dJZHhTaW5jZUxhc3RSZXF1ZXN0Iiwic3RhcnRDYXB0dXJlIiwic3RhcnRlZCIsIkIiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJyZXNvbHZlIiwiYXJncyIsInJlamVjdCIsImNsZWFyIiwiY21kIiwiZGVmYXVsdEFyZ3MiLCJ1dGlsIiwicXVvdGUiLCJwYXRoIiwicHJvYyIsIlN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJlcnJvciIsIndhcm4iLCJsaW5lcyIsImxpbmUiLCJ0ZXN0IiwiRXJyb3IiLCJvdXRwdXRIYW5kbGVyIiwidHJpbSIsInN0YXJ0Iiwic2V0VGltZW91dCIsIm91dHB1dCIsInByZWZpeCIsImxlbmd0aCIsInNoaWZ0Iiwib3V0cHV0T2JqIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImxldmVsIiwibWVzc2FnZSIsInB1c2giLCJlbWl0IiwiaXNUcmFjZSIsInN0b3BDYXB0dXJlIiwiaXNSdW5uaW5nIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsImdldExvZ3MiLCJyZXN1bHQiLCJzbGljZSIsImdldEFsbExvZ3MiLCJlcnIiLCJzdGRlcnIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBREEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQW1CQyxlQUF6Qjs7QUFHQSxNQUFNQyxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLFFBQWpCLENBQVo7O0FBQ0EsTUFBTUMsZUFBZSxHQUFHLEtBQXhCO0FBQ0EsTUFBTUMsMkJBQTJCLEdBQUcsS0FBcEM7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLEtBQXJCLEVBQTRCLFFBQTVCLEVBQXNDLEtBQXRDLEVBQTZDLE1BQTdDLEVBQXFELFlBQXJELEVBQW1FLE1BQW5FLENBQTFCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUIsR0FBckIsRUFBMEIsR0FBMUIsRUFBK0IsR0FBL0IsQ0FBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxHQUF6QjtBQUNBLE1BQU1DLFdBQVcsR0FBRyxHQUFwQjtBQUNBLE1BQU1DLGNBQWMsR0FBRyxZQUF2Qjs7QUFFQSxTQUFTQyxhQUFULENBQXdCQyxNQUF4QixFQUFnQztBQUM5QixNQUFJLENBQUNOLGlCQUFpQixDQUFDTyxRQUFsQixDQUEyQkQsTUFBM0IsQ0FBTCxFQUF5QztBQUN2Q1gsSUFBQUEsR0FBRyxDQUFDYSxJQUFKLENBQVUscUJBQW9CRixNQUFPLHVDQUFzQ04saUJBQWtCLEVBQTdGO0FBQ0FMLElBQUFBLEdBQUcsQ0FBQ2EsSUFBSixDQUFVLGtCQUFpQkosY0FBZSxHQUEx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VWlDLE1BQXhDO0FBQ0EsYUFBT2dCLE1BQVA7QUFDRDs7QUFDRCxXQUFPLEVBQVA7QUFDRDs7QUFFREUsRUFBQUEsVUFBVSxHQUFJO0FBQ1osV0FBTyxLQUFLbkQsSUFBWjtBQUNEOztBQUVVLFFBQUxVLEtBQUssR0FBSTtBQUNibEQsSUFBQUEsR0FBRyxDQUFDcUMsS0FBSixDQUFVLGtDQUFWOztBQUNBLFFBQUk7QUFDRixZQUFNVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUtkLEdBQUwsQ0FBU2tCLFdBQWIsRUFBMEIsUUFBMUIsRUFBb0MsSUFBcEMsQ0FBYjtBQUNBLFlBQU0sd0JBQUssS0FBS2xCLEdBQUwsQ0FBU3FCLElBQWQsRUFBb0JQLElBQXBCLENBQU47QUFDRCxLQUhELENBR0UsT0FBTzRDLEdBQVAsRUFBWTtBQUNaNUYsTUFBQUEsR0FBRyxDQUFDOEQsSUFBSixDQUFVLGdDQUErQjhCLEdBQUcsQ0FBQ0MsTUFBSixJQUFjRCxHQUFHLENBQUNaLE9BQVEsRUFBbkU7QUFDRDtBQUNGOztBQS9IK0I7O2VBa0luQmpELE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbG9nZ2VyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBldmVudHMgZnJvbSAnZXZlbnRzJztcbmNvbnN0IHsgRXZlbnRFbWl0dGVyIH0gPSBldmVudHM7XG5pbXBvcnQgeyBTdWJQcm9jZXNzLCBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignTG9nY2F0Jyk7XG5jb25zdCBNQVhfQlVGRkVSX1NJWkUgPSAxMDAwMDtcbmNvbnN0IExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCA9IDEwMDAwO1xuY29uc3QgU1VQUE9SVEVEX0ZPUk1BVFMgPSBbJ2JyaWVmJywgJ3Byb2Nlc3MnLCAndGFnJywgJ3RocmVhZCcsICdyYXcnLCAndGltZScsICd0aHJlYWR0aW1lJywgJ2xvbmcnXTtcbmNvbnN0IFNVUFBPUlRFRF9QUklPUklUSUVTID0gWyd2JywgJ2QnLCAnaScsICd3JywgJ2UnLCAnZicsICdzJ107XG5jb25zdCBERUZBVUxUX1BSSU9SSVRZID0gJ3YnO1xuY29uc3QgREVGQVVMVF9UQUcgPSAnKic7XG5jb25zdCBERUZBVUxUX0ZPUk1BVCA9ICd0aHJlYWR0aW1lJztcblxuZnVuY3Rpb24gcmVxdWlyZUZvcm1hdCAoZm9ybWF0KSB7XG4gIGlmICghU1VQUE9SVEVEX0ZPUk1BVFMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgIGxvZy5pbmZvKGBUaGUgZm9ybWF0IHZhbHVlICcke2Zvcm1hdH0nIGlzIHVua25vd24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke1NVUFBPUlRFRF9GT1JNQVRTfWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfRk9STUFUfSdgKTtcbiAgICByZXR1cm4gREVGQVVMVF9GT1JNQVQ7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdDtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZVNwZWMgKHNwZWMpIHtcbiAgY29uc3QgW3RhZywgcHJpb3JpdHldID0gc3BlYy5zcGxpdCgnOicpO1xuICBsZXQgcmVzdWx0VGFnID0gdGFnO1xuICBpZiAoIXJlc3VsdFRhZykge1xuICAgIGxvZy5pbmZvKGBUaGUgdGFnIHZhbHVlIGluIHNwZWMgJyR7c3BlY30nIGNhbm5vdCBiZSBlbXB0eWApO1xuICAgIGxvZy5pbmZvKGBEZWZhdWx0aW5nIHRvICcke0RFRkFVTFRfVEFHfSdgKTtcbiAgICByZXN1bHRUYWcgPSBERUZBVUxUX1RBRztcbiAgfVxuICBpZiAoIXByaW9yaXR5KSB7XG4gICAgbG9nLmluZm8oYFRoZSBwcmlvcml0eSB2YWx1ZSBpbiBzcGVjICcke3NwZWN9JyBpcyBlbXB0eS4gRGVmYXVsdGluZyB0byBWZXJib3NlICgke0RFRkFVTFRfUFJJT1JJVFl9KWApO1xuICAgIHJldHVybiBgJHtyZXN1bHRUYWd9OiR7REVGQVVMVF9QUklPUklUWX1gO1xuICB9XG4gIGlmICghU1VQUE9SVEVEX1BSSU9SSVRJRVMuc29tZSgocCkgPT4gXy50b0xvd2VyKHByaW9yaXR5KSA9PT0gXy50b0xvd2VyKHApKSkge1xuICAgIGxvZy5pbmZvKGBUaGUgcHJpb3JpdHkgdmFsdWUgaW4gc3BlYyAnJHtzcGVjfScgaXMgdW5rbm93bi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7U1VQUE9SVEVEX1BSSU9SSVRJRVN9YCk7XG4gICAgbG9nLmluZm8oYERlZmF1bHRpbmcgdG8gVmVyYm9zZSAoJHtERUZBVUxUX1BSSU9SSVRZfSlgKTtcbiAgICByZXR1cm4gYCR7cmVzdWx0VGFnfToke0RFRkFVTFRfUFJJT1JJVFl9YDtcbiAgfVxuICByZXR1cm4gc3BlYztcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyU3BlY3MgKGZpbHRlclNwZWNzKSB7XG4gIGlmICghXy5pc0FycmF5KGZpbHRlclNwZWNzKSkge1xuICAgIGZpbHRlclNwZWNzID0gW2ZpbHRlclNwZWNzXTtcbiAgfVxuICByZXR1cm4gZmlsdGVyU3BlY3NcbiAgICAuZmlsdGVyKChzcGVjKSA9PiBzcGVjICYmIF8uaXNTdHJpbmcoc3BlYykgJiYgIXNwZWMuc3RhcnRzV2l0aCgnLScpKVxuICAgIC5tYXAoKHNwZWMpID0+IHNwZWMuaW5jbHVkZXMoJzonKSA/IHJlcXVpcmVTcGVjKHNwZWMpIDogc3BlYyk7XG59XG5cblxuY2xhc3MgTG9nY2F0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGIgPSBvcHRzLmFkYjtcbiAgICB0aGlzLmNsZWFyTG9ncyA9IG9wdHMuY2xlYXJEZXZpY2VMb2dzT25TdGFydCB8fCBmYWxzZTtcbiAgICB0aGlzLmRlYnVnID0gb3B0cy5kZWJ1ZztcbiAgICB0aGlzLmRlYnVnVHJhY2UgPSBvcHRzLmRlYnVnVHJhY2U7XG4gICAgdGhpcy5tYXhCdWZmZXJTaXplID0gb3B0cy5tYXhCdWZmZXJTaXplIHx8IE1BWF9CVUZGRVJfU0laRTtcbiAgICB0aGlzLmxvZ3MgPSBbXTtcbiAgICB0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPSAwO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDYXB0dXJlIChvcHRzID0ge30pIHtcbiAgICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBhd2FpdCBuZXcgQihhc3luYyAoX3Jlc29sdmUsIF9yZWplY3QpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3BhcmFtLW5hbWVzXG4gICAgICBjb25zdCByZXNvbHZlID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIF9yZXNvbHZlKC4uLmFyZ3MpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBfcmVqZWN0KC4uLmFyZ3MpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuY2xlYXJMb2dzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmb3JtYXQgPSBERUZBVUxUX0ZPUk1BVCxcbiAgICAgICAgZmlsdGVyU3BlY3MgPSBbXSxcbiAgICAgIH0gPSBvcHRzO1xuICAgICAgY29uc3QgY21kID0gW1xuICAgICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICAgJ2xvZ2NhdCcsXG4gICAgICAgICctdicsIHJlcXVpcmVGb3JtYXQoZm9ybWF0KSxcbiAgICAgICAgLi4uZm9ybWF0RmlsdGVyU3BlY3MoZmlsdGVyU3BlY3MpLFxuICAgICAgXTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgbG9ncyBjYXB0dXJlIHdpdGggY29tbWFuZDogJHt1dGlsLnF1b3RlKFt0aGlzLmFkYi5wYXRoLCAuLi5jbWRdKX1gKTtcbiAgICAgIHRoaXMucHJvYyA9IG5ldyBTdWJQcm9jZXNzKHRoaXMuYWRiLnBhdGgsIGNtZCk7XG4gICAgICB0aGlzLnByb2Mub24oJ2V4aXQnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIGxvZy5lcnJvcihgTG9nY2F0IHRlcm1pbmF0ZWQgd2l0aCBjb2RlICR7Y29kZX0sIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgICAgbG9nLndhcm4oJ0xvZ2NhdCBub3Qgc3RhcnRlZC4gQ29udGludWluZycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZGVycicsIChsaW5lcykgPT4ge1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgaWYgKC9leGVjdnBcXChcXCkvLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignTG9nY2F0IHByb2Nlc3MgZmFpbGVkIHRvIHN0YXJ0Jyk7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBMb2djYXQgcHJvY2VzcyBmYWlsZWQgdG8gc3RhcnQuIHN0ZGVycjogJHtsaW5lfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vdXRwdXRIYW5kbGVyKF8udHJpbShsaW5lKSwgJ1NUREVSUjogJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2Mub24oJ2xpbmVzLXN0ZG91dCcsIChsaW5lcykgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICB0aGlzLm91dHB1dEhhbmRsZXIoXy50cmltKGxpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnByb2Muc3RhcnQoMCk7XG4gICAgICAvLyByZXNvbHZlIGFmdGVyIGEgdGltZW91dCwgZXZlbiBpZiBubyBvdXRwdXQgd2FzIHJlY29yZGVkXG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIExPR0NBVF9QUk9DX1NUQVJUVVBfVElNRU9VVCk7XG4gICAgfSk7XG4gIH1cblxuICBvdXRwdXRIYW5kbGVyIChvdXRwdXQsIHByZWZpeCA9ICcnKSB7XG4gICAgaWYgKCFvdXRwdXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dzLmxlbmd0aCA+PSB0aGlzLm1heEJ1ZmZlclNpemUpIHtcbiAgICAgIHRoaXMubG9ncy5zaGlmdCgpO1xuICAgICAgaWYgKHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA+IDApIHtcbiAgICAgICAgLS10aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dE9iaiA9IHtcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGxldmVsOiAnQUxMJyxcbiAgICAgIG1lc3NhZ2U6IG91dHB1dCxcbiAgICB9O1xuICAgIHRoaXMubG9ncy5wdXNoKG91dHB1dE9iaik7XG4gICAgdGhpcy5lbWl0KCdvdXRwdXQnLCBvdXRwdXRPYmopO1xuICAgIGNvbnN0IGlzVHJhY2UgPSAvV1xcL1RyYWNlLy50ZXN0KG91dHB1dCk7XG4gICAgaWYgKHRoaXMuZGVidWcgJiYgKCFpc1RyYWNlIHx8IHRoaXMuZGVidWdUcmFjZSkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhwcmVmaXggKyBvdXRwdXQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3BDYXB0dXJlICgpIHtcbiAgICBsb2cuZGVidWcoJ1N0b3BwaW5nIGxvZ2NhdCBjYXB0dXJlJyk7XG4gICAgaWYgKCF0aGlzLnByb2MgfHwgIXRoaXMucHJvYy5pc1J1bm5pbmcpIHtcbiAgICAgIGxvZy5kZWJ1ZygnTG9nY2F0IGFscmVhZHkgc3RvcHBlZCcpO1xuICAgICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jLnJlbW92ZUFsbExpc3RlbmVycygnZXhpdCcpO1xuICAgIGF3YWl0IHRoaXMucHJvYy5zdG9wKCk7XG4gICAgdGhpcy5wcm9jID0gbnVsbDtcbiAgfVxuXG4gIGdldExvZ3MgKCkge1xuICAgIGlmICh0aGlzLmxvZ0lkeFNpbmNlTGFzdFJlcXVlc3QgPCB0aGlzLmxvZ3MubGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmxvZ3Muc2xpY2UodGhpcy5sb2dJZHhTaW5jZUxhc3RSZXF1ZXN0KTtcbiAgICAgIHRoaXMubG9nSWR4U2luY2VMYXN0UmVxdWVzdCA9IHRoaXMubG9ncy5sZW5ndGg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRBbGxMb2dzICgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2dzO1xuICB9XG5cbiAgYXN5bmMgY2xlYXIgKCkge1xuICAgIGxvZy5kZWJ1ZygnQ2xlYXJpbmcgbG9nY2F0IGxvZ3MgZnJvbSBkZXZpY2UnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXJncyA9IFsuLi50aGlzLmFkYi5kZWZhdWx0QXJncywgJ2xvZ2NhdCcsICctYyddO1xuICAgICAgYXdhaXQgZXhlYyh0aGlzLmFkYi5wYXRoLCBhcmdzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBGYWlsZWQgdG8gY2xlYXIgbG9nY2F0IGxvZ3M6ICR7ZXJyLnN0ZGVyciB8fCBlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nY2F0O1xuIl0sImZpbGUiOiJsaWIvbG9nY2F0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/build/lib/logger.js
CHANGED
|
@@ -7,12 +7,12 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
-
var
|
|
10
|
+
var _support = require("@appium/support");
|
|
11
11
|
|
|
12
|
-
const log =
|
|
12
|
+
const log = _support.logger.getLogger('ADB');
|
|
13
13
|
|
|
14
14
|
var _default = log;
|
|
15
15
|
exports.default = _default;require('source-map-support').install();
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLEtBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdBREInKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sImZpbGUiOiJsaWIvbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _logger = _interopRequireDefault(require("../logger.js"));
|
|
13
|
+
|
|
14
|
+
var _path = _interopRequireDefault(require("path"));
|
|
15
|
+
|
|
16
|
+
var _support = require("@appium/support");
|
|
17
|
+
|
|
18
|
+
var _lruCache = _interopRequireDefault(require("lru-cache"));
|
|
19
|
+
|
|
20
|
+
var _helpers = require("../helpers.js");
|
|
21
|
+
|
|
22
|
+
var _asyncLock = _interopRequireDefault(require("async-lock"));
|
|
23
|
+
|
|
24
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
25
|
+
|
|
26
|
+
var _crypto = _interopRequireDefault(require("crypto"));
|
|
27
|
+
|
|
28
|
+
const AAB_CACHE = new _lruCache.default({
|
|
29
|
+
max: 10,
|
|
30
|
+
dispose: (hash, extractedFilesRoot) => _support.fs.rimraf(extractedFilesRoot)
|
|
31
|
+
});
|
|
32
|
+
const AAB_CACHE_GUARD = new _asyncLock.default();
|
|
33
|
+
const UNIVERSAL_APK = 'universal.apk';
|
|
34
|
+
const aabUtilsMethods = {};
|
|
35
|
+
process.on('exit', () => {
|
|
36
|
+
if (!AAB_CACHE.size) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const paths = [...AAB_CACHE.values()];
|
|
41
|
+
|
|
42
|
+
_logger.default.debug(`Performing cleanup of ${paths.length} cached .aab ` + _support.util.pluralize('package', paths.length));
|
|
43
|
+
|
|
44
|
+
for (const appPath of paths) {
|
|
45
|
+
try {
|
|
46
|
+
_support.fs.rimrafSync(appPath);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
_logger.default.warn(e.message);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
aabUtilsMethods.extractUniversalApk = async function extractUniversalApk(aabPath, opts = {}) {
|
|
54
|
+
if (!(await _support.fs.exists(aabPath))) {
|
|
55
|
+
throw new Error(`The file at '${aabPath}' either does not exist or is not accessible`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const aabName = _path.default.basename(aabPath);
|
|
59
|
+
|
|
60
|
+
const apkName = aabName.substring(0, aabName.length - _path.default.extname(aabName).length) + '.apk';
|
|
61
|
+
const tmpRoot = await _support.tempDir.openDir();
|
|
62
|
+
|
|
63
|
+
const tmpApksPath = _path.default.join(tmpRoot, `${aabName}.apks`);
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
return await AAB_CACHE_GUARD.acquire(aabPath, async () => {
|
|
67
|
+
const aabHash = await _support.fs.hash(aabPath);
|
|
68
|
+
const {
|
|
69
|
+
keystore,
|
|
70
|
+
keystorePassword,
|
|
71
|
+
keyAlias,
|
|
72
|
+
keyPassword
|
|
73
|
+
} = opts;
|
|
74
|
+
let cacheHash = aabHash;
|
|
75
|
+
|
|
76
|
+
if (keystore) {
|
|
77
|
+
if (!(await _support.fs.exists(keystore))) {
|
|
78
|
+
throw new Error(`The keystore file at '${keystore}' either does not exist ` + `or is not accessible`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!keystorePassword || !keyAlias || !keyPassword) {
|
|
82
|
+
throw new Error('It is mandatory to also provide keystore password, key alias, ' + 'and key password if the keystore path is set');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const keystoreHash = await _support.fs.hash(keystore);
|
|
86
|
+
|
|
87
|
+
const keyAliasHash = _crypto.default.createHash('sha1');
|
|
88
|
+
|
|
89
|
+
keyAliasHash.update(keyAlias);
|
|
90
|
+
cacheHash = [cacheHash, keystoreHash, keyAliasHash.digest('hex')].join(':');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
_logger.default.debug(`Calculated the cache key for '${aabPath}': ${cacheHash}`);
|
|
94
|
+
|
|
95
|
+
if (AAB_CACHE.has(cacheHash)) {
|
|
96
|
+
const resultPath = _path.default.resolve(AAB_CACHE.get(cacheHash), apkName);
|
|
97
|
+
|
|
98
|
+
if (await _support.fs.exists(resultPath)) {
|
|
99
|
+
return resultPath;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
AAB_CACHE.del(cacheHash);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
await this.initAapt2();
|
|
106
|
+
const args = ['build-apks', '--aapt2', this.binaries.aapt2, '--bundle', aabPath, '--output', tmpApksPath, ...(keystore ? ['--ks', keystore, '--ks-pass', `pass:${keystorePassword}`, '--ks-key-alias', keyAlias, '--key-pass', `pass:${keyPassword}`] : []), '--mode=universal'];
|
|
107
|
+
|
|
108
|
+
_logger.default.debug(`Preparing universal .apks bundle from '${aabPath}'`);
|
|
109
|
+
|
|
110
|
+
await this.execBundletool(args, `Cannot build a universal .apks bundle from '${aabPath}'`);
|
|
111
|
+
|
|
112
|
+
_logger.default.debug(`Unpacking universal application bundle at '${tmpApksPath}' to '${tmpRoot}'`);
|
|
113
|
+
|
|
114
|
+
await (0, _helpers.unzipFile)(tmpApksPath, tmpRoot);
|
|
115
|
+
let universalApkPath;
|
|
116
|
+
const fileDeletionPromises = [];
|
|
117
|
+
const allFileNames = await _support.fs.readdir(tmpRoot);
|
|
118
|
+
|
|
119
|
+
for (const fileName of allFileNames) {
|
|
120
|
+
const fullPath = _path.default.join(tmpRoot, fileName);
|
|
121
|
+
|
|
122
|
+
if (fileName === UNIVERSAL_APK) {
|
|
123
|
+
universalApkPath = fullPath;
|
|
124
|
+
} else {
|
|
125
|
+
fileDeletionPromises.push(_support.fs.rimraf(fullPath));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
await _bluebird.default.all(fileDeletionPromises);
|
|
131
|
+
} catch (ign) {}
|
|
132
|
+
|
|
133
|
+
if (!universalApkPath) {
|
|
134
|
+
_logger.default.debug(`The following items were extracted from the .aab bundle: ${allFileNames}`);
|
|
135
|
+
|
|
136
|
+
throw new Error(`${UNIVERSAL_APK} cannot be found in '${aabPath}' bundle. ` + `Does the archive contain a valid application bundle?`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const resultPath = _path.default.join(tmpRoot, apkName);
|
|
140
|
+
|
|
141
|
+
_logger.default.debug(`Found ${UNIVERSAL_APK} at '${universalApkPath}'. Caching it to '${resultPath}'`);
|
|
142
|
+
|
|
143
|
+
await _support.fs.mv(universalApkPath, resultPath);
|
|
144
|
+
AAB_CACHE.set(cacheHash, tmpRoot);
|
|
145
|
+
return resultPath;
|
|
146
|
+
});
|
|
147
|
+
} catch (e) {
|
|
148
|
+
await _support.fs.rimraf(tmpRoot);
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
var _default = aabUtilsMethods;
|
|
154
|
+
exports.default = _default;require('source-map-support').install();
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hYWItdXRpbHMuanMiXSwibmFtZXMiOlsiQUFCX0NBQ0hFIiwiTFJVIiwibWF4IiwiZGlzcG9zZSIsImhhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFBQl9DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlVOSVZFUlNBTF9BUEsiLCJhYWJVdGlsc01ldGhvZHMiLCJwcm9jZXNzIiwib24iLCJzaXplIiwicGF0aHMiLCJ2YWx1ZXMiLCJsb2ciLCJkZWJ1ZyIsImxlbmd0aCIsInV0aWwiLCJwbHVyYWxpemUiLCJhcHBQYXRoIiwicmltcmFmU3luYyIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImV4dHJhY3RVbml2ZXJzYWxBcGsiLCJhYWJQYXRoIiwib3B0cyIsImV4aXN0cyIsIkVycm9yIiwiYWFiTmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImFwa05hbWUiLCJzdWJzdHJpbmciLCJleHRuYW1lIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwidG1wQXBrc1BhdGgiLCJqb2luIiwiYWNxdWlyZSIsImFhYkhhc2giLCJrZXlzdG9yZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiY2FjaGVIYXNoIiwia2V5c3RvcmVIYXNoIiwia2V5QWxpYXNIYXNoIiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsImhhcyIsInJlc3VsdFBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZGVsIiwiaW5pdEFhcHQyIiwiYXJncyIsImJpbmFyaWVzIiwiYWFwdDIiLCJleGVjQnVuZGxldG9vbCIsInVuaXZlcnNhbEFwa1BhdGgiLCJmaWxlRGVsZXRpb25Qcm9taXNlcyIsImFsbEZpbGVOYW1lcyIsInJlYWRkaXIiLCJmaWxlTmFtZSIsImZ1bGxQYXRoIiwicHVzaCIsIkIiLCJhbGwiLCJpZ24iLCJtdiIsInNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFD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QlQsVUFBVyxHQUF4Rjs7QUFDQSxZQUFNbkQsWUFBR3NFLEVBQUgsQ0FBTVYsZ0JBQU4sRUFBd0JULFVBQXhCLENBQU47QUFDQXpELE1BQUFBLFNBQVMsQ0FBQzZFLEdBQVYsQ0FBYzVCLFNBQWQsRUFBeUJYLE9BQXpCO0FBQ0EsYUFBT21CLFVBQVA7QUFDRCxLQTNFWSxDQUFiO0FBNEVELEdBN0VELENBNkVFLE9BQU9qQyxDQUFQLEVBQVU7QUFDVixVQUFNbEIsWUFBR0MsTUFBSCxDQUFVK0IsT0FBVixDQUFOO0FBQ0EsVUFBTWQsQ0FBTjtBQUNEO0FBQ0YsQ0ExRkQ7O2VBNEZlYixlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgeyB1bnppcEZpbGUgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IEFBQl9DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwLFxuICBkaXNwb3NlOiAoaGFzaCwgZXh0cmFjdGVkRmlsZXNSb290KSA9PiBmcy5yaW1yYWYoZXh0cmFjdGVkRmlsZXNSb290KSxcbn0pO1xuY29uc3QgQUFCX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgVU5JVkVSU0FMX0FQSyA9ICd1bml2ZXJzYWwuYXBrJztcblxuY29uc3QgYWFiVXRpbHNNZXRob2RzID0ge307XG5cbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gIGlmICghQUFCX0NBQ0hFLnNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRocyA9IFsuLi5BQUJfQ0FDSEUudmFsdWVzKCldO1xuICBsb2cuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke3BhdGhzLmxlbmd0aH0gY2FjaGVkIC5hYWIgYCArXG4gICAgdXRpbC5wbHVyYWxpemUoJ3BhY2thZ2UnLCBwYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXBrQ3JlYXRpb25PcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5c3RvcmUgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBkZXBsb3ltZW50IGtleXN0b3JlIHVzZWRcbiAqIHRvIHNpZ24gdGhlIEFQS3MuIFRoaXMgZmxhZyBpcyBvcHRpb25hbC4gSWYgeW91IGRvbid0IGluY2x1ZGUgaXQsXG4gKiBidW5kbGV0b29sIGF0dGVtcHRzIHRvIHNpZ24geW91ciBBUEtzIHdpdGggYSBkZWJ1ZyBzaWduaW5nIGtleS5cbiAqIElmIHRoZSAuYXBrIGhhcyBiZWVuIGFscmVhZHkgc2lnbmVkIGFuZCBjYWNoZWQgdGhlbiBpdCBpcyBub3QgZ29pbmcgdG8gYmUgcmVzaWduZWRcbiAqIHVubGVzcyBhIGRpZmZlcmVudCBrZXlzdG9yZSBvciBrZXkgYWxpYXMgaXMgdXNlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlzdG9yZVBhc3N3b3JkIFNwZWNpZmllcyB5b3VyIGtleXN0b3Jl4oCZcyBwYXNzd29yZC5cbiAqIEl0IGlzIG1hbmRhdG9yeSB0byBwcm92aWRlIHRoaXMgdmFsdWUgaWYgYGtleXN0b3JlYCBvbmUgaXMgYXNzaWduZWRcbiAqIG90aGVyd2lzZSBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUFsaWFzIFNwZWNpZmllcyB0aGUgYWxpYXMgb2YgdGhlIHNpZ25pbmcga2V5IHlvdSB3YW50IHRvIHVzZS5cbiAqIEl0IGlzIG1hbmRhdG9yeSB0byBwcm92aWRlIHRoaXMgdmFsdWUgaWYgYGtleXN0b3JlYCBvbmUgaXMgYXNzaWduZWRcbiAqIG90aGVyd2lzZSBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleVBhc3N3b3JkIFNwZWNpZmllcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBzaWduaW5nIGtleS5cbiAqIEl0IGlzIG1hbmRhdG9yeSB0byBwcm92aWRlIHRoaXMgdmFsdWUgaWYgYGtleXN0b3JlYCBvbmUgaXMgYXNzaWduZWRcbiAqIG90aGVyd2lzZSBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgdW5pdmVyc2FsIC5hcGsgZnJvbSB0aGUgZ2l2ZW4gLmFhYiBwYWNrYWdlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYnVuZGxldG9vbCNnZW5lcmF0ZV9hcGtzXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhYWJQYXRoIEZ1bGwgcGF0aCB0byB0aGUgc291cmNlIC5hYWIgcGFja2FnZVxuICogQHBhcmFtIHtBcGtDcmVhdGlvbk9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSByZXN1bHRpbmcgdW5pdmVyc2FsIC5hcGsuIFRoZSAuYXBrIGlzIHN0b3JlZCBpbiB0aGUgaW50ZXJuYWwgY2FjaGVcbiAqIGJ5IGRlZmF1bHQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSB1bml2ZXJzYWwgLmFwa1xuICovXG5hYWJVdGlsc01ldGhvZHMuZXh0cmFjdFVuaXZlcnNhbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RVbml2ZXJzYWxBcGsgKGFhYlBhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhYWJQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7YWFiUGF0aH0nIGVpdGhlciBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG5cbiAgY29uc3QgYWFiTmFtZSA9IHBhdGguYmFzZW5hbWUoYWFiUGF0aCk7XG4gIGNvbnN0IGFwa05hbWUgPSBhYWJOYW1lLnN1YnN0cmluZygwLCBhYWJOYW1lLmxlbmd0aCAtIHBhdGguZXh0bmFtZShhYWJOYW1lKS5sZW5ndGgpICsgJy5hcGsnO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIGNvbnN0IHRtcEFwa3NQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIGAke2FhYk5hbWV9LmFwa3NgKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgQUFCX0NBQ0hFX0dVQVJELmFjcXVpcmUoYWFiUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWFiSGFzaCA9IGF3YWl0IGZzLmhhc2goYWFiUGF0aCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGtleXN0b3JlLFxuICAgICAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgICAgICBrZXlBbGlhcyxcbiAgICAgICAga2V5UGFzc3dvcmQsXG4gICAgICB9ID0gb3B0cztcbiAgICAgIGxldCBjYWNoZUhhc2ggPSBhYWJIYXNoO1xuICAgICAgaWYgKGtleXN0b3JlKSB7XG4gICAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGtleXN0b3JlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGtleXN0b3JlIGZpbGUgYXQgJyR7a2V5c3RvcmV9JyBlaXRoZXIgZG9lcyBub3QgZXhpc3QgYCArXG4gICAgICAgICAgICBgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtleXN0b3JlUGFzc3dvcmQgfHwgIWtleUFsaWFzIHx8ICFrZXlQYXNzd29yZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbWFuZGF0b3J5IHRvIGFsc28gcHJvdmlkZSBrZXlzdG9yZSBwYXNzd29yZCwga2V5IGFsaWFzLCAnICtcbiAgICAgICAgICAgICdhbmQga2V5IHBhc3N3b3JkIGlmIHRoZSBrZXlzdG9yZSBwYXRoIGlzIHNldCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXN0b3JlSGFzaCA9IGF3YWl0IGZzLmhhc2goa2V5c3RvcmUpO1xuICAgICAgICBjb25zdCBrZXlBbGlhc0hhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpO1xuICAgICAgICBrZXlBbGlhc0hhc2gudXBkYXRlKGtleUFsaWFzKTtcbiAgICAgICAgY2FjaGVIYXNoID0gW2NhY2hlSGFzaCwga2V5c3RvcmVIYXNoLCBrZXlBbGlhc0hhc2guZGlnZXN0KCdoZXgnKV0uam9pbignOicpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBDYWxjdWxhdGVkIHRoZSBjYWNoZSBrZXkgZm9yICcke2FhYlBhdGh9JzogJHtjYWNoZUhhc2h9YCk7XG4gICAgICBpZiAoQUFCX0NBQ0hFLmhhcyhjYWNoZUhhc2gpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoQUFCX0NBQ0hFLmdldChjYWNoZUhhc2gpLCBhcGtOYW1lKTtcbiAgICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRQYXRoO1xuICAgICAgICB9XG4gICAgICAgIEFBQl9DQUNIRS5kZWwoY2FjaGVIYXNoKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pbml0QWFwdDIoKTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdidWlsZC1hcGtzJyxcbiAgICAgICAgJy0tYWFwdDInLCB0aGlzLmJpbmFyaWVzLmFhcHQyLFxuICAgICAgICAnLS1idW5kbGUnLCBhYWJQYXRoLFxuICAgICAgICAnLS1vdXRwdXQnLCB0bXBBcGtzUGF0aCxcbiAgICAgICAgLi4uKGtleXN0b3JlID8gW1xuICAgICAgICAgICctLWtzJywga2V5c3RvcmUsXG4gICAgICAgICAgJy0ta3MtcGFzcycsIGBwYXNzOiR7a2V5c3RvcmVQYXNzd29yZH1gLFxuICAgICAgICAgICctLWtzLWtleS1hbGlhcycsIGtleUFsaWFzLFxuICAgICAgICAgICctLWtleS1wYXNzJywgYHBhc3M6JHtrZXlQYXNzd29yZH1gLFxuICAgICAgICBdIDogW10pLFxuICAgICAgICAnLS1tb2RlPXVuaXZlcnNhbCdcbiAgICAgIF07XG4gICAgICBsb2cuZGVidWcoYFByZXBhcmluZyB1bml2ZXJzYWwgLmFwa3MgYnVuZGxlIGZyb20gJyR7YWFiUGF0aH0nYCk7XG4gICAgICBhd2FpdCB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsIGBDYW5ub3QgYnVpbGQgYSB1bml2ZXJzYWwgLmFwa3MgYnVuZGxlIGZyb20gJyR7YWFiUGF0aH0nYCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgVW5wYWNraW5nIHVuaXZlcnNhbCBhcHBsaWNhdGlvbiBidW5kbGUgYXQgJyR7dG1wQXBrc1BhdGh9JyB0byAnJHt0bXBSb290fSdgKTtcbiAgICAgIGF3YWl0IHVuemlwRmlsZSh0bXBBcGtzUGF0aCwgdG1wUm9vdCk7XG4gICAgICBsZXQgdW5pdmVyc2FsQXBrUGF0aDtcbiAgICAgIGNvbnN0IGZpbGVEZWxldGlvblByb21pc2VzID0gW107XG4gICAgICBjb25zdCBhbGxGaWxlTmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRtcFJvb3QpO1xuICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBhbGxGaWxlTmFtZXMpIHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgZmlsZU5hbWUpO1xuICAgICAgICBpZiAoZmlsZU5hbWUgPT09IFVOSVZFUlNBTF9BUEspIHtcbiAgICAgICAgICB1bml2ZXJzYWxBcGtQYXRoID0gZnVsbFBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZURlbGV0aW9uUHJvbWlzZXMucHVzaChmcy5yaW1yYWYoZnVsbFBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgQi5hbGwoZmlsZURlbGV0aW9uUHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgaWYgKCF1bml2ZXJzYWxBcGtQYXRoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBpdGVtcyB3ZXJlIGV4dHJhY3RlZCBmcm9tIHRoZSAuYWFiIGJ1bmRsZTogJHthbGxGaWxlTmFtZXN9YCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtVTklWRVJTQUxfQVBLfSBjYW5ub3QgYmUgZm91bmQgaW4gJyR7YWFiUGF0aH0nIGJ1bmRsZS4gYCArXG4gICAgICAgICAgYERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBhIHZhbGlkIGFwcGxpY2F0aW9uIGJ1bmRsZT9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgYXBrTmFtZSk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kICR7VU5JVkVSU0FMX0FQS30gYXQgJyR7dW5pdmVyc2FsQXBrUGF0aH0nLiBDYWNoaW5nIGl0IHRvICcke3Jlc3VsdFBhdGh9J2ApO1xuICAgICAgYXdhaXQgZnMubXYodW5pdmVyc2FsQXBrUGF0aCwgcmVzdWx0UGF0aCk7XG4gICAgICBBQUJfQ0FDSEUuc2V0KGNhY2hlSGFzaCwgdG1wUm9vdCk7XG4gICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBhYWJVdGlsc01ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hYWItdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|