Socket
Socket
Sign inDemoInstall

appium-support

Package Overview
Dependencies
Maintainers
5
Versions
145
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

appium-support - npm Package Compare versions

Comparing version 2.27.0 to 2.27.1

16

build/index.js

@@ -10,2 +10,4 @@ "use strict";

require("source-map-support/register");
var tempDir = _interopRequireWildcard(require("./lib/tempdir"));

@@ -54,7 +56,13 @@

exports.mjpeg = mjpeg;
const fs = fsIndex.fs;
const {
fs
} = fsIndex;
exports.fs = fs;
const cancellableDelay = util.cancellableDelay;
const {
cancellableDelay
} = util;
exports.cancellableDelay = cancellableDelay;
const mkdirp = mkdirpIndex.mkdirp;
const {
mkdirp
} = mkdirpIndex;
exports.mkdirp = mkdirp;

@@ -79,2 +87,2 @@ var _default = {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZzIiwiZnNJbmRleCIsImNhbmNlbGxhYmxlRGVsYXkiLCJ1dGlsIiwibWtkaXJwIiwibWtkaXJwSW5kZXgiLCJ0ZW1wRGlyIiwic3lzdGVtIiwicGxpc3QiLCJsb2dnZXIiLCJwcm9jZXNzIiwiemlwIiwiaW1hZ2VVdGlsIiwibmV0IiwibWpwZWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7TUFHUUEsRSxHQUFPQyxPLENBQVBELEU7O01BQ0FFLGdCLEdBQXFCQyxJLENBQXJCRCxnQjs7TUFDQUUsTSxHQUFXQyxXLENBQVhELE07O2VBTU87QUFDYkUsRUFBQUEsT0FEYTtBQUNKQyxFQUFBQSxNQURJO0FBQ0lKLEVBQUFBLElBREo7QUFDVUgsRUFBQUEsRUFEVjtBQUNjRSxFQUFBQSxnQkFEZDtBQUNnQ00sRUFBQUEsS0FEaEM7QUFDdUNKLEVBQUFBLE1BRHZDO0FBQytDSyxFQUFBQSxNQUQvQztBQUN1REMsRUFBQUEsT0FEdkQ7QUFFYkMsRUFBQUEsR0FGYTtBQUVSQyxFQUFBQSxTQUZRO0FBRUdDLEVBQUFBLEdBRkg7QUFFUUMsRUFBQUE7QUFGUixDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdGVtcERpciBmcm9tICcuL2xpYi90ZW1wZGlyJztcbmltcG9ydCAqIGFzIHN5c3RlbSBmcm9tICcuL2xpYi9zeXN0ZW0nO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICcuL2xpYi91dGlsJztcbmltcG9ydCAqIGFzIGZzSW5kZXggZnJvbSAnLi9saWIvZnMnO1xuaW1wb3J0ICogYXMgbmV0IGZyb20gJy4vbGliL25ldCc7XG5pbXBvcnQgKiBhcyBwbGlzdCBmcm9tICcuL2xpYi9wbGlzdCc7XG5pbXBvcnQgKiBhcyBta2RpcnBJbmRleCBmcm9tICcuL2xpYi9ta2RpcnAnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4vbGliL2xvZ2dpbmcnO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICcuL2xpYi9wcm9jZXNzJztcbmltcG9ydCAqIGFzIHppcCBmcm9tICcuL2xpYi96aXAnO1xuaW1wb3J0ICogYXMgaW1hZ2VVdGlsIGZyb20gJy4vbGliL2ltYWdlLXV0aWwnO1xuaW1wb3J0ICogYXMgbWpwZWcgZnJvbSAnLi9saWIvbWpwZWcnO1xuXG5cbmNvbnN0IHsgZnMgfSA9IGZzSW5kZXg7XG5jb25zdCB7IGNhbmNlbGxhYmxlRGVsYXkgfSA9IHV0aWw7XG5jb25zdCB7IG1rZGlycCB9ID0gbWtkaXJwSW5kZXg7XG5cbmV4cG9ydCB7XG4gIHRlbXBEaXIsIHN5c3RlbSwgdXRpbCwgZnMsIGNhbmNlbGxhYmxlRGVsYXksIHBsaXN0LCBta2RpcnAsIGxvZ2dlciwgcHJvY2VzcyxcbiAgemlwLCBpbWFnZVV0aWwsIG5ldCwgbWpwZWdcbn07XG5leHBvcnQgZGVmYXVsdCB7XG4gIHRlbXBEaXIsIHN5c3RlbSwgdXRpbCwgZnMsIGNhbmNlbGxhYmxlRGVsYXksIHBsaXN0LCBta2RpcnAsIGxvZ2dlciwgcHJvY2VzcyxcbiAgemlwLCBpbWFnZVV0aWwsIG5ldCwgbWpwZWdcbn07XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImZzIiwiZnNJbmRleCIsImNhbmNlbGxhYmxlRGVsYXkiLCJ1dGlsIiwibWtkaXJwIiwibWtkaXJwSW5kZXgiLCJ0ZW1wRGlyIiwic3lzdGVtIiwicGxpc3QiLCJsb2dnZXIiLCJwcm9jZXNzIiwiemlwIiwiaW1hZ2VVdGlsIiwibmV0IiwibWpwZWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7OztBQUdBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFTQyxPQUFmOztBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUF1QkMsSUFBN0I7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWFDLFdBQW5COztlQU1lO0FBQ2JDLEVBQUFBLE9BRGE7QUFDSkMsRUFBQUEsTUFESTtBQUNJSixFQUFBQSxJQURKO0FBQ1VILEVBQUFBLEVBRFY7QUFDY0UsRUFBQUEsZ0JBRGQ7QUFDZ0NNLEVBQUFBLEtBRGhDO0FBQ3VDSixFQUFBQSxNQUR2QztBQUMrQ0ssRUFBQUEsTUFEL0M7QUFDdURDLEVBQUFBLE9BRHZEO0FBRWJDLEVBQUFBLEdBRmE7QUFFUkMsRUFBQUEsU0FGUTtBQUVHQyxFQUFBQSxHQUZIO0FBRVFDLEVBQUFBO0FBRlIsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlbXBEaXIgZnJvbSAnLi9saWIvdGVtcGRpcic7XG5pbXBvcnQgKiBhcyBzeXN0ZW0gZnJvbSAnLi9saWIvc3lzdGVtJztcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSAnLi9saWIvdXRpbCc7XG5pbXBvcnQgKiBhcyBmc0luZGV4IGZyb20gJy4vbGliL2ZzJztcbmltcG9ydCAqIGFzIG5ldCBmcm9tICcuL2xpYi9uZXQnO1xuaW1wb3J0ICogYXMgcGxpc3QgZnJvbSAnLi9saWIvcGxpc3QnO1xuaW1wb3J0ICogYXMgbWtkaXJwSW5kZXggZnJvbSAnLi9saWIvbWtkaXJwJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xpYi9sb2dnaW5nJztcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSAnLi9saWIvcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyB6aXAgZnJvbSAnLi9saWIvemlwJztcbmltcG9ydCAqIGFzIGltYWdlVXRpbCBmcm9tICcuL2xpYi9pbWFnZS11dGlsJztcbmltcG9ydCAqIGFzIG1qcGVnIGZyb20gJy4vbGliL21qcGVnJztcblxuXG5jb25zdCB7IGZzIH0gPSBmc0luZGV4O1xuY29uc3QgeyBjYW5jZWxsYWJsZURlbGF5IH0gPSB1dGlsO1xuY29uc3QgeyBta2RpcnAgfSA9IG1rZGlycEluZGV4O1xuXG5leHBvcnQge1xuICB0ZW1wRGlyLCBzeXN0ZW0sIHV0aWwsIGZzLCBjYW5jZWxsYWJsZURlbGF5LCBwbGlzdCwgbWtkaXJwLCBsb2dnZXIsIHByb2Nlc3MsXG4gIHppcCwgaW1hZ2VVdGlsLCBuZXQsIG1qcGVnXG59O1xuZXhwb3J0IGRlZmF1bHQge1xuICB0ZW1wRGlyLCBzeXN0ZW0sIHV0aWwsIGZzLCBjYW5jZWxsYWJsZURlbGF5LCBwbGlzdCwgbWtkaXJwLCBsb2dnZXIsIHByb2Nlc3MsXG4gIHppcCwgaW1hZ2VVdGlsLCBuZXQsIG1qcGVnXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9

@@ -10,3 +10,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -34,14 +34,10 @@ var _fs2 = _interopRequireDefault(require("fs"));

let fs = {
hasAccess(path) {
var _this = this;
async hasAccess(path) {
try {
await this.access(path, _fs2.default.R_OK);
} catch (err) {
return false;
}
return (0, _asyncToGenerator2.default)(function* () {
try {
yield _this.access(path, _fs2.default.R_OK);
} catch (err) {
return false;
}
return true;
})();
return true;
},

@@ -55,32 +51,24 @@

mkdir(dirName) {
return (0, _asyncToGenerator2.default)(function* () {
let _mkdir = _bluebird.default.promisify(_fs2.default.mkdir);
async mkdir(dirName) {
let _mkdir = _bluebird.default.promisify(_fs2.default.mkdir);
try {
yield _mkdir(dirName);
} catch (err) {
if (err && err.code !== 'EEXIST') {
throw err;
}
try {
await _mkdir(dirName);
} catch (err) {
if (err && err.code !== 'EEXIST') {
throw err;
}
})();
}
},
copyFile(source, destination, ...otherArgs) {
var _this2 = this;
async copyFile(source, destination, ...otherArgs) {
if (!(await this.hasAccess(source))) {
throw new Error(`The file at '${source}' does not exist or is not accessible`);
}
return (0, _asyncToGenerator2.default)(function* () {
if (!(yield _this2.hasAccess(source))) {
throw new Error(`The file at '${source}' does not exist or is not accessible`);
}
return yield _bluebird.default.promisify(_ncp.default)(source, destination, ...otherArgs);
})();
return await _bluebird.default.promisify(_ncp.default)(source, destination, ...otherArgs);
},
md5(filePath) {
return (0, _asyncToGenerator2.default)(function* () {
return yield md5(filePath);
})();
async md5(filePath) {
return await md5(filePath);
},

@@ -92,14 +80,12 @@

hash(filePath, algorithm = 'sha1') {
return (0, _asyncToGenerator2.default)(function* () {
return yield new _bluebird.default((resolve, reject) => {
const fileHash = _crypto.default.createHash(algorithm);
async hash(filePath, algorithm = 'sha1') {
return await new _bluebird.default((resolve, reject) => {
const fileHash = _crypto.default.createHash(algorithm);
const readStream = _fs2.default.createReadStream(filePath);
const readStream = _fs2.default.createReadStream(filePath);
readStream.on('error', e => reject(new Error(`Cannot calculate ${algorithm} hash for '${filePath}'. Original error: ${e.message}`)));
readStream.on('data', chunk => fileHash.update(chunk));
readStream.on('end', () => resolve(fileHash.digest('hex')));
});
})();
readStream.on('error', e => reject(new Error(`Cannot calculate ${algorithm} hash for '${filePath}'. Original error: ${e.message}`)));
readStream.on('data', chunk => fileHash.update(chunk));
readStream.on('end', () => resolve(fileHash.digest('hex')));
});
}

@@ -111,4 +97,3 @@

for (var _i = 0; _i < simples.length; _i++) {
const s = simples[_i];
for (const s of simples) {
fs[s] = _bluebird.default.promisify(_fs2.default[s]);

@@ -119,4 +104,3 @@ }

for (var _i2 = 0; _i2 < constants.length; _i2++) {
const c = constants[_i2];
for (const c of constants) {
fs[c] = _fs2.default[c];

@@ -129,2 +113,2 @@ }

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJtZDUiLCJCIiwicHJvbWlzaWZ5IiwibWQ1ZmlsZSIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImFjY2VzcyIsIl9mcyIsIlJfT0siLCJlcnIiLCJleGlzdHMiLCJyaW1yYWYiLCJta2RpciIsImRpck5hbWUiLCJfbWtkaXIiLCJjb2RlIiwiY29weUZpbGUiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsIm90aGVyQXJncyIsIkVycm9yIiwibmNwIiwiZmlsZVBhdGgiLCJtdiIsIndoaWNoIiwiZ2xvYiIsImhhc2giLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImUiLCJtZXNzYWdlIiwiY2h1bmsiLCJ1cGRhdGUiLCJkaWdlc3QiLCJzaW1wbGVzIiwicyIsImNvbnN0YW50cyIsImMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxrQkFBRUMsU0FBRixDQUFZQyxnQkFBWixDQUFaOztBQUVBLElBQUlDLEVBQUUsR0FBRztBQUNEQyxFQUFBQSxTQUFOLENBQWlCQyxJQUFqQixFQUF1QjtBQUFBOztBQUFBO0FBQ3JCLFVBQUk7QUFDRixjQUFNLEtBQUksQ0FBQ0MsTUFBTCxDQUFZRCxJQUFaLEVBQWtCRSxhQUFJQyxJQUF0QixDQUFOO0FBQ0QsT0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWTtBQUNaLGVBQU8sS0FBUDtBQUNEOztBQUNELGFBQU8sSUFBUDtBQU5xQjtBQU90QixHQVJNOztBQVNQQyxFQUFBQSxNQUFNLENBQUVMLElBQUYsRUFBUTtBQUFFLFdBQU8sS0FBS0QsU0FBTCxDQUFlQyxJQUFmLENBQVA7QUFBOEIsR0FUdkM7O0FBVVBNLEVBQUFB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SW1DLENBQUosQ0FBWixDQUFSO0FBQ0Q7O0FBR0QsTUFBTUMsU0FBUyxHQUFHLENBQ2hCLE1BRGdCLEVBQ1IsTUFEUSxFQUNBLE1BREEsRUFDUSxNQURSLEVBQ2dCLFdBRGhCLENBQWxCOztBQUdBLHdCQUFnQkEsU0FBaEIsZ0JBQTJCO0FBQXRCLFFBQU1DLENBQUMsR0FBSUQsU0FBSixLQUFQO0FBQ0h4QyxFQUFBQSxFQUFFLENBQUN5QyxDQUFELENBQUYsR0FBUXJDLGFBQUlxQyxDQUFKLENBQVI7QUFDRDs7ZUFHY3pDLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBqc2hpbnQgaWdub3JlOiBzdGFydFxuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5pbXBvcnQgcmltcmFmIGZyb20gJ3JpbXJhZic7XG5pbXBvcnQgbWQ1ZmlsZSBmcm9tICdtZDUtZmlsZSc7XG5pbXBvcnQgbmNwIGZyb20gJ25jcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbXYgZnJvbSAnbXYnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5cbmNvbnN0IG1kNSA9IEIucHJvbWlzaWZ5KG1kNWZpbGUpO1xuXG5sZXQgZnMgPSB7XG4gIGFzeW5jIGhhc0FjY2VzcyAocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFjY2VzcyhwYXRoLCBfZnMuUl9PSyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBleGlzdHMgKHBhdGgpIHsgcmV0dXJuIHRoaXMuaGFzQWNjZXNzKHBhdGgpOyB9LFxuICByaW1yYWY6IEIucHJvbWlzaWZ5KHJpbXJhZiksXG4gIGFzeW5jIG1rZGlyIChkaXJOYW1lKSB7XG4gICAgbGV0IF9ta2RpciA9IEIucHJvbWlzaWZ5KF9mcy5ta2Rpcik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IF9ta2RpcihkaXJOYW1lKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGFzeW5jIGNvcHlGaWxlIChzb3VyY2UsIGRlc3RpbmF0aW9uLCAuLi5vdGhlckFyZ3MpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuaGFzQWNjZXNzKHNvdXJjZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7c291cmNlfScgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IChCLnByb21pc2lmeShuY3ApKShzb3VyY2UsIGRlc3RpbmF0aW9uLCAuLi5vdGhlckFyZ3MpO1xuICB9LFxuICBhc3luYyBtZDUgKGZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIGF3YWl0IG1kNShmaWxlUGF0aCk7XG4gIH0sXG4gIG12OiBCLnByb21pc2lmeShtdiksXG4gIHdoaWNoOiBCLnByb21pc2lmeSh3aGljaCksXG4gIGdsb2I6IEIucHJvbWlzaWZ5KGdsb2IpLFxuICBhc3luYyBoYXNoIChmaWxlUGF0aCwgYWxnb3JpdGhtID0gJ3NoYTEnKSB7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKTtcbiAgICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBfZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgQ2Fubm90IGNhbGN1bGF0ZSAke2FsZ29yaXRobX0gaGFzaCBmb3IgJyR7ZmlsZVBhdGh9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiBmaWxlSGFzaC51cGRhdGUoY2h1bmspKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoZmlsZUhhc2guZGlnZXN0KCdoZXgnKSkpO1xuICAgIH0pO1xuICB9LFxufTtcblxuLy8gYWRkIHRoZSBzdXBwb3J0ZWQgYGZzYCBmdW5jdGlvbnNcbmNvbnN0IHNpbXBsZXMgPSBbXG4gICdvcGVuJywgJ2Nsb3NlJywgJ2FjY2VzcycsICdyZWFkRmlsZScsICd3cml0ZUZpbGUnLCAnd3JpdGUnLCAncmVhZCcsXG4gICdyZWFkbGluaycsICdjaG1vZCcsICd1bmxpbmsnLCAncmVhZGRpcicsICdzdGF0JywgJ3JlbmFtZScsICdsc3RhdCcsXG5dO1xuZm9yIChjb25zdCBzIG9mIHNpbXBsZXMpIHtcbiAgZnNbc10gPSBCLnByb21pc2lmeShfZnNbc10pO1xufVxuXG4vLyBhZGQgdGhlIGNvbnN0YW50cyBmcm9tIGBmc2BcbmNvbnN0IGNvbnN0YW50cyA9IFtcbiAgJ0ZfT0snLCAnUl9PSycsICdXX09LJywgJ1hfT0snLCAnY29uc3RhbnRzJyxcbl07XG5mb3IgKGNvbnN0IGMgb2YgY29uc3RhbnRzKSB7XG4gIGZzW2NdID0gX2ZzW2NdO1xufVxuXG5leHBvcnQgeyBmcyB9O1xuZXhwb3J0IGRlZmF1bHQgZnM7XG4iXSwiZmlsZSI6ImxpYi9mcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJtZDUiLCJCIiwicHJvbWlzaWZ5IiwibWQ1ZmlsZSIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImFjY2VzcyIsIl9mcyIsIlJfT0siLCJlcnIiLCJleGlzdHMiLCJyaW1yYWYiLCJta2RpciIsImRpck5hbWUiLCJfbWtkaXIiLCJjb2RlIiwiY29weUZpbGUiLCJzb3VyY2UiLCJkZXN0aW5hdGlvbiIsIm90aGVyQXJncyIsIkVycm9yIiwibmNwIiwiZmlsZVBhdGgiLCJtdiIsIndoaWNoIiwiZ2xvYiIsImhhc2giLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJvbiIsImUiLCJtZXNzYWdlIiwiY2h1bmsiLCJ1cGRhdGUiLCJkaWdlc3QiLCJzaW1wbGVzIiwicyIsImNvbnN0YW50cyIsImMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxrQkFBRUMsU0FBRixDQUFZQyxnQkFBWixDQUFaOztBQUVBLElBQUlDLEVBQUUsR0FBRztBQUNQLFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNLEtBQUtDLE1BQUwsQ0FBWUQsSUFBWixFQUFrQkUsYUFBSUMsSUFBdEIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQVJNOztBQVNQQyxFQUFBQSxNQUFNLENBQUVMLElBQUYsRUFBUTtBQUFFLFdBQU8sS0FBS0QsU0FBTCxDQUFlQyxJQUFmLENBQVA7QUFBOEIsR0FUdkM7O0FBVVBNLEVBQUFBLE1BQU0sRUFBRVgsa0JBQUVDLFNBQUYs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RUFDZ0IsV0FEaEIsQ0FBbEI7O0FBR0EsS0FBSyxNQUFNQyxDQUFYLElBQWdCRCxTQUFoQixFQUEyQjtBQUN6QnhDLEVBQUFBLEVBQUUsQ0FBQ3lDLENBQUQsQ0FBRixHQUFRckMsYUFBSXFDLENBQUosQ0FBUjtBQUNEOztlQUdjekMsRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcbmltcG9ydCByaW1yYWYgZnJvbSAncmltcmFmJztcbmltcG9ydCBtZDVmaWxlIGZyb20gJ21kNS1maWxlJztcbmltcG9ydCBuY3AgZnJvbSAnbmNwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBtdiBmcm9tICdtdic7XG5pbXBvcnQgd2hpY2ggZnJvbSAnd2hpY2gnO1xuaW1wb3J0IGdsb2IgZnJvbSAnZ2xvYic7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cblxuY29uc3QgbWQ1ID0gQi5wcm9taXNpZnkobWQ1ZmlsZSk7XG5cbmxldCBmcyA9IHtcbiAgYXN5bmMgaGFzQWNjZXNzIChwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYWNjZXNzKHBhdGgsIF9mcy5SX09LKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGV4aXN0cyAocGF0aCkgeyByZXR1cm4gdGhpcy5oYXNBY2Nlc3MocGF0aCk7IH0sXG4gIHJpbXJhZjogQi5wcm9taXNpZnkocmltcmFmKSxcbiAgYXN5bmMgbWtkaXIgKGRpck5hbWUpIHtcbiAgICBsZXQgX21rZGlyID0gQi5wcm9taXNpZnkoX2ZzLm1rZGlyKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgX21rZGlyKGRpck5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSAhPT0gJ0VFWElTVCcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYXN5bmMgY29weUZpbGUgKHNvdXJjZSwgZGVzdGluYXRpb24sIC4uLm90aGVyQXJncykge1xuICAgIGlmICghYXdhaXQgdGhpcy5oYXNBY2Nlc3Moc291cmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgKEIucHJvbWlzaWZ5KG5jcCkpKHNvdXJjZSwgZGVzdGluYXRpb24sIC4uLm90aGVyQXJncyk7XG4gIH0sXG4gIGFzeW5jIG1kNSAoZmlsZVBhdGgpIHtcbiAgICByZXR1cm4gYXdhaXQgbWQ1KGZpbGVQYXRoKTtcbiAgfSxcbiAgbXY6IEIucHJvbWlzaWZ5KG12KSxcbiAgd2hpY2g6IEIucHJvbWlzaWZ5KHdoaWNoKSxcbiAgZ2xvYjogQi5wcm9taXNpZnkoZ2xvYiksXG4gIGFzeW5jIGhhc2ggKGZpbGVQYXRoLCBhbGdvcml0aG0gPSAnc2hhMScpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZmlsZUhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pO1xuICAgICAgY29uc3QgcmVhZFN0cmVhbSA9IF9mcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgKGUpID0+IHJlamVjdChcbiAgICAgICAgbmV3IEVycm9yKGBDYW5ub3QgY2FsY3VsYXRlICR7YWxnb3JpdGhtfSBoYXNoIGZvciAnJHtmaWxlUGF0aH0nLiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2RhdGEnLCAoY2h1bmspID0+IGZpbGVIYXNoLnVwZGF0ZShjaHVuaykpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShmaWxlSGFzaC5kaWdlc3QoJ2hleCcpKSk7XG4gICAgfSk7XG4gIH0sXG59O1xuXG4vLyBhZGQgdGhlIHN1cHBvcnRlZCBgZnNgIGZ1bmN0aW9uc1xuY29uc3Qgc2ltcGxlcyA9IFtcbiAgJ29wZW4nLCAnY2xvc2UnLCAnYWNjZXNzJywgJ3JlYWRGaWxlJywgJ3dyaXRlRmlsZScsICd3cml0ZScsICdyZWFkJyxcbiAgJ3JlYWRsaW5rJywgJ2NobW9kJywgJ3VubGluaycsICdyZWFkZGlyJywgJ3N0YXQnLCAncmVuYW1lJywgJ2xzdGF0Jyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc2ltcGxlcykge1xuICBmc1tzXSA9IEIucHJvbWlzaWZ5KF9mc1tzXSk7XG59XG5cbi8vIGFkZCB0aGUgY29uc3RhbnRzIGZyb20gYGZzYFxuY29uc3QgY29uc3RhbnRzID0gW1xuICAnRl9PSycsICdSX09LJywgJ1dfT0snLCAnWF9PSycsICdjb25zdGFudHMnLFxuXTtcbmZvciAoY29uc3QgYyBvZiBjb25zdGFudHMpIHtcbiAgZnNbY10gPSBfZnNbY107XG59XG5cbmV4cG9ydCB7IGZzIH07XG5leHBvcnQgZGVmYXVsdCBmcztcbiJdLCJmaWxlIjoibGliL2ZzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -18,6 +18,4 @@ "use strict";

var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
require("source-map-support/register");
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _lodash = _interopRequireDefault(require("lodash"));

@@ -35,5 +33,7 @@

const MIME_JPEG = _jimp.default.MIME_JPEG,
MIME_PNG = _jimp.default.MIME_PNG,
MIME_BMP = _jimp.default.MIME_BMP;
const {
MIME_JPEG,
MIME_PNG,
MIME_BMP
} = _jimp.default;
exports.MIME_BMP = MIME_BMP;

@@ -49,35 +49,28 @@ exports.MIME_PNG = MIME_PNG;

function getJimpImage(_x) {
return _getJimpImage.apply(this, arguments);
}
async function getJimpImage(data) {
return await new _bluebird.default((resolve, reject) => {
if (!_lodash.default.isString(data) && !_lodash.default.isBuffer(data)) {
return reject(new Error('Must initialize jimp object with string or buffer'));
}
function _getJimpImage() {
_getJimpImage = (0, _asyncToGenerator2.default)(function* (data) {
return yield new _bluebird.default((resolve, reject) => {
if (!_lodash.default.isString(data) && !_lodash.default.isBuffer(data)) {
return reject(new Error('Must initialize jimp object with string or buffer'));
if (_lodash.default.isString(data)) {
data = _buffer.Buffer.from(data, 'base64');
}
new _jimp.default(data, (err, imgObj) => {
if (err) {
return reject(err);
}
if (_lodash.default.isString(data)) {
data = _buffer.Buffer.from(data, 'base64');
if (!imgObj) {
return reject(new Error('Could not create jimp image from that data'));
}
new _jimp.default(data, (err, imgObj) => {
if (err) {
return reject(err);
}
if (!imgObj) {
return reject(new Error('Could not create jimp image from that data'));
}
imgObj._getBuffer = imgObj.getBuffer.bind(imgObj);
imgObj.getBuffer = _bluebird.default.promisify(imgObj._getBuffer, {
context: imgObj
});
resolve(imgObj);
imgObj._getBuffer = imgObj.getBuffer.bind(imgObj);
imgObj.getBuffer = _bluebird.default.promisify(imgObj._getBuffer, {
context: imgObj
});
resolve(imgObj);
});
});
return _getJimpImage.apply(this, arguments);
}

@@ -97,18 +90,11 @@

function detectAndCompute(_x2, _x3) {
return _detectAndCompute.apply(this, arguments);
async function detectAndCompute(img, detector) {
const keyPoints = await detector.detectAsync(img);
const descriptor = await detector.computeAsync(img, keyPoints);
return {
keyPoints,
descriptor
};
}
function _detectAndCompute() {
_detectAndCompute = (0, _asyncToGenerator2.default)(function* (img, detector) {
const keyPoints = yield detector.detectAsync(img);
const descriptor = yield detector.computeAsync(img, keyPoints);
return {
keyPoints,
descriptor
};
});
return _detectAndCompute.apply(this, arguments);
}
function calculateMatchedRect(matchedPoints) {

@@ -157,275 +143,190 @@ if (matchedPoints.length < 2) {

function getImagesMatches(_x4, _x5) {
return _getImagesMatches.apply(this, arguments);
}
async function getImagesMatches(img1Data, img2Data, options = {}) {
initOpenCV();
const {
detectorName = 'ORB',
visualize = false,
goodMatchesFactor,
matchFunc = 'BruteForce'
} = options;
function _getImagesMatches() {
_getImagesMatches = (0, _asyncToGenerator2.default)(function* (img1Data, img2Data, options = {}) {
initOpenCV();
const _options$detectorName = options.detectorName,
detectorName = _options$detectorName === void 0 ? 'ORB' : _options$detectorName,
_options$visualize = options.visualize,
visualize = _options$visualize === void 0 ? false : _options$visualize,
goodMatchesFactor = options.goodMatchesFactor,
_options$matchFunc = options.matchFunc,
matchFunc = _options$matchFunc === void 0 ? 'BruteForce' : _options$matchFunc;
if (!_lodash.default.includes(AVAILABLE_DETECTORS, detectorName)) {
throw new Error(`'${detectorName}' detector is unknown. ` + `Only ${JSON.stringify(AVAILABLE_DETECTORS)} detectors are supported.`);
}
if (!_lodash.default.includes(AVAILABLE_DETECTORS, detectorName)) {
throw new Error(`'${detectorName}' detector is unknown. ` + `Only ${JSON.stringify(AVAILABLE_DETECTORS)} detectors are supported.`);
}
if (!_lodash.default.includes(AVAILABLE_MATCHING_FUNCTIONS, matchFunc)) {
throw new Error(`'${matchFunc}' matching function is unknown. ` + `Only ${JSON.stringify(AVAILABLE_MATCHING_FUNCTIONS)} matching functions are supported.`);
}
if (!_lodash.default.includes(AVAILABLE_MATCHING_FUNCTIONS, matchFunc)) {
throw new Error(`'${matchFunc}' matching function is unknown. ` + `Only ${JSON.stringify(AVAILABLE_MATCHING_FUNCTIONS)} matching functions are supported.`);
}
const detector = new cv[`${detectorName}Detector`]();
const [img1, img2] = await _bluebird.default.all([cv.imdecodeAsync(img1Data), cv.imdecodeAsync(img2Data)]);
const [result1, result2] = await _bluebird.default.all([detectAndCompute(img1, detector), detectAndCompute(img2, detector)]);
let matches = [];
const detector = new cv[`${detectorName}Detector`]();
try {
matches = await cv[`match${matchFunc}Async`](result1.descriptor, result2.descriptor);
} catch (e) {
throw new Error(`Cannot find any matches between the given images. Try another detection algorithm. ` + ` Original error: ${e}`);
}
const _ref = yield _bluebird.default.all([cv.imdecodeAsync(img1Data), cv.imdecodeAsync(img2Data)]),
_ref2 = (0, _slicedToArray2.default)(_ref, 2),
img1 = _ref2[0],
img2 = _ref2[1];
const totalCount = matches.length;
const _ref3 = yield _bluebird.default.all([detectAndCompute(img1, detector), detectAndCompute(img2, detector)]),
_ref4 = (0, _slicedToArray2.default)(_ref3, 2),
result1 = _ref4[0],
result2 = _ref4[1];
if ((0, _util.hasValue)(goodMatchesFactor)) {
if (_lodash.default.isFunction(goodMatchesFactor)) {
const distances = matches.map(match => match.distance);
let matches = [];
const minDistance = _lodash.default.min(distances);
try {
matches = yield cv[`match${matchFunc}Async`](result1.descriptor, result2.descriptor);
} catch (e) {
throw new Error(`Cannot find any matches between the given images. Try another detection algorithm. ` + ` Original error: ${e}`);
}
const maxDistance = _lodash.default.max(distances);
const totalCount = matches.length;
if ((0, _util.hasValue)(goodMatchesFactor)) {
if (_lodash.default.isFunction(goodMatchesFactor)) {
const distances = matches.map(match => match.distance);
const minDistance = _lodash.default.min(distances);
const maxDistance = _lodash.default.max(distances);
matches = matches.filter(match => goodMatchesFactor(match.distance, minDistance, maxDistance));
} else {
if (matches.length > goodMatchesFactor) {
matches = matches.sort((match1, match2) => match1.distance - match2.distance).slice(0, goodMatchesFactor);
}
matches = matches.filter(match => goodMatchesFactor(match.distance, minDistance, maxDistance));
} else {
if (matches.length > goodMatchesFactor) {
matches = matches.sort((match1, match2) => match1.distance - match2.distance).slice(0, goodMatchesFactor);
}
}
}
const points1 = matches.map(match => result1.keyPoints[match.queryIdx].point);
const rect1 = calculateMatchedRect(points1);
const points2 = matches.map(match => result2.keyPoints[match.trainIdx].point);
const rect2 = calculateMatchedRect(points2);
const result = {
points1,
rect1,
points2,
rect2,
totalCount,
count: matches.length
};
const points1 = matches.map(match => result1.keyPoints[match.queryIdx].point);
const rect1 = calculateMatchedRect(points1);
const points2 = matches.map(match => result2.keyPoints[match.trainIdx].point);
const rect2 = calculateMatchedRect(points2);
const result = {
points1,
rect1,
points2,
rect2,
totalCount,
count: matches.length
};
if (visualize) {
const visualization = cv.drawMatches(img1, img2, result1.keyPoints, result2.keyPoints, matches);
highlightRegion(visualization, rect1);
highlightRegion(visualization, {
x: img1.cols + rect2.x,
y: rect2.y,
width: rect2.width,
height: rect2.height
});
result.visualization = yield cv.imencodeAsync('.png', visualization);
}
if (visualize) {
const visualization = cv.drawMatches(img1, img2, result1.keyPoints, result2.keyPoints, matches);
highlightRegion(visualization, rect1);
highlightRegion(visualization, {
x: img1.cols + rect2.x,
y: rect2.y,
width: rect2.width,
height: rect2.height
});
result.visualization = await cv.imencodeAsync('.png', visualization);
}
return result;
});
return _getImagesMatches.apply(this, arguments);
return result;
}
function getImagesSimilarity(_x6, _x7) {
return _getImagesSimilarity.apply(this, arguments);
}
async function getImagesSimilarity(img1Data, img2Data, options = {}) {
initOpenCV();
const {
visualize = false
} = options;
let [template, reference] = await _bluebird.default.all([cv.imdecodeAsync(img1Data), cv.imdecodeAsync(img2Data)]);
function _getImagesSimilarity() {
_getImagesSimilarity = (0, _asyncToGenerator2.default)(function* (img1Data, img2Data, options = {}) {
initOpenCV();
const _options$visualize2 = options.visualize,
visualize = _options$visualize2 === void 0 ? false : _options$visualize2;
if (template.rows !== reference.rows || template.cols !== reference.cols) {
throw new Error('Both images are expected to have the same size in order to ' + 'calculate the similarity score.');
}
let _ref5 = yield _bluebird.default.all([cv.imdecodeAsync(img1Data), cv.imdecodeAsync(img2Data)]),
_ref6 = (0, _slicedToArray2.default)(_ref5, 2),
template = _ref6[0],
reference = _ref6[1];
[template, reference] = await _bluebird.default.all([template.convertToAsync(cv.CV_8UC3), reference.convertToAsync(cv.CV_8UC3)]);
const matched = await reference.matchTemplateAsync(template, cv.TM_CCOEFF_NORMED);
const minMax = await matched.minMaxLocAsync();
const result = {
score: minMax.maxVal
};
if (template.rows !== reference.rows || template.cols !== reference.cols) {
throw new Error('Both images are expected to have the same size in order to ' + 'calculate the similarity score.');
}
if (visualize) {
const resultMat = new cv.Mat(template.rows, template.cols * 2, cv.CV_8UC3);
await _bluebird.default.all([reference.copyToAsync(resultMat.getRegion(new cv.Rect(0, 0, reference.cols, reference.rows))), template.copyToAsync(resultMat.getRegion(new cv.Rect(reference.cols, 0, template.cols, template.rows)))]);
let mask = reference.absdiff(template);
mask = await mask.cvtColorAsync(cv.COLOR_BGR2GRAY);
let contours = [];
var _ref7 = yield _bluebird.default.all([template.convertToAsync(cv.CV_8UC3), reference.convertToAsync(cv.CV_8UC3)]);
try {
mask = await mask.thresholdAsync(128, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);
contours = await mask.findContoursAsync(cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE);
} catch (ign) {}
var _ref8 = (0, _slicedToArray2.default)(_ref7, 2);
template = _ref8[0];
reference = _ref8[1];
const matched = yield reference.matchTemplateAsync(template, cv.TM_CCOEFF_NORMED);
const minMax = yield matched.minMaxLocAsync();
const result = {
score: minMax.maxVal
};
if (visualize) {
const resultMat = new cv.Mat(template.rows, template.cols * 2, cv.CV_8UC3);
yield _bluebird.default.all([reference.copyToAsync(resultMat.getRegion(new cv.Rect(0, 0, reference.cols, reference.rows))), template.copyToAsync(resultMat.getRegion(new cv.Rect(reference.cols, 0, template.cols, template.rows)))]);
let mask = reference.absdiff(template);
mask = yield mask.cvtColorAsync(cv.COLOR_BGR2GRAY);
let contours = [];
try {
mask = yield mask.thresholdAsync(128, 255, cv.THRESH_BINARY | cv.THRESH_OTSU);
contours = yield mask.findContoursAsync(cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE);
} catch (ign) {}
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = contours[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
const contour = _step.value;
const boundingRect = contour.boundingRect();
highlightRegion(resultMat, boundingRect);
highlightRegion(resultMat, {
x: reference.cols + boundingRect.x,
y: boundingRect.y,
width: boundingRect.width,
height: boundingRect.height
});
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
result.visualization = yield cv.imencodeAsync('.png', resultMat);
for (const contour of contours) {
const boundingRect = contour.boundingRect();
highlightRegion(resultMat, boundingRect);
highlightRegion(resultMat, {
x: reference.cols + boundingRect.x,
y: boundingRect.y,
width: boundingRect.width,
height: boundingRect.height
});
}
return result;
});
return _getImagesSimilarity.apply(this, arguments);
}
result.visualization = await cv.imencodeAsync('.png', resultMat);
}
function getImageOccurrence(_x8, _x9) {
return _getImageOccurrence.apply(this, arguments);
return result;
}
function _getImageOccurrence() {
_getImageOccurrence = (0, _asyncToGenerator2.default)(function* (fullImgData, partialImgData, options = {}) {
initOpenCV();
const _options$visualize3 = options.visualize,
visualize = _options$visualize3 === void 0 ? false : _options$visualize3,
_options$threshold = options.threshold,
threshold = _options$threshold === void 0 ? DEFAULT_MATCH_THRESHOLD : _options$threshold;
async function getImageOccurrence(fullImgData, partialImgData, options = {}) {
initOpenCV();
const {
visualize = false,
threshold = DEFAULT_MATCH_THRESHOLD
} = options;
const [fullImg, partialImg] = await _bluebird.default.all([cv.imdecodeAsync(fullImgData), cv.imdecodeAsync(partialImgData)]);
const result = {};
const _ref9 = yield _bluebird.default.all([cv.imdecodeAsync(fullImgData), cv.imdecodeAsync(partialImgData)]),
_ref10 = (0, _slicedToArray2.default)(_ref9, 2),
fullImg = _ref10[0],
partialImg = _ref10[1];
try {
const matched = await fullImg.matchTemplateAsync(partialImg, cv.TM_CCOEFF_NORMED);
const minMax = await matched.minMaxLocAsync();
const result = {};
try {
const matched = yield fullImg.matchTemplateAsync(partialImg, cv.TM_CCOEFF_NORMED);
const minMax = yield matched.minMaxLocAsync();
if (minMax.maxVal < threshold) {
throw new Error(`Cannot find any occurrences of the partial image in the full ` + `image above the threshold of ${threshold}. Highest match value ` + `found was ${minMax.maxVal}`);
}
result.rect = {
x: minMax.maxLoc.x,
y: minMax.maxLoc.y,
width: partialImg.cols,
height: partialImg.rows
};
} catch (e) {
throw new Error(`Cannot find any occurences of the partial image in the full image. ` + `Original error: ${e}`);
if (minMax.maxVal < threshold) {
throw new Error(`Cannot find any occurrences of the partial image in the full ` + `image above the threshold of ${threshold}. Highest match value ` + `found was ${minMax.maxVal}`);
}
if (visualize) {
highlightRegion(fullImg, result.rect);
result.visualization = yield cv.imencodeAsync('.png', fullImg);
}
result.rect = {
x: minMax.maxLoc.x,
y: minMax.maxLoc.y,
width: partialImg.cols,
height: partialImg.rows
};
} catch (e) {
throw new Error(`Cannot find any occurences of the partial image in the full image. ` + `Original error: ${e}`);
}
return result;
});
return _getImageOccurrence.apply(this, arguments);
}
if (visualize) {
highlightRegion(fullImg, result.rect);
result.visualization = await cv.imencodeAsync('.png', fullImg);
}
function cropBase64Image(_x10, _x11) {
return _cropBase64Image.apply(this, arguments);
return result;
}
function _cropBase64Image() {
_cropBase64Image = (0, _asyncToGenerator2.default)(function* (base64Image, rect) {
const image = yield base64ToImage(base64Image);
cropImage(image, rect);
return yield imageToBase64(image);
});
return _cropBase64Image.apply(this, arguments);
async function cropBase64Image(base64Image, rect) {
const image = await base64ToImage(base64Image);
cropImage(image, rect);
return await imageToBase64(image);
}
function base64ToImage(_x12) {
return _base64ToImage.apply(this, arguments);
}
async function base64ToImage(base64Image) {
const imageBuffer = _buffer.Buffer.from(base64Image, 'base64');
function _base64ToImage() {
_base64ToImage = (0, _asyncToGenerator2.default)(function* (base64Image) {
const imageBuffer = _buffer.Buffer.from(base64Image, 'base64');
return await new _bluebird.default((resolve, reject) => {
const image = new _pngjs.PNG({
filterType: SCANLINE_FILTER_METHOD
});
image.parse(imageBuffer, (err, image) => {
if (err) {
return reject(err);
}
return yield new _bluebird.default((resolve, reject) => {
const image = new _pngjs.PNG({
filterType: SCANLINE_FILTER_METHOD
});
image.parse(imageBuffer, (err, image) => {
if (err) {
return reject(err);
}
resolve(image);
});
resolve(image);
});
});
return _base64ToImage.apply(this, arguments);
}
function imageToBase64(_x13) {
return _imageToBase.apply(this, arguments);
}
function _imageToBase() {
_imageToBase = (0, _asyncToGenerator2.default)(function* (image) {
return yield new _bluebird.default((resolve, reject) => {
const chunks = [];
image.pack().on('data', chunk => chunks.push(chunk)).on('end', () => {
resolve(_buffer.Buffer.concat(chunks).toString('base64'));
}).on('error', err => {
reject(err);
});
async function imageToBase64(image) {
return await new _bluebird.default((resolve, reject) => {
const chunks = [];
image.pack().on('data', chunk => chunks.push(chunk)).on('end', () => {
resolve(_buffer.Buffer.concat(chunks).toString('base64'));
}).on('error', err => {
reject(err);
});
});
return _imageToBase.apply(this, arguments);
}

@@ -480,2 +381,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIk1JTUVfSlBFRyIsIkppbXAiLCJNSU1FX1BORyIsIk1JTUVfQk1QIiwiY3YiLCJCWVRFU19JTl9QSVhFTF9CTE9DSyIsIlNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QiLCJERUZBVUxUX01BVENIX1RIUkVTSE9MRCIsIkFWQUlMQUJMRV9ERVRFQ1RPUlMiLCJBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJfZ2V0QnVmZmVyIiwiZ2V0QnVmZmVyIiwiYmluZCIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbml0T3BlbkNWIiwicmVxdWlyZSIsImlnbiIsImRldGVjdEFuZENvbXB1dGUiLCJpbWciLCJkZXRlY3RvciIsImtleVBvaW50cyIsImRldGVjdEFzeW5jIiwiZGVzY3JpcHRvciIsImNvbXB1dGVBc3luYyIsImNhbGN1bGF0ZU1hdGNoZWRSZWN0IiwibWF0Y2hlZFBvaW50cyIsImxlbmd0aCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludHNTb3J0ZWRCeURpc3RhbmNlIiwibWFwIiwicG9pbnQiLCJNYXRoIiwic3FydCIsInNvcnQiLCJwYWlyMSIsInBhaXIyIiwicGFpciIsImZpcnN0UG9pbnQiLCJoZWFkIiwibGFzdFBvaW50IiwibGFzdCIsInRvcExlZnRQb2ludCIsImJvdHRvbVJpZ2h0UG9pbnQiLCJoaWdobGlnaHRSZWdpb24iLCJtYXQiLCJyZWdpb24iLCJjb2xvciIsIlZlYyIsInRoaWNrbmVzcyIsImRyYXdSZWN0YW5nbGUiLCJSZWN0IiwiTElORV84IiwiZ2V0SW1hZ2VzTWF0Y2hlcyIsImltZzFEYXRhIiwiaW1nMkRhdGEiLCJvcHRpb25zIiwiZGV0ZWN0b3JOYW1lIiwidmlzdWFsaXplIiwiZ29vZE1hdGNoZXNGYWN0b3IiLCJtYXRjaEZ1bmMiLCJpbmNsdWRlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJhbGwiLCJpbWRlY29kZUFzeW5jIiwiaW1nMSIsImltZzIiLCJyZXN1bHQxIiwicmVzdWx0MiIsIm1hdGNoZXMiLCJlIiwidG90YWxDb3VudCIsImlzRnVuY3Rpb24iLCJkaXN0YW5jZXMiLCJtYXRjaCIsImRpc3RhbmNlIiwibWluRGlzdGFuY2UiLCJtaW4iLCJtYXhEaXN0YW5jZSIsIm1heCIsImZpbHRlciIsIm1hdGNoMSIsIm1hdGNoMiIsInNsaWNlIiwicG9pbnRzMSIsInF1ZXJ5SWR4IiwicmVjdDEiLCJwb2ludHMyIiwidHJhaW5JZHgiLCJyZWN0MiIsInJlc3VsdCIsImNvdW50IiwidmlzdWFsaXphdGlvbiIsImRyYXdNYXRjaGVzIiwiY29scyIsImltZW5jb2RlQXN5bmMiLCJnZXRJbWFnZXNTaW1pbGFyaXR5IiwidGVtcGxhdGUiLCJyZWZlcmVuY2UiLCJyb3dzIiwiY29udmVydFRvQXN5bmMiLCJDVl84VUMzIiwibWF0Y2hlZCIsIm1hdGNoVGVtcGxhdGVBc3luYyIsIlRNX0NDT0VGRl9OT1JNRUQiLCJtaW5NYXgiLCJtaW5NYXhMb2NBc3luYyIsInNjb3JlIiwibWF4VmFsIiwicmVzdWx0TWF0IiwiTWF0IiwiY29weVRvQXN5bmMiLCJnZXRSZWdpb24iLCJtYXNrIiwiYWJzZGlmZiIsImN2dENvbG9yQXN5bmMiLCJDT0xPUl9CR1IyR1JBWSIsImNvbnRvdXJzIiwidGhyZXNob2xkQXN5bmMiLCJUSFJFU0hfQklOQVJZIiwiVEhSRVNIX09UU1UiLCJmaW5kQ29udG91cnNBc3luYyIsIlJFVFJfRVhURVJOQUwiLCJDSEFJTl9BUFBST1hfU0lNUExFIiwiY29udG91ciIsImJvdW5kaW5nUmVjdCIsImdldEltYWdlT2NjdXJyZW5jZSIsImZ1bGxJbWdEYXRhIiwicGFydGlhbEltZ0RhdGEiLCJ0aHJlc2hvbGQiLCJmdWxsSW1nIiwicGFydGlhbEltZyIsInJlY3QiLCJtYXhMb2MiLCJjcm9wQmFzZTY0SW1hZ2UiLCJiYXNlNjRJbWFnZSIsImltYWdlIiwiYmFzZTY0VG9JbWFnZSIsImNyb3BJbWFnZSIsImltYWdlVG9CYXNlNjQiLCJpbWFnZUJ1ZmZlciIsIlBORyIsImZpbHRlclR5cGUiLCJwYXJzZSIsImNodW5rcyIsInBhY2siLCJvbiIsImNodW5rIiwicHVzaCIsImNvbmNhdCIsInRvU3RyaW5nIiwiaW1hZ2VSZWN0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsImZpcnN0VmVydGljYWxQaXhlbCIsInRvcCIsImxhc3RWZXJ0aWNhbFBpeGVsIiwiZmlyc3RIb3Jpem9udGFsUGl4ZWwiLCJsZWZ0IiwibGFzdEhvcml6b250YWxQaXhlbCIsImNyb3BwZWRBcnJheSIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztNQUVRQSxTLEdBQWtDQyxhLENBQWxDRCxTO01BQVdFLFEsR0FBdUJELGEsQ0FBdkJDLFE7TUFBVUMsUSxHQUFhRixhLENBQWJFLFE7Ozs7QUFDN0IsSUFBSUMsRUFBRSxHQUFHLElBQVQ7QUF3QkEsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDO0FBRUEsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsT0FEMEIsRUFFMUIsT0FGMEIsRUFHMUIsT0FIMEIsRUFJMUIsTUFKMEIsRUFLMUIsTUFMMEIsRUFNMUIsTUFOMEIsRUFPMUIsTUFQMEIsRUFRMUIsTUFSMEIsRUFTMUIsS0FUMEIsQ0FBNUI7QUFZQSxNQUFNQyw0QkFBNEIsR0FBRyxDQUNuQyxZQURtQyxFQUVuQyxZQUZtQyxFQUduQyxjQUhtQyxFQUluQyxtQkFKbUMsRUFLbkMsc0JBTG1DLEVBTW5DLGVBTm1DLENB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QUksQ0FBQzBCLElBQW5FO0FBQ0EsUUFBTUgsR0FBRyxHQUFHdkIsSUFBSSxDQUFDdUIsR0FBTCxJQUFZUSxTQUFTLENBQUN4SSxNQUF0QixHQUErQndJLFNBQVMsQ0FBQ3hJLE1BQXpDLEdBQWtEeUcsSUFBSSxDQUFDdUIsR0FBbkU7QUFDQSxRQUFNakksS0FBSyxHQUFHeUksU0FBUyxDQUFDekksS0FBVixJQUFvQm9JLElBQUksR0FBRzFCLElBQUksQ0FBQzFHLEtBQWhDLEdBQXlDMEcsSUFBSSxDQUFDMUcsS0FBOUMsR0FBdUR5SSxTQUFTLENBQUN6SSxLQUFWLEdBQWtCb0ksSUFBdkY7QUFDQSxRQUFNbkksTUFBTSxHQUFHd0ksU0FBUyxDQUFDeEksTUFBVixJQUFxQmdJLEdBQUcsR0FBR3ZCLElBQUksQ0FBQ3pHLE1BQWhDLEdBQTBDeUcsSUFBSSxDQUFDekcsTUFBL0MsR0FBeUR3SSxTQUFTLENBQUN4SSxNQUFWLEdBQW1CZ0ksR0FBM0Y7QUFDQSxTQUFPO0FBQUNHLElBQUFBLElBQUQ7QUFBT0gsSUFBQUEsR0FBUDtBQUFZakksSUFBQUEsS0FBWjtBQUFtQkMsSUFBQUE7QUFBbkIsR0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBKaW1wIGZyb20gJ2ppbXAnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IFBORyB9IGZyb20gJ3BuZ2pzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGhhc1ZhbHVlIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgeyBNSU1FX0pQRUcsIE1JTUVfUE5HLCBNSU1FX0JNUCB9ID0gSmltcDtcbmxldCBjdiA9IG51bGw7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUmVnaW9uXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIFRoZSBvZmZzZXQgZnJvbSB0aGUgbGVmdCBzaWRlXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVGhlIG9mZnNldCBmcm9tIHRoZSB0b3BcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBvaW50XG4gKiBAcHJvcGVydHkge251bWJlcn0geCAtIFRoZSB4IGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5IC0gVGhlIHkgY29vcmRpbmF0ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUmVjdFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHggLSBUaGUgdG9wIGxlZnQgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHkgLSBUaGUgYm90dG9tIHJpZ2h0IGNvb3JkaW5hdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIFRoZSB3aWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIFRoZSBoZWlnaHRcbiAqL1xuXG5jb25zdCBCWVRFU19JTl9QSVhFTF9CTE9DSyA9IDQ7XG5jb25zdCBTQ0FOTElORV9GSUxURVJfTUVUSE9EID0gNDtcbmNvbnN0IERFRkFVTFRfTUFUQ0hfVEhSRVNIT0xEID0gMC41O1xuXG5jb25zdCBBVkFJTEFCTEVfREVURUNUT1JTID0gW1xuICAnQUtBWkUnLFxuICAnQUdBU1QnLFxuICAnQlJJU0snLFxuICAnRkFTVCcsXG4gICdHRlRUJyxcbiAgJ0tBWkUnLFxuICAnTVNFUicsXG4gICdTSUZUJyxcbiAgJ09SQicsXG5dO1xuXG5jb25zdCBBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TID0gW1xuICAnRmxhbm5CYXNlZCcsXG4gICdCcnV0ZUZvcmNlJyxcbiAgJ0JydXRlRm9yY2VMMScsXG4gICdCcnV0ZUZvcmNlSGFtbWluZycsXG4gICdCcnV0ZUZvcmNlSGFtbWluZ0x1dCcsXG4gICdCcnV0ZUZvcmNlU0wyJyxcbl07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBnZXQgYSBKaW1wIGltYWdlIG9iamVjdCBmcm9tIGJ1ZmZlciBvciBiYXNlNjQgZGF0YS4gSmltcFxuICogaXMgYSBncmVhdCBsaWJyYXJ5IGhvd2V2ZXIgaXQgZG9lcyBJTyBpbiB0aGUgY29uc3RydWN0b3Igc28gaXQncyBub3RcbiAqIGNvbnZlbmllbnQgZm9yIG91ciBhc3luYy9hd2FpdCBtb2RlbC5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IGRhdGEgLSBiaW5hcnkgaW1hZ2UgYnVmZmVyIG9yIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gKiBzdHJpbmdcbiAqIEByZXR1cm5zIHtKaW1wfSAtIHRoZSBqaW1wIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRKaW1wSW1hZ2UgKGRhdGEpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAoIV8uaXNTdHJpbmcoZGF0YSkgJiYgIV8uaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdNdXN0IGluaXRpYWxpemUgamltcCBvYmplY3Qgd2l0aCBzdHJpbmcgb3IgYnVmZmVyJykpO1xuICAgIH1cbiAgICAvLyBpZiBkYXRhIGlzIGEgc3RyaW5nLCBhc3N1bWUgaXQgaXMgYSBiYXNlNjQtZW5jb2RlZCBpbWFnZVxuICAgIGlmIChfLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpO1xuICAgIH1cbiAgICBuZXcgSmltcChkYXRhLCAoZXJyLCBpbWdPYmopID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgaWYgKCFpbWdPYmopIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBjcmVhdGUgamltcCBpbWFnZSBmcm9tIHRoYXQgZGF0YScpKTtcbiAgICAgIH1cbiAgICAgIGltZ09iai5fZ2V0QnVmZmVyID0gaW1nT2JqLmdldEJ1ZmZlci5iaW5kKGltZ09iaik7XG4gICAgICBpbWdPYmouZ2V0QnVmZmVyID0gQi5wcm9taXNpZnkoaW1nT2JqLl9nZXRCdWZmZXIsIHtjb250ZXh0OiBpbWdPYmp9KTtcbiAgICAgIHJlc29sdmUoaW1nT2JqKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IElmIG9wZW5jdjRub2RlanMgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQgb3IgY2Fubm90IGJlIGxvYWRlZFxuICovXG5mdW5jdGlvbiBpbml0T3BlbkNWICgpIHtcbiAgaWYgKCFjdikge1xuICAgIHRyeSB7XG4gICAgICBjdiA9IHJlcXVpcmUoJ29wZW5jdjRub2RlanMnKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgaWYgKCFjdikge1xuICAgIHRocm93IG5ldyBFcnJvcignb3BlbmN2NG5vZGVqcyBtb2R1bGUgaXMgcmVxdWlyZWQgdG8gdXNlIE9wZW5DViBmZWF0dXJlcy4gJyArXG4gICAgICAgICAgICAgICAgICAgICdQbGVhc2UgaW5zdGFsbCBpdCBmaXJzdCAobnBtIGkgLWcgb3BlbmN2NG5vZGVqcykgYW5kIHJlc3RhcnQgQXBwaXVtLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1JlYWQgaHR0cHM6Ly9naXRodWIuY29tL2p1c3RhZHVkZXdob2hhY2tzL29wZW5jdjRub2RlanMjaG93LXRvLWluc3RhbGwgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIHRvcGljLicpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWF0Y2hDb21wdXRhdGlvblJlc3VsdFxuICogQHByb3BlcnR5IHtjdi5EZXNjcmlwdG9yTWF0Y2h9IGRlc2NpcHRvciAtIE9wZW5DViBtYXRjaCBkZXNjcmlwdG9yXG4gKiBAcHJvcGVydHkge0FycmF5PGN2LktleVBvaW50Pn0ga2V5UG9pbnRzIC0gVGhlIGFycmF5IG9mIGtleSBwb2ludHNcbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgYW4gT3BlbkNWIG1hdGNoIGRlc2NyaXB0b3Igb2YgYW4gaW1hZ2UsIHdoaWNoIGNhbiBiZSB1c2VkXG4gKiBmb3IgYnJ1dGUtZm9yY2UgbWF0Y2hpbmcuXG4gKiBSZWFkIGh0dHBzOi8vZG9jcy5vcGVuY3Yub3JnLzMuMC1iZXRhL2RvYy9weV90dXRvcmlhbHMvcHlfZmVhdHVyZTJkL3B5X21hdGNoZXIvcHlfbWF0Y2hlci5odG1sXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7Y3YuTWF0fSBpbWcgSW1hZ2UgZGF0YVxuICogQHBhcmFtIHtjdi5GZWF0dXJlRGV0ZWN0b3J9IGRldGVjdG9yIE9wZW5DViBmZWF0dXJlIGRldGVjdG9yIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge01hdGNoQ29tcHV0YXRpb25SZXN1bHR9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdEFuZENvbXB1dGUgKGltZywgZGV0ZWN0b3IpIHtcbiAgY29uc3Qga2V5UG9pbnRzID0gYXdhaXQgZGV0ZWN0b3IuZGV0ZWN0QXN5bmMoaW1nKTtcbiAgY29uc3QgZGVzY3JpcHRvciA9IGF3YWl0IGRldGVjdG9yLmNvbXB1dGVBc3luYyhpbWcsIGtleVBvaW50cyk7XG4gIHJldHVybiB7XG4gICAga2V5UG9pbnRzLFxuICAgIGRlc2NyaXB0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVkIHRoZSBib3VuZGluZyByZWN0IGNvb3JkaW5hdGVzIGZvciB0aGUgYXJyYXkgb2YgbWF0Y2hpbmcgcG9pbnRzXG4gKlxuICogQHBhcmFtIHtBcnJheTxQb2ludD59IG1hdGNoZWRQb2ludHMgQXJyYXkgb2YgbWF0Y2hpbmcgcG9pbnRzXG4gKiBAcmV0dXJucyB7UmVjdH0gVGhlIG1hdGNoaW5nIGJvdW5kaW5nIHJlY3Qgb3IgYSB6ZXJvIHJlY3QgaWYgbm8gbWF0Y2hcbiAqIGNhbiBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTWF0Y2hlZFJlY3QgKG1hdGNoZWRQb2ludHMpIHtcbiAgaWYgKG1hdGNoZWRQb2ludHMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBvaW50c1NvcnRlZEJ5RGlzdGFuY2UgPSBtYXRjaGVkUG9pbnRzXG4gICAgLm1hcChwb2ludCA9PiBbTWF0aC5zcXJ0KHBvaW50LnggKiBwb2ludC54ICsgcG9pbnQueSAqIHBvaW50LnkpLCBwb2ludF0pXG4gICAgLnNvcnQoKHBhaXIxLCBwYWlyMikgPT4gcGFpcjFbMF0gPj0gcGFpcjJbMF0pXG4gICAgLm1hcChwYWlyID0+IHBhaXJbMV0pO1xuICBjb25zdCBmaXJzdFBvaW50ID0gXy5oZWFkKHBvaW50c1NvcnRlZEJ5RGlzdGFuY2UpO1xuICBjb25zdCBsYXN0UG9pbnQgPSBfLmxhc3QocG9pbnRzU29ydGVkQnlEaXN0YW5jZSk7XG4gIGNvbnN0IHRvcExlZnRQb2ludCA9IHtcbiAgICB4OiBmaXJzdFBvaW50LnggPD0gbGFzdFBvaW50LnggPyBmaXJzdFBvaW50LnggOiBsYXN0UG9pbnQueCxcbiAgICB5OiBmaXJzdFBvaW50LnkgPD0gbGFzdFBvaW50LnkgPyBmaXJzdFBvaW50LnkgOiBsYXN0UG9pbnQueSxcbiAgfTtcbiAgY29uc3QgYm90dG9tUmlnaHRQb2ludCA9IHtcbiAgICB4OiBmaXJzdFBvaW50LnggPj0gbGFzdFBvaW50LnggPyBmaXJzdFBvaW50LnggOiBsYXN0UG9pbnQueCxcbiAgICB5OiBmaXJzdFBvaW50LnkgPj0gbGFzdFBvaW50LnkgPyBmaXJzdFBvaW50LnkgOiBsYXN0UG9pbnQueSxcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICB4OiB0b3BMZWZ0UG9pbnQueCxcbiAgICB5OiB0b3BMZWZ0UG9pbnQueSxcbiAgICB3aWR0aDogYm90dG9tUmlnaHRQb2ludC54IC0gdG9wTGVmdFBvaW50LngsXG4gICAgaGVpZ2h0OiBib3R0b21SaWdodFBvaW50LnkgLSB0b3BMZWZ0UG9pbnQueVxuICB9O1xufVxuXG4vKipcbiAqIERyYXdzIGEgcmVjdGFubmdsZSBvbiB0aGUgZ2l2ZW4gaW1hZ2UgbWF0cml4XG4gKlxuICogQHBhcmFtIHtjdi5NYXR9IG1hdCBUaGUgc291cmNlIGltYWdlXG4gKiBAcGFyYW0ge1JlY3R9IHJlZ2lvbiBUaGUgcmVnaW9uIHRvIGhpZ2hsaWdodFxuICpcbiAqIEByZXR1cm5zIHtjdi5NYXR9IFRoZSBzYW1lIGltYWdlIHdpdGggdGhlIHJlY3RhbmdlIG9uIGl0XG4gKi9cbmZ1bmN0aW9uIGhpZ2hsaWdodFJlZ2lvbiAobWF0LCByZWdpb24pIHtcbiAgaWYgKHJlZ2lvbi53aWR0aCA8PSAwIHx8IHJlZ2lvbi5oZWlnaHQgPD0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGhpZ2hsaWdodCBpbiByZWRcbiAgY29uc3QgY29sb3IgPSBuZXcgY3YuVmVjKDAsIDAsIDI1NSk7XG4gIGNvbnN0IHRoaWNrbmVzcyA9IDI7XG4gIG1hdC5kcmF3UmVjdGFuZ2xlKG5ldyBjdi5SZWN0KHJlZ2lvbi54LCByZWdpb24ueSwgcmVnaW9uLndpZHRoLCByZWdpb24uaGVpZ2h0KSwgY29sb3IsIHRoaWNrbmVzcywgY3YuTElORV84KTtcbiAgcmV0dXJuIG1hdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXRjaGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGV0ZWN0b3JOYW1lIFsnT1JCJ10gT25lIG9mIHBvc3NpYmxlIE9wZW5DViBmZWF0dXJlIGRldGVjdG9yIG5hbWVzXG4gKiBmcm9tIGBBVkFJTEFCTEVfREVURUNUT1JTYCBhcnJheS5cbiAqIFNvbWUgb2YgdGhlc2UgbWV0aG9kcyAoRkFTVCwgQUdBU1QsIEdGVFQsIEZBU1QsIFNJRlQgYW5kIE1TRVIpIGFyZSBub3QgYXZhaWxhYmxlXG4gKiBpbiB0aGUgZGVmYXVsdCBPcGVuQ1YgaW5zdGFsbGF0aW9uIGFuZCBoYXZlIHRvIGJlIGVuYWJsZWQgbWFudWFsbHkgYmVmb3JlXG4gKiBsaWJyYXJ5IGNvbXBpbGF0aW9uLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtYXRjaEZ1bmMgWydCcnV0ZUZvcmNlJ10gVGhlIG5hbWUgb2YgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uLlxuICogU2hvdWxkIGJlIG9uZSBvZiBgQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OU2AgYXJyYXkuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8RnVuY3Rpb259IGdvb2RNYXRjaGVzRmFjdG9yIFRoZSBtYXhpbXVtIGNvdW50IG9mIFwiZ29vZFwiIG1hdGNoZXNcbiAqIChlLiBnLiB3aXRoIG1pbmltYWwgZGlzdGFuY2VzKSBvciBhIGZ1bmN0aW9uLCB3aGljaCBhY2NlcHRzIDMgYXJndW1lbnRzOiB0aGUgY3VycmVudCBkaXN0YW5jZSxcbiAqIG1pbmltYWwgZGlzdGFuY2UsIG1heGltdW0gZGlzdGFuY2UgYW5kIHJldHVybnMgdHJ1ZSBvciBmYWxzZSB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIG1hdGNoLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hdGNoaW5nUmVzdWx0XG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnQgVGhlIGNvdW50IG9mIG1hdGNoZWQgZWRnZXMgb24gYm90aCBpbWFnZXMuXG4gKiBUaGUgbW9yZSBtYXRjaGluZyBlZGdlcyB0aGVyZSBhcmUgbm8gYm90aCBpbWFnZXMgdGhlIG1vcmUgc2ltaWxhciB0aGV5IGFyZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbENvdW50IFRoZSB0b3RhbCBjb3VudCBvZiBtYXRjaGVkIGVkZ2VzIG9uIGJvdGggaW1hZ2VzLlxuICogSXQgaXMgZXF1YWwgdG8gYGNvdW50YCBpZiBgZ29vZE1hdGNoZXNGYWN0b3JgIGRvZXMgbm90IGxpbWl0IHRoZSBtYXRjaGVzLFxuICogb3RoZXJ3aXNlIGl0IGNvbnRhaW5zIHRoZSB0b3RhbCBjb3VudCBvZiBtYXRjaGVzIGJlZm9yZSBgZ29vZE1hdGNoZXNGYWN0b3JgIGlzXG4gKiBhcHBsaWVkLlxuICogQHByb3BlcnR5IHs/QnVmZmVyfSB2aXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBtYXRjaGluZyByZXN1bHRcbiAqIHJlcHJlc2VudGVkIGFzIFBORyBpbWFnZSBidWZmZXIuIFRoaXMgdmlzdWFsaXphdGlvbiBsb29rcyBsaWtlXG4gKiBodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8zMTEyNTUyMS8yOTcwMjczMS1jNzllMzE0Mi04OTcyLTExZTctOTQ3ZS1kYjEwOWQ0MTU0NjkuanBnXG4gKiBAcHJvcGVydHkge0FycmF5PFBvaW50Pn0gcG9pbnRzMSBUaGUgYXJyYXkgb2YgbWF0Y2hpbmcgcG9pbnRzIG9uIHRoZSBmaXJzdCBpbWFnZVxuICogQHByb3BlcnR5IHtSZWN0fSByZWN0MSBUaGUgYm91bmRpbmcgcmVjdCBmb3IgdGhlIGBtYXRjaGVkUG9pbnRzMWAgc2V0IG9yIGEgemVybyByZWN0XG4gKiBpZiBub3QgZW5vdWdoIG1hdGNoaW5nIHBvaW50cyBhcmUgZm91bmRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMyIFRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHMgb24gdGhlIHNlY29uZCBpbWFnZVxuICogQHByb3BlcnR5IHtSZWN0fSByZWN0MiBUaGUgYm91bmRpbmcgcmVjdCBmb3IgdGhlIGBtYXRjaGVkUG9pbnRzMmAgc2V0IG9yIGEgemVybyByZWN0XG4gKiBpZiBub3QgZW5vdWdoIG1hdGNoaW5nIHBvaW50cyBhcmUgZm91bmRcbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNvdW50IG9mIGNvbW1vbiBlZGdlcyBiZXR3ZWVuIHR3byBpbWFnZXMuXG4gKiBUaGUgaW1hZ2VzIG1pZ2h0IGJlIHJvdGF0ZWQgb3IgcmVzaXplZCByZWxhdGl2ZWx5IHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGltZzFEYXRhIFRoZSBkYXRhIG9mIHRoZSBmaXJzdCBpbWFnZSBwYWNrZWQgaW50byBhIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbWcyRGF0YSBUaGUgZGF0YSBvZiB0aGUgc2Vjb25kIGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHs/TWF0Y2hpbmdPcHRpb25zfSBvcHRpb25zIFt7fV0gU2V0IG9mIG1hdGNoaW5nIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7TWF0Y2hpbmdSZXN1bHR9IE1hY2hpbmcgcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYGRldGVjdG9yTmFtZWAgdmFsdWUgaXMgdW5rbm93bi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SW1hZ2VzTWF0Y2hlcyAoaW1nMURhdGEsIGltZzJEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgaW5pdE9wZW5DVigpO1xuXG4gIGNvbnN0IHtkZXRlY3Rvck5hbWUgPSAnT1JCJywgdmlzdWFsaXplID0gZmFsc2UsXG4gICAgICAgICBnb29kTWF0Y2hlc0ZhY3RvciwgbWF0Y2hGdW5jID0gJ0JydXRlRm9yY2UnfSA9IG9wdGlvbnM7XG4gIGlmICghXy5pbmNsdWRlcyhBVkFJTEFCTEVfREVURUNUT1JTLCBkZXRlY3Rvck5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXRlY3Rvck5hbWV9JyBkZXRlY3RvciBpcyB1bmtub3duLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9ubHkgJHtKU09OLnN0cmluZ2lmeShBVkFJTEFCTEVfREVURUNUT1JTKX0gZGV0ZWN0b3JzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gIH1cbiAgaWYgKCFfLmluY2x1ZGVzKEFWQUlMQUJMRV9NQVRDSElOR19GVU5DVElPTlMsIG1hdGNoRnVuYykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke21hdGNoRnVuY30nIG1hdGNoaW5nIGZ1bmN0aW9uIGlzIHVua25vd24uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgT25seSAke0pTT04uc3RyaW5naWZ5KEFWQUlMQUJMRV9NQVRDSElOR19GVU5DVElPTlMpfSBtYXRjaGluZyBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuXG4gIGNvbnN0IGRldGVjdG9yID0gbmV3IGN2W2Ake2RldGVjdG9yTmFtZX1EZXRlY3RvcmBdKCk7XG4gIGNvbnN0IFtpbWcxLCBpbWcyXSA9IGF3YWl0IEIuYWxsKFtcbiAgICBjdi5pbWRlY29kZUFzeW5jKGltZzFEYXRhKSxcbiAgICBjdi5pbWRlY29kZUFzeW5jKGltZzJEYXRhKVxuICBdKTtcbiAgY29uc3QgW3Jlc3VsdDEsIHJlc3VsdDJdID0gYXdhaXQgQi5hbGwoW1xuICAgIGRldGVjdEFuZENvbXB1dGUoaW1nMSwgZGV0ZWN0b3IpLFxuICAgIGRldGVjdEFuZENvbXB1dGUoaW1nMiwgZGV0ZWN0b3IpXG4gIF0pO1xuICBsZXQgbWF0Y2hlcyA9IFtdO1xuICB0cnkge1xuICAgIG1hdGNoZXMgPSBhd2FpdCBjdltgbWF0Y2gke21hdGNoRnVuY31Bc3luY2BdKHJlc3VsdDEuZGVzY3JpcHRvciwgcmVzdWx0Mi5kZXNjcmlwdG9yKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYW55IG1hdGNoZXMgYmV0d2VlbiB0aGUgZ2l2ZW4gaW1hZ2VzLiBUcnkgYW5vdGhlciBkZXRlY3Rpb24gYWxnb3JpdGhtLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYCBPcmlnaW5hbCBlcnJvcjogJHtlfWApO1xuICB9XG4gIGNvbnN0IHRvdGFsQ291bnQgPSBtYXRjaGVzLmxlbmd0aDtcbiAgaWYgKGhhc1ZhbHVlKGdvb2RNYXRjaGVzRmFjdG9yKSkge1xuICAgIGlmIChfLmlzRnVuY3Rpb24oZ29vZE1hdGNoZXNGYWN0b3IpKSB7XG4gICAgICBjb25zdCBkaXN0YW5jZXMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBtYXRjaC5kaXN0YW5jZSk7XG4gICAgICBjb25zdCBtaW5EaXN0YW5jZSA9IF8ubWluKGRpc3RhbmNlcyk7XG4gICAgICBjb25zdCBtYXhEaXN0YW5jZSA9IF8ubWF4KGRpc3RhbmNlcyk7XG4gICAgICBtYXRjaGVzID0gbWF0Y2hlc1xuICAgICAgICAuZmlsdGVyKG1hdGNoID0+IGdvb2RNYXRjaGVzRmFjdG9yKG1hdGNoLmRpc3RhbmNlLCBtaW5EaXN0YW5jZSwgbWF4RGlzdGFuY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gZ29vZE1hdGNoZXNGYWN0b3IpIHtcbiAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXNcbiAgICAgICAgICAuc29ydCgobWF0Y2gxLCBtYXRjaDIpID0+IG1hdGNoMS5kaXN0YW5jZSAtIG1hdGNoMi5kaXN0YW5jZSlcbiAgICAgICAgICAuc2xpY2UoMCwgZ29vZE1hdGNoZXNGYWN0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBvaW50czEgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiByZXN1bHQxLmtleVBvaW50c1ttYXRjaC5xdWVyeUlkeF0ucG9pbnQpO1xuICBjb25zdCByZWN0MSA9IGNhbGN1bGF0ZU1hdGNoZWRSZWN0KHBvaW50czEpO1xuICBjb25zdCBwb2ludHMyID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcmVzdWx0Mi5rZXlQb2ludHNbbWF0Y2gudHJhaW5JZHhdLnBvaW50KTtcbiAgY29uc3QgcmVjdDIgPSBjYWxjdWxhdGVNYXRjaGVkUmVjdChwb2ludHMyKTtcblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgcG9pbnRzMSxcbiAgICByZWN0MSxcbiAgICBwb2ludHMyLFxuICAgIHJlY3QyLFxuICAgIHRvdGFsQ291bnQsXG4gICAgY291bnQ6IG1hdGNoZXMubGVuZ3RoLFxuICB9O1xuICBpZiAodmlzdWFsaXplKSB7XG4gICAgY29uc3QgdmlzdWFsaXphdGlvbiA9IGN2LmRyYXdNYXRjaGVzKGltZzEsIGltZzIsIHJlc3VsdDEua2V5UG9pbnRzLCByZXN1bHQyLmtleVBvaW50cywgbWF0Y2hlcyk7XG4gICAgaGlnaGxpZ2h0UmVnaW9uKHZpc3VhbGl6YXRpb24sIHJlY3QxKTtcbiAgICBoaWdobGlnaHRSZWdpb24odmlzdWFsaXphdGlvbiwge1xuICAgICAgeDogaW1nMS5jb2xzICsgcmVjdDIueCxcbiAgICAgIHk6IHJlY3QyLnksXG4gICAgICB3aWR0aDogcmVjdDIud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlY3QyLmhlaWdodFxuICAgIH0pO1xuICAgIHJlc3VsdC52aXN1YWxpemF0aW9uID0gYXdhaXQgY3YuaW1lbmNvZGVBc3luYygnLnBuZycsIHZpc3VhbGl6YXRpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2ltaWxhcml0eU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHZpc3VhbGl6ZSBbZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSByZXN1bHRpbmcgdmlzYWxpemF0aW9uXG4gKiBhcyBhbiBpbWFnZSAodXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaW1pbGFyaXR5UmVzdWx0XG4gKiBAcHJvcGVydHkge251bWJlcn0gc2NvcmUgVGhlIHNpbWlsYXJpdHkgc2NvcmUgYXMgYSBmbG9hdCBudW1iZXIgaW4gcmFuZ2UgWzAuMCwgMS4wXS5cbiAqIDEuMCBpcyB0aGUgaGlnaGVzdCBzY29yZSAobWVhbnMgYm90aCBpbWFnZXMgYXJlIHRvdGFsbHkgZXF1YWwpLlxuICogQHByb3BlcnR5IHs/QnVmZmVyfSB2aXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBtYXRjaGluZyByZXN1bHRcbiAqIHJlcHJlc2VudGVkIGFzIFBORyBpbWFnZSBidWZmZXIuIFRoaXMgaW1hZ2UgaW5jbHVkZXMgYm90aCBpbnB1dCBwaWN0dXJlcyB3aGVyZVxuICogZGlmZmVyZW5jZSByZWdpb25zIGFyZSBoaWdobGlnaHRlZCB3aXRoIHJlY3RhbmdsZXMuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaW1pbGFyaXR5IHNjb3JlIGJldHdlZW4gdHdvIGltYWdlcy5cbiAqIEl0IGlzIGV4cGVjdGVkLCB0aGF0IGJvdGggaW1hZ2VzIGhhdmUgdGhlIHNhbWUgcmVzb2x1dGlvbi5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMURhdGEgVGhlIGRhdGEgb2YgdGhlIGZpcnN0IGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtCdWZmZXJ9IGltZzJEYXRhIFRoZSBkYXRhIG9mIHRoZSBzZWNvbmQgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9TaW1pbGFyaXR5T3B0aW9uc30gb3B0aW9ucyBbe31dIFNldCBvZiBzaW1pbGFyaXR5IGNhbGN1bGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7U2ltaWxhcml0eVJlc3VsdH0gVGhlIGNhbGN1bGF0aW9uIHJlc3VsdFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBpbWFnZXMgaGF2ZSBkaWZmZXJlbnQgcmVzb2x1dGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SW1hZ2VzU2ltaWxhcml0eSAoaW1nMURhdGEsIGltZzJEYXRhLCBvcHRpb25zID0ge30pIHtcbiAgaW5pdE9wZW5DVigpO1xuXG4gIGNvbnN0IHt2aXN1YWxpemUgPSBmYWxzZX0gPSBvcHRpb25zO1xuICBsZXQgW3RlbXBsYXRlLCByZWZlcmVuY2VdID0gYXdhaXQgQi5hbGwoW1xuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMURhdGEpLFxuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMkRhdGEpXG4gIF0pO1xuICBpZiAodGVtcGxhdGUucm93cyAhPT0gcmVmZXJlbmNlLnJvd3MgfHwgdGVtcGxhdGUuY29scyAhPT0gcmVmZXJlbmNlLmNvbHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggaW1hZ2VzIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIHNpemUgaW4gb3JkZXIgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICdjYWxjdWxhdGUgdGhlIHNpbWlsYXJpdHkgc2NvcmUuJyk7XG4gIH1cbiAgW3RlbXBsYXRlLCByZWZlcmVuY2VdID0gYXdhaXQgQi5hbGwoW1xuICAgIHRlbXBsYXRlLmNvbnZlcnRUb0FzeW5jKGN2LkNWXzhVQzMpLFxuICAgIHJlZmVyZW5jZS5jb252ZXJ0VG9Bc3luYyhjdi5DVl84VUMzKVxuICBdKTtcblxuICBjb25zdCBtYXRjaGVkID0gYXdhaXQgcmVmZXJlbmNlLm1hdGNoVGVtcGxhdGVBc3luYyh0ZW1wbGF0ZSwgY3YuVE1fQ0NPRUZGX05PUk1FRCk7XG4gIGNvbnN0IG1pbk1heCA9IGF3YWl0IG1hdGNoZWQubWluTWF4TG9jQXN5bmMoKTtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHNjb3JlOiBtaW5NYXgubWF4VmFsXG4gIH07XG4gIGlmICh2aXN1YWxpemUpIHtcbiAgICBjb25zdCByZXN1bHRNYXQgPSBuZXcgY3YuTWF0KHRlbXBsYXRlLnJvd3MsIHRlbXBsYXRlLmNvbHMgKiAyLCBjdi5DVl84VUMzKTtcbiAgICBhd2FpdCBCLmFsbChbXG4gICAgICByZWZlcmVuY2UuY29weVRvQXN5bmMoXG4gICAgICAgIHJlc3VsdE1hdC5nZXRSZWdpb24obmV3IGN2LlJlY3QoMCwgMCwgcmVmZXJlbmNlLmNvbHMsIHJlZmVyZW5jZS5yb3dzKSkpLFxuICAgICAgdGVtcGxhdGUuY29weVRvQXN5bmMoXG4gICAgICAgIHJlc3VsdE1hdC5nZXRSZWdpb24obmV3IGN2LlJlY3QocmVmZXJlbmNlLmNvbHMsIDAsIHRlbXBsYXRlLmNvbHMsIHRlbXBsYXRlLnJvd3MpKSlcbiAgICBdKTtcbiAgICBsZXQgbWFzayA9IHJlZmVyZW5jZS5hYnNkaWZmKHRlbXBsYXRlKTtcbiAgICBtYXNrID0gYXdhaXQgbWFzay5jdnRDb2xvckFzeW5jKGN2LkNPTE9SX0JHUjJHUkFZKTtcbiAgICBsZXQgY29udG91cnMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgbWFzayA9IGF3YWl0IG1hc2sudGhyZXNob2xkQXN5bmMoMTI4LCAyNTUsIGN2LlRIUkVTSF9CSU5BUlkgfCBjdi5USFJFU0hfT1RTVSk7XG4gICAgICBjb250b3VycyA9IGF3YWl0IG1hc2suZmluZENvbnRvdXJzQXN5bmMoY3YuUkVUUl9FWFRFUk5BTCwgY3YuQ0hBSU5fQVBQUk9YX1NJTVBMRSk7XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICAvLyBObyBjb250b3VycyBjYW4gYmUgZm91bmQsIHdoaWNoIG1lYW5zLCBtb3N0IGxpa2VseSwgdGhhdCBpbWFnZXMgYXJlIGVxdWFsXG4gICAgfVxuICAgIGZvciAoY29uc3QgY29udG91ciBvZiBjb250b3Vycykge1xuICAgICAgY29uc3QgYm91bmRpbmdSZWN0ID0gY29udG91ci5ib3VuZGluZ1JlY3QoKTtcbiAgICAgIGhpZ2hsaWdodFJlZ2lvbihyZXN1bHRNYXQsIGJvdW5kaW5nUmVjdCk7XG4gICAgICBoaWdobGlnaHRSZWdpb24ocmVzdWx0TWF0LCB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS5jb2xzICsgYm91bmRpbmdSZWN0LngsXG4gICAgICAgIHk6IGJvdW5kaW5nUmVjdC55LFxuICAgICAgICB3aWR0aDogYm91bmRpbmdSZWN0LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvdW5kaW5nUmVjdC5oZWlnaHRcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXN1bHQudmlzdWFsaXphdGlvbiA9IGF3YWl0IGN2LmltZW5jb2RlQXN5bmMoJy5wbmcnLCByZXN1bHRNYXQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gT2NjdXJyZW5jZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHZpc3VhbGl6ZSBbZmFsc2VdIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSByZXN1bHRpbmcgdmlzYWxpemF0aW9uXG4gKiBhcyBhbiBpbWFnZSAodXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpXG4gKiBAcHJvcGVydHkgez9mbG9hdH0gdGhyZXNob2xkIFswLjVdIEF0IHdoYXQgbm9ybWFsaXplZCB0aHJlc2hvbGQgdG8gcmVqZWN0XG4gKiBhIG1hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBPY2N1cnJlbmNlUmVzdWx0XG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QgVGhlIHJlZ2lvbiBvZiB0aGUgcGFydGlhbCBpbWFnZSBvY2N1cmVuY2VcbiAqIG9uIHRoZSBmdWxsIGltYWdlXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gT24gdGhpcyBpbWFnZSB0aGUgbWF0Y2hpbmdcbiAqIHJlZ2lvbiBpcyBoaWdobGlnaHRlZCB3aXRoIGEgcmVjdGFuZ2xlLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgb2NjdXJlbmNlIHBvc2l0aW9uIG9mIGEgcGFydGlhbCBpbWFnZSBpbiB0aGUgZnVsbFxuICogaW1hZ2UuXG4gKlxuICogQHBhcmFtIHtCdWZmZXJ9IGZ1bGxJbWdEYXRhIFRoZSBkYXRhIG9mIHRoZSBmdWxsIGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtCdWZmZXJ9IHBhcnRpYWxJbWdEYXRhIFRoZSBkYXRhIG9mIHRoZSBwYXJ0aWFsIGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHs/T2NjdXJyZW5jZU9wdGlvbnN9IG9wdGlvbnMgW3t9XSBTZXQgb2Ygb2NjdXJyZW5jZSBjYWxjdWxhdGlvbiBvcHRpb25zXG4gKlxuICogQHJldHVybnMge09jY3VycmVuY2VSZXN1bHR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgbm8gb2NjdXJlbmNlcyBvZiB0aGUgcGFydGlhbCBpbWFnZSBjYW4gYmUgZm91bmQgaW4gdGhlIGZ1bGwgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0SW1hZ2VPY2N1cnJlbmNlIChmdWxsSW1nRGF0YSwgcGFydGlhbEltZ0RhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge3Zpc3VhbGl6ZSA9IGZhbHNlLCB0aHJlc2hvbGQgPSBERUZBVUxUX01BVENIX1RIUkVTSE9MRH0gPSBvcHRpb25zO1xuICBjb25zdCBbZnVsbEltZywgcGFydGlhbEltZ10gPSBhd2FpdCBCLmFsbChbXG4gICAgY3YuaW1kZWNvZGVBc3luYyhmdWxsSW1nRGF0YSksXG4gICAgY3YuaW1kZWNvZGVBc3luYyhwYXJ0aWFsSW1nRGF0YSlcbiAgXSk7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICB0cnkge1xuICAgIGNvbnN0IG1hdGNoZWQgPSBhd2FpdCBmdWxsSW1nLm1hdGNoVGVtcGxhdGVBc3luYyhwYXJ0aWFsSW1nLCBjdi5UTV9DQ09FRkZfTk9STUVEKTtcbiAgICBjb25zdCBtaW5NYXggPSBhd2FpdCBtYXRjaGVkLm1pbk1heExvY0FzeW5jKCk7XG4gICAgaWYgKG1pbk1heC5tYXhWYWwgPCB0aHJlc2hvbGQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYW55IG9jY3VycmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBpbWFnZSBhYm92ZSB0aGUgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkfS4gSGlnaGVzdCBtYXRjaCB2YWx1ZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgZm91bmQgd2FzICR7bWluTWF4Lm1heFZhbH1gKTtcbiAgICB9XG4gICAgcmVzdWx0LnJlY3QgPSB7XG4gICAgICB4OiBtaW5NYXgubWF4TG9jLngsXG4gICAgICB5OiBtaW5NYXgubWF4TG9jLnksXG4gICAgICB3aWR0aDogcGFydGlhbEltZy5jb2xzLFxuICAgICAgaGVpZ2h0OiBwYXJ0aWFsSW1nLnJvd3NcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgb2NjdXJlbmNlcyBvZiB0aGUgcGFydGlhbCBpbWFnZSBpbiB0aGUgZnVsbCBpbWFnZS4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlfWApO1xuICB9XG4gIGlmICh2aXN1YWxpemUpIHtcbiAgICBoaWdobGlnaHRSZWdpb24oZnVsbEltZywgcmVzdWx0LnJlY3QpO1xuICAgIHJlc3VsdC52aXN1YWxpemF0aW9uID0gYXdhaXQgY3YuaW1lbmNvZGVBc3luYygnLnBuZycsIGZ1bGxJbWcpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JvcCB0aGUgaW1hZ2UgYnkgZ2l2ZW4gcmVjdGFuZ2xlICh1c2UgYmFzZTY0IHN0cmluZyBhcyBpbnB1dCBhbmQgb3V0cHV0KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEBwYXJhbSB7UmVnaW9ufSByZWN0IFRoZSBzZWxlY3RlZCByZWdpb24gb2YgaW1hZ2VcbiAqIEByZXR1cm4ge3N0cmluZ30gYmFzZTY0IGVuY29kZWQgc3RyaW5nIG9mIGNyb3BwZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JvcEJhc2U2NEltYWdlIChiYXNlNjRJbWFnZSwgcmVjdCkge1xuICBjb25zdCBpbWFnZSA9IGF3YWl0IGJhc2U2NFRvSW1hZ2UoYmFzZTY0SW1hZ2UpO1xuICBjcm9wSW1hZ2UoaW1hZ2UsIHJlY3QpO1xuICByZXR1cm4gYXdhaXQgaW1hZ2VUb0Jhc2U2NChpbWFnZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcG5nanMgaW1hZ2UgZnJvbSBnaXZlbiBiYXNlNjQgaW1hZ2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0SW1hZ2UgVGhlIHN0cmluZyB3aXRoIGJhc2U2NCBlbmNvZGVkIGltYWdlXG4gKiBAcmV0dXJuIHtQTkd9IFRoZSBpbWFnZSBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYmFzZTY0VG9JbWFnZSAoYmFzZTY0SW1hZ2UpIHtcbiAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShiYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGltYWdlID0gbmV3IFBORyh7ZmlsdGVyVHlwZTogU0NBTkxJTkVfRklMVEVSX01FVEhPRH0pO1xuICAgIGltYWdlLnBhcnNlKGltYWdlQnVmZmVyLCAoZXJyLCBpbWFnZSkgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYmFzZTY0IHN0cmluZyBmb3IgZ2l2ZW4gaW1hZ2Ugb2JqZWN0XG4gKlxuICogQHBhcmFtIHtQTkd9IGltYWdlIFRoZSBpbWFnZSBvYmplY3RcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyB3aXRoIGJhc2U2NCBlbmNvZGVkIGltYWdlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGltYWdlVG9CYXNlNjQgKGltYWdlKSB7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgaW1hZ2UucGFjaygpXG4gICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiBjaHVua3MucHVzaChjaHVuaykpLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIH0pXG4gICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by1jYWxsYmFja3NcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGVcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIHRvIG11dGF0ZSBieSBjcm9wcGluZ1xuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICovXG5mdW5jdGlvbiBjcm9wSW1hZ2UgKGltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlUmVjdCA9IHt3aWR0aDogaW1hZ2Uud2lkdGgsIGhlaWdodDogaW1hZ2UuaGVpZ2h0fTtcbiAgY29uc3QgaW50ZXJSZWN0ID0gZ2V0UmVjdEludGVyc2VjdGlvbihyZWN0LCBpbWFnZVJlY3QpO1xuICBpZiAoaW50ZXJSZWN0LndpZHRoIDwgcmVjdC53aWR0aCB8fCBpbnRlclJlY3QuaGVpZ2h0IDwgcmVjdC5oZWlnaHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcm9wICR7SlNPTi5zdHJpbmdpZnkocmVjdCl9IGZyb20gJHtKU09OLnN0cmluZ2lmeShpbWFnZVJlY3QpfSBiZWNhdXNlIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGVtIHdhcyBub3QgdGhlIHNpemUgb2YgdGhlIHJlY3RgKTtcbiAgfVxuXG4gIGNvbnN0IGZpcnN0VmVydGljYWxQaXhlbCA9IGludGVyUmVjdC50b3A7XG4gIGNvbnN0IGxhc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcCArIGludGVyUmVjdC5oZWlnaHQ7XG5cbiAgY29uc3QgZmlyc3RIb3Jpem9udGFsUGl4ZWwgPSBpbnRlclJlY3QubGVmdDtcbiAgY29uc3QgbGFzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0ICsgaW50ZXJSZWN0LndpZHRoO1xuXG4gIGNvbnN0IGNyb3BwZWRBcnJheSA9IFtdO1xuICBmb3IgKGxldCB5ID0gZmlyc3RWZXJ0aWNhbFBpeGVsOyB5IDwgbGFzdFZlcnRpY2FsUGl4ZWw7IHkrKykge1xuICAgIGZvciAobGV0IHggPSBmaXJzdEhvcml6b250YWxQaXhlbDsgeCA8IGxhc3RIb3Jpem9udGFsUGl4ZWw7IHgrKykge1xuICAgICAgY29uc3QgZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrID0gKGltYWdlUmVjdC53aWR0aCAqIHkgKyB4KSA8PCAyO1xuICAgICAgZm9yIChsZXQgYnl0ZUlkeCA9IDA7IGJ5dGVJZHggPCBCWVRFU19JTl9QSVhFTF9CTE9DSzsgYnl0ZUlkeCsrKSB7XG4gICAgICAgIGNyb3BwZWRBcnJheS5wdXNoKGltYWdlLmRhdGFbZmlyc3RCeXRlSWR4SW5QaXhlbEJsb2NrICsgYnl0ZUlkeF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltYWdlLmRhdGEgPSBCdWZmZXIuZnJvbShjcm9wcGVkQXJyYXkpO1xuICBpbWFnZS53aWR0aCA9IGludGVyUmVjdC53aWR0aDtcbiAgaW1hZ2UuaGVpZ2h0ID0gaW50ZXJSZWN0LmhlaWdodDtcbiAgcmV0dXJuIGltYWdlO1xufVxuXG5mdW5jdGlvbiBnZXRSZWN0SW50ZXJzZWN0aW9uIChyZWN0LCBpbWFnZVNpemUpIHtcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCA+PSBpbWFnZVNpemUud2lkdGggPyBpbWFnZVNpemUud2lkdGggOiByZWN0LmxlZnQ7XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wID49IGltYWdlU2l6ZS5oZWlnaHQgPyBpbWFnZVNpemUuaGVpZ2h0IDogcmVjdC50b3A7XG4gIGNvbnN0IHdpZHRoID0gaW1hZ2VTaXplLndpZHRoID49IChsZWZ0ICsgcmVjdC53aWR0aCkgPyByZWN0LndpZHRoIDogKGltYWdlU2l6ZS53aWR0aCAtIGxlZnQpO1xuICBjb25zdCBoZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0ID49ICh0b3AgKyByZWN0LmhlaWdodCkgPyByZWN0LmhlaWdodCA6IChpbWFnZVNpemUuaGVpZ2h0IC0gdG9wKTtcbiAgcmV0dXJuIHtsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHR9O1xufVxuXG5leHBvcnQge1xuICBjcm9wQmFzZTY0SW1hZ2UsIGJhc2U2NFRvSW1hZ2UsIGltYWdlVG9CYXNlNjQsIGNyb3BJbWFnZSwgZ2V0SW1hZ2VzTWF0Y2hlcyxcbiAgZ2V0SW1hZ2VzU2ltaWxhcml0eSwgZ2V0SW1hZ2VPY2N1cnJlbmNlLCBnZXRKaW1wSW1hZ2UsIE1JTUVfSlBFRywgTUlNRV9QTkcsXG4gIE1JTUVfQk1QLFxufTtcbiJdLCJmaWxlIjoibGliL2ltYWdlLXV0aWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9pbWFnZS11dGlsLmpzIl0sIm5hbWVzIjpbIk1JTUVfSlBFRyIsIk1JTUVfUE5HIiwiTUlNRV9CTVAiLCJKaW1wIiwiY3YiLCJCWVRFU19JTl9QSVhFTF9CTE9DSyIsIlNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QiLCJERUZBVUxUX01BVENIX1RIUkVTSE9MRCIsIkFWQUlMQUJMRV9ERVRFQ1RPUlMiLCJBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TIiwiZ2V0SmltcEltYWdlIiwiZGF0YSIsIkIiLCJyZXNvbHZlIiwicmVqZWN0IiwiXyIsImlzU3RyaW5nIiwiaXNCdWZmZXIiLCJFcnJvciIsIkJ1ZmZlciIsImZyb20iLCJlcnIiLCJpbWdPYmoiLCJfZ2V0QnVmZmVyIiwiZ2V0QnVmZmVyIiwiYmluZCIsInByb21pc2lmeSIsImNvbnRleHQiLCJpbml0T3BlbkNWIiwicmVxdWlyZSIsImlnbiIsImRldGVjdEFuZENvbXB1dGUiLCJpbWciLCJkZXRlY3RvciIsImtleVBvaW50cyIsImRldGVjdEFzeW5jIiwiZGVzY3JpcHRvciIsImNvbXB1dGVBc3luYyIsImNhbGN1bGF0ZU1hdGNoZWRSZWN0IiwibWF0Y2hlZFBvaW50cyIsImxlbmd0aCIsIngiLCJ5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludHNTb3J0ZWRCeURpc3RhbmNlIiwibWFwIiwicG9pbnQiLCJNYXRoIiwic3FydCIsInNvcnQiLCJwYWlyMSIsInBhaXIyIiwicGFpciIsImZpcnN0UG9pbnQiLCJoZWFkIiwibGFzdFBvaW50IiwibGFzdCIsInRvcExlZnRQb2ludCIsImJvdHRvbVJpZ2h0UG9pbnQiLCJoaWdobGlnaHRSZWdpb24iLCJtYXQiLCJyZWdpb24iLCJjb2xvciIsIlZlYyIsInRoaWNrbmVzcyIsImRyYXdSZWN0YW5nbGUiLCJSZWN0IiwiTElORV84IiwiZ2V0SW1hZ2VzTWF0Y2hlcyIsImltZzFEYXRhIiwiaW1nMkRhdGEiLCJvcHRpb25zIiwiZGV0ZWN0b3JOYW1lIiwidmlzdWFsaXplIiwiZ29vZE1hdGNoZXNGYWN0b3IiLCJtYXRjaEZ1bmMiLCJpbmNsdWRlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbWcxIiwiaW1nMiIsImFsbCIsImltZGVjb2RlQXN5bmMiLCJyZXN1bHQxIiwicmVzdWx0MiIsIm1hdGNoZXMiLCJlIiwidG90YWxDb3VudCIsImlzRnVuY3Rpb24iLCJkaXN0YW5jZXMiLCJtYXRjaCIsImRpc3RhbmNlIiwibWluRGlzdGFuY2UiLCJtaW4iLCJtYXhEaXN0YW5jZSIsIm1heCIsImZpbHRlciIsIm1hdGNoMSIsIm1hdGNoMiIsInNsaWNlIiwicG9pbnRzMSIsInF1ZXJ5SWR4IiwicmVjdDEiLCJwb2ludHMyIiwidHJhaW5JZHgiLCJyZWN0MiIsInJlc3VsdCIsImNvdW50IiwidmlzdWFsaXphdGlvbiIsImRyYXdNYXRjaGVzIiwiY29scyIsImltZW5jb2RlQXN5bmMiLCJnZXRJbWFnZXNTaW1pbGFyaXR5IiwidGVtcGxhdGUiLCJyZWZlcmVuY2UiLCJyb3dzIiwiY29udmVydFRvQXN5bmMiLCJDVl84VUMzIiwibWF0Y2hlZCIsIm1hdGNoVGVtcGxhdGVBc3luYyIsIlRNX0NDT0VGRl9OT1JNRUQiLCJtaW5NYXgiLCJtaW5NYXhMb2NBc3luYyIsInNjb3JlIiwibWF4VmFsIiwicmVzdWx0TWF0IiwiTWF0IiwiY29weVRvQXN5bmMiLCJnZXRSZWdpb24iLCJtYXNrIiwiYWJzZGlmZiIsImN2dENvbG9yQXN5bmMiLCJDT0xPUl9CR1IyR1JBWSIsImNvbnRvdXJzIiwidGhyZXNob2xkQXN5bmMiLCJUSFJFU0hfQklOQVJZIiwiVEhSRVNIX09UU1UiLCJmaW5kQ29udG91cnNBc3luYyIsIlJFVFJfRVhURVJOQUwiLCJDSEFJTl9BUFBST1hfU0lNUExFIiwiY29udG91ciIsImJvdW5kaW5nUmVjdCIsImdldEltYWdlT2NjdXJyZW5jZSIsImZ1bGxJbWdEYXRhIiwicGFydGlhbEltZ0RhdGEiLCJ0aHJlc2hvbGQiLCJmdWxsSW1nIiwicGFydGlhbEltZyIsInJlY3QiLCJtYXhMb2MiLCJjcm9wQmFzZTY0SW1hZ2UiLCJiYXNlNjRJbWFnZSIsImltYWdlIiwiYmFzZTY0VG9JbWFnZSIsImNyb3BJbWFnZSIsImltYWdlVG9CYXNlNjQiLCJpbWFnZUJ1ZmZlciIsIlBORyIsImZpbHRlclR5cGUiLCJwYXJzZSIsImNodW5rcyIsInBhY2siLCJvbiIsImNodW5rIiwicHVzaCIsImNvbmNhdCIsInRvU3RyaW5nIiwiaW1hZ2VSZWN0IiwiaW50ZXJSZWN0IiwiZ2V0UmVjdEludGVyc2VjdGlvbiIsImZpcnN0VmVydGljYWxQaXhlbCIsInRvcCIsImxhc3RWZXJ0aWNhbFBpeGVsIiwiZmlyc3RIb3Jpem9udGFsUGl4ZWwiLCJsZWZ0IiwibGFzdEhvcml6b250YWxQaXhlbCIsImNyb3BwZWRBcnJheSIsImZpcnN0Qnl0ZUlkeEluUGl4ZWxCbG9jayIsImJ5dGVJZHgiLCJpbWFnZVNpemUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLFNBQUY7QUFBYUMsRUFBQUEsUUFBYjtBQUF1QkMsRUFBQUE7QUFBdkIsSUFBb0NDLGFBQTFDOzs7O0FBQ0EsSUFBSUMsRUFBRSxHQUFHLElBQVQ7QUF3QkEsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUEvQjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDO0FBRUEsTUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsT0FEMEIsRUFFMUIsT0FGMEIsRUFHMUIsT0FIMEIsRUFJMUIsTUFKMEIsRUFLMUIsTUFMMEIsRUFNMUIsTUFOMEIsRUFPMUIsTUFQMEIsRUFRMUIsTUFSMEIsRUFTMUIsS0FUMEIsQ0FBNUI7QUFZQSxNQUFNQyw0QkFBNEIsR0FBRyxDQUNuQyxZQURtQyxFQUVuQyxZQUZtQyxFQUduQyxjQUhtQyxFQUluQyxtQkFKbUMsRUFLbkMsc0JBTG1DLEVBTW5DLGVBTm1DLENBQXJD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LENBQUN4SSxNQUFWLElBQXFCZ0ksR0FBRyxHQUFHdkIsSUFBSSxDQUFDekcsTUFBaEMsR0FBMEN5RyxJQUFJLENBQUN6RyxNQUEvQyxHQUF5RHdJLFNBQVMsQ0FBQ3hJLE1BQVYsR0FBbUJnSSxHQUEzRjtBQUNBLFNBQU87QUFBQ0csSUFBQUEsSUFBRDtBQUFPSCxJQUFBQSxHQUFQO0FBQVlqSSxJQUFBQSxLQUFaO0FBQW1CQyxJQUFBQTtBQUFuQixHQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEppbXAgZnJvbSAnamltcCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgUE5HIH0gZnJvbSAncG5nanMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgaGFzVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IE1JTUVfSlBFRywgTUlNRV9QTkcsIE1JTUVfQk1QIH0gPSBKaW1wO1xubGV0IGN2ID0gbnVsbDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWdpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gVGhlIG9mZnNldCBmcm9tIHRoZSBsZWZ0IHNpZGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUaGUgb2Zmc2V0IGZyb20gdGhlIHRvcFxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUG9pbnRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB4IC0gVGhlIHggY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHkgLSBUaGUgeSBjb29yZGluYXRlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSZWN0XG4gKiBAcHJvcGVydHkge251bWJlcn0geCAtIFRoZSB0b3AgbGVmdCBjb29yZGluYXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0geSAtIFRoZSBib3R0b20gcmlnaHQgY29vcmRpbmF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gVGhlIHdpZHRoXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gVGhlIGhlaWdodFxuICovXG5cbmNvbnN0IEJZVEVTX0lOX1BJWEVMX0JMT0NLID0gNDtcbmNvbnN0IFNDQU5MSU5FX0ZJTFRFUl9NRVRIT0QgPSA0O1xuY29uc3QgREVGQVVMVF9NQVRDSF9USFJFU0hPTEQgPSAwLjU7XG5cbmNvbnN0IEFWQUlMQUJMRV9ERVRFQ1RPUlMgPSBbXG4gICdBS0FaRScsXG4gICdBR0FTVCcsXG4gICdCUklTSycsXG4gICdGQVNUJyxcbiAgJ0dGVFQnLFxuICAnS0FaRScsXG4gICdNU0VSJyxcbiAgJ1NJRlQnLFxuICAnT1JCJyxcbl07XG5cbmNvbnN0IEFWQUlMQUJMRV9NQVRDSElOR19GVU5DVElPTlMgPSBbXG4gICdGbGFubkJhc2VkJyxcbiAgJ0JydXRlRm9yY2UnLFxuICAnQnJ1dGVGb3JjZUwxJyxcbiAgJ0JydXRlRm9yY2VIYW1taW5nJyxcbiAgJ0JydXRlRm9yY2VIYW1taW5nTHV0JyxcbiAgJ0JydXRlRm9yY2VTTDInLFxuXTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBhIEppbXAgaW1hZ2Ugb2JqZWN0IGZyb20gYnVmZmVyIG9yIGJhc2U2NCBkYXRhLiBKaW1wXG4gKiBpcyBhIGdyZWF0IGxpYnJhcnkgaG93ZXZlciBpdCBkb2VzIElPIGluIHRoZSBjb25zdHJ1Y3RvciBzbyBpdCdzIG5vdFxuICogY29udmVuaWVudCBmb3Igb3VyIGFzeW5jL2F3YWl0IG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gZGF0YSAtIGJpbmFyeSBpbWFnZSBidWZmZXIgb3IgYmFzZTY0LWVuY29kZWQgaW1hZ2VcbiAqIHN0cmluZ1xuICogQHJldHVybnMge0ppbXB9IC0gdGhlIGppbXAgaW1hZ2Ugb2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEppbXBJbWFnZSAoZGF0YSkge1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICghXy5pc1N0cmluZyhkYXRhKSAmJiAhXy5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ011c3QgaW5pdGlhbGl6ZSBqaW1wIG9iamVjdCB3aXRoIHN0cmluZyBvciBidWZmZXInKSk7XG4gICAgfVxuICAgIC8vIGlmIGRhdGEgaXMgYSBzdHJpbmcsIGFzc3VtZSBpdCBpcyBhIGJhc2U2NC1lbmNvZGVkIGltYWdlXG4gICAgaWYgKF8uaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAnYmFzZTY0Jyk7XG4gICAgfVxuICAgIG5ldyBKaW1wKGRhdGEsIChlcnIsIGltZ09iaikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgICBpZiAoIWltZ09iaikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGNyZWF0ZSBqaW1wIGltYWdlIGZyb20gdGhhdCBkYXRhJykpO1xuICAgICAgfVxuICAgICAgaW1nT2JqLl9nZXRCdWZmZXIgPSBpbWdPYmouZ2V0QnVmZmVyLmJpbmQoaW1nT2JqKTtcbiAgICAgIGltZ09iai5nZXRCdWZmZXIgPSBCLnByb21pc2lmeShpbWdPYmouX2dldEJ1ZmZlciwge2NvbnRleHQ6IGltZ09ian0pO1xuICAgICAgcmVzb2x2ZShpbWdPYmopO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgb3BlbmN2NG5vZGVqcyBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRPcGVuQ1YgKCkge1xuICBpZiAoIWN2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGN2ID0gcmVxdWlyZSgnb3BlbmN2NG5vZGVqcycpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIWN2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcGVuY3Y0bm9kZWpzIG1vZHVsZSBpcyByZXF1aXJlZCB0byB1c2UgT3BlbkNWIGZlYXR1cmVzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBpbnN0YWxsIGl0IGZpcnN0IChucG0gaSAtZyBvcGVuY3Y0bm9kZWpzKSBhbmQgcmVzdGFydCBBcHBpdW0uICcgK1xuICAgICAgICAgICAgICAgICAgICAnUmVhZCBodHRwczovL2dpdGh1Yi5jb20vanVzdGFkdWRld2hvaGFja3Mvb3BlbmN2NG5vZGVqcyNob3ctdG8taW5zdGFsbCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMgdG9waWMuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNYXRjaENvbXB1dGF0aW9uUmVzdWx0XG4gKiBAcHJvcGVydHkge2N2LkRlc2NyaXB0b3JNYXRjaH0gZGVzY2lwdG9yIC0gT3BlbkNWIG1hdGNoIGRlc2NyaXB0b3JcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Y3YuS2V5UG9pbnQ+fSBrZXlQb2ludHMgLSBUaGUgYXJyYXkgb2Yga2V5IHBvaW50c1xuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyBhbiBPcGVuQ1YgbWF0Y2ggZGVzY3JpcHRvciBvZiBhbiBpbWFnZSwgd2hpY2ggY2FuIGJlIHVzZWRcbiAqIGZvciBicnV0ZS1mb3JjZSBtYXRjaGluZy5cbiAqIFJlYWQgaHR0cHM6Ly9kb2NzLm9wZW5jdi5vcmcvMy4wLWJldGEvZG9jL3B5X3R1dG9yaWFscy9weV9mZWF0dXJlMmQvcHlfbWF0Y2hlci9weV9tYXRjaGVyLmh0bWxcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtjdi5NYXR9IGltZyBJbWFnZSBkYXRhXG4gKiBAcGFyYW0ge2N2LkZlYXR1cmVEZXRlY3Rvcn0gZGV0ZWN0b3IgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7TWF0Y2hDb21wdXRhdGlvblJlc3VsdH1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0QW5kQ29tcHV0ZSAoaW1nLCBkZXRlY3Rvcikge1xuICBjb25zdCBrZXlQb2ludHMgPSBhd2FpdCBkZXRlY3Rvci5kZXRlY3RBc3luYyhpbWcpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gYXdhaXQgZGV0ZWN0b3IuY29tcHV0ZUFzeW5jKGltZywga2V5UG9pbnRzKTtcbiAgcmV0dXJuIHtcbiAgICBrZXlQb2ludHMsXG4gICAgZGVzY3JpcHRvclxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZWQgdGhlIGJvdW5kaW5nIHJlY3QgY29vcmRpbmF0ZXMgZm9yIHRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFBvaW50Pn0gbWF0Y2hlZFBvaW50cyBBcnJheSBvZiBtYXRjaGluZyBwb2ludHNcbiAqIEByZXR1cm5zIHtSZWN0fSBUaGUgbWF0Y2hpbmcgYm91bmRpbmcgcmVjdCBvciBhIHplcm8gcmVjdCBpZiBubyBtYXRjaFxuICogY2FuIGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVNYXRjaGVkUmVjdCAobWF0Y2hlZFBvaW50cykge1xuICBpZiAobWF0Y2hlZFBvaW50cy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcG9pbnRzU29ydGVkQnlEaXN0YW5jZSA9IG1hdGNoZWRQb2ludHNcbiAgICAubWFwKHBvaW50ID0+IFtNYXRoLnNxcnQocG9pbnQueCAqIHBvaW50LnggKyBwb2ludC55ICogcG9pbnQueSksIHBvaW50XSlcbiAgICAuc29ydCgocGFpcjEsIHBhaXIyKSA9PiBwYWlyMVswXSA+PSBwYWlyMlswXSlcbiAgICAubWFwKHBhaXIgPT4gcGFpclsxXSk7XG4gIGNvbnN0IGZpcnN0UG9pbnQgPSBfLmhlYWQocG9pbnRzU29ydGVkQnlEaXN0YW5jZSk7XG4gIGNvbnN0IGxhc3RQb2ludCA9IF8ubGFzdChwb2ludHNTb3J0ZWRCeURpc3RhbmNlKTtcbiAgY29uc3QgdG9wTGVmdFBvaW50ID0ge1xuICAgIHg6IGZpcnN0UG9pbnQueCA8PSBsYXN0UG9pbnQueCA/IGZpcnN0UG9pbnQueCA6IGxhc3RQb2ludC54LFxuICAgIHk6IGZpcnN0UG9pbnQueSA8PSBsYXN0UG9pbnQueSA/IGZpcnN0UG9pbnQueSA6IGxhc3RQb2ludC55LFxuICB9O1xuICBjb25zdCBib3R0b21SaWdodFBvaW50ID0ge1xuICAgIHg6IGZpcnN0UG9pbnQueCA+PSBsYXN0UG9pbnQueCA/IGZpcnN0UG9pbnQueCA6IGxhc3RQb2ludC54LFxuICAgIHk6IGZpcnN0UG9pbnQueSA+PSBsYXN0UG9pbnQueSA/IGZpcnN0UG9pbnQueSA6IGxhc3RQb2ludC55LFxuICB9O1xuICByZXR1cm4ge1xuICAgIHg6IHRvcExlZnRQb2ludC54LFxuICAgIHk6IHRvcExlZnRQb2ludC55LFxuICAgIHdpZHRoOiBib3R0b21SaWdodFBvaW50LnggLSB0b3BMZWZ0UG9pbnQueCxcbiAgICBoZWlnaHQ6IGJvdHRvbVJpZ2h0UG9pbnQueSAtIHRvcExlZnRQb2ludC55XG4gIH07XG59XG5cbi8qKlxuICogRHJhd3MgYSByZWN0YW5uZ2xlIG9uIHRoZSBnaXZlbiBpbWFnZSBtYXRyaXhcbiAqXG4gKiBAcGFyYW0ge2N2Lk1hdH0gbWF0IFRoZSBzb3VyY2UgaW1hZ2VcbiAqIEBwYXJhbSB7UmVjdH0gcmVnaW9uIFRoZSByZWdpb24gdG8gaGlnaGxpZ2h0XG4gKlxuICogQHJldHVybnMge2N2Lk1hdH0gVGhlIHNhbWUgaW1hZ2Ugd2l0aCB0aGUgcmVjdGFuZ2Ugb24gaXRcbiAqL1xuZnVuY3Rpb24gaGlnaGxpZ2h0UmVnaW9uIChtYXQsIHJlZ2lvbikge1xuICBpZiAocmVnaW9uLndpZHRoIDw9IDAgfHwgcmVnaW9uLmhlaWdodCA8PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaGlnaGxpZ2h0IGluIHJlZFxuICBjb25zdCBjb2xvciA9IG5ldyBjdi5WZWMoMCwgMCwgMjU1KTtcbiAgY29uc3QgdGhpY2tuZXNzID0gMjtcbiAgbWF0LmRyYXdSZWN0YW5nbGUobmV3IGN2LlJlY3QocmVnaW9uLngsIHJlZ2lvbi55LCByZWdpb24ud2lkdGgsIHJlZ2lvbi5oZWlnaHQpLCBjb2xvciwgdGhpY2tuZXNzLCBjdi5MSU5FXzgpO1xuICByZXR1cm4gbWF0O1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1hdGNoaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBkZXRlY3Rvck5hbWUgWydPUkInXSBPbmUgb2YgcG9zc2libGUgT3BlbkNWIGZlYXR1cmUgZGV0ZWN0b3IgbmFtZXNcbiAqIGZyb20gYEFWQUlMQUJMRV9ERVRFQ1RPUlNgIGFycmF5LlxuICogU29tZSBvZiB0aGVzZSBtZXRob2RzIChGQVNULCBBR0FTVCwgR0ZUVCwgRkFTVCwgU0lGVCBhbmQgTVNFUikgYXJlIG5vdCBhdmFpbGFibGVcbiAqIGluIHRoZSBkZWZhdWx0IE9wZW5DViBpbnN0YWxsYXRpb24gYW5kIGhhdmUgdG8gYmUgZW5hYmxlZCBtYW51YWxseSBiZWZvcmVcbiAqIGxpYnJhcnkgY29tcGlsYXRpb24uXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IG1hdGNoRnVuYyBbJ0JydXRlRm9yY2UnXSBUaGUgbmFtZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24uXG4gKiBTaG91bGQgYmUgb25lIG9mIGBBVkFJTEFCTEVfTUFUQ0hJTkdfRlVOQ1RJT05TYCBhcnJheS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxGdW5jdGlvbn0gZ29vZE1hdGNoZXNGYWN0b3IgVGhlIG1heGltdW0gY291bnQgb2YgXCJnb29kXCIgbWF0Y2hlc1xuICogKGUuIGcuIHdpdGggbWluaW1hbCBkaXN0YW5jZXMpIG9yIGEgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgMyBhcmd1bWVudHM6IHRoZSBjdXJyZW50IGRpc3RhbmNlLFxuICogbWluaW1hbCBkaXN0YW5jZSwgbWF4aW11bSBkaXN0YW5jZSBhbmQgcmV0dXJucyB0cnVlIG9yIGZhbHNlIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSB0aGUgbWF0Y2guXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSB2aXN1YWxpemUgW2ZhbHNlXSBXaGV0aGVyIHRvIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpc2FsaXphdGlvblxuICogYXMgYW4gaW1hZ2UgKHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTWF0Y2hpbmdSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudCBUaGUgY291bnQgb2YgbWF0Y2hlZCBlZGdlcyBvbiBib3RoIGltYWdlcy5cbiAqIFRoZSBtb3JlIG1hdGNoaW5nIGVkZ2VzIHRoZXJlIGFyZSBubyBib3RoIGltYWdlcyB0aGUgbW9yZSBzaW1pbGFyIHRoZXkgYXJlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsQ291bnQgVGhlIHRvdGFsIGNvdW50IG9mIG1hdGNoZWQgZWRnZXMgb24gYm90aCBpbWFnZXMuXG4gKiBJdCBpcyBlcXVhbCB0byBgY291bnRgIGlmIGBnb29kTWF0Y2hlc0ZhY3RvcmAgZG9lcyBub3QgbGltaXQgdGhlIG1hdGNoZXMsXG4gKiBvdGhlcndpc2UgaXQgY29udGFpbnMgdGhlIHRvdGFsIGNvdW50IG9mIG1hdGNoZXMgYmVmb3JlIGBnb29kTWF0Y2hlc0ZhY3RvcmAgaXNcbiAqIGFwcGxpZWQuXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gVGhpcyB2aXN1YWxpemF0aW9uIGxvb2tzIGxpa2VcbiAqIGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzMxMTI1NTIxLzI5NzAyNzMxLWM3OWUzMTQyLTg5NzItMTFlNy05NDdlLWRiMTA5ZDQxNTQ2OS5qcGdcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8UG9pbnQ+fSBwb2ludHMxIFRoZSBhcnJheSBvZiBtYXRjaGluZyBwb2ludHMgb24gdGhlIGZpcnN0IGltYWdlXG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QxIFRoZSBib3VuZGluZyByZWN0IGZvciB0aGUgYG1hdGNoZWRQb2ludHMxYCBzZXQgb3IgYSB6ZXJvIHJlY3RcbiAqIGlmIG5vdCBlbm91Z2ggbWF0Y2hpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICogQHByb3BlcnR5IHtBcnJheTxQb2ludD59IHBvaW50czIgVGhlIGFycmF5IG9mIG1hdGNoaW5nIHBvaW50cyBvbiB0aGUgc2Vjb25kIGltYWdlXG4gKiBAcHJvcGVydHkge1JlY3R9IHJlY3QyIFRoZSBib3VuZGluZyByZWN0IGZvciB0aGUgYG1hdGNoZWRQb2ludHMyYCBzZXQgb3IgYSB6ZXJvIHJlY3RcbiAqIGlmIG5vdCBlbm91Z2ggbWF0Y2hpbmcgcG9pbnRzIGFyZSBmb3VuZFxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY291bnQgb2YgY29tbW9uIGVkZ2VzIGJldHdlZW4gdHdvIGltYWdlcy5cbiAqIFRoZSBpbWFnZXMgbWlnaHQgYmUgcm90YXRlZCBvciByZXNpemVkIHJlbGF0aXZlbHkgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMURhdGEgVGhlIGRhdGEgb2YgdGhlIGZpcnN0IGltYWdlIHBhY2tlZCBpbnRvIGEgTm9kZUpTIGJ1ZmZlclxuICogQHBhcmFtIHtCdWZmZXJ9IGltZzJEYXRhIFRoZSBkYXRhIG9mIHRoZSBzZWNvbmQgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9NYXRjaGluZ09wdGlvbnN9IG9wdGlvbnMgW3t9XSBTZXQgb2YgbWF0Y2hpbmcgb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtNYXRjaGluZ1Jlc3VsdH0gTWFjaGluZyByZXN1bHRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgZGV0ZWN0b3JOYW1lYCB2YWx1ZSBpcyB1bmtub3duLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZXNNYXRjaGVzIChpbWcxRGF0YSwgaW1nMkRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge2RldGVjdG9yTmFtZSA9ICdPUkInLCB2aXN1YWxpemUgPSBmYWxzZSxcbiAgICAgICAgIGdvb2RNYXRjaGVzRmFjdG9yLCBtYXRjaEZ1bmMgPSAnQnJ1dGVGb3JjZSd9ID0gb3B0aW9ucztcbiAgaWYgKCFfLmluY2x1ZGVzKEFWQUlMQUJMRV9ERVRFQ1RPUlMsIGRldGVjdG9yTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2RldGVjdG9yTmFtZX0nIGRldGVjdG9yIGlzIHVua25vd24uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgT25seSAke0pTT04uc3RyaW5naWZ5KEFWQUlMQUJMRV9ERVRFQ1RPUlMpfSBkZXRlY3RvcnMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICBpZiAoIV8uaW5jbHVkZXMoQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUywgbWF0Y2hGdW5jKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7bWF0Y2hGdW5jfScgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgdW5rbm93bi4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoQVZBSUxBQkxFX01BVENISU5HX0ZVTkNUSU9OUyl9IG1hdGNoaW5nIGZ1bmN0aW9ucyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG5cbiAgY29uc3QgZGV0ZWN0b3IgPSBuZXcgY3ZbYCR7ZGV0ZWN0b3JOYW1lfURldGVjdG9yYF0oKTtcbiAgY29uc3QgW2ltZzEsIGltZzJdID0gYXdhaXQgQi5hbGwoW1xuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMURhdGEpLFxuICAgIGN2LmltZGVjb2RlQXN5bmMoaW1nMkRhdGEpXG4gIF0pO1xuICBjb25zdCBbcmVzdWx0MSwgcmVzdWx0Ml0gPSBhd2FpdCBCLmFsbChbXG4gICAgZGV0ZWN0QW5kQ29tcHV0ZShpbWcxLCBkZXRlY3RvciksXG4gICAgZGV0ZWN0QW5kQ29tcHV0ZShpbWcyLCBkZXRlY3RvcilcbiAgXSk7XG4gIGxldCBtYXRjaGVzID0gW107XG4gIHRyeSB7XG4gICAgbWF0Y2hlcyA9IGF3YWl0IGN2W2BtYXRjaCR7bWF0Y2hGdW5jfUFzeW5jYF0ocmVzdWx0MS5kZXNjcmlwdG9yLCByZXN1bHQyLmRlc2NyaXB0b3IpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgbWF0Y2hlcyBiZXR3ZWVuIHRoZSBnaXZlbiBpbWFnZXMuIFRyeSBhbm90aGVyIGRldGVjdGlvbiBhbGdvcml0aG0uIGAgK1xuICAgICAgICAgICAgICAgICAgICBgIE9yaWdpbmFsIGVycm9yOiAke2V9YCk7XG4gIH1cbiAgY29uc3QgdG90YWxDb3VudCA9IG1hdGNoZXMubGVuZ3RoO1xuICBpZiAoaGFzVmFsdWUoZ29vZE1hdGNoZXNGYWN0b3IpKSB7XG4gICAgaWYgKF8uaXNGdW5jdGlvbihnb29kTWF0Y2hlc0ZhY3RvcikpIHtcbiAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IG1hdGNoLmRpc3RhbmNlKTtcbiAgICAgIGNvbnN0IG1pbkRpc3RhbmNlID0gXy5taW4oZGlzdGFuY2VzKTtcbiAgICAgIGNvbnN0IG1heERpc3RhbmNlID0gXy5tYXgoZGlzdGFuY2VzKTtcbiAgICAgIG1hdGNoZXMgPSBtYXRjaGVzXG4gICAgICAgIC5maWx0ZXIobWF0Y2ggPT4gZ29vZE1hdGNoZXNGYWN0b3IobWF0Y2guZGlzdGFuY2UsIG1pbkRpc3RhbmNlLCBtYXhEaXN0YW5jZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiBnb29kTWF0Y2hlc0ZhY3Rvcikge1xuICAgICAgICBtYXRjaGVzID0gbWF0Y2hlc1xuICAgICAgICAgIC5zb3J0KChtYXRjaDEsIG1hdGNoMikgPT4gbWF0Y2gxLmRpc3RhbmNlIC0gbWF0Y2gyLmRpc3RhbmNlKVxuICAgICAgICAgIC5zbGljZSgwLCBnb29kTWF0Y2hlc0ZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcG9pbnRzMSA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHJlc3VsdDEua2V5UG9pbnRzW21hdGNoLnF1ZXJ5SWR4XS5wb2ludCk7XG4gIGNvbnN0IHJlY3QxID0gY2FsY3VsYXRlTWF0Y2hlZFJlY3QocG9pbnRzMSk7XG4gIGNvbnN0IHBvaW50czIgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiByZXN1bHQyLmtleVBvaW50c1ttYXRjaC50cmFpbklkeF0ucG9pbnQpO1xuICBjb25zdCByZWN0MiA9IGNhbGN1bGF0ZU1hdGNoZWRSZWN0KHBvaW50czIpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBwb2ludHMxLFxuICAgIHJlY3QxLFxuICAgIHBvaW50czIsXG4gICAgcmVjdDIsXG4gICAgdG90YWxDb3VudCxcbiAgICBjb3VudDogbWF0Y2hlcy5sZW5ndGgsXG4gIH07XG4gIGlmICh2aXN1YWxpemUpIHtcbiAgICBjb25zdCB2aXN1YWxpemF0aW9uID0gY3YuZHJhd01hdGNoZXMoaW1nMSwgaW1nMiwgcmVzdWx0MS5rZXlQb2ludHMsIHJlc3VsdDIua2V5UG9pbnRzLCBtYXRjaGVzKTtcbiAgICBoaWdobGlnaHRSZWdpb24odmlzdWFsaXphdGlvbiwgcmVjdDEpO1xuICAgIGhpZ2hsaWdodFJlZ2lvbih2aXN1YWxpemF0aW9uLCB7XG4gICAgICB4OiBpbWcxLmNvbHMgKyByZWN0Mi54LFxuICAgICAgeTogcmVjdDIueSxcbiAgICAgIHdpZHRoOiByZWN0Mi53aWR0aCxcbiAgICAgIGhlaWdodDogcmVjdDIuaGVpZ2h0XG4gICAgfSk7XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgdmlzdWFsaXphdGlvbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaW1pbGFyaXR5T3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNpbWlsYXJpdHlSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY29yZSBUaGUgc2ltaWxhcml0eSBzY29yZSBhcyBhIGZsb2F0IG51bWJlciBpbiByYW5nZSBbMC4wLCAxLjBdLlxuICogMS4wIGlzIHRoZSBoaWdoZXN0IHNjb3JlIChtZWFucyBib3RoIGltYWdlcyBhcmUgdG90YWxseSBlcXVhbCkuXG4gKiBAcHJvcGVydHkgez9CdWZmZXJ9IHZpc3VhbGl6YXRpb24gVGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIG1hdGNoaW5nIHJlc3VsdFxuICogcmVwcmVzZW50ZWQgYXMgUE5HIGltYWdlIGJ1ZmZlci4gVGhpcyBpbWFnZSBpbmNsdWRlcyBib3RoIGlucHV0IHBpY3R1cmVzIHdoZXJlXG4gKiBkaWZmZXJlbmNlIHJlZ2lvbnMgYXJlIGhpZ2hsaWdodGVkIHdpdGggcmVjdGFuZ2xlcy5cbiAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHNpbWlsYXJpdHkgc2NvcmUgYmV0d2VlbiB0d28gaW1hZ2VzLlxuICogSXQgaXMgZXhwZWN0ZWQsIHRoYXQgYm90aCBpbWFnZXMgaGF2ZSB0aGUgc2FtZSByZXNvbHV0aW9uLlxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbWcxRGF0YSBUaGUgZGF0YSBvZiB0aGUgZmlyc3QgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW1nMkRhdGEgVGhlIGRhdGEgb2YgdGhlIHNlY29uZCBpbWFnZSBwYWNrZWQgaW50byBhIE5vZGVKUyBidWZmZXJcbiAqIEBwYXJhbSB7P1NpbWlsYXJpdHlPcHRpb25zfSBvcHRpb25zIFt7fV0gU2V0IG9mIHNpbWlsYXJpdHkgY2FsY3VsYXRpb24gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtTaW1pbGFyaXR5UmVzdWx0fSBUaGUgY2FsY3VsYXRpb24gcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIGltYWdlcyBoYXZlIGRpZmZlcmVudCByZXNvbHV0aW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZXNTaW1pbGFyaXR5IChpbWcxRGF0YSwgaW1nMkRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICBpbml0T3BlbkNWKCk7XG5cbiAgY29uc3Qge3Zpc3VhbGl6ZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGxldCBbdGVtcGxhdGUsIHJlZmVyZW5jZV0gPSBhd2FpdCBCLmFsbChbXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcxRGF0YSksXG4gICAgY3YuaW1kZWNvZGVBc3luYyhpbWcyRGF0YSlcbiAgXSk7XG4gIGlmICh0ZW1wbGF0ZS5yb3dzICE9PSByZWZlcmVuY2Uucm93cyB8fCB0ZW1wbGF0ZS5jb2xzICE9PSByZWZlcmVuY2UuY29scykge1xuICAgIHRocm93IG5ldyBFcnJvcignQm90aCBpbWFnZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgc2l6ZSBpbiBvcmRlciB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2NhbGN1bGF0ZSB0aGUgc2ltaWxhcml0eSBzY29yZS4nKTtcbiAgfVxuICBbdGVtcGxhdGUsIHJlZmVyZW5jZV0gPSBhd2FpdCBCLmFsbChbXG4gICAgdGVtcGxhdGUuY29udmVydFRvQXN5bmMoY3YuQ1ZfOFVDMyksXG4gICAgcmVmZXJlbmNlLmNvbnZlcnRUb0FzeW5jKGN2LkNWXzhVQzMpXG4gIF0pO1xuXG4gIGNvbnN0IG1hdGNoZWQgPSBhd2FpdCByZWZlcmVuY2UubWF0Y2hUZW1wbGF0ZUFzeW5jKHRlbXBsYXRlLCBjdi5UTV9DQ09FRkZfTk9STUVEKTtcbiAgY29uc3QgbWluTWF4ID0gYXdhaXQgbWF0Y2hlZC5taW5NYXhMb2NBc3luYygpO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc2NvcmU6IG1pbk1heC5tYXhWYWxcbiAgfTtcbiAgaWYgKHZpc3VhbGl6ZSkge1xuICAgIGNvbnN0IHJlc3VsdE1hdCA9IG5ldyBjdi5NYXQodGVtcGxhdGUucm93cywgdGVtcGxhdGUuY29scyAqIDIsIGN2LkNWXzhVQzMpO1xuICAgIGF3YWl0IEIuYWxsKFtcbiAgICAgIHJlZmVyZW5jZS5jb3B5VG9Bc3luYyhcbiAgICAgICAgcmVzdWx0TWF0LmdldFJlZ2lvbihuZXcgY3YuUmVjdCgwLCAwLCByZWZlcmVuY2UuY29scywgcmVmZXJlbmNlLnJvd3MpKSksXG4gICAgICB0ZW1wbGF0ZS5jb3B5VG9Bc3luYyhcbiAgICAgICAgcmVzdWx0TWF0LmdldFJlZ2lvbihuZXcgY3YuUmVjdChyZWZlcmVuY2UuY29scywgMCwgdGVtcGxhdGUuY29scywgdGVtcGxhdGUucm93cykpKVxuICAgIF0pO1xuICAgIGxldCBtYXNrID0gcmVmZXJlbmNlLmFic2RpZmYodGVtcGxhdGUpO1xuICAgIG1hc2sgPSBhd2FpdCBtYXNrLmN2dENvbG9yQXN5bmMoY3YuQ09MT1JfQkdSMkdSQVkpO1xuICAgIGxldCBjb250b3VycyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBtYXNrID0gYXdhaXQgbWFzay50aHJlc2hvbGRBc3luYygxMjgsIDI1NSwgY3YuVEhSRVNIX0JJTkFSWSB8IGN2LlRIUkVTSF9PVFNVKTtcbiAgICAgIGNvbnRvdXJzID0gYXdhaXQgbWFzay5maW5kQ29udG91cnNBc3luYyhjdi5SRVRSX0VYVEVSTkFMLCBjdi5DSEFJTl9BUFBST1hfU0lNUExFKTtcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIC8vIE5vIGNvbnRvdXJzIGNhbiBiZSBmb3VuZCwgd2hpY2ggbWVhbnMsIG1vc3QgbGlrZWx5LCB0aGF0IGltYWdlcyBhcmUgZXF1YWxcbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIGNvbnRvdXJzKSB7XG4gICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSBjb250b3VyLmJvdW5kaW5nUmVjdCgpO1xuICAgICAgaGlnaGxpZ2h0UmVnaW9uKHJlc3VsdE1hdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgIGhpZ2hsaWdodFJlZ2lvbihyZXN1bHRNYXQsIHtcbiAgICAgICAgeDogcmVmZXJlbmNlLmNvbHMgKyBib3VuZGluZ1JlY3QueCxcbiAgICAgICAgeTogYm91bmRpbmdSZWN0LnksXG4gICAgICAgIHdpZHRoOiBib3VuZGluZ1JlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodDogYm91bmRpbmdSZWN0LmhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlc3VsdC52aXN1YWxpemF0aW9uID0gYXdhaXQgY3YuaW1lbmNvZGVBc3luYygnLnBuZycsIHJlc3VsdE1hdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBPY2N1cnJlbmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdmlzdWFsaXplIFtmYWxzZV0gV2hldGhlciB0byByZXR1cm4gdGhlIHJlc3VsdGluZyB2aXNhbGl6YXRpb25cbiAqIGFzIGFuIGltYWdlICh1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcylcbiAqIEBwcm9wZXJ0eSB7P2Zsb2F0fSB0aHJlc2hvbGQgWzAuNV0gQXQgd2hhdCBub3JtYWxpemVkIHRocmVzaG9sZCB0byByZWplY3RcbiAqIGEgbWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9jY3VycmVuY2VSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7UmVjdH0gcmVjdCBUaGUgcmVnaW9uIG9mIHRoZSBwYXJ0aWFsIGltYWdlIG9jY3VyZW5jZVxuICogb24gdGhlIGZ1bGwgaW1hZ2VcbiAqIEBwcm9wZXJ0eSB7P0J1ZmZlcn0gdmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgbWF0Y2hpbmcgcmVzdWx0XG4gKiByZXByZXNlbnRlZCBhcyBQTkcgaW1hZ2UgYnVmZmVyLiBPbiB0aGlzIGltYWdlIHRoZSBtYXRjaGluZ1xuICogcmVnaW9uIGlzIGhpZ2hsaWdodGVkIHdpdGggYSByZWN0YW5nbGUuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBvY2N1cmVuY2UgcG9zaXRpb24gb2YgYSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsXG4gKiBpbWFnZS5cbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZnVsbEltZ0RhdGEgVGhlIGRhdGEgb2YgdGhlIGZ1bGwgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gcGFydGlhbEltZ0RhdGEgVGhlIGRhdGEgb2YgdGhlIHBhcnRpYWwgaW1hZ2UgcGFja2VkIGludG8gYSBOb2RlSlMgYnVmZmVyXG4gKiBAcGFyYW0gez9PY2N1cnJlbmNlT3B0aW9uc30gb3B0aW9ucyBbe31dIFNldCBvZiBvY2N1cnJlbmNlIGNhbGN1bGF0aW9uIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7T2NjdXJyZW5jZVJlc3VsdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBvY2N1cmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGNhbiBiZSBmb3VuZCBpbiB0aGUgZnVsbCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWFnZU9jY3VycmVuY2UgKGZ1bGxJbWdEYXRhLCBwYXJ0aWFsSW1nRGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gIGluaXRPcGVuQ1YoKTtcblxuICBjb25zdCB7dmlzdWFsaXplID0gZmFsc2UsIHRocmVzaG9sZCA9IERFRkFVTFRfTUFUQ0hfVEhSRVNIT0xEfSA9IG9wdGlvbnM7XG4gIGNvbnN0IFtmdWxsSW1nLCBwYXJ0aWFsSW1nXSA9IGF3YWl0IEIuYWxsKFtcbiAgICBjdi5pbWRlY29kZUFzeW5jKGZ1bGxJbWdEYXRhKSxcbiAgICBjdi5pbWRlY29kZUFzeW5jKHBhcnRpYWxJbWdEYXRhKVxuICBdKTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIHRyeSB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGF3YWl0IGZ1bGxJbWcubWF0Y2hUZW1wbGF0ZUFzeW5jKHBhcnRpYWxJbWcsIGN2LlRNX0NDT0VGRl9OT1JNRUQpO1xuICAgIGNvbnN0IG1pbk1heCA9IGF3YWl0IG1hdGNoZWQubWluTWF4TG9jQXN5bmMoKTtcbiAgICBpZiAobWluTWF4Lm1heFZhbCA8IHRocmVzaG9sZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBhbnkgb2NjdXJyZW5jZXMgb2YgdGhlIHBhcnRpYWwgaW1hZ2UgaW4gdGhlIGZ1bGwgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGltYWdlIGFib3ZlIHRoZSB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGR9LiBIaWdoZXN0IG1hdGNoIHZhbHVlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBmb3VuZCB3YXMgJHttaW5NYXgubWF4VmFsfWApO1xuICAgIH1cbiAgICByZXN1bHQucmVjdCA9IHtcbiAgICAgIHg6IG1pbk1heC5tYXhMb2MueCxcbiAgICAgIHk6IG1pbk1heC5tYXhMb2MueSxcbiAgICAgIHdpZHRoOiBwYXJ0aWFsSW1nLmNvbHMsXG4gICAgICBoZWlnaHQ6IHBhcnRpYWxJbWcucm93c1xuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGFueSBvY2N1cmVuY2VzIG9mIHRoZSBwYXJ0aWFsIGltYWdlIGluIHRoZSBmdWxsIGltYWdlLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2V9YCk7XG4gIH1cbiAgaWYgKHZpc3VhbGl6ZSkge1xuICAgIGhpZ2hsaWdodFJlZ2lvbihmdWxsSW1nLCByZXN1bHQucmVjdCk7XG4gICAgcmVzdWx0LnZpc3VhbGl6YXRpb24gPSBhd2FpdCBjdi5pbWVuY29kZUFzeW5jKCcucG5nJywgZnVsbEltZyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcm9wIHRoZSBpbWFnZSBieSBnaXZlbiByZWN0YW5nbGUgKHVzZSBiYXNlNjQgc3RyaW5nIGFzIGlucHV0IGFuZCBvdXRwdXQpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NEltYWdlIFRoZSBzdHJpbmcgd2l0aCBiYXNlNjQgZW5jb2RlZCBpbWFnZVxuICogQHBhcmFtIHtSZWdpb259IHJlY3QgVGhlIHNlbGVjdGVkIHJlZ2lvbiBvZiBpbWFnZVxuICogQHJldHVybiB7c3RyaW5nfSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgb2YgY3JvcHBlZCBpbWFnZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcm9wQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlLCByZWN0KSB7XG4gIGNvbnN0IGltYWdlID0gYXdhaXQgYmFzZTY0VG9JbWFnZShiYXNlNjRJbWFnZSk7XG4gIGNyb3BJbWFnZShpbWFnZSwgcmVjdCk7XG4gIHJldHVybiBhd2FpdCBpbWFnZVRvQmFzZTY0KGltYWdlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwbmdqcyBpbWFnZSBmcm9tIGdpdmVuIGJhc2U2NCBpbWFnZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjRJbWFnZSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqIEByZXR1cm4ge1BOR30gVGhlIGltYWdlIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBiYXNlNjRUb0ltYWdlIChiYXNlNjRJbWFnZSkge1xuICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NEltYWdlLCAnYmFzZTY0Jyk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgUE5HKHtmaWx0ZXJUeXBlOiBTQ0FOTElORV9GSUxURVJfTUVUSE9EfSk7XG4gICAgaW1hZ2UucGFyc2UoaW1hZ2VCdWZmZXIsIChlcnIsIGltYWdlKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBiYXNlNjQgc3RyaW5nIGZvciBnaXZlbiBpbWFnZSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1BOR30gaW1hZ2UgVGhlIGltYWdlIG9iamVjdFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5nIHdpdGggYmFzZTY0IGVuY29kZWQgaW1hZ2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1hZ2VUb0Jhc2U2NCAoaW1hZ2UpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBpbWFnZS5wYWNrKClcbiAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IGNodW5rcy5wdXNoKGNodW5rKSkub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSlcbiAgICAub24oJ2Vycm9yJywgKGVycikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLWNhbGxiYWNrc1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyb3AgdGhlIGltYWdlIGJ5IGdpdmVuIHJlY3RhbmdsZVxuICpcbiAqIEBwYXJhbSB7UE5HfSBpbWFnZSBUaGUgaW1hZ2UgdG8gbXV0YXRlIGJ5IGNyb3BwaW5nXG4gKiBAcGFyYW0ge1JlZ2lvbn0gcmVjdCBUaGUgc2VsZWN0ZWQgcmVnaW9uIG9mIGltYWdlXG4gKi9cbmZ1bmN0aW9uIGNyb3BJbWFnZSAoaW1hZ2UsIHJlY3QpIHtcbiAgY29uc3QgaW1hZ2VSZWN0ID0ge3dpZHRoOiBpbWFnZS53aWR0aCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHR9O1xuICBjb25zdCBpbnRlclJlY3QgPSBnZXRSZWN0SW50ZXJzZWN0aW9uKHJlY3QsIGltYWdlUmVjdCk7XG4gIGlmIChpbnRlclJlY3Qud2lkdGggPCByZWN0LndpZHRoIHx8IGludGVyUmVjdC5oZWlnaHQgPCByZWN0LmhlaWdodCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyb3AgJHtKU09OLnN0cmluZ2lmeShyZWN0KX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KGltYWdlUmVjdCl9IGJlY2F1c2UgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZW0gd2FzIG5vdCB0aGUgc2l6ZSBvZiB0aGUgcmVjdGApO1xuICB9XG5cbiAgY29uc3QgZmlyc3RWZXJ0aWNhbFBpeGVsID0gaW50ZXJSZWN0LnRvcDtcbiAgY29uc3QgbGFzdFZlcnRpY2FsUGl4ZWwgPSBpbnRlclJlY3QudG9wICsgaW50ZXJSZWN0LmhlaWdodDtcblxuICBjb25zdCBmaXJzdEhvcml6b250YWxQaXhlbCA9IGludGVyUmVjdC5sZWZ0O1xuICBjb25zdCBsYXN0SG9yaXpvbnRhbFBpeGVsID0gaW50ZXJSZWN0LmxlZnQgKyBpbnRlclJlY3Qud2lkdGg7XG5cbiAgY29uc3QgY3JvcHBlZEFycmF5ID0gW107XG4gIGZvciAobGV0IHkgPSBmaXJzdFZlcnRpY2FsUGl4ZWw7IHkgPCBsYXN0VmVydGljYWxQaXhlbDsgeSsrKSB7XG4gICAgZm9yIChsZXQgeCA9IGZpcnN0SG9yaXpvbnRhbFBpeGVsOyB4IDwgbGFzdEhvcml6b250YWxQaXhlbDsgeCsrKSB7XG4gICAgICBjb25zdCBmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgPSAoaW1hZ2VSZWN0LndpZHRoICogeSArIHgpIDw8IDI7XG4gICAgICBmb3IgKGxldCBieXRlSWR4ID0gMDsgYnl0ZUlkeCA8IEJZVEVTX0lOX1BJWEVMX0JMT0NLOyBieXRlSWR4KyspIHtcbiAgICAgICAgY3JvcHBlZEFycmF5LnB1c2goaW1hZ2UuZGF0YVtmaXJzdEJ5dGVJZHhJblBpeGVsQmxvY2sgKyBieXRlSWR4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1hZ2UuZGF0YSA9IEJ1ZmZlci5mcm9tKGNyb3BwZWRBcnJheSk7XG4gIGltYWdlLndpZHRoID0gaW50ZXJSZWN0LndpZHRoO1xuICBpbWFnZS5oZWlnaHQgPSBpbnRlclJlY3QuaGVpZ2h0O1xuICByZXR1cm4gaW1hZ2U7XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RJbnRlcnNlY3Rpb24gKHJlY3QsIGltYWdlU2l6ZSkge1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ID49IGltYWdlU2l6ZS53aWR0aCA/IGltYWdlU2l6ZS53aWR0aCA6IHJlY3QubGVmdDtcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgPj0gaW1hZ2VTaXplLmhlaWdodCA/IGltYWdlU2l6ZS5oZWlnaHQgOiByZWN0LnRvcDtcbiAgY29uc3Qgd2lkdGggPSBpbWFnZVNpemUud2lkdGggPj0gKGxlZnQgKyByZWN0LndpZHRoKSA/IHJlY3Qud2lkdGggOiAoaW1hZ2VTaXplLndpZHRoIC0gbGVmdCk7XG4gIGNvbnN0IGhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQgPj0gKHRvcCArIHJlY3QuaGVpZ2h0KSA/IHJlY3QuaGVpZ2h0IDogKGltYWdlU2l6ZS5oZWlnaHQgLSB0b3ApO1xuICByZXR1cm4ge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH07XG59XG5cbmV4cG9ydCB7XG4gIGNyb3BCYXNlNjRJbWFnZSwgYmFzZTY0VG9JbWFnZSwgaW1hZ2VUb0Jhc2U2NCwgY3JvcEltYWdlLCBnZXRJbWFnZXNNYXRjaGVzLFxuICBnZXRJbWFnZXNTaW1pbGFyaXR5LCBnZXRJbWFnZU9jY3VycmVuY2UsIGdldEppbXBJbWFnZSwgTUlNRV9KUEVHLCBNSU1FX1BORyxcbiAgTUlNRV9CTVAsXG59O1xuIl0sImZpbGUiOiJsaWIvaW1hZ2UtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

@@ -8,2 +8,4 @@ "use strict";

require("source-map-support/register");
var _logging = require("./logging");

@@ -16,2 +18,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUEsSUFBSUEsR0FBRyxHQUFHLHdCQUFVLFNBQVYsQ0FBVjtlQUVlQSxHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnaW5nJztcblxubGV0IGxvZyA9IGdldExvZ2dlcignU3VwcG9ydCcpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwiZmlsZSI6ImxpYi9sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxJQUFJQSxHQUFHLEdBQUcsd0JBQVUsU0FBVixDQUFWO2VBRWVBLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dpbmcnO1xuXG5sZXQgbG9nID0gZ2V0TG9nZ2VyKCdTdXBwb3J0Jyk7XG5cbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2xvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

@@ -12,3 +12,3 @@ "use strict";

var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
require("source-map-support/register");

@@ -23,5 +23,3 @@ var _npmlog = _interopRequireDefault(require("npmlog"));

for (var _i = 0; _i < NPM_LEVELS.length; _i++) {
let level = NPM_LEVELS[_i];
for (let level of NPM_LEVELS) {
mockLog[level] = () => {};

@@ -57,6 +55,3 @@ }

function getLogger(prefix = null) {
let _getLogger2 = _getLogger(),
_getLogger3 = (0, _slicedToArray2.default)(_getLogger2, 2),
logger = _getLogger3[0],
usingGlobalLog = _getLogger3[1];
let [logger, usingGlobalLog] = _getLogger();

@@ -79,57 +74,16 @@ let wrappedLogger = {

for (var _i2 = 0; _i2 < NPM_LEVELS.length; _i2++) {
const level = NPM_LEVELS[_i2];
for (const level of NPM_LEVELS) {
wrappedLogger[level] = function (...args) {
const actualPrefix = _lodash.default.isFunction(prefix) ? prefix() : prefix;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = args.map(unleakIfString)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
const arg = _step.value;
let out = arg + '';
for (const arg of args.map(unleakIfString)) {
let out = arg + '';
if (_lodash.default.isError(arg) && arg.stack) {
out = arg.stack;
}
if (_lodash.default.isError(arg) && arg.stack) {
out = arg.stack;
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = out.split('\n')[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
const line = _step2.value;
logger[level](actualPrefix, line);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
for (const line of out.split('\n')) {
logger[level](actualPrefix, line);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}

@@ -162,2 +116,2 @@ };

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnaW5nLmpzIl0sIm5hbWVzIjpbIk5QTV9MRVZFTFMiLCJNQVhfTE9HX1JFQ09SRFNfQ09VTlQiLCJtb2NrTG9nIiwibGV2ZWwiLCJwYXRjaExvZ2dlciIsImxvZ2dlciIsImRlYnVnIiwiYWRkTGV2ZWwiLCJmZyIsImJnIiwiX2dldExvZ2dlciIsInRlc3RpbmdNb2RlIiwicGFyc2VJbnQiLCJwcm9jZXNzIiwiZW52IiwiX1RFU1RJTkciLCJmb3JjZUxvZ01vZGUiLCJfRk9SQ0VfTE9HUyIsInVzaW5nR2xvYmFsTG9nIiwiZ2xvYmFsIiwiX2dsb2JhbF9ucG1sb2ciLCJucG1sb2ciLCJtYXhSZWNvcmRTaXplIiwiZ2V0TG9nZ2VyIiwicHJlZml4Iiwid3JhcHBlZExvZ2dlciIsInVud3JhcCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwibmV3VmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwidW5sZWFrSWZTdHJpbmciLCJ4IiwiXyIsImlzU3RyaW5nIiwic3Vic3RyIiwiYXJncyIsImFjdHVhbFByZWZpeCIsImlzRnVuY3Rpb24iLCJtYXAiLCJhcmciLCJvdXQiLCJpc0Vycm9yIiwic3RhY2siLCJzcGxpdCIsImxpbmUiLCJlcnJvckFuZFRocm93IiwiZXJyIiwiRXJyb3IiLCJlcnJvciIsImxldmVscyIsImxvZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUlBLE1BQU1BLFVBQVUsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLE9BQXJCLEVBQThCLE1BQTlCLEVBQXNDLE1BQXRDLEVBQThDLE1BQTlDLEVBQXNELE9BQXRELENBQW5CO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsSUFBOUI7QUFHQSxJQUFJQyxPQUFPLEdBQUcsRUFBZDs7QUFDQSxzQkFBa0JGLFVBQWxCLGVBQThCO0FBQXpCLE1BQUlHLEtBQUssR0FBSUgsVUFBSixJQUFUOztBQUNIRSxFQUFBQSxP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S0FBVjtBQUNEOztBQUp5QztBQUFBO0FBQUE7O0FBQUE7QUFLMUMsa0NBQW1CRixHQUFHLENBQUNHLEtBQUosQ0FBVSxJQUFWLENBQW5CLG1JQUFvQztBQUFBLG9CQUF6QkMsSUFBeUI7QUFDbEMzQyxjQUFBQSxNQUFNLENBQUNGLEtBQUQsQ0FBTixDQUFjcUMsWUFBZCxFQUE0QlEsSUFBNUI7QUFDRDtBQVB5QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUTNDO0FBVnVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXekMsS0FYRDtBQVlEOztBQUVEdkIsRUFBQUEsYUFBYSxDQUFDd0IsYUFBZCxHQUE4QixVQUFVQyxHQUFWLEVBQWU7QUFFM0MsUUFBSSxFQUFFQSxHQUFHLFlBQVlDLEtBQWpCLENBQUosRUFBNkI7QUFDM0JELE1BQUFBLEdBQUcsR0FBRyxJQUFJQyxLQUFKLENBQVVELEdBQVYsQ0FBTjtBQUNEOztBQUVELFNBQUtFLEtBQUwsQ0FBV2xCLGNBQWMsQ0FBQ2dCLEdBQUQsQ0FBekI7QUFDQSxVQUFNQSxHQUFOO0FBQ0QsR0FSRDs7QUFTQSxNQUFJLENBQUNoQyxjQUFMLEVBQXFCO0FBSW5CTyxJQUFBQSxhQUFhLENBQUN0QixLQUFkLEdBQXNCLFNBQXRCO0FBQ0Q7O0FBQ0RzQixFQUFBQSxhQUFhLENBQUM0QixNQUFkLEdBQXVCckQsVUFBdkI7QUFDQSxTQUFPeUIsYUFBUDtBQUNEOztBQUdELE1BQU02QixHQUFHLEdBQUcvQixTQUFTLEVBQXJCOztlQUdlK0IsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBucG1sb2cgZnJvbSAnbnBtbG9nJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cblxuLy8gbGV2ZWxzIHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIGBucG1sb2dgXG5jb25zdCBOUE1fTEVWRUxTID0gWydzaWxseScsICd2ZXJib3NlJywgJ2RlYnVnJywgJ2luZm8nLCAnaHR0cCcsICd3YXJuJywgJ2Vycm9yJ107XG5jb25zdCBNQVhfTE9HX1JFQ09SRFNfQ09VTlQgPSAzMDAwO1xuXG4vLyBtb2NrIGxvZyBvYmplY3QgdXNlZCBpbiB0ZXN0aW5nIG1vZGVcbmxldCBtb2NrTG9nID0ge307XG5mb3IgKGxldCBsZXZlbCBvZiBOUE1fTEVWRUxTKSB7XG4gIG1vY2tMb2dbbGV2ZWxdID0gKCkgPT4ge307XG59XG5cbmZ1bmN0aW9uIHBhdGNoTG9nZ2VyIChsb2dnZXIpIHtcbiAgaWYgKCFsb2dnZXIuZGVidWcpIHtcbiAgICBsb2dnZXIuYWRkTGV2ZWwoJ2RlYnVnJywgMTAwMCwgeyBmZzogJ2JsdWUnLCBiZzogJ2JsYWNrJyB9LCAnZGJ1ZycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRMb2dnZXIgKCkge1xuICAvLyBjaGVjayBpZiB0aGUgdXNlciBzZXQgdGhlIGBfVEVTVElOR2Agb3IgYF9GT1JDRV9MT0dTYCBmbGFnXG4gIGNvbnN0IHRlc3RpbmdNb2RlID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuX1RFU1RJTkcsIDEwKSA9PT0gMTtcbiAgY29uc3QgZm9yY2VMb2dNb2RlID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuX0ZPUkNFX0xPR1MsIDEwKSA9PT0gMTtcblxuICAvLyBpZiBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIGlzIGEgbG9nZ2VyIGluc3RhbmNlIHRoYXQgaXMgYWxyZWFkeSBhcm91bmQsXG4gIC8vIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0IG8gdXNlIHRoYXRcbiAgY29uc3QgdXNpbmdHbG9iYWxMb2cgPSAhIWdsb2JhbC5fZ2xvYmFsX25wbWxvZztcbiAgbGV0IGxvZ2dlcjtcbiAgaWYgKHRlc3RpbmdNb2RlICYmICFmb3JjZUxvZ01vZGUpIHtcbiAgICAvLyBpbiB0ZXN0aW5nIG1vZGUsIHVzZSBhIG1vY2sgbG9nZ2VyIG9iamVjdCB0aGF0IHdlIGNhbiBxdWVyeVxuICAgIGxvZ2dlciA9IG1vY2tMb2c7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlLCBlaXRoZXIgdXNlIHRoZSBnbG9iYWwsIG9yIGEgbmV3IGBucG1sb2dgIG9iamVjdFxuICAgIGxvZ2dlciA9IGdsb2JhbC5fZ2xvYmFsX25wbWxvZyB8fCBucG1sb2c7XG4gICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMDAsIHdoaWNoIGNhdXNlcyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlXG4gICAgbG9nZ2VyLm1heFJlY29yZFNpemUgPSBNQVhfTE9HX1JFQ09SRFNfQ09VTlQ7XG4gIH1cbiAgcGF0Y2hMb2dnZXIobG9nZ2VyKTtcbiAgcmV0dXJuIFtsb2dnZXIsIHVzaW5nR2xvYmFsTG9nXTtcbn1cblxuZnVuY3Rpb24gZ2V0TG9nZ2VyIChwcmVmaXggPSBudWxsKSB7XG4gIGxldCBbbG9nZ2VyLCB1c2luZ0dsb2JhbExvZ10gPSBfZ2V0TG9nZ2VyKCk7XG5cbiAgLy8gd3JhcCB0aGUgbG9nZ2VyIHNvIHRoYXQgd2UgY2FuIGNhdGNoIGFuZCBtb2RpZnkgYW55IGxvZ2dpbmdcbiAgbGV0IHdyYXBwZWRMb2dnZXIgPSB7dW53cmFwOiAoKSA9PiBsb2dnZXJ9O1xuXG4gIC8vIGFsbG93IGFjY2VzcyB0byB0aGUgbGV2ZWwgb2YgdGhlIHVuZGVybHlpbmcgbG9nZ2VyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVkTG9nZ2VyLCAnbGV2ZWwnLCB7XG4gICAgZ2V0OiAoKSA9PiB7IHJldHVybiBsb2dnZXIubGV2ZWw7IH0sXG4gICAgc2V0OiAobmV3VmFsdWUpID0+IHsgbG9nZ2VyLmxldmVsID0gbmV3VmFsdWU7IH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG4gIC8vIFRoaXMgbGFtYmRhIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSB0byB3b3JrYXJvdW5kIHVuZXhwZWN0ZWQgbWVtb3J5IGxlYWtzXG4gIC8vIGNhdXNlZCBieSBOb2RlSlMgYmVoYXZpb3IgZGVzY3JpYmVkIGluIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4NjlcbiAgY29uc3QgdW5sZWFrSWZTdHJpbmcgPSAoeCkgPT4gXy5pc1N0cmluZyh4KSA/IGAgJHt4fWAuc3Vic3RyKDEpIDogeDtcbiAgLy8gYWRkIGFsbCB0aGUgbGV2ZWxzIGZyb20gYG5wbWxvZ2AsIGFuZCBtYXAgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyXG4gIGZvciAoY29uc3QgbGV2ZWwgb2YgTlBNX0xFVkVMUykge1xuICAgIHdyYXBwZWRMb2dnZXJbbGV2ZWxdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IGFjdHVhbFByZWZpeCA9IF8uaXNGdW5jdGlvbihwcmVmaXgpID8gcHJlZml4KCkgOiBwcmVmaXg7XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzLm1hcCh1bmxlYWtJZlN0cmluZykpIHtcbiAgICAgICAgbGV0IG91dCA9IGFyZyArICcnO1xuICAgICAgICBpZiAoXy5pc0Vycm9yKGFyZykgJiYgYXJnLnN0YWNrKSB7XG4gICAgICAgICAgb3V0ID0gYXJnLnN0YWNrO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvdXQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgICAgbG9nZ2VyW2xldmVsXShhY3R1YWxQcmVmaXgsIGxpbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICAvLyBhZGQgbWV0aG9kIHRvIGxvZyBhbiBlcnJvciwgYW5kIHRocm93IGl0LCBmb3IgY29udmVuaWVuY2VcbiAgd3JhcHBlZExvZ2dlci5lcnJvckFuZFRocm93ID0gZnVuY3Rpb24gKGVycikge1xuICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGBFcnJvcmAgb2JqZWN0LiBXcmFwIGlmIG5lY2Vzc2FyeVxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgZXJyID0gbmV3IEVycm9yKGVycik7XG4gICAgfVxuICAgIC8vIGxvZyBhbmQgdGhyb3dcbiAgICB0aGlzLmVycm9yKHVubGVha0lmU3RyaW5nKGVycikpO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgaWYgKCF1c2luZ0dsb2JhbExvZykge1xuICAgIC8vIGlmIHdlJ3JlIG5vdCB1c2luZyBhIGdsb2JhbCBsb2cgc3BlY2lmaWVkIGZyb20gc29tZSB0b3AtbGV2ZWwgcGFja2FnZSxcbiAgICAvLyBzZXQgdGhlIGxvZyBsZXZlbCB0byBhIGRlZmF1bHQgb2YgdmVyYm9zZS4gT3RoZXJ3aXNlLCBsZXQgdGhlIHRvcC1sZXZlbFxuICAgIC8vIHBhY2thZ2Ugc2V0IHRoZSBsb2cgbGV2ZWxcbiAgICB3cmFwcGVkTG9nZ2VyLmxldmVsID0gJ3ZlcmJvc2UnO1xuICB9XG4gIHdyYXBwZWRMb2dnZXIubGV2ZWxzID0gTlBNX0xFVkVMUztcbiAgcmV0dXJuIHdyYXBwZWRMb2dnZXI7XG59XG5cbi8vIGV4cG9ydCBhIGRlZmF1bHQgbG9nZ2VyIHdpdGggbm8gcHJlZml4XG5jb25zdCBsb2cgPSBnZXRMb2dnZXIoKTtcblxuZXhwb3J0IHsgbG9nLCBwYXRjaExvZ2dlciwgZ2V0TG9nZ2VyIH07XG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwiZmlsZSI6ImxpYi9sb2dnaW5nLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnaW5nLmpzIl0sIm5hbWVzIjpbIk5QTV9MRVZFTFMiLCJNQVhfTE9HX1JFQ09SRFNfQ09VTlQiLCJtb2NrTG9nIiwibGV2ZWwiLCJwYXRjaExvZ2dlciIsImxvZ2dlciIsImRlYnVnIiwiYWRkTGV2ZWwiLCJmZyIsImJnIiwiX2dldExvZ2dlciIsInRlc3RpbmdNb2RlIiwicGFyc2VJbnQiLCJwcm9jZXNzIiwiZW52IiwiX1RFU1RJTkciLCJmb3JjZUxvZ01vZGUiLCJfRk9SQ0VfTE9HUyIsInVzaW5nR2xvYmFsTG9nIiwiZ2xvYmFsIiwiX2dsb2JhbF9ucG1sb2ciLCJucG1sb2ciLCJtYXhSZWNvcmRTaXplIiwiZ2V0TG9nZ2VyIiwicHJlZml4Iiwid3JhcHBlZExvZ2dlciIsInVud3JhcCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwibmV3VmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwidW5sZWFrSWZTdHJpbmciLCJ4IiwiXyIsImlzU3RyaW5nIiwic3Vic3RyIiwiYXJncyIsImFjdHVhbFByZWZpeCIsImlzRnVuY3Rpb24iLCJhcmciLCJtYXAiLCJvdXQiLCJpc0Vycm9yIiwic3RhY2siLCJsaW5lIiwic3BsaXQiLCJlcnJvckFuZFRocm93IiwiZXJyIiwiRXJyb3IiLCJlcnJvciIsImxldmVscyIsImxvZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUlBLE1BQU1BLFVBQVUsR0FBRyxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCLE9BQXJCLEVBQThCLE1BQTlCLEVBQXNDLE1BQXRDLEVBQThDLE1BQTlDLEVBQXNELE9BQXRELENBQW5CO0FBQ0EsTUFBTUMscUJBQXFCLEdBQUcsSUFBOUI7QUFHQSxJQUFJQyxPQUFPLEdBQUcsRUFBZDs7QUFDQSxLQUFLLElBQUlDLEtBQVQsSUFBa0JILFVBQWxCLEVBQThCO0FBQzVCRSxFQUFBQSxPQUFPLENBQUNDLEtBQUQsQ0FB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QztBQUNsQzNDLFVBQUFBLE1BQU0sQ0FBQ0YsS0FBRCxDQUFOLENBQWNxQyxZQUFkLEVBQTRCTyxJQUE1QjtBQUNEO0FBQ0Y7QUFDRixLQVhEO0FBWUQ7O0FBRUR0QixFQUFBQSxhQUFhLENBQUN3QixhQUFkLEdBQThCLFVBQVVDLEdBQVYsRUFBZTtBQUUzQyxRQUFJLEVBQUVBLEdBQUcsWUFBWUMsS0FBakIsQ0FBSixFQUE2QjtBQUMzQkQsTUFBQUEsR0FBRyxHQUFHLElBQUlDLEtBQUosQ0FBVUQsR0FBVixDQUFOO0FBQ0Q7O0FBRUQsU0FBS0UsS0FBTCxDQUFXbEIsY0FBYyxDQUFDZ0IsR0FBRCxDQUF6QjtBQUNBLFVBQU1BLEdBQU47QUFDRCxHQVJEOztBQVNBLE1BQUksQ0FBQ2hDLGNBQUwsRUFBcUI7QUFJbkJPLElBQUFBLGFBQWEsQ0FBQ3RCLEtBQWQsR0FBc0IsU0FBdEI7QUFDRDs7QUFDRHNCLEVBQUFBLGFBQWEsQ0FBQzRCLE1BQWQsR0FBdUJyRCxVQUF2QjtBQUNBLFNBQU95QixhQUFQO0FBQ0Q7O0FBR0QsTUFBTTZCLEdBQUcsR0FBRy9CLFNBQVMsRUFBckI7O2VBR2UrQixHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5wbWxvZyBmcm9tICducG1sb2cnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG4vLyBsZXZlbHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gYG5wbWxvZ2BcbmNvbnN0IE5QTV9MRVZFTFMgPSBbJ3NpbGx5JywgJ3ZlcmJvc2UnLCAnZGVidWcnLCAnaW5mbycsICdodHRwJywgJ3dhcm4nLCAnZXJyb3InXTtcbmNvbnN0IE1BWF9MT0dfUkVDT1JEU19DT1VOVCA9IDMwMDA7XG5cbi8vIG1vY2sgbG9nIG9iamVjdCB1c2VkIGluIHRlc3RpbmcgbW9kZVxubGV0IG1vY2tMb2cgPSB7fTtcbmZvciAobGV0IGxldmVsIG9mIE5QTV9MRVZFTFMpIHtcbiAgbW9ja0xvZ1tsZXZlbF0gPSAoKSA9PiB7fTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hMb2dnZXIgKGxvZ2dlcikge1xuICBpZiAoIWxvZ2dlci5kZWJ1Zykge1xuICAgIGxvZ2dlci5hZGRMZXZlbCgnZGVidWcnLCAxMDAwLCB7IGZnOiAnYmx1ZScsIGJnOiAnYmxhY2snIH0sICdkYnVnJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldExvZ2dlciAoKSB7XG4gIC8vIGNoZWNrIGlmIHRoZSB1c2VyIHNldCB0aGUgYF9URVNUSU5HYCBvciBgX0ZPUkNFX0xPR1NgIGZsYWdcbiAgY29uc3QgdGVzdGluZ01vZGUgPSBwYXJzZUludChwcm9jZXNzLmVudi5fVEVTVElORywgMTApID09PSAxO1xuICBjb25zdCBmb3JjZUxvZ01vZGUgPSBwYXJzZUludChwcm9jZXNzLmVudi5fRk9SQ0VfTE9HUywgMTApID09PSAxO1xuXG4gIC8vIGlmIGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgYSBsb2dnZXIgaW5zdGFuY2UgdGhhdCBpcyBhbHJlYWR5IGFyb3VuZCxcbiAgLy8gaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHQgbyB1c2UgdGhhdFxuICBjb25zdCB1c2luZ0dsb2JhbExvZyA9ICEhZ2xvYmFsLl9nbG9iYWxfbnBtbG9nO1xuICBsZXQgbG9nZ2VyO1xuICBpZiAodGVzdGluZ01vZGUgJiYgIWZvcmNlTG9nTW9kZSkge1xuICAgIC8vIGluIHRlc3RpbmcgbW9kZSwgdXNlIGEgbW9jayBsb2dnZXIgb2JqZWN0IHRoYXQgd2UgY2FuIHF1ZXJ5XG4gICAgbG9nZ2VyID0gbW9ja0xvZztcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2UsIGVpdGhlciB1c2UgdGhlIGdsb2JhbCwgb3IgYSBuZXcgYG5wbWxvZ2Agb2JqZWN0XG4gICAgbG9nZ2VyID0gZ2xvYmFsLl9nbG9iYWxfbnBtbG9nIHx8IG5wbWxvZztcbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAwMCwgd2hpY2ggY2F1c2VzIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2VcbiAgICBsb2dnZXIubWF4UmVjb3JkU2l6ZSA9IE1BWF9MT0dfUkVDT1JEU19DT1VOVDtcbiAgfVxuICBwYXRjaExvZ2dlcihsb2dnZXIpO1xuICByZXR1cm4gW2xvZ2dlciwgdXNpbmdHbG9iYWxMb2ddO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dnZXIgKHByZWZpeCA9IG51bGwpIHtcbiAgbGV0IFtsb2dnZXIsIHVzaW5nR2xvYmFsTG9nXSA9IF9nZXRMb2dnZXIoKTtcblxuICAvLyB3cmFwIHRoZSBsb2dnZXIgc28gdGhhdCB3ZSBjYW4gY2F0Y2ggYW5kIG1vZGlmeSBhbnkgbG9nZ2luZ1xuICBsZXQgd3JhcHBlZExvZ2dlciA9IHt1bndyYXA6ICgpID0+IGxvZ2dlcn07XG5cbiAgLy8gYWxsb3cgYWNjZXNzIHRvIHRoZSBsZXZlbCBvZiB0aGUgdW5kZXJseWluZyBsb2dnZXJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZWRMb2dnZXIsICdsZXZlbCcsIHtcbiAgICBnZXQ6ICgpID0+IHsgcmV0dXJuIGxvZ2dlci5sZXZlbDsgfSxcbiAgICBzZXQ6IChuZXdWYWx1ZSkgPT4geyBsb2dnZXIubGV2ZWwgPSBuZXdWYWx1ZTsgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgLy8gVGhpcyBsYW1iZGEgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIHdvcmthcm91bmQgdW5leHBlY3RlZCBtZW1vcnkgbGVha3NcbiAgLy8gY2F1c2VkIGJ5IE5vZGVKUyBiZWhhdmlvciBkZXNjcmliZWQgaW4gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2OVxuICBjb25zdCB1bmxlYWtJZlN0cmluZyA9ICh4KSA9PiBfLmlzU3RyaW5nKHgpID8gYCAke3h9YC5zdWJzdHIoMSkgOiB4O1xuICAvLyBhZGQgYWxsIHRoZSBsZXZlbHMgZnJvbSBgbnBtbG9nYCwgYW5kIG1hcCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXJcbiAgZm9yIChjb25zdCBsZXZlbCBvZiBOUE1fTEVWRUxTKSB7XG4gICAgd3JhcHBlZExvZ2dlcltsZXZlbF0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgY29uc3QgYWN0dWFsUHJlZml4ID0gXy5pc0Z1bmN0aW9uKHByZWZpeCkgPyBwcmVmaXgoKSA6IHByZWZpeDtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MubWFwKHVubGVha0lmU3RyaW5nKSkge1xuICAgICAgICBsZXQgb3V0ID0gYXJnICsgJyc7XG4gICAgICAgIGlmIChfLmlzRXJyb3IoYXJnKSAmJiBhcmcuc3RhY2spIHtcbiAgICAgICAgICBvdXQgPSBhcmcuc3RhY2s7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG91dC5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgICBsb2dnZXJbbGV2ZWxdKGFjdHVhbFByZWZpeCwgbGluZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIC8vIGFkZCBtZXRob2QgdG8gbG9nIGFuIGVycm9yLCBhbmQgdGhyb3cgaXQsIGZvciBjb252ZW5pZW5jZVxuICB3cmFwcGVkTG9nZ2VyLmVycm9yQW5kVGhyb3cgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYW4gYEVycm9yYCBvYmplY3QuIFdyYXAgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICBlcnIgPSBuZXcgRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgLy8gbG9nIGFuZCB0aHJvd1xuICAgIHRoaXMuZXJyb3IodW5sZWFrSWZTdHJpbmcoZXJyKSk7XG4gICAgdGhyb3cgZXJyO1xuICB9O1xuICBpZiAoIXVzaW5nR2xvYmFsTG9nKSB7XG4gICAgLy8gaWYgd2UncmUgbm90IHVzaW5nIGEgZ2xvYmFsIGxvZyBzcGVjaWZpZWQgZnJvbSBzb21lIHRvcC1sZXZlbCBwYWNrYWdlLFxuICAgIC8vIHNldCB0aGUgbG9nIGxldmVsIHRvIGEgZGVmYXVsdCBvZiB2ZXJib3NlLiBPdGhlcndpc2UsIGxldCB0aGUgdG9wLWxldmVsXG4gICAgLy8gcGFja2FnZSBzZXQgdGhlIGxvZyBsZXZlbFxuICAgIHdyYXBwZWRMb2dnZXIubGV2ZWwgPSAndmVyYm9zZSc7XG4gIH1cbiAgd3JhcHBlZExvZ2dlci5sZXZlbHMgPSBOUE1fTEVWRUxTO1xuICByZXR1cm4gd3JhcHBlZExvZ2dlcjtcbn1cblxuLy8gZXhwb3J0IGEgZGVmYXVsdCBsb2dnZXIgd2l0aCBubyBwcmVmaXhcbmNvbnN0IGxvZyA9IGdldExvZ2dlcigpO1xuXG5leHBvcnQgeyBsb2csIHBhdGNoTG9nZ2VyLCBnZXRMb2dnZXIgfTtcbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2xvZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

@@ -11,3 +11,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -61,27 +61,19 @@ var _lodash = _interopRequireDefault(require("lodash"));

lastChunkPNG() {
var _this = this;
async lastChunkPNG() {
if (!_lodash.default.isBuffer(this.lastChunk)) {
return null;
}
return (0, _asyncToGenerator2.default)(function* () {
if (!_lodash.default.isBuffer(_this.lastChunk)) {
return null;
}
const jpg = yield (0, _imageUtil.getJimpImage)(_this.lastChunk);
return yield jpg.getBuffer(_imageUtil.MIME_PNG);
})();
const jpg = await (0, _imageUtil.getJimpImage)(this.lastChunk);
return await jpg.getBuffer(_imageUtil.MIME_PNG);
}
lastChunkPNGBase64() {
var _this2 = this;
async lastChunkPNGBase64() {
const png = await this.lastChunkPNG();
return (0, _asyncToGenerator2.default)(function* () {
const png = yield _this2.lastChunkPNG();
if (!png) {
return null;
}
if (!png) {
return null;
}
return png.toString('base64');
})();
return png.toString('base64');
}

@@ -98,30 +90,23 @@

start(serverTimeout = MJPEG_SERVER_TIMEOUT_MS) {
var _this3 = this;
async start(serverTimeout = MJPEG_SERVER_TIMEOUT_MS) {
this.stop();
this.consumer = new MJpegConsumer();
const startPromise = new _bluebird.default((res, rej) => {
this.registerStartSuccess = res;
this.registerStartFailure = rej;
}).timeout(serverTimeout, `Waited ${serverTimeout}ms but the MJPEG server never sent any images`);
return (0, _asyncToGenerator2.default)(function* () {
_this3.stop();
const onErr = err => {
_logger.default.error(`Error getting MJpeg screenshot chunk: ${err}`);
_this3.consumer = new MJpegConsumer();
const startPromise = new _bluebird.default((res, rej) => {
_this3.registerStartSuccess = res;
_this3.registerStartFailure = rej;
}).timeout(serverTimeout, `Waited ${serverTimeout}ms but the MJPEG server never sent any images`);
this.errorHandler(err);
const onErr = err => {
_logger.default.error(`Error getting MJpeg screenshot chunk: ${err}`);
if (this.registerStartFailure) {
this.registerStartFailure(err);
}
};
_this3.errorHandler(err);
if (_this3.registerStartFailure) {
_this3.registerStartFailure(err);
}
};
_this3.request = (0, _request.default)(_this3.url);
_this3.request.on('error', onErr).pipe(_this3.consumer).pipe(_this3);
yield startPromise;
})();
this.request = (0, _request.default)(this.url);
this.request.on('error', onErr).pipe(this.consumer).pipe(this);
await startPromise;
}

@@ -154,22 +139,16 @@

function initMJpegServer(port, intMs = 300, times = 20) {
const server = _http.default.createServer(function () {
var _ref = (0, _asyncToGenerator2.default)(function* (req, res) {
const mJpegReqHandler = _mjpegServer.default.createReqHandler(req, res);
const server = _http.default.createServer(async function (req, res) {
const mJpegReqHandler = _mjpegServer.default.createReqHandler(req, res);
const jpg = Buffer.from(TEST_IMG_JPG, 'base64');
const jpg = Buffer.from(TEST_IMG_JPG, 'base64');
for (let i = 0; i < times; i++) {
yield _bluebird.default.delay(intMs);
for (let i = 0; i < times; i++) {
await _bluebird.default.delay(intMs);
mJpegReqHandler._write(jpg, null, _lodash.default.noop);
}
mJpegReqHandler._write(jpg, null, _lodash.default.noop);
}
mJpegReqHandler.close();
});
mJpegReqHandler.close();
}).listen(port);
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}()).listen(port);
return server;

@@ -179,2 +158,2 @@ }require('source-map-support').install();

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tanBlZy5qcyJdLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJyZXF1aXJlIiwiaWduIiwiRXJyb3IiLCJURVNUX0lNR19KUEciLCJNSlBFR19TRVJWRVJfVElNRU9VVF9NUyIsIk1KcGVnU3RyZWFtIiwiV3JpdGFibGUiLCJjb25zdHJ1Y3RvciIsIm1KcGVnVXJsIiwiZXJyb3JIYW5kbGVyIiwiXyIsIm5vb3AiLCJvcHRpb25zIiwidXJsIiwiY2xlYXIiLCJsYXN0Q2h1bmtCYXNlNjQiLCJpc0J1ZmZlciIsImxhc3RDaHVuayIsInRvU3RyaW5nIiwibGFzdENodW5rUE5HIiwianBnIiwiZ2V0QnVmZmVyIiwiTUlNRV9QTkciLCJsYXN0Q2h1bmtQTkdCYXNlNjQiLCJwbmciLCJyZWdpc3RlclN0YXJ0U3VjY2VzcyIsInJlZ2lzdGVyU3RhcnRGYWlsdXJlIiwicmVxdWVzdCIsImNvbnN1bWVyIiwidXBkYXRlQ291bnQiLCJzdGFydCIsInNlcnZlclRpbWVvdXQiLCJzdG9wIiwic3RhcnRQcm9taXNlIiwiQiIsInJlcyIsInJlaiIsInRpbWVvdXQiLCJvbkVyciIsImVyciIsImxvZyIsImVycm9yIiwib24iLCJwaXBlIiwidW5waXBlIiwiZW5kIiwid3JpdGUiLCJkYXRhIiwiaW5pdE1KcGVnU2VydmVyIiwicG9ydCIsImludE1zIiwidGltZXMiLCJzZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVxIiwibUpwZWdSZXFIYW5kbGVyIiwibUpwZWdTZXJ2ZXIiLCJjcmVhdGVSZXFIYW5kbGVyIiwiQnVmZmVyIiwiZnJvbSIsImkiLCJkZWxheSIsIl93cml0ZSIsImNsb3NlIiwibGlzdGVuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQSxJQUFJQSxhQUFhLEdBQUcsSUFBcEI7O0FBS0EsU0FBU0MsaUJBQVQsR0FB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RUFBZ0M7QUFDOUIsY0FBTTNCLGtCQUFFNEIsS0FBRixDQUFRWixLQUFSLENBQU47O0FBQ0FNLFFBQUFBLGVBQWUsQ0FBQ08sTUFBaEIsQ0FBdUIzQyxHQUF2QixFQUE0QixJQUE1QixFQUFrQ1YsZ0JBQUVDLElBQXBDO0FBQ0Q7O0FBQ0Q2QyxNQUFBQSxlQUFlLENBQUNRLEtBQWhCO0FBQ0QsS0FWYzs7QUFBQTtBQUFBO0FBQUE7QUFBQSxPQVVaQyxNQVZZLENBVUxoQixJQVZLLENBQWY7O0FBWUEsU0FBT0csTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGdldEppbXBJbWFnZSwgTUlNRV9QTkcgfSBmcm9tICcuL2ltYWdlLXV0aWwnO1xuaW1wb3J0IG1KcGVnU2VydmVyIGZyb20gJ21qcGVnLXNlcnZlcic7XG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5cblxuLy8gbGF6eSBsb2FkIHRoaXMsIGFzIGl0IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbmxldCBNSnBlZ0NvbnN1bWVyID0gbnVsbDtcblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYG1qcGVnLWNvbnN1bWVyYCBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCBvciBjYW5ub3QgYmUgbG9hZGVkXG4gKi9cbmZ1bmN0aW9uIGluaXRNSnBlZ0NvbnN1bWVyICgpIHtcbiAgaWYgKCFNSnBlZ0NvbnN1bWVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIE1KcGVnQ29uc3VtZXIgPSByZXF1aXJlKCdtanBlZy1jb25zdW1lcicpO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgfVxuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21qcGVnLWNvbnN1bWVyIG1vZHVsZSBpcyByZXF1aXJlZCB0byB1c2UgTUpQRUctb3Zlci1IVFRQIGZlYXR1cmVzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBpbnN0YWxsIGl0IGZpcnN0IChucG0gaSAtZyBtanBlZy1jb25zdW1lcikgYW5kIHJlc3RhcnQgQXBwaXVtLicpO1xuICB9XG59XG5cbmNvbnN0IFRFU1RfSU1HX0pQRyA9ICcvOWovNFFBWVJYaHBaZ0FBU1VrcUFBZ0FBQUFBQUFBQUFBQUFBUC9zQUJGRWRXTnJlUUFCQUFRQUFBQWVBQUQvNFFPQmFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0x3QThQM2h3WVdOclpYUWdZbVZuYVc0OUl1Kzd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJL1BpQThlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSkJaRzlpWlNCWVRWQWdRMjl5WlNBMUxqWXRZekUwTUNBM09TNHhOakEwTlRFc0lESXdNVGN2TURVdk1EWXRNREU2TURnNk1qRWdJQ0FnSUNBZ0lDSStJRHh5WkdZNlVrUkdJSGh0Ykc1ek9uSmtaajBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOHdNaTh5TWkxeVpHWXRjM2x1ZEdGNExXNXpJeUkrSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUlIaHRiRzV6T25odGNFMU5QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YlcwdklpQjRiV3h1Y3pwemRGSmxaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDNOVWVYQmxMMUpsYzI5MWNtTmxVbVZtSXlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0YlhCTlRUcFBjbWxuYVc1aGJFUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZOR1k1T0RjMU9UY3RaR0UyTXkwMFkyTTBMVGt6TkRNdE5HWXlOamd6TUdVd05qazNJaUI0YlhCTlRUcEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPamxETXpJM1FrWTBOMFEzTlRFeFJUaENNVGxET1RWRE1EYzJSREU1TURZNUlpQjRiWEJOVFRwSmJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qbERNekkzUWtZek4wUTNOVEV4UlRoQ01UbERPVFZETURjMlJERTVNRFk1SWlCNGJYQTZRM0psWVhSdmNsUnZiMnc5SWtGa2IySmxJRkJvYjNSdmMyaHZjQ0JEUXlBeU1ERTRJQ2hOWVdOcGJuUnZjMmdwSWo0Z1BIaHRjRTFOT2tSbGNtbDJaV1JHY205dElITjBVbVZtT21sdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk5HWTVPRGMxT1RjdFpHRTJNeTAwWTJNMExUa3pORE10TkdZeU5qZ3pNR1V3TmprM0lpQnpkRkpsWmpwa2IyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qUm1PVGczTlRrM0xXUmhOak10TkdOak5DMDVNelF6TFRSbU1qWTRNekJsTURZNU55SXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9Qdi91QUE1QlpHOWlaUUJrd0FBQUFBSC8yd0NFQUJBTEN3c01DeEFNREJBWER3MFBGeHNVRUJBVUd4OFhGeGNYRng4ZUZ4b2FHaG9YSGg0akpTY2xJeDR2THpNekx5OUFRRUJBUUVCQVFFQkFRRUJBUUVBQkVROFBFUk1SRlJJU0ZSUVJGQkVVR2hRV0ZoUWFKaG9hSEJvYUpqQWpIaDRlSGlNd0t5NG5KeWN1S3pVMU1EQTFOVUJBUDBCQVFFQkFRRUJBUUVCQVFQL0FBQkVJQUNBQUlBTUJJZ0FDRVFFREVRSC94QUJnQUFFQUF3RUFBQUFBQUFBQUFBQUFBQUFBQkFVSENBRUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBUU1DQWdzQUFBQUFBQUFBQUFBQUFBRUNCQkVERWdZaE1ST0RvN1BUVkFVV05oRUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFQL2FBQXdEQVFBQ0VRTVJBRDhBejhBQWRBQUFBQUFJOCtmRThkRXVUWnR6WlI3Vk1iNk9kVEU1R0pvWWlyclVwL2U4cWQ5d2IzVEdlL2xKMjU1MXN4OEQvOWs9JztcblxuLy8gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IGltYWdlIGluIHRoZSBzdHJlYW1cbmNvbnN0IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TID0gMTAwMDA7XG5cbi8qKiBDbGFzcyB3aGljaCBzdG9yZXMgdGhlIGxhc3QgYml0IG9mIGRhdGEgc3RyZWFtZWQgaW50byBpdCAqL1xuY2xhc3MgTUpwZWdTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNSnBlZ1N0cmVhbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbUpwZWdVcmwgLSBVUkwgb2YgTUpQRUctb3Zlci1IVFRQIHN0cmVhbVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZXJyb3JIYW5kbGVyPW5vb3BdIC0gYWRkaXRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmVcbiAgICogY2FsbGVkIGluIHRoZSBjYXNlIG9mIGFueSBlcnJvcnMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFdyaXRhYmxlIGNvbnN0cnVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvciAobUpwZWdVcmwsIGVycm9ySGFuZGxlciA9IF8ubm9vcCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICBpbml0TUpwZWdDb25zdW1lcigpO1xuXG4gICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG4gICAgdGhpcy51cmwgPSBtSnBlZ1VybDtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlNjQtZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBKUEVHXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgbGFzdENodW5rQmFzZTY0ICgpIHtcbiAgICByZXR1cm4gXy5pc0J1ZmZlcih0aGlzLmxhc3RDaHVuaykgP1xuICAgICAgdGhpcy5sYXN0Q2h1bmsudG9TdHJpbmcoJ2Jhc2U2NCcpIDpcbiAgICAgIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBQTkcgdmVyc2lvbiBvZiB0aGUgSlBFRyBidWZmZXJcbiAgICogQHJldHVybnMge0J1ZmZlcn0gUE5HIGltYWdlIGRhdGFcbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BORyAoKSB7XG4gICAgaWYgKCFfLmlzQnVmZmVyKHRoaXMubGFzdENodW5rKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QganBnID0gYXdhaXQgZ2V0SmltcEltYWdlKHRoaXMubGFzdENodW5rKTtcbiAgICByZXR1cm4gYXdhaXQganBnLmdldEJ1ZmZlcihNSU1FX1BORyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlNjQtZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBQTkdcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGFzeW5jIGxhc3RDaHVua1BOR0Jhc2U2NCAoKSB7XG4gICAgY29uc3QgcG5nID0gYXdhaXQgdGhpcy5sYXN0Q2h1bmtQTkcoKTtcblxuICAgIGlmICghcG5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG5nLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuICAgKi9cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMucmVnaXN0ZXJTdGFydFN1Y2Nlc3MgPSBudWxsO1xuICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUgPSBudWxsO1xuICAgIHRoaXMucmVxdWVzdCA9IG51bGw7XG4gICAgdGhpcy5jb25zdW1lciA9IG51bGw7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlQ291bnQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlYWRpbmcgdGhlIE1KcGVnIHN0cmVhbSBhbmQgc3RvcmluZyB0aGUgbGFzdCBpbWFnZVxuICAgKi9cbiAgYXN5bmMgc3RhcnQgKHNlcnZlclRpbWVvdXQgPSBNSlBFR19TRVJWRVJfVElNRU9VVF9NUykge1xuICAgIC8vIGVuc3VyZSB3ZSdyZSBub3Qgc3RhcnRlZCBhbHJlYWR5XG4gICAgdGhpcy5zdG9wKCk7XG5cbiAgICB0aGlzLmNvbnN1bWVyID0gbmV3IE1KcGVnQ29uc3VtZXIoKTtcblxuICAgIC8vIHVzZSB0aGUgZGVmZXJyZWQgcGF0dGVybiBzbyB3ZSBjYW4gd2FpdCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW1cbiAgICAvLyBiYXNlZCBvbiB3aGF0IGNvbWVzIGluIGZyb20gYW4gZXh0ZXJuYWwgcGlwZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IG5ldyBCKChyZXMsIHJlaikgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IHJlcztcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUgPSByZWo7XG4gICAgfSlcbiAgICAvLyBzdGFydCBhIHRpbWVvdXQgc28gdGhhdCBpZiB0aGUgc2VydmVyIGRvZXMgbm90IHJldHVybiBkYXRhLCB3ZSBkb24ndFxuICAgIC8vIGJsb2NrIGZvcmV2ZXIuXG4gICAgICAudGltZW91dChzZXJ2ZXJUaW1lb3V0LFxuICAgICAgICBgV2FpdGVkICR7c2VydmVyVGltZW91dH1tcyBidXQgdGhlIE1KUEVHIHNlcnZlciBuZXZlciBzZW50IGFueSBpbWFnZXNgKTtcblxuICAgIGNvbnN0IG9uRXJyID0gKGVycikgPT4ge1xuICAgICAgbG9nLmVycm9yKGBFcnJvciBnZXR0aW5nIE1KcGVnIHNjcmVlbnNob3QgY2h1bms6ICR7ZXJyfWApO1xuICAgICAgdGhpcy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRGYWlsdXJlKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUoZXJyKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCh0aGlzLnVybCk7XG5cbiAgICB0aGlzLnJlcXVlc3RcbiAgICAgIC5vbignZXJyb3InLCBvbkVycikgLy8gZW5zdXJlIHdlIGRvIHNvbWV0aGluZyB3aXRoIGVycm9yc1xuICAgICAgLnBpcGUodGhpcy5jb25zdW1lcikgLy8gYWxsb3cgY2h1bmtpbmcgYW5kIHRyYW5zZm9ybWluZyBvZiBqcGVnIGRhdGFcbiAgICAgIC5waXBlKHRoaXMpOyAvLyBzZW5kIHRoZSBhY3R1YWwganBlZ3MgdG8gb3Vyc2VsZlxuXG4gICAgYXdhaXQgc3RhcnRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcmVhZGluZyB0aGUgTUpwZWcgc3RyZWFtLiBFbnN1cmUgd2UgZGlzY29ubmVjdCBhbGwgdGhlIHBpcGVzIGFuZCBzdG9wXG4gICAqIHRoZSBIVFRQIHJlcXVlc3QgaXRzZWxmLiBUaGVuIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICovXG4gIHN0b3AgKCkge1xuICAgIGlmICghdGhpcy5jb25zdW1lcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29uc3VtZXIudW5waXBlKCk7XG4gICAgdGhpcy5yZXF1ZXN0LmVuZCgpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgV3JpdGFibGUgd3JpdGUoKSBtZXRob2QgaW4gb3JkZXIgdG8gc2F2ZSB0aGUgbGFzdCBpbWFnZSBhbmRcbiAgICogbG9nIHRoZSBudW1iZXIgb2YgaW1hZ2VzIHdlIGhhdmUgcmVjZWl2ZWRcbiAgICogQG92ZXJyaWRlXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gYmluYXJ5IGRhdGEgc3RyZWFtZWQgZnJvbSB0aGUgTUpwZWcgY29uc3VtZXJcbiAgICovXG4gIHdyaXRlIChkYXRhKSB7XG4gICAgdGhpcy5sYXN0Q2h1bmsgPSBkYXRhO1xuICAgIHRoaXMudXBkYXRlQ291bnQrKztcblxuICAgIGlmICh0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzKCk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBhbiBtanBlZyBzZXJ2ZXIgZm9yIHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcsIHdoaWNoIGp1c3Qgc2VuZHMgdGhlIHNhbWVcbiAqIGltYWdlIG92ZXIgYW5kIG92ZXIuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2xvc2luZyB0aGUgc2VydmVyLlxuICogQHBhcmFtIHtpbnR9IHBvcnQgLSBwb3J0IHRoZSBzZXJ2ZXIgc2hvdWxkIGxpc3RlbiBvblxuICogQHBhcmFtIHtpbnR9IFtpbnRNc10gLSBob3cgb2Z0ZW4gdGhlIHNlcnZlciBzaG91bGQgcHVzaCBhbiBpbWFnZVxuICogQHBhcmFtIHtpbnR9IFt0aW1lc10gLSBob3cgbWFueSB0aW1lcyB0aGUgc2VydmVyIHNob3VsZCBwdXNoIGFuIGltYWdlIGJlZm9yZVxuICogaXQgY2xvc2VzIHRoZSBjb25uZWN0aW9uXG4gKiBAcmV0dXJucyB7aHR0cC5TZXJ2ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRNSnBlZ1NlcnZlciAocG9ydCwgaW50TXMgPSAzMDAsIHRpbWVzID0gMjApIHtcbiAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXN5bmMgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgbUpwZWdSZXFIYW5kbGVyID0gbUpwZWdTZXJ2ZXIuY3JlYXRlUmVxSGFuZGxlcihyZXEsIHJlcyk7XG4gICAgY29uc3QganBnID0gQnVmZmVyLmZyb20oVEVTVF9JTUdfSlBHLCAnYmFzZTY0Jyk7XG5cbiAgICAvLyBqdXN0IHNlbmQgdGhlIHNhbWUganBlZyBvdmVyIGFuZCBvdmVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7XG4gICAgICBhd2FpdCBCLmRlbGF5KGludE1zKTtcbiAgICAgIG1KcGVnUmVxSGFuZGxlci5fd3JpdGUoanBnLCBudWxsLCBfLm5vb3ApO1xuICAgIH1cbiAgICBtSnBlZ1JlcUhhbmRsZXIuY2xvc2UoKTtcbiAgfSkubGlzdGVuKHBvcnQpO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbmV4cG9ydCB7IE1KcGVnU3RyZWFtLCBpbml0TUpwZWdTZXJ2ZXIsIFRFU1RfSU1HX0pQRyB9O1xuIl0sImZpbGUiOiJsaWIvbWpwZWcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9tanBlZy5qcyJdLCJuYW1lcyI6WyJNSnBlZ0NvbnN1bWVyIiwiaW5pdE1KcGVnQ29uc3VtZXIiLCJyZXF1aXJlIiwiaWduIiwiRXJyb3IiLCJURVNUX0lNR19KUEciLCJNSlBFR19TRVJWRVJfVElNRU9VVF9NUyIsIk1KcGVnU3RyZWFtIiwiV3JpdGFibGUiLCJjb25zdHJ1Y3RvciIsIm1KcGVnVXJsIiwiZXJyb3JIYW5kbGVyIiwiXyIsIm5vb3AiLCJvcHRpb25zIiwidXJsIiwiY2xlYXIiLCJsYXN0Q2h1bmtCYXNlNjQiLCJpc0J1ZmZlciIsImxhc3RDaHVuayIsInRvU3RyaW5nIiwibGFzdENodW5rUE5HIiwianBnIiwiZ2V0QnVmZmVyIiwiTUlNRV9QTkciLCJsYXN0Q2h1bmtQTkdCYXNlNjQiLCJwbmciLCJyZWdpc3RlclN0YXJ0U3VjY2VzcyIsInJlZ2lzdGVyU3RhcnRGYWlsdXJlIiwicmVxdWVzdCIsImNvbnN1bWVyIiwidXBkYXRlQ291bnQiLCJzdGFydCIsInNlcnZlclRpbWVvdXQiLCJzdG9wIiwic3RhcnRQcm9taXNlIiwiQiIsInJlcyIsInJlaiIsInRpbWVvdXQiLCJvbkVyciIsImVyciIsImxvZyIsImVycm9yIiwib24iLCJwaXBlIiwidW5waXBlIiwiZW5kIiwid3JpdGUiLCJkYXRhIiwiaW5pdE1KcGVnU2VydmVyIiwicG9ydCIsImludE1zIiwidGltZXMiLCJzZXJ2ZXIiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwicmVxIiwibUpwZWdSZXFIYW5kbGVyIiwibUpwZWdTZXJ2ZXIiLCJjcmVhdGVSZXFIYW5kbGVyIiwiQnVmZmVyIiwiZnJvbSIsImkiLCJkZWxheSIsIl93cml0ZSIsImNsb3NlIiwibGlzdGVuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQSxJQUFJQSxhQUFhLEdBQUcsSUFBcEI7O0FBS0EsU0FBU0MsaUJBQVQsR0FB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RCxHQVZjLEVBVVpDLE1BVlksQ0FVTGhCLElBVkssQ0FBZjs7QUFZQSxTQUFPRyxNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgZ2V0SmltcEltYWdlLCBNSU1FX1BORyB9IGZyb20gJy4vaW1hZ2UtdXRpbCc7XG5pbXBvcnQgbUpwZWdTZXJ2ZXIgZnJvbSAnbWpwZWctc2VydmVyJztcbmltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnc3RyZWFtJztcblxuXG4vLyBsYXp5IGxvYWQgdGhpcywgYXMgaXQgbWlnaHQgbm90IGJlIGF2YWlsYWJsZVxubGV0IE1KcGVnQ29uc3VtZXIgPSBudWxsO1xuXG4vKipcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgbWpwZWctY29uc3VtZXJgIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkIG9yIGNhbm5vdCBiZSBsb2FkZWRcbiAqL1xuZnVuY3Rpb24gaW5pdE1KcGVnQ29uc3VtZXIgKCkge1xuICBpZiAoIU1KcGVnQ29uc3VtZXIpIHtcbiAgICB0cnkge1xuICAgICAgTUpwZWdDb25zdW1lciA9IHJlcXVpcmUoJ21qcGVnLWNvbnN1bWVyJyk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9XG4gIGlmICghTUpwZWdDb25zdW1lcikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWpwZWctY29uc3VtZXIgbW9kdWxlIGlzIHJlcXVpcmVkIHRvIHVzZSBNSlBFRy1vdmVyLUhUVFAgZmVhdHVyZXMuICcgK1xuICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIGluc3RhbGwgaXQgZmlyc3QgKG5wbSBpIC1nIG1qcGVnLWNvbnN1bWVyKSBhbmQgcmVzdGFydCBBcHBpdW0uJyk7XG4gIH1cbn1cblxuY29uc3QgVEVTVF9JTUdfSlBHID0gJy85ai80UUFZUlhocFpnQUFTVWtxQUFnQUFBQUFBQUFBQUFBQUFQL3NBQkZFZFdOcmVRQUJBQVFBQUFBZUFBRC80UU9CYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THdBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUrN3Z5SWdhV1E5SWxjMVRUQk5jRU5sYUdsSWVuSmxVM3BPVkdONmEyTTVaQ0kvUGlBOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNKQlpHOWlaU0JZVFZBZ1EyOXlaU0ExTGpZdFl6RTBNQ0EzT1M0eE5qQTBOVEVzSURJd01UY3ZNRFV2TURZdE1ERTZNRGc2TWpFZ0lDQWdJQ0FnSUNJK0lEeHlaR1k2VWtSR0lIaHRiRzV6T25Ka1pqMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M4d01pOHlNaTF5WkdZdGMzbHVkR0Y0TFc1ekl5SStJRHh5WkdZNlJHVnpZM0pwY0hScGIyNGdjbVJtT21GaWIzVjBQU0lpSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWlCNGJXeHVjenB6ZEZKbFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM05VZVhCbEwxSmxjMjkxY21ObFVtVm1JeUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiWEJOVFRwUGNtbG5hVzVoYkVSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk5HWTVPRGMxT1RjdFpHRTJNeTAwWTJNMExUa3pORE10TkdZeU5qZ3pNR1V3TmprM0lpQjRiWEJOVFRwRWIyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qbERNekkzUWtZME4wUTNOVEV4UlRoQ01UbERPVFZETURjMlJERTVNRFk1SWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2psRE16STNRa1l6TjBRM05URXhSVGhDTVRsRE9UVkRNRGMyUkRFNU1EWTVJaUI0YlhBNlEzSmxZWFJ2Y2xSdmIydzlJa0ZrYjJKbElGQm9iM1J2YzJodmNDQkRReUF5TURFNElDaE5ZV05wYm5SdmMyZ3BJajRnUEhodGNFMU5Pa1JsY21sMlpXUkdjbTl0SUhOMFVtVm1PbWx1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TkdZNU9EYzFPVGN0WkdFMk15MDBZMk0wTFRrek5ETXROR1l5Tmpnek1HVXdOamszSWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pSbU9UZzNOVGszTFdSaE5qTXROR05qTkMwNU16UXpMVFJtTWpZNE16QmxNRFk1TnlJdlBpQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNGdQQzl5WkdZNlVrUkdQaUE4TDNnNmVHMXdiV1YwWVQ0Z1BEOTRjR0ZqYTJWMElHVnVaRDBpY2lJL1B2L3VBQTVCWkc5aVpRQmt3QUFBQUFILzJ3Q0VBQkFMQ3dzTUN4QU1EQkFYRHcwUEZ4c1VFQkFVR3g4WEZ4Y1hGeDhlRnhvYUdob1hIaDRqSlNjbEl4NHZMek16THk5QVFFQkFRRUJBUUVCQVFFQkFRRUFCRVE4UEVSTVJGUklTRlJRUkZCRVVHaFFXRmhRYUpob2FIQm9hSmpBakhoNGVIaU13S3k0bkp5Y3VLelUxTURBMU5VQkFQMEJBUUVCQVFFQkFRRUJBUVAvQUFCRUlBQ0FBSUFNQklnQUNFUUVERVFIL3hBQmdBQUVBQXdFQUFBQUFBQUFBQUFBQUFBQUFCQVVIQ0FFQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFRTUNBZ3NBQUFBQUFBQUFBQUFBQUFFQ0JCRURFZ1loTVJPRG83UFRWQVVXTmhFQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvYUFBd0RBUUFDRVFNUkFEOEF6OEFBZEFBQUFBQUk4K2ZFOGRFdVRadHpaUjdWTWI2T2RURTVHSm9ZaXJyVXAvZThxZDl3YjNUR2UvbEoyNTUxc3g4RC85az0nO1xuXG4vLyBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciB0aGUgZmlyc3QgaW1hZ2UgaW4gdGhlIHN0cmVhbVxuY29uc3QgTUpQRUdfU0VSVkVSX1RJTUVPVVRfTVMgPSAxMDAwMDtcblxuLyoqIENsYXNzIHdoaWNoIHN0b3JlcyB0aGUgbGFzdCBiaXQgb2YgZGF0YSBzdHJlYW1lZCBpbnRvIGl0ICovXG5jbGFzcyBNSnBlZ1N0cmVhbSBleHRlbmRzIFdyaXRhYmxlIHtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIE1KcGVnU3RyZWFtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtSnBlZ1VybCAtIFVSTCBvZiBNSlBFRy1vdmVyLUhUVFAgc3RyZWFtXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtlcnJvckhhbmRsZXI9bm9vcF0gLSBhZGRpdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZVxuICAgKiBjYWxsZWQgaW4gdGhlIGNhc2Ugb2YgYW55IGVycm9ycy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgV3JpdGFibGUgY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yIChtSnBlZ1VybCwgZXJyb3JIYW5kbGVyID0gXy5ub29wLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIGluaXRNSnBlZ0NvbnN1bWVyKCk7XG5cbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICB0aGlzLnVybCA9IG1KcGVnVXJsO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIEpQRUdcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldCBsYXN0Q2h1bmtCYXNlNjQgKCkge1xuICAgIHJldHVybiBfLmlzQnVmZmVyKHRoaXMubGFzdENodW5rKSA/XG4gICAgICB0aGlzLmxhc3RDaHVuay50b1N0cmluZygnYmFzZTY0JykgOlxuICAgICAgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFBORyB2ZXJzaW9uIG9mIHRoZSBKUEVHIGJ1ZmZlclxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBQTkcgaW1hZ2UgZGF0YVxuICAgKi9cbiAgYXN5bmMgbGFzdENodW5rUE5HICgpIHtcbiAgICBpZiAoIV8uaXNCdWZmZXIodGhpcy5sYXN0Q2h1bmspKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBqcGcgPSBhd2FpdCBnZXRKaW1wSW1hZ2UodGhpcy5sYXN0Q2h1bmspO1xuICAgIHJldHVybiBhd2FpdCBqcGcuZ2V0QnVmZmVyKE1JTUVfUE5HKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NC1lbmNvZGVkIHZlcnNpb24gb2YgdGhlIFBOR1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYXN5bmMgbGFzdENodW5rUE5HQmFzZTY0ICgpIHtcbiAgICBjb25zdCBwbmcgPSBhd2FpdCB0aGlzLmxhc3RDaHVua1BORygpO1xuXG4gICAgaWYgKCFwbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwbmcudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGludGVybmFsIHN0YXRlXG4gICAqL1xuICBjbGVhciAoKSB7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0U3VjY2VzcyA9IG51bGw7XG4gICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IG51bGw7XG4gICAgdGhpcy5yZXF1ZXN0ID0gbnVsbDtcbiAgICB0aGlzLmNvbnN1bWVyID0gbnVsbDtcbiAgICB0aGlzLmxhc3RDaHVuayA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVDb3VudCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcmVhZGluZyB0aGUgTUpwZWcgc3RyZWFtIGFuZCBzdG9yaW5nIHRoZSBsYXN0IGltYWdlXG4gICAqL1xuICBhc3luYyBzdGFydCAoc2VydmVyVGltZW91dCA9IE1KUEVHX1NFUlZFUl9USU1FT1VUX01TKSB7XG4gICAgLy8gZW5zdXJlIHdlJ3JlIG5vdCBzdGFydGVkIGFscmVhZHlcbiAgICB0aGlzLnN0b3AoKTtcblxuICAgIHRoaXMuY29uc3VtZXIgPSBuZXcgTUpwZWdDb25zdW1lcigpO1xuXG4gICAgLy8gdXNlIHRoZSBkZWZlcnJlZCBwYXR0ZXJuIHNvIHdlIGNhbiB3YWl0IGZvciB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbVxuICAgIC8vIGJhc2VkIG9uIHdoYXQgY29tZXMgaW4gZnJvbSBhbiBleHRlcm5hbCBwaXBlXG4gICAgY29uc3Qgc3RhcnRQcm9taXNlID0gbmV3IEIoKHJlcywgcmVqKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3RhcnRTdWNjZXNzID0gcmVzO1xuICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZSA9IHJlajtcbiAgICB9KVxuICAgIC8vIHN0YXJ0IGEgdGltZW91dCBzbyB0aGF0IGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGRhdGEsIHdlIGRvbid0XG4gICAgLy8gYmxvY2sgZm9yZXZlci5cbiAgICAgIC50aW1lb3V0KHNlcnZlclRpbWVvdXQsXG4gICAgICAgIGBXYWl0ZWQgJHtzZXJ2ZXJUaW1lb3V0fW1zIGJ1dCB0aGUgTUpQRUcgc2VydmVyIG5ldmVyIHNlbnQgYW55IGltYWdlc2ApO1xuXG4gICAgY29uc3Qgb25FcnIgPSAoZXJyKSA9PiB7XG4gICAgICBsb2cuZXJyb3IoYEVycm9yIGdldHRpbmcgTUpwZWcgc2NyZWVuc2hvdCBjaHVuazogJHtlcnJ9YCk7XG4gICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgaWYgKHRoaXMucmVnaXN0ZXJTdGFydEZhaWx1cmUpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0YXJ0RmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KHRoaXMudXJsKTtcblxuICAgIHRoaXMucmVxdWVzdFxuICAgICAgLm9uKCdlcnJvcicsIG9uRXJyKSAvLyBlbnN1cmUgd2UgZG8gc29tZXRoaW5nIHdpdGggZXJyb3JzXG4gICAgICAucGlwZSh0aGlzLmNvbnN1bWVyKSAvLyBhbGxvdyBjaHVua2luZyBhbmQgdHJhbnNmb3JtaW5nIG9mIGpwZWcgZGF0YVxuICAgICAgLnBpcGUodGhpcyk7IC8vIHNlbmQgdGhlIGFjdHVhbCBqcGVncyB0byBvdXJzZWxmXG5cbiAgICBhd2FpdCBzdGFydFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCByZWFkaW5nIHRoZSBNSnBlZyBzdHJlYW0uIEVuc3VyZSB3ZSBkaXNjb25uZWN0IGFsbCB0aGUgcGlwZXMgYW5kIHN0b3BcbiAgICogdGhlIEhUVFAgcmVxdWVzdCBpdHNlbGYuIFRoZW4gcmVzZXQgdGhlIHN0YXRlLlxuICAgKi9cbiAgc3RvcCAoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnN1bWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25zdW1lci51bnBpcGUoKTtcbiAgICB0aGlzLnJlcXVlc3QuZW5kKCk7XG4gICAgdGhpcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBXcml0YWJsZSB3cml0ZSgpIG1ldGhvZCBpbiBvcmRlciB0byBzYXZlIHRoZSBsYXN0IGltYWdlIGFuZFxuICAgKiBsb2cgdGhlIG51bWJlciBvZiBpbWFnZXMgd2UgaGF2ZSByZWNlaXZlZFxuICAgKiBAb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBiaW5hcnkgZGF0YSBzdHJlYW1lZCBmcm9tIHRoZSBNSnBlZyBjb25zdW1lclxuICAgKi9cbiAgd3JpdGUgKGRhdGEpIHtcbiAgICB0aGlzLmxhc3RDaHVuayA9IGRhdGE7XG4gICAgdGhpcy51cGRhdGVDb3VudCsrO1xuXG4gICAgaWYgKHRoaXMucmVnaXN0ZXJTdGFydFN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydFN1Y2Nlc3MoKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdGFydFN1Y2Nlc3MgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IGFuIG1qcGVnIHNlcnZlciBmb3IgdGhlIHB1cnBvc2Ugb2YgdGVzdGluZywgd2hpY2gganVzdCBzZW5kcyB0aGUgc2FtZVxuICogaW1hZ2Ugb3ZlciBhbmQgb3Zlci4gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbG9zaW5nIHRoZSBzZXJ2ZXIuXG4gKiBAcGFyYW0ge2ludH0gcG9ydCAtIHBvcnQgdGhlIHNlcnZlciBzaG91bGQgbGlzdGVuIG9uXG4gKiBAcGFyYW0ge2ludH0gW2ludE1zXSAtIGhvdyBvZnRlbiB0aGUgc2VydmVyIHNob3VsZCBwdXNoIGFuIGltYWdlXG4gKiBAcGFyYW0ge2ludH0gW3RpbWVzXSAtIGhvdyBtYW55IHRpbWVzIHRoZSBzZXJ2ZXIgc2hvdWxkIHB1c2ggYW4gaW1hZ2UgYmVmb3JlXG4gKiBpdCBjbG9zZXMgdGhlIGNvbm5lY3Rpb25cbiAqIEByZXR1cm5zIHtodHRwLlNlcnZlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdE1KcGVnU2VydmVyIChwb3J0LCBpbnRNcyA9IDMwMCwgdGltZXMgPSAyMCkge1xuICBjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhc3luYyBmdW5jdGlvbiAocmVxLCByZXMpIHtcbiAgICBjb25zdCBtSnBlZ1JlcUhhbmRsZXIgPSBtSnBlZ1NlcnZlci5jcmVhdGVSZXFIYW5kbGVyKHJlcSwgcmVzKTtcbiAgICBjb25zdCBqcGcgPSBCdWZmZXIuZnJvbShURVNUX0lNR19KUEcsICdiYXNlNjQnKTtcblxuICAgIC8vIGp1c3Qgc2VuZCB0aGUgc2FtZSBqcGVnIG92ZXIgYW5kIG92ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbWVzOyBpKyspIHtcbiAgICAgIGF3YWl0IEIuZGVsYXkoaW50TXMpO1xuICAgICAgbUpwZWdSZXFIYW5kbGVyLl93cml0ZShqcGcsIG51bGwsIF8ubm9vcCk7XG4gICAgfVxuICAgIG1KcGVnUmVxSGFuZGxlci5jbG9zZSgpO1xuICB9KS5saXN0ZW4ocG9ydCk7XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuZXhwb3J0IHsgTUpwZWdTdHJlYW0sIGluaXRNSnBlZ1NlcnZlciwgVEVTVF9JTUdfSlBHIH07XG4iXSwiZmlsZSI6ImxpYi9tanBlZy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

@@ -10,28 +10,21 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");
var _mkdirp3 = _interopRequireDefault(require("mkdirp"));
var _mkdirp2 = _interopRequireDefault(require("mkdirp"));
var _bluebird = _interopRequireDefault(require("bluebird"));
function mkdirp(_x) {
return _mkdirp2.apply(this, arguments);
}
function _mkdirp2() {
_mkdirp2 = (0, _asyncToGenerator2.default)(function* (dir) {
return yield new _bluebird.default((resolve, reject) => {
(0, _mkdirp3.default)(dir, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
async function mkdirp(dir) {
return await new _bluebird.default((resolve, reject) => {
(0, _mkdirp2.default)(dir, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
return _mkdirp2.apply(this, arguments);
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ta2RpcnAuanMiXSwibmFtZXMiOlsibWtkaXJwIiwiZGlyIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJlcnIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O1NBRWVBLE07Ozs7OzZDQUFmLFdBQXVCQyxHQUF2QixFQUE0QjtBQUMxQixpQkFBYSxJQUFJQyxpQkFBSixDQUFNLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUN0Qyw0QkFBUUgsR0FBUixFQUFjSSxHQUFELElBQVM7QUFDcEIsWUFBSUEsR0FBSixFQUFTO0FBQ1BELFVBQUFBLE1BQU0sQ0FBQ0MsR0FBRCxDQUFOO0FBQ0QsU0FGRCxNQUVPO0FBQ0xGLFVBQUFBLE9BQU87QUFDUjtBQUNGLE9BTkQ7QUFPRCxLQVJZLENBQWI7QUFTRCxHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9ta2RpcnAgZnJvbSAnbWtkaXJwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuYXN5bmMgZnVuY3Rpb24gbWtkaXJwIChkaXIpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBfbWtkaXJwKGRpciwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgeyBta2RpcnAgfTtcbiJdLCJmaWxlIjoibGliL21rZGlycC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ta2RpcnAuanMiXSwibmFtZXMiOlsibWtkaXJwIiwiZGlyIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJlcnIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUEsZUFBZUEsTUFBZixDQUF1QkMsR0FBdkIsRUFBNEI7QUFDMUIsU0FBTyxNQUFNLElBQUlDLGlCQUFKLENBQU0sQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDLDBCQUFRSCxHQUFSLEVBQWNJLEdBQUQsSUFBUztBQUNwQixVQUFJQSxHQUFKLEVBQVM7QUFDUEQsUUFBQUEsTUFBTSxDQUFDQyxHQUFELENBQU47QUFDRCxPQUZELE1BRU87QUFDTEYsUUFBQUEsT0FBTztBQUNSO0FBQ0YsS0FORDtBQU9ELEdBUlksQ0FBYjtBQVNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9ta2RpcnAgZnJvbSAnbWtkaXJwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuYXN5bmMgZnVuY3Rpb24gbWtkaXJwIChkaXIpIHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBfbWtkaXJwKGRpciwgKGVycikgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgeyBta2RpcnAgfTtcbiJdLCJmaWxlIjoibGliL21rZGlycC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9

@@ -10,3 +10,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -29,78 +29,58 @@ var _fs = require("fs");

function uploadFileToHttp(_x) {
return _uploadFileToHttp.apply(this, arguments);
}
async function uploadFileToHttp(remoteUrl, uploadOptions = {}) {
_logger.default.debug(`${remoteUrl.protocol} upload options: ${JSON.stringify(uploadOptions)}`);
function _uploadFileToHttp() {
_uploadFileToHttp = (0, _asyncToGenerator2.default)(function* (remoteUrl, uploadOptions = {}) {
_logger.default.debug(`${remoteUrl.protocol} upload options: ${JSON.stringify(uploadOptions)}`);
const response = await (0, _requestPromise.default)(uploadOptions);
const responseDebugMsg = `Response code: ${response.statusCode}. ` + `Response body: ${JSON.stringify(response.body)}`;
const response = yield (0, _requestPromise.default)(uploadOptions);
const responseDebugMsg = `Response code: ${response.statusCode}. ` + `Response body: ${JSON.stringify(response.body)}`;
_logger.default.debug(responseDebugMsg);
_logger.default.debug(responseDebugMsg);
if (response.statusCode >= 400) {
throw new Error(`Cannot upload the recorded media to '${remoteUrl.href}'. ${responseDebugMsg}`);
}
});
return _uploadFileToHttp.apply(this, arguments);
if (response.statusCode >= 400) {
throw new Error(`Cannot upload the recorded media to '${remoteUrl.href}'. ${responseDebugMsg}`);
}
}
function uploadFileToFtp(_x2, _x3) {
return _uploadFileToFtp.apply(this, arguments);
}
async function uploadFileToFtp(localFileStream, remoteUrl, uploadOptions = {}) {
_logger.default.debug(`${remoteUrl.protocol} upload options: ${JSON.stringify(uploadOptions)}`);
function _uploadFileToFtp() {
_uploadFileToFtp = (0, _asyncToGenerator2.default)(function* (localFileStream, remoteUrl, uploadOptions = {}) {
_logger.default.debug(`${remoteUrl.protocol} upload options: ${JSON.stringify(uploadOptions)}`);
return await new _bluebird.default((resolve, reject) => {
new _jsftp.default(uploadOptions).put(localFileStream, remoteUrl.pathname, err => {
if (err) {
return reject(err);
}
return yield new _bluebird.default((resolve, reject) => {
new _jsftp.default(uploadOptions).put(localFileStream, remoteUrl.pathname, err => {
if (err) {
return reject(err);
}
resolve();
});
resolve();
});
});
return _uploadFileToFtp.apply(this, arguments);
}
function uploadFile(_x4, _x5) {
return _uploadFile.apply(this, arguments);
}
async function uploadFile(localPath, remotePath, uploadOptions = {}) {
if (!(await _fs2.default.exists(localPath))) {
throw new Error(`'${localPath}' does not exists or is not accessible`);
}
function _uploadFile() {
_uploadFile = (0, _asyncToGenerator2.default)(function* (localPath, remotePath, uploadOptions = {}) {
if (!(yield _fs2.default.exists(localPath))) {
throw new Error(`'${localPath}' does not exists or is not accessible`);
}
const remoteUrl = _url.default.parse(remotePath);
const remoteUrl = _url.default.parse(remotePath);
const {
size
} = await _fs2.default.stat(localPath);
const _ref = yield _fs2.default.stat(localPath),
size = _ref.size;
_logger.default.info(`Uploading '${localPath}' of ${(0, _util.toReadableSizeString)(size)} size to '${remotePath}'...`);
_logger.default.info(`Uploading '${localPath}' of ${(0, _util.toReadableSizeString)(size)} size to '${remotePath}'...`);
const timeStarted = process.hrtime();
const timeStarted = process.hrtime();
if (['http:', 'https:'].includes(remoteUrl.protocol)) {
await uploadFileToHttp(remoteUrl, uploadOptions);
} else if (remoteUrl.protocol === 'ftp:') {
await uploadFileToFtp((0, _fs.createReadStream)(localPath), remoteUrl, uploadOptions);
} else {
throw new Error(`Cannot upload the file at '${localPath}' to '${remotePath}'. ` + `Unsupported remote protocol '${remoteUrl.protocol}'. ` + `Only http/https and ftp protocols are supported.`);
}
if (['http:', 'https:'].includes(remoteUrl.protocol)) {
yield uploadFileToHttp(remoteUrl, uploadOptions);
} else if (remoteUrl.protocol === 'ftp:') {
yield uploadFileToFtp((0, _fs.createReadStream)(localPath), remoteUrl, uploadOptions);
} else {
throw new Error(`Cannot upload the file at '${localPath}' to '${remotePath}'. ` + `Unsupported remote protocol '${remoteUrl.protocol}'. ` + `Only http/https and ftp protocols are supported.`);
}
const timeElapsed = process.hrtime(timeStarted)[0];
const timeElapsed = process.hrtime(timeStarted)[0];
_logger.default.info(`Uploaded '${localPath}' of ${(0, _util.toReadableSizeString)(size)} size in ${timeElapsed} second${timeElapsed === 1 ? '' : 's'}`);
});
return _uploadFile.apply(this, arguments);
_logger.default.info(`Uploaded '${localPath}' of ${(0, _util.toReadableSizeString)(size)} size in ${timeElapsed} second${timeElapsed === 1 ? '' : 's'}`);
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9uZXQuanMiXSwibmFtZXMiOlsidXBsb2FkRmlsZVRvSHR0cCIsInJlbW90ZVVybCIsInVwbG9hZE9wdGlvbnMiLCJsb2ciLCJkZWJ1ZyIsInByb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlc3BvbnNlIiwicmVzcG9uc2VEZWJ1Z01zZyIsInN0YXR1c0NvZGUiLCJib2R5IiwiRXJyb3IiLCJocmVmIiwidXBsb2FkRmlsZVRvRnRwIiwibG9jYWxGaWxlU3RyZWFtIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJGdHAiLCJwdXQiLCJwYXRobmFtZSIsImVyciIsInVwbG9hZEZpbGUiLCJsb2NhbFBhdGgiLCJyZW1vdGVQYXRoIiwiZnMiLCJleGlzdHMiLCJ1cmwiLCJwYXJzZSIsInN0YXQiLCJzaXplIiwiaW5mbyIsInRpbWVTdGFydGVkIiwicHJvY2VzcyIsImhydGltZSIsImluY2x1ZGVzIiwidGltZUVsYXBzZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O1NBR2VBLGdCOzs7OztzREFBZixXQUFpQ0MsU0FBakMsRUFBNENDLGFBQWEsR0FBRyxFQUE1RCxFQUFnRTtBQUM5REMsb0JBQUlDLEtBQUosQ0FBVyxHQUFFSCxTQUFTLENBQUNJLFFBQVMsb0JBQW1CQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsYUFBZixDQUE4QixFQUFqRjs7QUFDQSxVQUFNTSxRQUFRLFNBQVMsNkJBQVFOLGFBQVIsQ0FBdkI7QUFDQSxVQUFNTyxnQkFBZ0IsR0FBSSxrQkFBaUJELFFBQVEsQ0FBQ0UsVUFBVyxJQUF0QyxHQUNDLGtCQUFpQkosSUFBSSxDQUFDQyxTQUFMLENBQWVDLFFBQVEsQ0FBQ0csSUFBeEIsQ0FBOEIsRUFEekU7O0FBRUFSLG9CQUFJQyxLQUFKLENBQVVLLGdCQUFWOztBQUNBLFFBQUlELFFBQVEsQ0FBQ0UsVUFBVCxJQUF1QixHQUEzQixFQUFnQztBQUM5QixZQUFNLElBQUlFLEtBQUosQ0FBVyx3Q0FBdUNYLFNBQVMsQ0FBQ1ksSUFBSyxNQUFLSixnQkFBaUIsRUFBdkYsQ0FBTjtBQUNEO0FBQ0YsRzs7OztTQUVjSyxlOzs7OztxREFBZixXQUFnQ0MsZUFBaEMsRUFBaURkLFNBQWpELEVBQTREQyxhQUFhLEdBQUcsRUFBNUUsRUFBZ0Y7QUFDOUVDLG9CQUFJQyxLQUFKLENBQVcsR0FBRUgsU0FBUyxDQUFDSSxRQUFTLG9CQUFtQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVMLGFBQWYsQ0FBOEIsRUFBakY7O0FBQ0EsaUJBQWEsSUFBSWMsaUJBQUosQ0FBTSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDdEMsVUFBSUMsY0FBSixDQUFRakIsYUFBUixFQUF1QmtCLEdBQXZCLENBQTJCTCxlQUEzQixFQUE0Q2QsU0FBUyxDQUFDb0IsUUFBdEQsRUFBaUVDLEdBQUQsSUFBUztBQUN2RSxZQUFJQSxHQUFKLEVBQVM7QUFDUCxpQkFBT0osTUFBTSxDQUFDSSxHQUFELENBQWI7QUFDRDs7QUFDREwsUUFBQUEsT0FBTztBQUNSLE9BTEQ7QUFNRCxLQVBZLENBQWI7QUFRRCxHOzs7O1NBWWNNLFU7Ozs7O2dEQUFmLFdBQTJCQyxTQUEzQixFQUFzQ0MsVUFBdEMsRUFBa0R2QixhQUFhLEdBQUcsRUFBbEUsRUFBc0U7QUFDcEUsUUFBSSxRQUFPd0IsYUFBR0MsTUFBSCxDQUFVSCxTQUFWLENBQVAsQ0FBSixFQUFpQztBQUMvQixZQUFNLElBQUlaLEtBQUosQ0FBWSxJQUFHWSxTQUFVLHdDQUF6QixDQUFOO0FBQ0Q7O0FBQ0QsVUFBTXZCLFNBQVMsR0FBRzJCLGFBQUlDLEtBQUosQ0FBVUosVUFBVixDQUFsQjs7QUFKb0UsdUJBSy9DQyxhQUFHSSxJQUFILENBQVFOLFNBQVIsQ0FMK0M7QUFBQSxVQUs3RE8sSUFMNkQsUUFLN0RBLElBTDZEOztBQU1wRTVCLG9CQUFJNkIsSUFBSixDQUFVLGNBQWFSLFNBQVUsUUFBTyxnQ0FBcUJPLElBQXJCLENBQTJCLGFBQVlOLFVBQVcsTUFBMUY7O0FBQ0EsVUFBTVEsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE1BQVIsRUFBcEI7O0FBQ0EsUUFBSSxDQUFDLE9BQUQsRUFBVSxRQUFWLEVBQW9CQyxRQUFwQixDQUE2Qm5DLFNBQVMsQ0FBQ0ksUUFBdkMsQ0FBSixFQUFzRDtBQUNwRCxZQUFNTCxnQkFBZ0IsQ0FBQ0MsU0FBRCxFQUFZQyxhQUFaLENBQXRCO0FBQ0QsS0FGRCxNQUVPLElBQUlELFNBQVMsQ0FBQ0ksUUFBVixLQUF1QixNQUEzQixFQUFtQztBQUN4QyxZQUFNUyxlQUFlLENBQUMsMEJBQWlCVSxTQUFqQixDQUFELEVBQThCdkIsU0FBOUIsRUFBeUNDLGFBQXpDLENBQXJCO0FBQ0QsS0FGTSxNQUVBO0FBQ0wsWUFBTSxJQUFJVSxLQUFKLENBQVcsOEJBQTZCWSxTQUFVLFNBQVFDLFVBQVcsS0FBM0QsR0FDQyxnQ0FBK0J4QixTQUFTLENBQUNJLFFBQVMsS0FEbkQsR0FFQyxrREFGWCxDQUFOO0FBR0Q7O0FBQ0QsVUFBTWdDLFdBQVcsR0FBR0gsT0FBTyxDQUFDQyxNQUFSLENBQWVGLFdBQWYsRUFBNEIsQ0FBNUIsQ0FBcEI7O0FBQ0E5QixvQkFBSTZCLElBQUosQ0FBVSxhQUFZUixTQUFVLFFBQU8sZ0NBQXFCTyxJQUFyQixDQUEyQixZQUFXTSxXQUFZLFVBQVNBLFdBQVcsS0FBSyxDQUFoQixHQUFvQixFQUFwQixHQUF5QixHQUFJLEVBQS9IO0FBQ0QsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB0b1JlYWRhYmxlU2l6ZVN0cmluZyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QtcHJvbWlzZSc7XG5pbXBvcnQgRnRwIGZyb20gJ2pzZnRwJztcblxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlVG9IdHRwIChyZW1vdGVVcmwsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBsb2cuZGVidWcoYCR7cmVtb3RlVXJsLnByb3RvY29sfSB1cGxvYWQgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeSh1cGxvYWRPcHRpb25zKX1gKTtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHVwbG9hZE9wdGlvbnMpO1xuICBjb25zdCByZXNwb25zZURlYnVnTXNnID0gYFJlc3BvbnNlIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgYFJlc3BvbnNlIGJvZHk6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuYm9keSl9YDtcbiAgbG9nLmRlYnVnKHJlc3BvbnNlRGVidWdNc2cpO1xuICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1cGxvYWQgdGhlIHJlY29yZGVkIG1lZGlhIHRvICcke3JlbW90ZVVybC5ocmVmfScuICR7cmVzcG9uc2VEZWJ1Z01zZ31gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlVG9GdHAgKGxvY2FsRmlsZVN0cmVhbSwgcmVtb3RlVXJsLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgbG9nLmRlYnVnKGAke3JlbW90ZVVybC5wcm90b2NvbH0gdXBsb2FkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodXBsb2FkT3B0aW9ucyl9YCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbmV3IEZ0cCh1cGxvYWRPcHRpb25zKS5wdXQobG9jYWxGaWxlU3RyZWFtLCByZW1vdGVVcmwucGF0aG5hbWUsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBnaXZlbiBmaWxlIHRvIGEgcmVtb3RlIGxvY2F0aW9uLiBIVFRQKFMpIGFuZCBGVFBcbiAqIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbFBhdGggLSBUaGUgcGF0aCB0byBhIGZpbGUgb24gdGhlIGxvY2FsIHN0b3JhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCAtIFRoZSByZW1vdGUgVVJMIHRvIHVwbG9hZCB0aGUgZmlsZSB0by5cbiAqIEBwYXJhbSB7T2JqZWN0fSB1cGxvYWRPcHRpb25zIC0gVGhlIG9wdGlvbnMgc2V0LCB3aGljaCBkZXBlbmRzIG9uIHRoZSBwcm90b2NvbCBzZXQgZm9yIHJlbW90ZVBhdGguXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9yZXF1ZXN0LXByb21pc2UgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZnRwIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZEZpbGUgKGxvY2FsUGF0aCwgcmVtb3RlUGF0aCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGxvY2FsUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IgKGAnJHtsb2NhbFBhdGh9JyBkb2VzIG5vdCBleGlzdHMgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgfVxuICBjb25zdCByZW1vdGVVcmwgPSB1cmwucGFyc2UocmVtb3RlUGF0aCk7XG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQobG9jYWxQYXRoKTtcbiAgbG9nLmluZm8oYFVwbG9hZGluZyAnJHtsb2NhbFBhdGh9JyBvZiAke3RvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfSBzaXplIHRvICcke3JlbW90ZVBhdGh9Jy4uLmApO1xuICBjb25zdCB0aW1lU3RhcnRlZCA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gIGlmIChbJ2h0dHA6JywgJ2h0dHBzOiddLmluY2x1ZGVzKHJlbW90ZVVybC5wcm90b2NvbCkpIHtcbiAgICBhd2FpdCB1cGxvYWRGaWxlVG9IdHRwKHJlbW90ZVVybCwgdXBsb2FkT3B0aW9ucyk7XG4gIH0gZWxzZSBpZiAocmVtb3RlVXJsLnByb3RvY29sID09PSAnZnRwOicpIHtcbiAgICBhd2FpdCB1cGxvYWRGaWxlVG9GdHAoY3JlYXRlUmVhZFN0cmVhbShsb2NhbFBhdGgpLCByZW1vdGVVcmwsIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVwbG9hZCB0aGUgZmlsZSBhdCAnJHtsb2NhbFBhdGh9JyB0byAnJHtyZW1vdGVQYXRofScuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgVW5zdXBwb3J0ZWQgcmVtb3RlIHByb3RvY29sICcke3JlbW90ZVVybC5wcm90b2NvbH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYE9ubHkgaHR0cC9odHRwcyBhbmQgZnRwIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIGNvbnN0IHRpbWVFbGFwc2VkID0gcHJvY2Vzcy5ocnRpbWUodGltZVN0YXJ0ZWQpWzBdO1xuICBsb2cuaW5mbyhgVXBsb2FkZWQgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSBpbiAke3RpbWVFbGFwc2VkfSBzZWNvbmQke3RpbWVFbGFwc2VkID09PSAxID8gJycgOiAncyd9YCk7XG59XG5cbmV4cG9ydCB7IHVwbG9hZEZpbGUgfTtcbiJdLCJmaWxlIjoibGliL25ldC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9uZXQuanMiXSwibmFtZXMiOlsidXBsb2FkRmlsZVRvSHR0cCIsInJlbW90ZVVybCIsInVwbG9hZE9wdGlvbnMiLCJsb2ciLCJkZWJ1ZyIsInByb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlc3BvbnNlIiwicmVzcG9uc2VEZWJ1Z01zZyIsInN0YXR1c0NvZGUiLCJib2R5IiwiRXJyb3IiLCJocmVmIiwidXBsb2FkRmlsZVRvRnRwIiwibG9jYWxGaWxlU3RyZWFtIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJGdHAiLCJwdXQiLCJwYXRobmFtZSIsImVyciIsInVwbG9hZEZpbGUiLCJsb2NhbFBhdGgiLCJyZW1vdGVQYXRoIiwiZnMiLCJleGlzdHMiLCJ1cmwiLCJwYXJzZSIsInNpemUiLCJzdGF0IiwiaW5mbyIsInRpbWVTdGFydGVkIiwicHJvY2VzcyIsImhydGltZSIsImluY2x1ZGVzIiwidGltZUVsYXBzZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsZUFBZUEsZ0JBQWYsQ0FBaUNDLFNBQWpDLEVBQTRDQyxhQUFhLEdBQUcsRUFBNUQsRUFBZ0U7QUFDOURDLGtCQUFJQyxLQUFKLENBQVcsR0FBRUgsU0FBUyxDQUFDSSxRQUFTLG9CQUFtQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVMLGFBQWYsQ0FBOEIsRUFBakY7O0FBQ0EsUUFBTU0sUUFBUSxHQUFHLE1BQU0sNkJBQVFOLGFBQVIsQ0FBdkI7QUFDQSxRQUFNTyxnQkFBZ0IsR0FBSSxrQkFBaUJELFFBQVEsQ0FBQ0UsVUFBVyxJQUF0QyxHQUNDLGtCQUFpQkosSUFBSSxDQUFDQyxTQUFMLENBQWVDLFFBQVEsQ0FBQ0csSUFBeEIsQ0FBOEIsRUFEekU7O0FBRUFSLGtCQUFJQyxLQUFKLENBQVVLLGdCQUFWOztBQUNBLE1BQUlELFFBQVEsQ0FBQ0UsVUFBVCxJQUF1QixHQUEzQixFQUFnQztBQUM5QixVQUFNLElBQUlFLEtBQUosQ0FBVyx3Q0FBdUNYLFNBQVMsQ0FBQ1ksSUFBSyxNQUFLSixnQkFBaUIsRUFBdkYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsZUFBZUssZUFBZixDQUFnQ0MsZUFBaEMsRUFBaURkLFNBQWpELEVBQTREQyxhQUFhLEdBQUcsRUFBNUUsRUFBZ0Y7QUFDOUVDLGtCQUFJQyxLQUFKLENBQVcsR0FBRUgsU0FBUyxDQUFDSSxRQUFTLG9CQUFtQkMsSUFBSSxDQUFDQyxTQUFMLENBQWVMLGFBQWYsQ0FBOEIsRUFBakY7O0FBQ0EsU0FBTyxNQUFNLElBQUljLGlCQUFKLENBQU0sQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3RDLFFBQUlDLGNBQUosQ0FBUWpCLGFBQVIsRUFBdUJrQixHQUF2QixDQUEyQkwsZUFBM0IsRUFBNENkLFNBQVMsQ0FBQ29CLFFBQXRELEVBQWlFQyxHQUFELElBQVM7QUFDdkUsVUFBSUEsR0FBSixFQUFTO0FBQ1AsZUFBT0osTUFBTSxDQUFDSSxHQUFELENBQWI7QUFDRDs7QUFDREwsTUFBQUEsT0FBTztBQUNSLEtBTEQ7QUFNRCxHQVBZLENBQWI7QUFRRDs7QUFZRCxlQUFlTSxVQUFmLENBQTJCQyxTQUEzQixFQUFzQ0MsVUFBdEMsRUFBa0R2QixhQUFhLEdBQUcsRUFBbEUsRUFBc0U7QUFDcEUsTUFBSSxFQUFDLE1BQU13QixhQUFHQyxNQUFILENBQVVILFNBQVYsQ0FBUCxDQUFKLEVBQWlDO0FBQy9CLFVBQU0sSUFBSVosS0FBSixDQUFZLElBQUdZLFNBQVUsd0NBQXpCLENBQU47QUFDRDs7QUFDRCxRQUFNdkIsU0FBUyxHQUFHMkIsYUFBSUMsS0FBSixDQUFVSixVQUFWLENBQWxCOztBQUNBLFFBQU07QUFBQ0ssSUFBQUE7QUFBRCxNQUFTLE1BQU1KLGFBQUdLLElBQUgsQ0FBUVAsU0FBUixDQUFyQjs7QUFDQXJCLGtCQUFJNkIsSUFBSixDQUFVLGNBQWFSLFNBQVUsUUFBTyxnQ0FBcUJNLElBQXJCLENBQTJCLGFBQVlMLFVBQVcsTUFBMUY7O0FBQ0EsUUFBTVEsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE1BQVIsRUFBcEI7O0FBQ0EsTUFBSSxDQUFDLE9BQUQsRUFBVSxRQUFWLEVBQW9CQyxRQUFwQixDQUE2Qm5DLFNBQVMsQ0FBQ0ksUUFBdkMsQ0FBSixFQUFzRDtBQUNwRCxVQUFNTCxnQkFBZ0IsQ0FBQ0MsU0FBRCxFQUFZQyxhQUFaLENBQXRCO0FBQ0QsR0FGRCxNQUVPLElBQUlELFNBQVMsQ0FBQ0ksUUFBVixLQUF1QixNQUEzQixFQUFtQztBQUN4QyxVQUFNUyxlQUFlLENBQUMsMEJBQWlCVSxTQUFqQixDQUFELEVBQThCdkIsU0FBOUIsRUFBeUNDLGFBQXpDLENBQXJCO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsVUFBTSxJQUFJVSxLQUFKLENBQVcsOEJBQTZCWSxTQUFVLFNBQVFDLFVBQVcsS0FBM0QsR0FDQyxnQ0FBK0J4QixTQUFTLENBQUNJLFFBQVMsS0FEbkQsR0FFQyxrREFGWCxDQUFOO0FBR0Q7O0FBQ0QsUUFBTWdDLFdBQVcsR0FBR0gsT0FBTyxDQUFDQyxNQUFSLENBQWVGLFdBQWYsRUFBNEIsQ0FBNUIsQ0FBcEI7O0FBQ0E5QixrQkFBSTZCLElBQUosQ0FBVSxhQUFZUixTQUFVLFFBQU8sZ0NBQXFCTSxJQUFyQixDQUEyQixZQUFXTyxXQUFZLFVBQVNBLFdBQVcsS0FBSyxDQUFoQixHQUFvQixFQUFwQixHQUF5QixHQUFJLEVBQS9IO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSAnZnMnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdG9SZWFkYWJsZVNpemVTdHJpbmcgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0LXByb21pc2UnO1xuaW1wb3J0IEZ0cCBmcm9tICdqc2Z0cCc7XG5cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvSHR0cCAocmVtb3RlVXJsLCB1cGxvYWRPcHRpb25zID0ge30pIHtcbiAgbG9nLmRlYnVnKGAke3JlbW90ZVVybC5wcm90b2NvbH0gdXBsb2FkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodXBsb2FkT3B0aW9ucyl9YCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh1cGxvYWRPcHRpb25zKTtcbiAgY29uc3QgcmVzcG9uc2VEZWJ1Z01zZyA9IGBSZXNwb25zZSBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9LiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBSZXNwb25zZSBib2R5OiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmJvZHkpfWA7XG4gIGxvZy5kZWJ1ZyhyZXNwb25zZURlYnVnTXNnKTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdXBsb2FkIHRoZSByZWNvcmRlZCBtZWRpYSB0byAnJHtyZW1vdGVVcmwuaHJlZn0nLiAke3Jlc3BvbnNlRGVidWdNc2d9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkRmlsZVRvRnRwIChsb2NhbEZpbGVTdHJlYW0sIHJlbW90ZVVybCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZyhgJHtyZW1vdGVVcmwucHJvdG9jb2x9IHVwbG9hZCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KHVwbG9hZE9wdGlvbnMpfWApO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG5ldyBGdHAodXBsb2FkT3B0aW9ucykucHV0KGxvY2FsRmlsZVN0cmVhbSwgcmVtb3RlVXJsLnBhdGhuYW1lLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVXBsb2FkcyB0aGUgZ2l2ZW4gZmlsZSB0byBhIHJlbW90ZSBsb2NhdGlvbi4gSFRUUChTKSBhbmQgRlRQXG4gKiBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQYXRoIC0gVGhlIHBhdGggdG8gYSBmaWxlIG9uIHRoZSBsb2NhbCBzdG9yYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggLSBUaGUgcmVtb3RlIFVSTCB0byB1cGxvYWQgdGhlIGZpbGUgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gdXBsb2FkT3B0aW9ucyAtIFRoZSBvcHRpb25zIHNldCwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgcHJvdG9jb2wgc2V0IGZvciByZW1vdGVQYXRoLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvcmVxdWVzdC1wcm9taXNlIGFuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2Z0cCBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlIChsb2NhbFBhdGgsIHJlbW90ZVBhdGgsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhsb2NhbFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yIChgJyR7bG9jYWxQYXRofScgZG9lcyBub3QgZXhpc3RzIG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cbiAgY29uc3QgcmVtb3RlVXJsID0gdXJsLnBhcnNlKHJlbW90ZVBhdGgpO1xuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGxvY2FsUGF0aCk7XG4gIGxvZy5pbmZvKGBVcGxvYWRpbmcgJyR7bG9jYWxQYXRofScgb2YgJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzaXplKX0gc2l6ZSB0byAnJHtyZW1vdGVQYXRofScuLi5gKTtcbiAgY29uc3QgdGltZVN0YXJ0ZWQgPSBwcm9jZXNzLmhydGltZSgpO1xuICBpZiAoWydodHRwOicsICdodHRwczonXS5pbmNsdWRlcyhyZW1vdGVVcmwucHJvdG9jb2wpKSB7XG4gICAgYXdhaXQgdXBsb2FkRmlsZVRvSHR0cChyZW1vdGVVcmwsIHVwbG9hZE9wdGlvbnMpO1xuICB9IGVsc2UgaWYgKHJlbW90ZVVybC5wcm90b2NvbCA9PT0gJ2Z0cDonKSB7XG4gICAgYXdhaXQgdXBsb2FkRmlsZVRvRnRwKGNyZWF0ZVJlYWRTdHJlYW0obG9jYWxQYXRoKSwgcmVtb3RlVXJsLCB1cGxvYWRPcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1cGxvYWQgdGhlIGZpbGUgYXQgJyR7bG9jYWxQYXRofScgdG8gJyR7cmVtb3RlUGF0aH0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYFVuc3VwcG9ydGVkIHJlbW90ZSBwcm90b2NvbCAnJHtyZW1vdGVVcmwucHJvdG9jb2x9Jy4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBPbmx5IGh0dHAvaHR0cHMgYW5kIGZ0cCBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICBjb25zdCB0aW1lRWxhcHNlZCA9IHByb2Nlc3MuaHJ0aW1lKHRpbWVTdGFydGVkKVswXTtcbiAgbG9nLmluZm8oYFVwbG9hZGVkICcke2xvY2FsUGF0aH0nIG9mICR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9IHNpemUgaW4gJHt0aW1lRWxhcHNlZH0gc2Vjb25kJHt0aW1lRWxhcHNlZCA9PT0gMSA/ICcnIDogJ3MnfWApO1xufVxuXG5leHBvcnQgeyB1cGxvYWRGaWxlIH07XG4iXSwiZmlsZSI6ImxpYi9uZXQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

@@ -11,3 +11,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -30,91 +30,70 @@ var _plist = _interopRequireDefault(require("plist"));

function parseXmlPlistFile(_x) {
return _parseXmlPlistFile.apply(this, arguments);
async function parseXmlPlistFile(plistFilename) {
let xmlContent = await _fs.default.readFile(plistFilename, 'utf8');
return _plist.default.parse(xmlContent);
}
function _parseXmlPlistFile() {
_parseXmlPlistFile = (0, _asyncToGenerator2.default)(function* (plistFilename) {
let xmlContent = yield _fs.default.readFile(plistFilename, 'utf8');
return _plist.default.parse(xmlContent);
});
return _parseXmlPlistFile.apply(this, arguments);
}
async function parsePlistFile(plist, mustExist = true, quiet = true) {
if (!(await _fs.default.exists(plist))) {
if (mustExist) {
_logger.default.errorAndThrow(`Plist file doesn't exist: '${plist}'`);
} else {
_logger.default.debug(`Plist file '${plist}' does not exist. Returning an empty plist.`);
function parsePlistFile(_x2) {
return _parsePlistFile.apply(this, arguments);
}
function _parsePlistFile() {
_parsePlistFile = (0, _asyncToGenerator2.default)(function* (plist, mustExist = true, quiet = true) {
if (!(yield _fs.default.exists(plist))) {
if (mustExist) {
_logger.default.errorAndThrow(`Plist file doesn't exist: '${plist}'`);
} else {
_logger.default.debug(`Plist file '${plist}' does not exist. Returning an empty plist.`);
return {};
}
return {};
}
}
let obj = {};
let type = 'binary';
let obj = {};
let type = 'binary';
try {
obj = yield parseFile(plist);
try {
obj = await parseFile(plist);
if (obj.length) {
obj = obj[0];
} else {
throw new Error(`Binary file '${plist}'' appears to be empty`);
}
} catch (ign) {
try {
obj = yield parseXmlPlistFile(plist);
type = 'xml';
} catch (err) {
_logger.default.errorAndThrow(`Could not parse plist file '${plist}' as XML: ${err.message}`);
}
if (obj.length) {
obj = obj[0];
} else {
throw new Error(`Binary file '${plist}'' appears to be empty`);
}
if (!quiet) {
_logger.default.debug(`Parsed plist file '${plist}' as ${type}`);
} catch (ign) {
try {
obj = await parseXmlPlistFile(plist);
type = 'xml';
} catch (err) {
_logger.default.errorAndThrow(`Could not parse plist file '${plist}' as XML: ${err.message}`);
}
}
return obj;
});
return _parsePlistFile.apply(this, arguments);
}
if (!quiet) {
_logger.default.debug(`Parsed plist file '${plist}' as ${type}`);
}
function updatePlistFile(_x3, _x4) {
return _updatePlistFile.apply(this, arguments);
return obj;
}
function _updatePlistFile() {
_updatePlistFile = (0, _asyncToGenerator2.default)(function* (plist, updatedFields, binary = true, mustExist = true, quiet = true) {
let obj;
async function updatePlistFile(plist, updatedFields, binary = true, mustExist = true, quiet = true) {
let obj;
try {
obj = yield parsePlistFile(plist, mustExist);
} catch (err) {
_logger.default.errorAndThrow(`Could not update plist: ${err.message}`);
}
try {
obj = await parsePlistFile(plist, mustExist);
} catch (err) {
_logger.default.errorAndThrow(`Could not update plist: ${err.message}`);
}
_lodash.default.extend(obj, updatedFields);
_lodash.default.extend(obj, updatedFields);
let newPlist = binary ? (0, _bplistCreator.default)(obj) : _plist.default.build(obj);
let newPlist = binary ? (0, _bplistCreator.default)(obj) : _plist.default.build(obj);
try {
yield _fs.default.writeFile(plist, newPlist);
} catch (err) {
_logger.default.errorAndThrow(`Could not save plist: ${err.message}`);
}
try {
await _fs.default.writeFile(plist, newPlist);
} catch (err) {
_logger.default.errorAndThrow(`Could not save plist: ${err.message}`);
}
if (!quiet) {
_logger.default.debug(`Wrote plist file '${plist}'`);
}
});
return _updatePlistFile.apply(this, arguments);
if (!quiet) {
_logger.default.debug(`Wrote plist file '${plist}'`);
}
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wbGlzdC5qcyJdLCJuYW1lcyI6WyJwYXJzZUZpbGUiLCJCIiwicHJvbWlzaWZ5IiwiYnBsaXN0UGFyc2UiLCJwYXJzZVhtbFBsaXN0RmlsZSIsInBsaXN0RmlsZW5hbWUiLCJ4bWxDb250ZW50IiwiZnMiLCJyZWFkRmlsZSIsInhtbHBsaXN0IiwicGFyc2UiLCJwYXJzZVBsaXN0RmlsZSIsInBsaXN0IiwibXVzdEV4aXN0IiwicXVpZXQiLCJleGlzdHMiLCJsb2ciLCJlcnJvckFuZFRocm93IiwiZGVidWciLCJvYmoiLCJ0eXBlIiwibGVuZ3RoIiwiRXJyb3IiLCJpZ24iLCJlcnIiLCJtZXNzYWdlIiwidXBkYXRlUGxpc3RGaWxlIiwidXBkYXRlZEZpZWxkcyIsImJpbmFyeSIsIl8iLCJleHRlbmQiLCJuZXdQbGlzdCIsImJ1aWxkIiwid3JpdGVGaWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxJQUFJQSxTQUFTLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLHNCQUFZSCxTQUF4QixDQUFoQjs7U0FHZUksaUI7Ozs7O3VEQUFmLFdBQWtDQyxhQUFsQyxFQUFpRDtBQUMvQyxRQUFJQyxVQUFVLFNBQVNDLFlBQUdDLFFBQUgsQ0FBWUgsYUFBWixFQUEyQixNQUEzQixDQUF2QjtBQUNBLFdBQU9JLGVBQVNDLEtBQVQsQ0FBZUosVUFBZixDQUFQO0FBQ0QsRzs7OztTQUVjSyxjOzs7OztvREFBZixXQUErQkMsS0FBL0IsRUFBc0NDLFNBQVMsR0FBRyxJQUFsRCxFQUF3REMsS0FBSyxHQUFHLElBQWhFLEVBQXNFO0FBRXBFLFFBQUksUUFBT1AsWUFBR1EsTUFBSCxDQUFVSCxLQUFWLENBQVAsQ0FBSixFQUE2QjtBQUMzQixVQUFJQyxTQUFKLEVBQWU7QUFDYkcsd0JBQUlDLGFBQUosQ0FBbUIsOEJBQTZCTCxLQUFNLEdBQXREO0FBQ0QsT0FGRCxNQUVPO0FBQ0xJLHdCQUFJRSxLQUFKLENBQVcsZUFBY04sS0FBTSw2Q0FBL0I7O0FBQ0EsZUFBTyxFQUFQO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJTyxHQUFHLEdBQUcsRUFBVjtBQUNBLFFBQUlDLElBQUksR0FBRyxRQUFYOztBQUNBLFFBQUk7QUFDRkQsTUFBQUEsR0FBRyxTQUFTbkIsU0FBUyxDQUFDWSxLQUFELENBQXJCOztBQUNBLFVBQUlPLEdBQUcsQ0FBQ0UsTUFBUixFQUFnQjtBQUNkRixRQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQyxDQUFELENBQVQ7QUFDRCxPQUZELE1BRU87QUFDTCxjQUFNLElBQUlHLEtBQUosQ0FBVyxnQkFBZVYsS0FBTSx3QkFBaEMsQ0FBTjtBQUNEO0FBQ0YsS0FQRCxDQU9FLE9BQU9XLEdBQVAsRUFBWTtBQUNaLFVBQUk7QUFDRkosUUFBQUEsR0FBRyxTQUFTZixpQkFBaUIsQ0FBQ1EsS0FBRCxDQUE3QjtBQUNBUSxRQUFBQSxJQUFJLEdBQUcsS0FBUDtBQUNELE9BSEQsQ0FHRSxPQUFPSSxHQUFQLEVBQVk7QUFDWlIsd0JBQUlDLGFBQUosQ0FBbUIsK0JBQThCTCxLQUFNLGFBQVlZLEdBQUcsQ0FBQ0MsT0FBUSxFQUEvRTtBQUNEO0FBQ0Y7O0FBRUQsUUFBSSxDQUFDWCxLQUFMLEVBQVk7QUFDVkUsc0JBQUlFLEtBQUosQ0FBVyxzQkFBcUJOLEtBQU0sUUFBT1EsSUFBSyxFQUFsRDtBQUNEOztBQUNELFdBQU9ELEdBQVA7QUFDRCxHOzs7O1NBRWNPLGU7Ozs7O3FEQUFmLFdBQWdDZCxLQUFoQyxFQUF1Q2UsYUFBdkMsRUFBc0RDLE1BQU0sR0FBRyxJQUEvRCxFQUFxRWYsU0FBUyxHQUFHLElBQWpGLEVBQXVGQyxLQUFLLEdBQUcsSUFBL0YsRUFBcUc7QUFDbkcsUUFBSUssR0FBSjs7QUFDQSxRQUFJO0FBQ0ZBLE1BQUFBLEdBQUcsU0FBU1IsY0FBYyxDQUFDQyxLQUFELEVBQVFDLFNBQVIsQ0FBMUI7QUFDRCxLQUZELENBRUUsT0FBT1csR0FBUCxFQUFZO0FBQ1pSLHNCQUFJQyxhQUFKLENBQW1CLDJCQUEwQk8sR0FBRyxDQUFDQyxPQUFRLEVBQXpEO0FBQ0Q7O0FBQ0RJLG9CQUFFQyxNQUFGLENBQVNYLEdBQVQsRUFBY1EsYUFBZDs7QUFDQSxRQUFJSSxRQUFRLEdBQUdILE1BQU0sR0FBRyw0QkFBYVQsR0FBYixDQUFILEdBQXVCVixlQUFTdUIsS0FBVCxDQUFlYixHQUFmLENBQTVDOztBQUNBLFFBQUk7QUFDRixZQUFNWixZQUFHMEIsU0FBSCxDQUFhckIsS0FBYixFQUFvQm1CLFFBQXBCLENBQU47QUFDRCxLQUZELENBRUUsT0FBT1AsR0FBUCxFQUFZO0FBQ1pSLHNCQUFJQyxhQUFKLENBQW1CLHlCQUF3Qk8sR0FBRyxDQUFDQyxPQUFRLEVBQXZEO0FBQ0Q7O0FBQ0QsUUFBSSxDQUFDWCxLQUFMLEVBQVk7QUFDVkUsc0JBQUlFLEtBQUosQ0FBVyxxQkFBb0JOLEtBQU0sR0FBckM7QUFDRDtBQUNGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeG1scGxpc3QgZnJvbSAncGxpc3QnO1xuaW1wb3J0IGJwbGlzdENyZWF0ZSBmcm9tICdicGxpc3QtY3JlYXRvcic7XG5pbXBvcnQgYnBsaXN0UGFyc2UgZnJvbSAnYnBsaXN0LXBhcnNlcic7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cblxubGV0IHBhcnNlRmlsZSA9IEIucHJvbWlzaWZ5KGJwbGlzdFBhcnNlLnBhcnNlRmlsZSk7XG5cbi8vIFhNTCBQbGlzdCBsaWJyYXJ5IGhlbHBlclxuYXN5bmMgZnVuY3Rpb24gcGFyc2VYbWxQbGlzdEZpbGUgKHBsaXN0RmlsZW5hbWUpIHtcbiAgbGV0IHhtbENvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwbGlzdEZpbGVuYW1lLCAndXRmOCcpO1xuICByZXR1cm4geG1scGxpc3QucGFyc2UoeG1sQ29udGVudCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUGxpc3RGaWxlIChwbGlzdCwgbXVzdEV4aXN0ID0gdHJ1ZSwgcXVpZXQgPSB0cnVlKSB7XG4gIC8vIGhhbmRsZSBub25leGlzdGFudCBmaWxlXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0KSkge1xuICAgIGlmIChtdXN0RXhpc3QpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBQbGlzdCBmaWxlIGRvZXNuJ3QgZXhpc3Q6ICcke3BsaXN0fSdgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKGBQbGlzdCBmaWxlICcke3BsaXN0fScgZG9lcyBub3QgZXhpc3QuIFJldHVybmluZyBhbiBlbXB0eSBwbGlzdC5gKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBsZXQgb2JqID0ge307XG4gIGxldCB0eXBlID0gJ2JpbmFyeSc7XG4gIHRyeSB7XG4gICAgb2JqID0gYXdhaXQgcGFyc2VGaWxlKHBsaXN0KTtcbiAgICBpZiAob2JqLmxlbmd0aCkge1xuICAgICAgb2JqID0gb2JqWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJpbmFyeSBmaWxlICcke3BsaXN0fScnIGFwcGVhcnMgdG8gYmUgZW1wdHlgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIHRyeSB7XG4gICAgICBvYmogPSBhd2FpdCBwYXJzZVhtbFBsaXN0RmlsZShwbGlzdCk7XG4gICAgICB0eXBlID0gJ3htbCc7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIHBsaXN0IGZpbGUgJyR7cGxpc3R9JyBhcyBYTUw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFxdWlldCkge1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIHBsaXN0IGZpbGUgJyR7cGxpc3R9JyBhcyAke3R5cGV9YCk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGxpc3RGaWxlIChwbGlzdCwgdXBkYXRlZEZpZWxkcywgYmluYXJ5ID0gdHJ1ZSwgbXVzdEV4aXN0ID0gdHJ1ZSwgcXVpZXQgPSB0cnVlKSB7XG4gIGxldCBvYmo7XG4gIHRyeSB7XG4gICAgb2JqID0gYXdhaXQgcGFyc2VQbGlzdEZpbGUocGxpc3QsIG11c3RFeGlzdCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgdXBkYXRlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIF8uZXh0ZW5kKG9iaiwgdXBkYXRlZEZpZWxkcyk7XG4gIGxldCBuZXdQbGlzdCA9IGJpbmFyeSA/IGJwbGlzdENyZWF0ZShvYmopIDogeG1scGxpc3QuYnVpbGQob2JqKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGxpc3QsIG5ld1BsaXN0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBzYXZlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIGlmICghcXVpZXQpIHtcbiAgICBsb2cuZGVidWcoYFdyb3RlIHBsaXN0IGZpbGUgJyR7cGxpc3R9J2ApO1xuICB9XG59XG5cbmV4cG9ydCB7IHBhcnNlUGxpc3RGaWxlLCB1cGRhdGVQbGlzdEZpbGUgfTtcbiJdLCJmaWxlIjoibGliL3BsaXN0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wbGlzdC5qcyJdLCJuYW1lcyI6WyJwYXJzZUZpbGUiLCJCIiwicHJvbWlzaWZ5IiwiYnBsaXN0UGFyc2UiLCJwYXJzZVhtbFBsaXN0RmlsZSIsInBsaXN0RmlsZW5hbWUiLCJ4bWxDb250ZW50IiwiZnMiLCJyZWFkRmlsZSIsInhtbHBsaXN0IiwicGFyc2UiLCJwYXJzZVBsaXN0RmlsZSIsInBsaXN0IiwibXVzdEV4aXN0IiwicXVpZXQiLCJleGlzdHMiLCJsb2ciLCJlcnJvckFuZFRocm93IiwiZGVidWciLCJvYmoiLCJ0eXBlIiwibGVuZ3RoIiwiRXJyb3IiLCJpZ24iLCJlcnIiLCJtZXNzYWdlIiwidXBkYXRlUGxpc3RGaWxlIiwidXBkYXRlZEZpZWxkcyIsImJpbmFyeSIsIl8iLCJleHRlbmQiLCJuZXdQbGlzdCIsImJ1aWxkIiwid3JpdGVGaWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxJQUFJQSxTQUFTLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLHNCQUFZSCxTQUF4QixDQUFoQjs7QUFHQSxlQUFlSSxpQkFBZixDQUFrQ0MsYUFBbEMsRUFBaUQ7QUFDL0MsTUFBSUMsVUFBVSxHQUFHLE1BQU1DLFlBQUdDLFFBQUgsQ0FBWUgsYUFBWixFQUEyQixNQUEzQixDQUF2QjtBQUNBLFNBQU9JLGVBQVNDLEtBQVQsQ0FBZUosVUFBZixDQUFQO0FBQ0Q7O0FBRUQsZUFBZUssY0FBZixDQUErQkMsS0FBL0IsRUFBc0NDLFNBQVMsR0FBRyxJQUFsRCxFQUF3REMsS0FBSyxHQUFHLElBQWhFLEVBQXNFO0FBRXBFLE1BQUksRUFBQyxNQUFNUCxZQUFHUSxNQUFILENBQVVILEtBQVYsQ0FBUCxDQUFKLEVBQTZCO0FBQzNCLFFBQUlDLFNBQUosRUFBZTtBQUNiRyxzQkFBSUMsYUFBSixDQUFtQiw4QkFBNkJMLEtBQU0sR0FBdEQ7QUFDRCxLQUZELE1BRU87QUFDTEksc0JBQUlFLEtBQUosQ0FBVyxlQUFjTixLQUFNLDZDQUEvQjs7QUFDQSxhQUFPLEVBQVA7QUFDRDtBQUNGOztBQUVELE1BQUlPLEdBQUcsR0FBRyxFQUFWO0FBQ0EsTUFBSUMsSUFBSSxHQUFHLFFBQVg7O0FBQ0EsTUFBSTtBQUNGRCxJQUFBQSxHQUFHLEdBQUcsTUFBTW5CLFNBQVMsQ0FBQ1ksS0FBRCxDQUFyQjs7QUFDQSxRQUFJTyxHQUFHLENBQUNFLE1BQVIsRUFBZ0I7QUFDZEYsTUFBQUEsR0FBRyxHQUFHQSxHQUFHLENBQUMsQ0FBRCxDQUFUO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsWUFBTSxJQUFJRyxLQUFKLENBQVcsZ0JBQWVWLEtBQU0sd0JBQWhDLENBQU47QUFDRDtBQUNGLEdBUEQsQ0FPRSxPQUFPVyxHQUFQLEVBQVk7QUFDWixRQUFJO0FBQ0ZKLE1BQUFBLEdBQUcsR0FBRyxNQUFNZixpQkFBaUIsQ0FBQ1EsS0FBRCxDQUE3QjtBQUNBUSxNQUFBQSxJQUFJLEdBQUcsS0FBUDtBQUNELEtBSEQsQ0FHRSxPQUFPSSxHQUFQLEVBQVk7QUFDWlIsc0JBQUlDLGFBQUosQ0FBbUIsK0JBQThCTCxLQUFNLGFBQVlZLEdBQUcsQ0FBQ0MsT0FBUSxFQUEvRTtBQUNEO0FBQ0Y7O0FBRUQsTUFBSSxDQUFDWCxLQUFMLEVBQVk7QUFDVkUsb0JBQUlFLEtBQUosQ0FBVyxzQkFBcUJOLEtBQU0sUUFBT1EsSUFBSyxFQUFsRDtBQUNEOztBQUNELFNBQU9ELEdBQVA7QUFDRDs7QUFFRCxlQUFlTyxlQUFmLENBQWdDZCxLQUFoQyxFQUF1Q2UsYUFBdkMsRUFBc0RDLE1BQU0sR0FBRyxJQUEvRCxFQUFxRWYsU0FBUyxHQUFHLElBQWpGLEVBQXVGQyxLQUFLLEdBQUcsSUFBL0YsRUFBcUc7QUFDbkcsTUFBSUssR0FBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLEdBQUcsR0FBRyxNQUFNUixjQUFjLENBQUNDLEtBQUQsRUFBUUMsU0FBUixDQUExQjtBQUNELEdBRkQsQ0FFRSxPQUFPVyxHQUFQLEVBQVk7QUFDWlIsb0JBQUlDLGFBQUosQ0FBbUIsMkJBQTBCTyxHQUFHLENBQUNDLE9BQVEsRUFBekQ7QUFDRDs7QUFDREksa0JBQUVDLE1BQUYsQ0FBU1gsR0FBVCxFQUFjUSxhQUFkOztBQUNBLE1BQUlJLFFBQVEsR0FBR0gsTUFBTSxHQUFHLDRCQUFhVCxHQUFiLENBQUgsR0FBdUJWLGVBQVN1QixLQUFULENBQWViLEdBQWYsQ0FBNUM7O0FBQ0EsTUFBSTtBQUNGLFVBQU1aLFlBQUcwQixTQUFILENBQWFyQixLQUFiLEVBQW9CbUIsUUFBcEIsQ0FBTjtBQUNELEdBRkQsQ0FFRSxPQUFPUCxHQUFQLEVBQVk7QUFDWlIsb0JBQUlDLGFBQUosQ0FBbUIseUJBQXdCTyxHQUFHLENBQUNDLE9BQVEsRUFBdkQ7QUFDRDs7QUFDRCxNQUFJLENBQUNYLEtBQUwsRUFBWTtBQUNWRSxvQkFBSUUsS0FBSixDQUFXLHFCQUFvQk4sS0FBTSxHQUFyQztBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeG1scGxpc3QgZnJvbSAncGxpc3QnO1xuaW1wb3J0IGJwbGlzdENyZWF0ZSBmcm9tICdicGxpc3QtY3JlYXRvcic7XG5pbXBvcnQgYnBsaXN0UGFyc2UgZnJvbSAnYnBsaXN0LXBhcnNlcic7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cblxubGV0IHBhcnNlRmlsZSA9IEIucHJvbWlzaWZ5KGJwbGlzdFBhcnNlLnBhcnNlRmlsZSk7XG5cbi8vIFhNTCBQbGlzdCBsaWJyYXJ5IGhlbHBlclxuYXN5bmMgZnVuY3Rpb24gcGFyc2VYbWxQbGlzdEZpbGUgKHBsaXN0RmlsZW5hbWUpIHtcbiAgbGV0IHhtbENvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwbGlzdEZpbGVuYW1lLCAndXRmOCcpO1xuICByZXR1cm4geG1scGxpc3QucGFyc2UoeG1sQ29udGVudCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUGxpc3RGaWxlIChwbGlzdCwgbXVzdEV4aXN0ID0gdHJ1ZSwgcXVpZXQgPSB0cnVlKSB7XG4gIC8vIGhhbmRsZSBub25leGlzdGFudCBmaWxlXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0KSkge1xuICAgIGlmIChtdXN0RXhpc3QpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBQbGlzdCBmaWxlIGRvZXNuJ3QgZXhpc3Q6ICcke3BsaXN0fSdgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKGBQbGlzdCBmaWxlICcke3BsaXN0fScgZG9lcyBub3QgZXhpc3QuIFJldHVybmluZyBhbiBlbXB0eSBwbGlzdC5gKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBsZXQgb2JqID0ge307XG4gIGxldCB0eXBlID0gJ2JpbmFyeSc7XG4gIHRyeSB7XG4gICAgb2JqID0gYXdhaXQgcGFyc2VGaWxlKHBsaXN0KTtcbiAgICBpZiAob2JqLmxlbmd0aCkge1xuICAgICAgb2JqID0gb2JqWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJpbmFyeSBmaWxlICcke3BsaXN0fScnIGFwcGVhcnMgdG8gYmUgZW1wdHlgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIHRyeSB7XG4gICAgICBvYmogPSBhd2FpdCBwYXJzZVhtbFBsaXN0RmlsZShwbGlzdCk7XG4gICAgICB0eXBlID0gJ3htbCc7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IHBhcnNlIHBsaXN0IGZpbGUgJyR7cGxpc3R9JyBhcyBYTUw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFxdWlldCkge1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIHBsaXN0IGZpbGUgJyR7cGxpc3R9JyBhcyAke3R5cGV9YCk7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGxpc3RGaWxlIChwbGlzdCwgdXBkYXRlZEZpZWxkcywgYmluYXJ5ID0gdHJ1ZSwgbXVzdEV4aXN0ID0gdHJ1ZSwgcXVpZXQgPSB0cnVlKSB7XG4gIGxldCBvYmo7XG4gIHRyeSB7XG4gICAgb2JqID0gYXdhaXQgcGFyc2VQbGlzdEZpbGUocGxpc3QsIG11c3RFeGlzdCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgdXBkYXRlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIF8uZXh0ZW5kKG9iaiwgdXBkYXRlZEZpZWxkcyk7XG4gIGxldCBuZXdQbGlzdCA9IGJpbmFyeSA/IGJwbGlzdENyZWF0ZShvYmopIDogeG1scGxpc3QuYnVpbGQob2JqKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGxpc3QsIG5ld1BsaXN0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBzYXZlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIGlmICghcXVpZXQpIHtcbiAgICBsb2cuZGVidWcoYFdyb3RlIHBsaXN0IGZpbGUgJyR7cGxpc3R9J2ApO1xuICB9XG59XG5cbmV4cG9ydCB7IHBhcnNlUGxpc3RGaWxlLCB1cGRhdGVQbGlzdEZpbGUgfTtcbiJdLCJmaWxlIjoibGliL3BsaXN0LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {

@@ -11,58 +9,44 @@ value: true

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");
var _teen_process = require("teen_process");
function getProcessIds(_x) {
return _getProcessIds.apply(this, arguments);
}
async function getProcessIds(appName) {
let pids;
function _getProcessIds() {
_getProcessIds = (0, _asyncToGenerator2.default)(function* (appName) {
let pids;
try {
let _ref = yield (0, _teen_process.exec)('pgrep', ['-x', appName]),
stdout = _ref.stdout;
pids = stdout.trim().split('\n').map(pid => parseInt(pid, 10));
} catch (err) {
if (parseInt(err.code, 10) !== 1) {
throw new Error(`Error getting process ids for app '${appName}': ${err.message}`);
}
pids = [];
try {
let {
stdout
} = await (0, _teen_process.exec)('pgrep', ['-x', appName]);
pids = stdout.trim().split('\n').map(pid => parseInt(pid, 10));
} catch (err) {
if (parseInt(err.code, 10) !== 1) {
throw new Error(`Error getting process ids for app '${appName}': ${err.message}`);
}
return pids;
});
return _getProcessIds.apply(this, arguments);
}
pids = [];
}
function killProcess(_x2) {
return _killProcess.apply(this, arguments);
return pids;
}
function _killProcess() {
_killProcess = (0, _asyncToGenerator2.default)(function* (appName, force = false) {
let pids = yield getProcessIds(appName);
async function killProcess(appName, force = false) {
let pids = await getProcessIds(appName);
if (pids.length === 0) {
return;
}
if (pids.length === 0) {
return;
}
try {
let args = force ? ['-9'] : [];
args.push('-x', appName);
yield (0, _teen_process.exec)('pkill', args);
} catch (err) {
if (parseInt(err.code, 10) !== 1) {
throw new Error(`Error killing app '${appName}' with pkill: ${err.message}`);
}
try {
let args = force ? ['-9'] : [];
args.push('-x', appName);
await (0, _teen_process.exec)('pkill', args);
} catch (err) {
if (parseInt(err.code, 10) !== 1) {
throw new Error(`Error killing app '${appName}' with pkill: ${err.message}`);
}
});
return _killProcess.apply(this, arguments);
}
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm9jZXNzLmpzIl0sIm5hbWVzIjpbImdldFByb2Nlc3NJZHMiLCJhcHBOYW1lIiwicGlkcyIsInN0ZG91dCIsInRyaW0iLCJzcGxpdCIsIm1hcCIsInBpZCIsInBhcnNlSW50IiwiZXJyIiwiY29kZSIsIkVycm9yIiwibWVzc2FnZSIsImtpbGxQcm9jZXNzIiwiZm9yY2UiLCJsZW5ndGgiLCJhcmdzIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O1NBV2VBLGE7Ozs7O21EQUFmLFdBQThCQyxPQUE5QixFQUF1QztBQUNyQyxRQUFJQyxJQUFKOztBQUNBLFFBQUk7QUFBQSx1QkFDbUIsd0JBQUssT0FBTCxFQUFjLENBQUMsSUFBRCxFQUFPRCxPQUFQLENBQWQsQ0FEbkI7QUFBQSxVQUNHRSxNQURILFFBQ0dBLE1BREg7O0FBRUZELE1BQUFBLElBQUksR0FBR0MsTUFBTSxDQUFDQyxJQUFQLEdBQWNDLEtBQWQsQ0FBb0IsSUFBcEIsRUFBMEJDLEdBQTFCLENBQStCQyxHQUFELElBQVNDLFFBQVEsQ0FBQ0QsR0FBRCxFQUFNLEVBQU4sQ0FBL0MsQ0FBUDtBQUNELEtBSEQsQ0FHRSxPQUFPRSxHQUFQLEVBQVk7QUFDWixVQUFJRCxRQUFRLENBQUNDLEdBQUcsQ0FBQ0MsSUFBTCxFQUFXLEVBQVgsQ0FBUixLQUEyQixDQUEvQixFQUFrQztBQUNoQyxjQUFNLElBQUlDLEtBQUosQ0FBVyxzQ0FBcUNWLE9BQVEsTUFBS1EsR0FBRyxDQUFDRyxPQUFRLEVBQXpFLENBQU47QUFDRDs7QUFDRFYsTUFBQUEsSUFBSSxHQUFHLEVBQVA7QUFDRDs7QUFDRCxXQUFPQSxJQUFQO0FBQ0QsRzs7OztTQUVjVyxXOzs7OztpREFBZixXQUE0QlosT0FBNUIsRUFBcUNhLEtBQUssR0FBRyxLQUE3QyxFQUFvRDtBQUNsRCxRQUFJWixJQUFJLFNBQVNGLGFBQWEsQ0FBQ0MsT0FBRCxDQUE5Qjs7QUFDQSxRQUFJQyxJQUFJLENBQUNhLE1BQUwsS0FBZ0IsQ0FBcEIsRUFBdUI7QUFFckI7QUFDRDs7QUFFRCxRQUFJO0FBQ0YsVUFBSUMsSUFBSSxHQUFHRixLQUFLLEdBQUcsQ0FBQyxJQUFELENBQUgsR0FBWSxFQUE1QjtBQUNBRSxNQUFBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSxJQUFWLEVBQWdCaEIsT0FBaEI7QUFDQSxZQUFNLHdCQUFLLE9BQUwsRUFBY2UsSUFBZCxDQUFOO0FBQ0QsS0FKRCxDQUlFLE9BQU9QLEdBQVAsRUFBWTtBQUNaLFVBQUlELFFBQVEsQ0FBQ0MsR0FBRyxDQUFDQyxJQUFMLEVBQVcsRUFBWCxDQUFSLEtBQTJCLENBQS9CLEVBQWtDO0FBQ2hDLGNBQU0sSUFBSUMsS0FBSixDQUFXLHNCQUFxQlYsT0FBUSxpQkFBZ0JRLEdBQUcsQ0FBQ0csT0FBUSxFQUFwRSxDQUFOO0FBQ0Q7QUFDRjtBQUNGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuXG4vKlxuICogRXhpdCBTdGF0dXMgZm9yIHBncmVwIGFuZCBwa2lsbCAoYG1hbiBwa2lsbGApXG4gKiAgMC4gT25lIG9yIG1vcmUgcHJvY2Vzc2VzIG1hdGNoZWQgdGhlIGNyaXRlcmlhLlxuICogIDEuIE5vIHByb2Nlc3NlcyBtYXRjaGVkLlxuICogIDIuIFN5bnRheCBlcnJvciBpbiB0aGUgY29tbWFuZCBsaW5lLlxuICogIDMuIEZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGV0Yy5cbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBnZXRQcm9jZXNzSWRzIChhcHBOYW1lKSB7XG4gIGxldCBwaWRzO1xuICB0cnkge1xuICAgIGxldCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3BncmVwJywgWycteCcsIGFwcE5hbWVdKTtcbiAgICBwaWRzID0gc3Rkb3V0LnRyaW0oKS5zcGxpdCgnXFxuJykubWFwKChwaWQpID0+IHBhcnNlSW50KHBpZCwgMTApKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHBhcnNlSW50KGVyci5jb2RlLCAxMCkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZ2V0dGluZyBwcm9jZXNzIGlkcyBmb3IgYXBwICcke2FwcE5hbWV9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgcGlkcyA9IFtdO1xuICB9XG4gIHJldHVybiBwaWRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBraWxsUHJvY2VzcyAoYXBwTmFtZSwgZm9yY2UgPSBmYWxzZSkge1xuICBsZXQgcGlkcyA9IGF3YWl0IGdldFByb2Nlc3NJZHMoYXBwTmFtZSk7XG4gIGlmIChwaWRzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIHRoZSBwcm9jZXNzIGlzIG5vdCBydW5uaW5nXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsZXQgYXJncyA9IGZvcmNlID8gWyctOSddIDogW107XG4gICAgYXJncy5wdXNoKCcteCcsIGFwcE5hbWUpO1xuICAgIGF3YWl0IGV4ZWMoJ3BraWxsJywgYXJncyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChwYXJzZUludChlcnIuY29kZSwgMTApICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGtpbGxpbmcgYXBwICcke2FwcE5hbWV9JyB3aXRoIHBraWxsOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBnZXRQcm9jZXNzSWRzLCBraWxsUHJvY2VzcyB9O1xuIl0sImZpbGUiOiJsaWIvcHJvY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9wcm9jZXNzLmpzIl0sIm5hbWVzIjpbImdldFByb2Nlc3NJZHMiLCJhcHBOYW1lIiwicGlkcyIsInN0ZG91dCIsInRyaW0iLCJzcGxpdCIsIm1hcCIsInBpZCIsInBhcnNlSW50IiwiZXJyIiwiY29kZSIsIkVycm9yIiwibWVzc2FnZSIsImtpbGxQcm9jZXNzIiwiZm9yY2UiLCJsZW5ndGgiLCJhcmdzIiwicHVzaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQVdBLGVBQWVBLGFBQWYsQ0FBOEJDLE9BQTlCLEVBQXVDO0FBQ3JDLE1BQUlDLElBQUo7O0FBQ0EsTUFBSTtBQUNGLFFBQUk7QUFBQ0MsTUFBQUE7QUFBRCxRQUFXLE1BQU0sd0JBQUssT0FBTCxFQUFjLENBQUMsSUFBRCxFQUFPRixPQUFQLENBQWQsQ0FBckI7QUFDQUMsSUFBQUEsSUFBSSxHQUFHQyxNQUFNLENBQUNDLElBQVAsR0FBY0MsS0FBZCxDQUFvQixJQUFwQixFQUEwQkMsR0FBMUIsQ0FBK0JDLEdBQUQsSUFBU0MsUUFBUSxDQUFDRCxHQUFELEVBQU0sRUFBTixDQUEvQyxDQUFQO0FBQ0QsR0FIRCxDQUdFLE9BQU9FLEdBQVAsRUFBWTtBQUNaLFFBQUlELFFBQVEsQ0FBQ0MsR0FBRyxDQUFDQyxJQUFMLEVBQVcsRUFBWCxDQUFSLEtBQTJCLENBQS9CLEVBQWtDO0FBQ2hDLFlBQU0sSUFBSUMsS0FBSixDQUFXLHNDQUFxQ1YsT0FBUSxNQUFLUSxHQUFHLENBQUNHLE9BQVEsRUFBekUsQ0FBTjtBQUNEOztBQUNEVixJQUFBQSxJQUFJLEdBQUcsRUFBUDtBQUNEOztBQUNELFNBQU9BLElBQVA7QUFDRDs7QUFFRCxlQUFlVyxXQUFmLENBQTRCWixPQUE1QixFQUFxQ2EsS0FBSyxHQUFHLEtBQTdDLEVBQW9EO0FBQ2xELE1BQUlaLElBQUksR0FBRyxNQUFNRixhQUFhLENBQUNDLE9BQUQsQ0FBOUI7O0FBQ0EsTUFBSUMsSUFBSSxDQUFDYSxNQUFMLEtBQWdCLENBQXBCLEVBQXVCO0FBRXJCO0FBQ0Q7O0FBRUQsTUFBSTtBQUNGLFFBQUlDLElBQUksR0FBR0YsS0FBSyxHQUFHLENBQUMsSUFBRCxDQUFILEdBQVksRUFBNUI7QUFDQUUsSUFBQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsSUFBVixFQUFnQmhCLE9BQWhCO0FBQ0EsVUFBTSx3QkFBSyxPQUFMLEVBQWNlLElBQWQsQ0FBTjtBQUNELEdBSkQsQ0FJRSxPQUFPUCxHQUFQLEVBQVk7QUFDWixRQUFJRCxRQUFRLENBQUNDLEdBQUcsQ0FBQ0MsSUFBTCxFQUFXLEVBQVgsQ0FBUixLQUEyQixDQUEvQixFQUFrQztBQUNoQyxZQUFNLElBQUlDLEtBQUosQ0FBVyxzQkFBcUJWLE9BQVEsaUJBQWdCUSxHQUFHLENBQUNHLE9BQVEsRUFBcEUsQ0FBTjtBQUNEO0FBQ0Y7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuXG5cbi8qXG4gKiBFeGl0IFN0YXR1cyBmb3IgcGdyZXAgYW5kIHBraWxsIChgbWFuIHBraWxsYClcbiAqICAwLiBPbmUgb3IgbW9yZSBwcm9jZXNzZXMgbWF0Y2hlZCB0aGUgY3JpdGVyaWEuXG4gKiAgMS4gTm8gcHJvY2Vzc2VzIG1hdGNoZWQuXG4gKiAgMi4gU3ludGF4IGVycm9yIGluIHRoZSBjb21tYW5kIGxpbmUuXG4gKiAgMy4gRmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkgZXRjLlxuICovXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByb2Nlc3NJZHMgKGFwcE5hbWUpIHtcbiAgbGV0IHBpZHM7XG4gIHRyeSB7XG4gICAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygncGdyZXAnLCBbJy14JywgYXBwTmFtZV0pO1xuICAgIHBpZHMgPSBzdGRvdXQudHJpbSgpLnNwbGl0KCdcXG4nKS5tYXAoKHBpZCkgPT4gcGFyc2VJbnQocGlkLCAxMCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAocGFyc2VJbnQoZXJyLmNvZGUsIDEwKSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBnZXR0aW5nIHByb2Nlc3MgaWRzIGZvciBhcHAgJyR7YXBwTmFtZX0nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBwaWRzID0gW107XG4gIH1cbiAgcmV0dXJuIHBpZHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGtpbGxQcm9jZXNzIChhcHBOYW1lLCBmb3JjZSA9IGZhbHNlKSB7XG4gIGxldCBwaWRzID0gYXdhaXQgZ2V0UHJvY2Vzc0lkcyhhcHBOYW1lKTtcbiAgaWYgKHBpZHMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gdGhlIHByb2Nlc3MgaXMgbm90IHJ1bm5pbmdcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGxldCBhcmdzID0gZm9yY2UgPyBbJy05J10gOiBbXTtcbiAgICBhcmdzLnB1c2goJy14JywgYXBwTmFtZSk7XG4gICAgYXdhaXQgZXhlYygncGtpbGwnLCBhcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHBhcnNlSW50KGVyci5jb2RlLCAxMCkgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Iga2lsbGluZyBhcHAgJyR7YXBwTmFtZX0nIHdpdGggcGtpbGw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IGdldFByb2Nlc3NJZHMsIGtpbGxQcm9jZXNzIH07XG4iXSwiZmlsZSI6ImxpYi9wcm9jZXNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -15,3 +15,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -40,47 +40,33 @@ var _teen_process = require("teen_process");

function arch() {
return _arch.apply(this, arguments);
async function arch() {
if (isLinux() || isMac()) {
let {
stdout
} = await (0, _teen_process.exec)('uname', ['-m']);
return stdout.trim() === 'i686' ? '32' : '64';
} else if (isWindows()) {
let is64 = this.isOSWin64();
return is64 ? '64' : '32';
}
}
function _arch() {
_arch = (0, _asyncToGenerator2.default)(function* () {
if (isLinux() || isMac()) {
let _ref = yield (0, _teen_process.exec)('uname', ['-m']),
stdout = _ref.stdout;
async function macOsxVersion() {
let stdout;
return stdout.trim() === 'i686' ? '32' : '64';
} else if (isWindows()) {
let is64 = this.isOSWin64();
return is64 ? '64' : '32';
}
});
return _arch.apply(this, arguments);
}
try {
stdout = (await (0, _teen_process.exec)('sw_vers', ['-productVersion'])).stdout.trim();
} catch (err) {
throw new Error(`Could not detect Mac OS X Version: ${err}`);
}
function macOsxVersion() {
return _macOsxVersion.apply(this, arguments);
}
const versionMatch = VERSION_PATTERN.exec(stdout);
function _macOsxVersion() {
_macOsxVersion = (0, _asyncToGenerator2.default)(function* () {
let stdout;
if (!versionMatch) {
throw new Error(`Could not detect Mac OS X Version from sw_vers output: '${stdout}'`);
}
try {
stdout = (yield (0, _teen_process.exec)('sw_vers', ['-productVersion'])).stdout.trim();
} catch (err) {
throw new Error(`Could not detect Mac OS X Version: ${err}`);
}
const versionMatch = VERSION_PATTERN.exec(stdout);
if (!versionMatch) {
throw new Error(`Could not detect Mac OS X Version from sw_vers output: '${stdout}'`);
}
return versionMatch[1];
});
return _macOsxVersion.apply(this, arguments);
return versionMatch[1];
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zeXN0ZW0uanMiXSwibmFtZXMiOlsiVkVSU0lPTl9QQVRURVJOIiwiaXNXaW5kb3dzIiwib3MiLCJ0eXBlIiwiaXNNYWMiLCJpc0xpbnV4IiwiaXNPU1dpbjY0IiwicHJvY2VzcyIsImFyY2giLCJlbnYiLCJoYXNPd25Qcm9wZXJ0eSIsInN0ZG91dCIsInRyaW0iLCJpczY0IiwibWFjT3N4VmVyc2lvbiIsImVyciIsIkVycm9yIiwidmVyc2lvbk1hdGNoIiwiZXhlYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGVBQWUsR0FBRyxjQUF4Qjs7QUFFQSxTQUFTQyxTQUFULEdBQXNCO0FBQ3BCLFNBQU9DLFlBQUdDLElBQUgsT0FBYyxZQUFyQjtBQUNEOztBQUVELFNBQVNDLEtBQVQsR0FBa0I7QUFDaEIsU0FBT0YsWUFBR0MsSUFBSCxPQUFjLFFBQXJCO0FBQ0Q7O0FBRUQsU0FBU0UsT0FBVCxHQUFvQjtBQUNsQixTQUFPLENBQUNKLFNBQVMsRUFBVixJQUFnQixDQUFDRyxLQUFLLEVBQTdCO0FBQ0Q7O0FBRUQsU0FBU0UsU0FBVCxHQUFzQjtBQUNwQixTQUFPQyxPQUFPLENBQUNDLElBQVIsS0FBaUIsS0FBakIsSUFBMEJELE9BQU8sQ0FBQ0UsR0FBUixDQUFZQyxjQUFaLENBQTJCLHdCQUEzQixDQUFqQztBQUNEOztTQUVjRixJOzs7OzswQ0FBZixhQUF1QjtBQUNyQixRQUFJSCxPQUFPLE1BQU1ELEtBQUssRUFBdEIsRUFBMEI7QUFBQSx1QkFDSCx3QkFBSyxPQUFMLEVBQWMsQ0FBQyxJQUFELENBQWQsQ0FERztBQUFBLFVBQ25CTyxNQURtQixRQUNuQkEsTUFEbUI7O0FBRXhCLGFBQU9BLE1BQU0sQ0FBQ0MsSUFBUCxPQUFrQixNQUFsQixHQUEyQixJQUEzQixHQUFrQyxJQUF6QztBQUNELEtBSEQsTUFHTyxJQUFJWCxTQUFTLEVBQWIsRUFBaUI7QUFDdEIsVUFBSVksSUFBSSxHQUFHLEtBQUtQLFNBQUwsRUFBWDtBQUNBLGFBQU9PLElBQUksR0FBRyxJQUFILEdBQVUsSUFBckI7QUFDRDtBQUNGLEc7Ozs7U0FFY0MsYTs7Ozs7bURBQWYsYUFBZ0M7QUFDOUIsUUFBSUgsTUFBSjs7QUFDQSxRQUFJO0FBQ0ZBLE1BQUFBLE1BQU0sR0FBRyxPQUFPLHdCQUFLLFNBQUwsRUFBZ0IsQ0FBQyxpQkFBRCxDQUFoQixDQUFQLEVBQTZDQSxNQUE3QyxDQUFvREMsSUFBcEQsRUFBVDtBQUNELEtBRkQsQ0FFRSxPQUFPRyxHQUFQLEVBQVk7QUFDWixZQUFNLElBQUlDLEtBQUosQ0FBVyxzQ0FBcUNELEdBQUksRUFBcEQsQ0FBTjtBQUNEOztBQUVELFVBQU1FLFlBQVksR0FBR2pCLGVBQWUsQ0FBQ2tCLElBQWhCLENBQXFCUCxNQUFyQixDQUFyQjs7QUFDQSxRQUFJLENBQUNNLFlBQUwsRUFBbUI7QUFDakIsWUFBTSxJQUFJRCxLQUFKLENBQVcsMkRBQTBETCxNQUFPLEdBQTVFLENBQU47QUFDRDs7QUFDRCxXQUFPTSxZQUFZLENBQUMsQ0FBRCxDQUFuQjtBQUNELEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5cbmNvbnN0IFZFUlNJT05fUEFUVEVSTiA9IC9eKFxcZCtcXC5cXGQrKS9tO1xuXG5mdW5jdGlvbiBpc1dpbmRvd3MgKCkge1xuICByZXR1cm4gb3MudHlwZSgpID09PSAnV2luZG93c19OVCc7XG59XG5cbmZ1bmN0aW9uIGlzTWFjICgpIHtcbiAgcmV0dXJuIG9zLnR5cGUoKSA9PT0gJ0Rhcndpbic7XG59XG5cbmZ1bmN0aW9uIGlzTGludXggKCkge1xuICByZXR1cm4gIWlzV2luZG93cygpICYmICFpc01hYygpO1xufVxuXG5mdW5jdGlvbiBpc09TV2luNjQgKCkge1xuICByZXR1cm4gcHJvY2Vzcy5hcmNoID09PSAneDY0JyB8fCBwcm9jZXNzLmVudi5oYXNPd25Qcm9wZXJ0eSgnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMicpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcmNoICgpIHtcbiAgaWYgKGlzTGludXgoKSB8fCBpc01hYygpKSB7XG4gICAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygndW5hbWUnLCBbJy1tJ10pO1xuICAgIHJldHVybiBzdGRvdXQudHJpbSgpID09PSAnaTY4NicgPyAnMzInIDogJzY0JztcbiAgfSBlbHNlIGlmIChpc1dpbmRvd3MoKSkge1xuICAgIGxldCBpczY0ID0gdGhpcy5pc09TV2luNjQoKTtcbiAgICByZXR1cm4gaXM2NCA/ICc2NCcgOiAnMzInO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1hY09zeFZlcnNpb24gKCkge1xuICBsZXQgc3Rkb3V0O1xuICB0cnkge1xuICAgIHN0ZG91dCA9IChhd2FpdCBleGVjKCdzd192ZXJzJywgWyctcHJvZHVjdFZlcnNpb24nXSkpLnN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVjdCBNYWMgT1MgWCBWZXJzaW9uOiAke2Vycn1gKTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb25NYXRjaCA9IFZFUlNJT05fUEFUVEVSTi5leGVjKHN0ZG91dCk7XG4gIGlmICghdmVyc2lvbk1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZWN0IE1hYyBPUyBYIFZlcnNpb24gZnJvbSBzd192ZXJzIG91dHB1dDogJyR7c3Rkb3V0fSdgKTtcbiAgfVxuICByZXR1cm4gdmVyc2lvbk1hdGNoWzFdO1xufVxuXG5leHBvcnQgeyBpc1dpbmRvd3MsIGlzTWFjLCBpc0xpbnV4LCBpc09TV2luNjQsIGFyY2gsIG1hY09zeFZlcnNpb24gfTtcbiJdLCJmaWxlIjoibGliL3N5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zeXN0ZW0uanMiXSwibmFtZXMiOlsiVkVSU0lPTl9QQVRURVJOIiwiaXNXaW5kb3dzIiwib3MiLCJ0eXBlIiwiaXNNYWMiLCJpc0xpbnV4IiwiaXNPU1dpbjY0IiwicHJvY2VzcyIsImFyY2giLCJlbnYiLCJoYXNPd25Qcm9wZXJ0eSIsInN0ZG91dCIsInRyaW0iLCJpczY0IiwibWFjT3N4VmVyc2lvbiIsImVyciIsIkVycm9yIiwidmVyc2lvbk1hdGNoIiwiZXhlYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUVBLE1BQU1BLGVBQWUsR0FBRyxjQUF4Qjs7QUFFQSxTQUFTQyxTQUFULEdBQXNCO0FBQ3BCLFNBQU9DLFlBQUdDLElBQUgsT0FBYyxZQUFyQjtBQUNEOztBQUVELFNBQVNDLEtBQVQsR0FBa0I7QUFDaEIsU0FBT0YsWUFBR0MsSUFBSCxPQUFjLFFBQXJCO0FBQ0Q7O0FBRUQsU0FBU0UsT0FBVCxHQUFvQjtBQUNsQixTQUFPLENBQUNKLFNBQVMsRUFBVixJQUFnQixDQUFDRyxLQUFLLEVBQTdCO0FBQ0Q7O0FBRUQsU0FBU0UsU0FBVCxHQUFzQjtBQUNwQixTQUFPQyxPQUFPLENBQUNDLElBQVIsS0FBaUIsS0FBakIsSUFBMEJELE9BQU8sQ0FBQ0UsR0FBUixDQUFZQyxjQUFaLENBQTJCLHdCQUEzQixDQUFqQztBQUNEOztBQUVELGVBQWVGLElBQWYsR0FBdUI7QUFDckIsTUFBSUgsT0FBTyxNQUFNRCxLQUFLLEVBQXRCLEVBQTBCO0FBQ3hCLFFBQUk7QUFBQ08sTUFBQUE7QUFBRCxRQUFXLE1BQU0sd0JBQUssT0FBTCxFQUFjLENBQUMsSUFBRCxDQUFkLENBQXJCO0FBQ0EsV0FBT0EsTUFBTSxDQUFDQyxJQUFQLE9BQWtCLE1BQWxCLEdBQTJCLElBQTNCLEdBQWtDLElBQXpDO0FBQ0QsR0FIRCxNQUdPLElBQUlYLFNBQVMsRUFBYixFQUFpQjtBQUN0QixRQUFJWSxJQUFJLEdBQUcsS0FBS1AsU0FBTCxFQUFYO0FBQ0EsV0FBT08sSUFBSSxHQUFHLElBQUgsR0FBVSxJQUFyQjtBQUNEO0FBQ0Y7O0FBRUQsZUFBZUMsYUFBZixHQUFnQztBQUM5QixNQUFJSCxNQUFKOztBQUNBLE1BQUk7QUFDRkEsSUFBQUEsTUFBTSxHQUFHLENBQUMsTUFBTSx3QkFBSyxTQUFMLEVBQWdCLENBQUMsaUJBQUQsQ0FBaEIsQ0FBUCxFQUE2Q0EsTUFBN0MsQ0FBb0RDLElBQXBELEVBQVQ7QUFDRCxHQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0FBQ1osVUFBTSxJQUFJQyxLQUFKLENBQVcsc0NBQXFDRCxHQUFJLEVBQXBELENBQU47QUFDRDs7QUFFRCxRQUFNRSxZQUFZLEdBQUdqQixlQUFlLENBQUNrQixJQUFoQixDQUFxQlAsTUFBckIsQ0FBckI7O0FBQ0EsTUFBSSxDQUFDTSxZQUFMLEVBQW1CO0FBQ2pCLFVBQU0sSUFBSUQsS0FBSixDQUFXLDJEQUEwREwsTUFBTyxHQUE1RSxDQUFOO0FBQ0Q7O0FBQ0QsU0FBT00sWUFBWSxDQUFDLENBQUQsQ0FBbkI7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcblxuY29uc3QgVkVSU0lPTl9QQVRURVJOID0gL14oXFxkK1xcLlxcZCspL207XG5cbmZ1bmN0aW9uIGlzV2luZG93cyAoKSB7XG4gIHJldHVybiBvcy50eXBlKCkgPT09ICdXaW5kb3dzX05UJztcbn1cblxuZnVuY3Rpb24gaXNNYWMgKCkge1xuICByZXR1cm4gb3MudHlwZSgpID09PSAnRGFyd2luJztcbn1cblxuZnVuY3Rpb24gaXNMaW51eCAoKSB7XG4gIHJldHVybiAhaXNXaW5kb3dzKCkgJiYgIWlzTWFjKCk7XG59XG5cbmZ1bmN0aW9uIGlzT1NXaW42NCAoKSB7XG4gIHJldHVybiBwcm9jZXNzLmFyY2ggPT09ICd4NjQnIHx8IHByb2Nlc3MuZW52Lmhhc093blByb3BlcnR5KCdQUk9DRVNTT1JfQVJDSElURVc2NDMyJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFyY2ggKCkge1xuICBpZiAoaXNMaW51eCgpIHx8IGlzTWFjKCkpIHtcbiAgICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKCd1bmFtZScsIFsnLW0nXSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCkgPT09ICdpNjg2JyA/ICczMicgOiAnNjQnO1xuICB9IGVsc2UgaWYgKGlzV2luZG93cygpKSB7XG4gICAgbGV0IGlzNjQgPSB0aGlzLmlzT1NXaW42NCgpO1xuICAgIHJldHVybiBpczY0ID8gJzY0JyA6ICczMic7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFjT3N4VmVyc2lvbiAoKSB7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgc3Rkb3V0ID0gKGF3YWl0IGV4ZWMoJ3N3X3ZlcnMnLCBbJy1wcm9kdWN0VmVyc2lvbiddKSkuc3Rkb3V0LnRyaW0oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZWN0IE1hYyBPUyBYIFZlcnNpb246ICR7ZXJyfWApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbk1hdGNoID0gVkVSU0lPTl9QQVRURVJOLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCF2ZXJzaW9uTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlY3QgTWFjIE9TIFggVmVyc2lvbiBmcm9tIHN3X3ZlcnMgb3V0cHV0OiAnJHtzdGRvdXR9J2ApO1xuICB9XG4gIHJldHVybiB2ZXJzaW9uTWF0Y2hbMV07XG59XG5cbmV4cG9ydCB7IGlzV2luZG93cywgaXNNYWMsIGlzTGludXgsIGlzT1NXaW42NCwgYXJjaCwgbWFjT3N4VmVyc2lvbiB9O1xuIl0sImZpbGUiOiJsaWIvc3lzdGVtLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -13,3 +13,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -20,3 +20,3 @@ var _fs = _interopRequireDefault(require("./fs"));

var _path2 = _interopRequireDefault(require("path"));
var _path = _interopRequireDefault(require("path"));

@@ -29,53 +29,32 @@ var _constants = _interopRequireDefault(require("constants"));

function tempDir() {
return _tempDir.apply(this, arguments);
}
async function tempDir() {
const now = new Date();
function _tempDir() {
_tempDir = (0, _asyncToGenerator2.default)(function* () {
let now = new Date();
const filePath = _path.default.join(process.env.APPIUM_TMP_DIR || _os.default.tmpdir(), [now.getFullYear(), now.getMonth(), now.getDate(), '-', process.pid, '-', (Math.random() * 0x100000000 + 1).toString(36)].join(''));
let filePath = _path2.default.join(_os.default.tmpdir(), [now.getFullYear(), now.getMonth(), now.getDate(), '-', process.pid, '-', (Math.random() * 0x100000000 + 1).toString(36)].join(''));
yield _fs.default.mkdir(filePath);
return filePath;
});
return _tempDir.apply(this, arguments);
await _fs.default.mkdir(filePath);
return filePath;
}
function path(_x, _x2) {
return _path.apply(this, arguments);
async function path(rawAffixes, defaultPrefix) {
const affixes = parseAffixes(rawAffixes, defaultPrefix);
const name = `${affixes.prefix || ''}${affixes.suffix || ''}`;
const tempDirectory = await tempDir();
return _path.default.join(tempDirectory, name);
}
function _path() {
_path = (0, _asyncToGenerator2.default)(function* (rawAffixes, defaultPrefix) {
let affixes = parseAffixes(rawAffixes, defaultPrefix);
let name = [affixes.prefix, affixes.suffix].join('');
let tempDirectory = yield tempDir();
return _path2.default.join(tempDirectory, name);
});
return _path.apply(this, arguments);
}
async function open(affixes) {
const filePath = await path(affixes, 'f-');
function open(_x3) {
return _open.apply(this, arguments);
try {
let fd = await _fs.default.open(filePath, RDWR_EXCL, 0o600);
return {
path: filePath,
fd
};
} catch (err) {
_logger.default.errorAndThrow(err);
}
}
function _open() {
_open = (0, _asyncToGenerator2.default)(function* (affixes) {
let filePath = yield path(affixes, 'f-');
try {
let fd = yield _fs.default.open(filePath, RDWR_EXCL, 0o600);
return {
path: filePath,
fd
};
} catch (err) {
_logger.default.errorAndThrow(err);
}
});
return _open.apply(this, arguments);
}
function parseAffixes(rawAffixes, defaultPrefix) {

@@ -112,14 +91,7 @@ let affixes = {

function staticDir() {
return _staticDir.apply(this, arguments);
}
function _staticDir() {
_staticDir = (0, _asyncToGenerator2.default)(function* () {
return _static;
});
return _staticDir.apply(this, arguments);
async function staticDir() {
return _static;
}require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wZGlyLmpzIl0sIm5hbWVzIjpbIlJEV1JfRVhDTCIsImNuc3QiLCJPX0NSRUFUIiwiT19UUlVOQyIsIk9fUkRXUiIsIk9fRVhDTCIsInRlbXBEaXIiLCJub3ciLCJEYXRlIiwiZmlsZVBhdGgiLCJub2RlUGF0aCIsImpvaW4iLCJvcyIsInRtcGRpciIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwicHJvY2VzcyIsInBpZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsImZzIiwibWtkaXIiLCJwYXRoIiwicmF3QWZmaXhlcyIsImRlZmF1bHRQcmVmaXgiLCJhZmZpeGVzIiwicGFyc2VBZmZpeGVzIiwibmFtZSIsInByZWZpeCIsInN1ZmZpeCIsInRlbXBEaXJlY3RvcnkiLCJvcGVuIiwiZmQiLCJlcnIiLCJsb2ciLCJlcnJvckFuZFRocm93IiwiRXJyb3IiLCJfc3RhdGljIiwib3BlbkRpciIsInN0YXRpY0RpciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLG1CQUFLQyxPQUFMLEdBQWVELG1CQUFLRSxPQUFwQixHQUE4QkYsbUJBQUtHLE1BQW5DLEdBQTRDSCxtQkFBS0ksTUFBbkU7O1NBRWVDLE87Ozs7OzZDQUFmLGFBQTBCO0FBQ3hCLFFBQUlDLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVY7O0FBQ0EsUUFBSUMsUUFBUSxHQUFHQyxlQUFTQyxJQUFULENBQWNDLFlBQUdDLE1BQUgsRUFBZCxFQUNiLENBQ0VOLEdBQUcsQ0FBQ08sV0FBSixFQURGLEVBQ3FCUCxHQUFHLENBQUNRLFFBQUosRUFEckIsRUFDcUNSLEdBQUcsQ0FBQ1MsT0FBSixFQURyQyxFQUVFLEdBRkYsRUFHRUMsT0FBTyxDQUFDQyxHQUhWLEVBSUUsR0FKRixFQUtFLENBQUNDLElBQUksQ0FBQ0MsTUFBTCxLQUFnQixXQUFoQixHQUE4QixDQUEvQixFQUFrQ0MsUUFBbEMsQ0FBMkMsRUFBM0MsQ0FMRixFQU1FVixJQU5GLENBTU8sRUFOUCxDQURhLENBQWY7O0FBVUEsVUFBTVcsWUFBR0MsS0FBSCxDQUFTZCxRQUFULENBQU47QUFFQSxXQUFPQSxRQUFQO0FBQ0QsRzs7OztTQUVjZSxJOzs7OzswQ0FBZixXQUFxQkMsVUFBckIsRUFBaUNDLGFBQWpDLEVBQWdEO0FBQzlDLFFBQUlDLE9BQU8sR0FBR0MsWUFBWSxDQUFDSCxVQUFELEVBQWFDLGFBQWIsQ0FBMUI7QUFDQSxRQUFJRyxJQUFJLEdBQUcsQ0FBQ0YsT0FBTyxDQUFDRyxNQUFULEVBQWlCSCxPQUFPLENBQUNJLE1BQXpCLEVBQWlDcEIsSUFBakMsQ0FBc0MsRUFBdEMsQ0FBWDtBQUNBLFFBQUlxQixhQUFhLFNBQVMxQixPQUFPLEVBQWpDO0FBQ0EsV0FBT0ksZUFBU0MsSUFBVCxDQUFjcUIsYUFBZCxFQUE2QkgsSUFBN0IsQ0FBUDtBQUNELEc7Ozs7U0FFY0ksSTs7Ozs7MENBQWYsV0FBcUJOLE9BQXJCLEVBQThCO0FBQzVCLFFBQUlsQixRQUFRLFNBQVNlLElBQUksQ0FBQ0csT0FBRCxFQUFVLElBQVYsQ0FBekI7O0FBQ0EsUUFBSTtBQUNGLFVBQUlPLEVBQUUsU0FBU1osWUFBR1csSUFBSCxDQUFReEIsUUFBUixFQUFrQlQsU0FBbEIsRUFBNkIsS0FBN0IsQ0FBZjtBQUVBLGFBQU87QUFBQ3dCLFFBQUFBLElBQUksRUFBRWYsUUFBUDtBQUFpQnlCLFFBQUFBO0FBQWpCLE9BQVA7QUFDRCxLQUpELENBSUUsT0FBT0MsR0FBUCxFQUFZO0FBQ1pDLHNCQUFJQyxhQUFKLENBQWtCRixHQUFsQjtBQUNEO0FBRUYsRzs7OztBQUVELFNBQVNQLFlBQVQsQ0FBdUJILFVBQXZCLEVBQW1DQyxhQUFuQyxFQUFrRDtBQUNoRCxNQUFJQyxPQUFPLEdBQUc7QUFBQ0csSUFBQUEsTUFBTSxFQUFFLElBQVQ7QUFBZUMsSUFBQUEsTUFBTSxFQUFFO0FBQXZCLEdBQWQ7O0FBQ0EsTUFBSU4sVUFBSixFQUFnQjtBQUNkLFlBQVEsT0FBT0EsVUFBZjtBQUNFLFdBQUssUUFBTDtBQUNFRSxRQUFBQSxPQUFPLENBQUNHLE1BQVIsR0FBaUJMLFVBQWpCO0FBQ0E7O0FBQ0YsV0FBSyxRQUFMO0FBQ0VFLFFBQUFBLE9BQU8sR0FBR0YsVUFBVjtBQUNBOztBQUNGO0FBQ0UsY0FBTSxJQUFJYSxLQUFKLENBQVcsOEJBQTZCWCxPQUFRLEVBQWhELENBQU47QUFSSjtBQVVELEdBWEQsTUFXTztBQUNMQSxJQUFBQSxPQUFPLENBQUNHLE1BQVIsR0FBaUJKLGFBQWpCO0FBQ0Q7O0FBQ0QsU0FBT0MsT0FBUDtBQUNEOztBQUVELE1BQU1ZLE9BQU8sR0FBR2pDLE9BQU8sRUFBdkI7O0FBQ0EsTUFBTWtDLE9BQU8sR0FBR2xDLE9BQWhCOzs7U0FFZW1DLFM7Ozs7OytDQUFmLGFBQTRCO0FBQzFCLFdBQU9GLE9BQVA7QUFDRCxHIiwic291cmNlc0NvbnRlbnQiOlsiLyogVGhpcyBsaWJyYXJ5IGlzIG9yaWdpbmF0ZWQgZnJvbSB0ZW1wLmpzIGF0IGh0dHA6Ly9naXRodWIuY29tL2JydWNlL25vZGUtdGVtcCAqL1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBub2RlUGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjbnN0IGZyb20gJ2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuY29uc3QgUkRXUl9FWENMID0gY25zdC5PX0NSRUFUIHwgY25zdC5PX1RSVU5DIHwgY25zdC5PX1JEV1IgfCBjbnN0Lk9fRVhDTDtcblxuYXN5bmMgZnVuY3Rpb24gdGVtcERpciAoKSB7XG4gIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xuICBsZXQgZmlsZVBhdGggPSBub2RlUGF0aC5qb2luKG9zLnRtcGRpcigpLFxuICAgIFtcbiAgICAgIG5vdy5nZXRGdWxsWWVhcigpLCBub3cuZ2V0TW9udGgoKSwgbm93LmdldERhdGUoKSxcbiAgICAgICctJyxcbiAgICAgIHByb2Nlc3MucGlkLFxuICAgICAgJy0nLFxuICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMCArIDEpLnRvU3RyaW5nKDM2KSxcbiAgICBdLmpvaW4oJycpKTtcbiAgLy8gY3JlYXRlcyBhIHRlbXAgZGlyZWN0b3J5IHVzaW5nIHRoZSBkYXRlIGFuZCBhIHJhbmRvbSBzdHJpbmdcblxuICBhd2FpdCBmcy5ta2RpcihmaWxlUGF0aCk7XG5cbiAgcmV0dXJuIGZpbGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXRoIChyYXdBZmZpeGVzLCBkZWZhdWx0UHJlZml4KSB7XG4gIGxldCBhZmZpeGVzID0gcGFyc2VBZmZpeGVzKHJhd0FmZml4ZXMsIGRlZmF1bHRQcmVmaXgpO1xuICBsZXQgbmFtZSA9IFthZmZpeGVzLnByZWZpeCwgYWZmaXhlcy5zdWZmaXhdLmpvaW4oJycpO1xuICBsZXQgdGVtcERpcmVjdG9yeSA9IGF3YWl0IHRlbXBEaXIoKTtcbiAgcmV0dXJuIG5vZGVQYXRoLmpvaW4odGVtcERpcmVjdG9yeSwgbmFtZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW4gKGFmZml4ZXMpIHtcbiAgbGV0IGZpbGVQYXRoID0gYXdhaXQgcGF0aChhZmZpeGVzLCAnZi0nKTtcbiAgdHJ5IHtcbiAgICBsZXQgZmQgPSBhd2FpdCBmcy5vcGVuKGZpbGVQYXRoLCBSRFdSX0VYQ0wsIDBvNjAwKTtcbiAgICAvLyBvcGVucyB0aGUgZmlsZSBpbiBtb2RlIDM4NFxuICAgIHJldHVybiB7cGF0aDogZmlsZVBhdGgsIGZkfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coZXJyKTtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIHBhcnNlQWZmaXhlcyAocmF3QWZmaXhlcywgZGVmYXVsdFByZWZpeCkge1xuICBsZXQgYWZmaXhlcyA9IHtwcmVmaXg6IG51bGwsIHN1ZmZpeDogbnVsbH07XG4gIGlmIChyYXdBZmZpeGVzKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcmF3QWZmaXhlcykge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgYWZmaXhlcy5wcmVmaXggPSByYXdBZmZpeGVzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGFmZml4ZXMgPSByYXdBZmZpeGVzO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhZmZpeCBkZWNsYXJhdGlvbjogJHthZmZpeGVzfWApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhZmZpeGVzLnByZWZpeCA9IGRlZmF1bHRQcmVmaXg7XG4gIH1cbiAgcmV0dXJuIGFmZml4ZXM7XG59XG5cbmNvbnN0IF9zdGF0aWMgPSB0ZW1wRGlyKCk7XG5jb25zdCBvcGVuRGlyID0gdGVtcERpcjtcblxuYXN5bmMgZnVuY3Rpb24gc3RhdGljRGlyICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHJldHVybiBfc3RhdGljO1xufVxuXG5leHBvcnQgeyBvcGVuLCBwYXRoLCBvcGVuRGlyLCBzdGF0aWNEaXIgfTtcbiJdLCJmaWxlIjoibGliL3RlbXBkaXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90ZW1wZGlyLmpzIl0sIm5hbWVzIjpbIlJEV1JfRVhDTCIsImNuc3QiLCJPX0NSRUFUIiwiT19UUlVOQyIsIk9fUkRXUiIsIk9fRVhDTCIsInRlbXBEaXIiLCJub3ciLCJEYXRlIiwiZmlsZVBhdGgiLCJub2RlUGF0aCIsImpvaW4iLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1RNUF9ESVIiLCJvcyIsInRtcGRpciIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwicGlkIiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwiZnMiLCJta2RpciIsInBhdGgiLCJyYXdBZmZpeGVzIiwiZGVmYXVsdFByZWZpeCIsImFmZml4ZXMiLCJwYXJzZUFmZml4ZXMiLCJuYW1lIiwicHJlZml4Iiwic3VmZml4IiwidGVtcERpcmVjdG9yeSIsIm9wZW4iLCJmZCIsImVyciIsImxvZyIsImVycm9yQW5kVGhyb3ciLCJFcnJvciIsIl9zdGF0aWMiLCJvcGVuRGlyIiwic3RhdGljRGlyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFNBQVMsR0FBR0MsbUJBQUtDLE9BQUwsR0FBZUQsbUJBQUtFLE9BQXBCLEdBQThCRixtQkFBS0csTUFBbkMsR0FBNENILG1CQUFLSSxNQUFuRTs7QUFVQSxlQUFlQyxPQUFmLEdBQTBCO0FBQ3hCLFFBQU1DLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7O0FBQ0EsUUFBTUMsUUFBUSxHQUFHQyxjQUFTQyxJQUFULENBQWNDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxjQUFaLElBQThCQyxZQUFHQyxNQUFILEVBQTVDLEVBQ2YsQ0FDRVQsR0FBRyxDQUFDVSxXQUFKLEVBREYsRUFDcUJWLEdBQUcsQ0FBQ1csUUFBSixFQURyQixFQUNxQ1gsR0FBRyxDQUFDWSxPQUFKLEVBRHJDLEVBRUUsR0FGRixFQUdFUCxPQUFPLENBQUNRLEdBSFYsRUFJRSxHQUpGLEVBS0UsQ0FBQ0MsSUFBSSxDQUFDQyxNQUFMLEtBQWdCLFdBQWhCLEdBQThCLENBQS9CLEVBQWtDQyxRQUFsQyxDQUEyQyxFQUEzQyxDQUxGLEVBTUVaLElBTkYsQ0FNTyxFQU5QLENBRGUsQ0FBakI7O0FBVUEsUUFBTWEsWUFBR0MsS0FBSCxDQUFTaEIsUUFBVCxDQUFOO0FBRUEsU0FBT0EsUUFBUDtBQUNEOztBQWdCRCxlQUFlaUIsSUFBZixDQUFxQkMsVUFBckIsRUFBaUNDLGFBQWpDLEVBQWdEO0FBQzlDLFFBQU1DLE9BQU8sR0FBR0MsWUFBWSxDQUFDSCxVQUFELEVBQWFDLGFBQWIsQ0FBNUI7QUFDQSxRQUFNRyxJQUFJLEdBQUksR0FBRUYsT0FBTyxDQUFDRyxNQUFSLElBQWtCLEVBQUcsR0FBRUgsT0FBTyxDQUFDSSxNQUFSLElBQWtCLEVBQUcsRUFBNUQ7QUFDQSxRQUFNQyxhQUFhLEdBQUcsTUFBTTVCLE9BQU8sRUFBbkM7QUFDQSxTQUFPSSxjQUFTQyxJQUFULENBQWN1QixhQUFkLEVBQTZCSCxJQUE3QixDQUFQO0FBQ0Q7O0FBZUQsZUFBZUksSUFBZixDQUFxQk4sT0FBckIsRUFBOEI7QUFDNUIsUUFBTXBCLFFBQVEsR0FBRyxNQUFNaUIsSUFBSSxDQUFDRyxPQUFELEVBQVUsSUFBVixDQUEzQjs7QUFDQSxNQUFJO0FBQ0YsUUFBSU8sRUFBRSxHQUFHLE1BQU1aLFlBQUdXLElBQUgsQ0FBUTFCLFFBQVIsRUFBa0JULFNBQWxCLEVBQTZCLEtBQTdCLENBQWY7QUFFQSxXQUFPO0FBQUMwQixNQUFBQSxJQUFJLEVBQUVqQixRQUFQO0FBQWlCMkIsTUFBQUE7QUFBakIsS0FBUDtBQUNELEdBSkQsQ0FJRSxPQUFPQyxHQUFQLEVBQVk7QUFDWkMsb0JBQUlDLGFBQUosQ0FBa0JGLEdBQWxCO0FBQ0Q7QUFDRjs7QUFVRCxTQUFTUCxZQUFULENBQXVCSCxVQUF2QixFQUFtQ0MsYUFBbkMsRUFBa0Q7QUFDaEQsTUFBSUMsT0FBTyxHQUFHO0FBQUNHLElBQUFBLE1BQU0sRUFBRSxJQUFUO0FBQWVDLElBQUFBLE1BQU0sRUFBRTtBQUF2QixHQUFkOztBQUNBLE1BQUlOLFVBQUosRUFBZ0I7QUFDZCxZQUFRLE9BQU9BLFVBQWY7QUFDRSxXQUFLLFFBQUw7QUFDRUUsUUFBQUEsT0FBTyxDQUFDRyxNQUFSLEdBQWlCTCxVQUFqQjtBQUNBOztBQUNGLFdBQUssUUFBTDtBQUNFRSxRQUFBQSxPQUFPLEdBQUdGLFVBQVY7QUFDQTs7QUFDRjtBQUNFLGNBQU0sSUFBSWEsS0FBSixDQUFXLDhCQUE2QlgsT0FBUSxFQUFoRCxDQUFOO0FBUko7QUFVRCxHQVhELE1BV087QUFDTEEsSUFBQUEsT0FBTyxDQUFDRyxNQUFSLEdBQWlCSixhQUFqQjtBQUNEOztBQUNELFNBQU9DLE9BQVA7QUFDRDs7QUFFRCxNQUFNWSxPQUFPLEdBQUduQyxPQUFPLEVBQXZCOztBQU9BLE1BQU1vQyxPQUFPLEdBQUdwQyxPQUFoQjs7O0FBT0EsZUFBZXFDLFNBQWYsR0FBNEI7QUFDMUIsU0FBT0YsT0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogVGhpcyBsaWJyYXJ5IGlzIG9yaWdpbmF0ZWQgZnJvbSB0ZW1wLmpzIGF0IGh0dHA6Ly9naXRodWIuY29tL2JydWNlL25vZGUtdGVtcCAqL1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBub2RlUGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjbnN0IGZyb20gJ2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcblxuY29uc3QgUkRXUl9FWENMID0gY25zdC5PX0NSRUFUIHwgY25zdC5PX1RSVU5DIHwgY25zdC5PX1JEV1IgfCBjbnN0Lk9fRVhDTDtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gb3MudGVtcGRpcigpIG9yIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSLlxuICogZS5nLlxuICogLSBObyBgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVJgOiBgL3Zhci9mb2xkZXJzLzM0LzIyMjJzaDhuMjdkNnJjcDdqcWxrdzhrbTAwMDBnbi9UL3h4eHh4eHh4Lnl5eXlgXG4gKiAtIFdpdGggYHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSID0gJy9wYXRoL3RvL3Jvb3QnYDogYC9wYXRoL3RvL3Jvb3QveHh4eHh4eHgueXl5eWBcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHBhdGggdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdGVtcERpciAoKSB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGZpbGVQYXRoID0gbm9kZVBhdGguam9pbihwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fCBvcy50bXBkaXIoKSxcbiAgICBbXG4gICAgICBub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5nZXREYXRlKCksXG4gICAgICAnLScsXG4gICAgICBwcm9jZXNzLnBpZCxcbiAgICAgICctJyxcbiAgICAgIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDAgKyAxKS50b1N0cmluZygzNiksXG4gICAgXS5qb2luKCcnKSk7XG4gIC8vIGNyZWF0ZXMgYSB0ZW1wIGRpcmVjdG9yeSB1c2luZyB0aGUgZGF0ZSBhbmQgYSByYW5kb20gc3RyaW5nXG5cbiAgYXdhaXQgZnMubWtkaXIoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBZmZpeGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJlZml4IC0gcHJlZml4IG9mIHRoZSB0ZW1wIGRpcmVjdG9yeSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3VmZml4IC0gc3VmZml4IG9mIHRoZSB0ZW1wIGRpcmVjdG9yeSBuYW1lXG4gKi9cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gb3MudGVtcGRpcigpIG9yIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSXG4gKiB3aXRoIGFyYml0cmFyeSBwcmVmaXgvc3VmZml4IGZvciB0aGUgZGlyZWN0b3J5IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QWZmaXhlc30gcmF3QWZmaXhlc1xuICogQHBhcmFtIHs/c3RyaW5nfSBkZWZhdWx0UHJlZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgQSBwYXRoIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdpdGggcmF3QWZmaXhlcyBhbmQgZGVmYXVsdFByZWZpeFxuICovXG5hc3luYyBmdW5jdGlvbiBwYXRoIChyYXdBZmZpeGVzLCBkZWZhdWx0UHJlZml4KSB7XG4gIGNvbnN0IGFmZml4ZXMgPSBwYXJzZUFmZml4ZXMocmF3QWZmaXhlcywgZGVmYXVsdFByZWZpeCk7XG4gIGNvbnN0IG5hbWUgPSBgJHthZmZpeGVzLnByZWZpeCB8fCAnJ30ke2FmZml4ZXMuc3VmZml4IHx8ICcnfWA7XG4gIGNvbnN0IHRlbXBEaXJlY3RvcnkgPSBhd2FpdCB0ZW1wRGlyKCk7XG4gIHJldHVybiBub2RlUGF0aC5qb2luKHRlbXBEaXJlY3RvcnksIG5hbWUpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE9wZW5lZEFmZml4ZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gZmlsZVxuICogQHByb3BlcnR5IHtpbnRlZ2VyfSBmZCAtIFRoZSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkXG4gKi9cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gb3MudGVtcGRpcigpIG9yIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSXG4gKiB3aXRoIGFyYml0cmFyeSBwcmVmaXgvc3VmZml4IGZvciB0aGUgZGlyZWN0b3J5IG5hbWUgYW5kIHJldHVybiBpdCBhcyBvcGVuLlxuICpcbiAqIEBwYXJhbSB7QWZmaXhlc30gYWZmaXhlc1xuICogQHJldHVybnMge09wZW5lZEFmZml4ZXN9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW4gKGFmZml4ZXMpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBwYXRoKGFmZml4ZXMsICdmLScpO1xuICB0cnkge1xuICAgIGxldCBmZCA9IGF3YWl0IGZzLm9wZW4oZmlsZVBhdGgsIFJEV1JfRVhDTCwgMG82MDApO1xuICAgIC8vIG9wZW5zIHRoZSBmaWxlIGluIG1vZGUgMzg0XG4gICAgcmV0dXJuIHtwYXRoOiBmaWxlUGF0aCwgZmR9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhlcnIpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIFJldHVybnMgcHJlZml4L3N1ZmZpeCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBZmZpeGVzfSByYXdBZmZpeGVzXG4gKiBAcGFyYW0gez9zdHJpbmd9IGRlZmF1bHRQcmVmaXhcbiAqIEByZXR1cm5zIHtBZmZpeGVzfVxuICovXG5mdW5jdGlvbiBwYXJzZUFmZml4ZXMgKHJhd0FmZml4ZXMsIGRlZmF1bHRQcmVmaXgpIHtcbiAgbGV0IGFmZml4ZXMgPSB7cHJlZml4OiBudWxsLCBzdWZmaXg6IG51bGx9O1xuICBpZiAocmF3QWZmaXhlcykge1xuICAgIHN3aXRjaCAodHlwZW9mIHJhd0FmZml4ZXMpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGFmZml4ZXMucHJlZml4ID0gcmF3QWZmaXhlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBhZmZpeGVzID0gcmF3QWZmaXhlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWZmaXggZGVjbGFyYXRpb246ICR7YWZmaXhlc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWZmaXhlcy5wcmVmaXggPSBkZWZhdWx0UHJlZml4O1xuICB9XG4gIHJldHVybiBhZmZpeGVzO1xufVxuXG5jb25zdCBfc3RhdGljID0gdGVtcERpcigpO1xuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgcGF0aCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIG5ldyB0ZW1wRGlyKCkgaWYgdGVtcFJvb3REaXJlY3RvcnkgaXMgbm90IHByb3ZpZGVkXG4gKi9cbmNvbnN0IG9wZW5EaXIgPSB0ZW1wRGlyO1xuXG4vKipcbiAqIFJldHVybnMgYSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aGNpaCBpcyBkZWZpbmVkIGFzIHN0YXRpYyBpbiB0aGUgc2FtZSBwcm9jZXNzXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSB0ZW1wIGRpcmVjdG9yeSBwYXRoIHdoY2loIGlzIGRlZmluZWQgYXMgc3RhdGljIGluIHRoZSBzYW1lIHByb2Nlc3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhdGljRGlyICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIHJldHVybiBfc3RhdGljO1xufVxuXG5leHBvcnQgeyBvcGVuLCBwYXRoLCBvcGVuRGlyLCBzdGF0aWNEaXIgfTtcbiJdLCJmaWxlIjoibGliL3RlbXBkaXIuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

@@ -26,3 +26,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -126,7 +126,3 @@ var _bluebird = _interopRequireDefault(require("bluebird"));

function unwrapElement(el) {
var _arr = [W3C_WEB_ELEMENT_IDENTIFIER, 'ELEMENT'];
for (var _i = 0; _i < _arr.length; _i++) {
const propName = _arr[_i];
for (const propName of [W3C_WEB_ELEMENT_IDENTIFIER, 'ELEMENT']) {
if (_lodash.default.has(el, propName)) {

@@ -158,7 +154,3 @@ return el[propName];

var _arr2 = Object.keys(obj);
for (var _i2 = 0; _i2 < _arr2.length; _i2++) {
const key = _arr2[_i2];
for (const key of Object.keys(obj)) {
if (!predicate(obj[key], obj)) {

@@ -192,7 +184,4 @@ delete newObj[key];

const pathObj = forcePosix ? _path.default.posix : _path.default;
var _arr3 = [originalPath, root];
for (var _i3 = 0; _i3 < _arr3.length; _i3++) {
const p = _arr3[_i3];
for (const p of [originalPath, root]) {
if (!pathObj.isAbsolute(p)) {

@@ -208,39 +197,16 @@ throw new Error(`'${p}' is expected to be an absolute path`);

function isSameDestination(_x, _x2) {
return _isSameDestination.apply(this, arguments);
}
async function isSameDestination(path1, path2, ...pathN) {
const allPaths = [path1, path2, ...pathN];
function _isSameDestination() {
_isSameDestination = (0, _asyncToGenerator2.default)(function* (path1, path2, ...pathN) {
const allPaths = [path1, path2, ...pathN];
if (!(await _bluebird.default.reduce(allPaths, async (a, b) => a && (await _fs.default.exists(b)), true))) {
return false;
}
if (!(yield _bluebird.default.reduce(allPaths, function () {
var _ref = (0, _asyncToGenerator2.default)(function* (a, b) {
return a && (yield _fs.default.exists(b));
});
const areAllItemsEqual = arr => !!arr.reduce((a, b) => a === b ? a : NaN);
return function (_x3, _x4) {
return _ref.apply(this, arguments);
};
}(), true))) {
return false;
}
if (areAllItemsEqual(allPaths)) {
return true;
}
const areAllItemsEqual = arr => !!arr.reduce((a, b) => a === b ? a : NaN);
if (areAllItemsEqual(allPaths)) {
return true;
}
return areAllItemsEqual((yield _bluebird.default.map(allPaths, function () {
var _ref2 = (0, _asyncToGenerator2.default)(function* (x) {
return (yield _fs.default.stat(x)).ino;
});
return function (_x5) {
return _ref2.apply(this, arguments);
};
}())));
});
return _isSameDestination.apply(this, arguments);
return areAllItemsEqual((await _bluebird.default.map(allPaths, async x => (await _fs.default.stat(x)).ino)));
}

@@ -273,2 +239,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlsLmpzIl0sIm5hbWVzIjpbIlczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIiwiaGFzQ29udGVudCIsInZhbCIsIl8iLCJpc1N0cmluZyIsImhhc1ZhbHVlIiwiaGFzVmFsIiwiaXNOdW1iZXIiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiZXNjYXBlU3BhY2UiLCJzdHIiLCJzcGxpdCIsImpvaW4iLCJlc2NhcGVTcGVjaWFsQ2hhcnMiLCJxdW90ZUVzY2FwZSIsInJlcGxhY2UiLCJyZSIsIlJlZ0V4cCIsImxvY2FsSXAiLCJpcCIsImNoYWluIiwib3MiLCJuZXR3b3JrSW50ZXJmYWNlcyIsInZhbHVlcyIsImZsYXR0ZW4iLCJmaWx0ZXIiLCJmYW1pbHkiLCJpbnRlcm5hbCIsIm1hcCIsImZpcnN0IiwidmFsdWUiLCJjYW5jZWxsYWJsZURlbGF5IiwibXMiLCJ0aW1lciIsInJlc29sdmUiLCJyZWplY3QiLCJkZWxheSIsIkIiLCJQcm9taXNlIiwiX3Jlc29sdmUiLCJfcmVqZWN0Iiwic2V0VGltZW91dCIsImNhbmNlbCIsImNsZWFyVGltZW91dCIsIkNhbmNlbGxhdGlvbkVycm9yIiwibXVsdGlSZXNvbHZlIiwicm9vdHMiLCJhcmdzIiwicm9vdCIsInBhdGgiLCJzYWZlSnNvblBhcnNlIiwib2JqIiwiSlNPTiIsInBhcnNlIiwiaWduIiwidW53cmFwRWxlbWVudCIsImVsIiwicHJvcE5hbWUiLCJoYXMiLCJ3cmFwRWxlbWVudCIsImVsZW1lbnRJZCIsIkVMRU1FTlQiLCJmaWx0ZXJPYmplY3QiLCJwcmVkaWNhdGUiLCJuZXdPYmoiLCJjbG9uZSIsInYiLCJpc0Z1bmN0aW9uIiwidmFsdWVQcmVkaWNhdGUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJieXRlcyIsImludEJ5dGVzIiwicGFyc2VJbnQiLCJFcnJvciIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwiaXNTdWJQYXRoIiwib3JpZ2luYWxQYXRoIiwiZm9yY2VQb3NpeCIsInBhdGhPYmoiLCJwb3NpeCIsInAiLCJpc0Fic29sdXRlIiwibm9ybWFsaXplZFJvb3QiLCJub3JtYWxpemUiLCJub3JtYWxpemVkUGF0aCIsInN0YXJ0c1dpdGgiLCJpc1NhbWVEZXN0aW5hdGlvbiIsInBhdGgxIiwicGF0aDIiLCJwYXRoTiIsImFsbFBhdGhzIiwicmVkdWNlIiwiYSIsImIiLCJmcyIsImV4aXN0cyIsImFyZUFsbEl0ZW1zRXF1YWwiLCJhcnIiLCJOYU4iLCJ4Iiwic3RhdCIsImlubyIsImNvZXJjZVZlcnNpb24iLCJ2ZXIiLCJzdHJpY3QiLCJyZXN1bHQiLCJzZW12ZXIiLCJ2YWxpZCIsImNvZXJjZSIsIlNVUFBPUlRFRF9PUEVSQVRPUlMiLCJjb21wYXJlVmVyc2lvbnMiLCJ2ZXIxIiwib3BlcmF0b3IiLCJ2ZXIyIiwiaW5jbHVkZXMiLCJzdHJpbmdpZnkiLCJzZW12ZXJPcGVyYXRvciIsInNhdGlzZmllcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsMEJBQTBCLEdBQUcscUNBQW5DOzs7QUFFTyxTQUFTQyxVQUFULENBQXFCQyxHQUFyQixFQUEwQjtBQUMvQixTQUFPQyxnQkFBRUMsUUFBRixDQUFXRixHQUFYLEtBQW1CQSxHQUFHLEtBQUssRUFBbEM7QUFDRDs7QUFHRCxTQUFTRyxRQUFULENBQW1CSCxHQUFuQixFQUF3QjtBQUN0QixNQUFJSSxNQUFNLEdBQUcsS0FBYjs7QUFFQSxNQUFJSCxnQkFBRUksUUFBRixDQUFXTCxHQUFYLENBQUosRUFBcUI7QUFDbkJJLElBQUFBLE1BQU0sR0FBRyxDQUFDSCxnQkFBRUssS0FBRixDQUFRTixHQUFSLENBQVY7QUFDRCxHQUZELE1BRU87QUFDTEksSUFBQUEsTUFBTSxHQUFHLENBQUNILGdCQUFFTSxXQUFGLENBQWNQLEdBQWQsQ0FBRCxJQUF1QixDQUFDQyxnQkFBRU8sTUFBRixDQUFTUixHQUFULENBQWpDO0FBQ0Q7O0FBRUQsU0FBT0ksTUFBUDtBQUNEOztBQUdELFNBQVNLLFdBQVQsQ0FBc0JDLEdBQXRCLEVBQTJCO0FBQ3pCLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLEdBQVYsRUFBZUMsSUFBZixDQUFvQixLQUFwQixDQUFQO0FBQ0Q7O0FBRUQsU0FBU0Msa0JBQVQsQ0FBNkJILEdBQTdCLEVBQWtDSSxXQUFsQyxFQUErQztBQUM3QyxNQUFJLE9BQU9KLEdBQVAsS0FBZSxRQUFuQixFQUE2QjtBQUMzQixXQUFPQSxHQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxPQUFPSSxXQUFQLEtBQXVCLFdBQTNCLEVBQXdDO0FBQ3RDQSxJQUFBQSxXQUFXLEdBQUcsS0FBZDtBQUNEOztBQUNESixFQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FDTkssT0FERyxDQUNLLE9BREwsRUFDYyxNQURkLEVBRUhBLE9BRkcsQ0FFSyxPQUZMLEVBRWMsS0FGZCxFQUdIQSxPQUhHLENBR0ssT0FITCxFQUdjLEtBSGQsRUFJSEEsT0FKRyxDQUlLLE9BSkwsRUFJYyxLQUpkLEVBS0hBLE9BTEcsQ0FLSyxPQUxMLEVBS2MsS0FMZCxFQU1IQSxPQU5HLENBTUssT0FOTCxFQU1jLEtBTmQsRUFPSEEsT0FQRyxDQU9LLE9BUEwsRUFPYyxLQVBkLEVBUUhBLE9BUkcsQ0FRSyxPQVJMLEVBUWMsS0FSZCxFQVNIQSxPQVRHLENBU0ssTUFUTCxFQVNhLEtBVGIsQ0FBTjs7QUFVQSxNQUFJRCxXQUFKLEVBQWlCO0FBQ2YsUUFBSUUsRUFBRSxHQUFHLElBQUlDLE1BQUosQ0FBV0gsV0FBWCxFQUF3QixHQUF4QixDQUFUO0FBQ0FKLElBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDSyxPQUFKLENBQVlDLEVBQVosRUFBaUIsS0FBSUYsV0FBWSxFQUFqQyxDQUFOO0FBQ0Q7O0FBQ0QsU0FBT0osR0FBUDtBQUNEOztBQUVELFNBQVNRLE9BQVQsR0FBb0I7QUFDbEIsTUFBSUMsRUFBRSxHQUFHbEIsZ0JBQUVtQixLQUFGLENBQVFDLFlBQUdDLGlCQUFILEVBQVIsRUFDTkMsTUFETSxHQUVOQyxPQUZNLEdBR05DLE1BSE0sQ0FHQyxVQUFVekIsR0FBVixFQUFlO0FBQ3JCLFdBQVFBLEdBQUcsQ0FBQzBCLE1BQUosS0FBZSxNQUFmLElBQXlCMUIsR0FBRyxDQUFDMkIsUUFBSixLQUFpQixLQUFsRDtBQUNELEdBTE0sRUFNTkMsR0FOTSxDQU1GLFNBTkUsRUFPTkMsS0FQTSxHQVFOQyxLQVJNLEVBQVQ7O0FBU0EsU0FBT1gsRUFBUDtBQUNEOztBQU1ELFNBQVNZLGdCQUFULENBQTJCQyxFQUEzQixFQUErQjtBQUM3QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUNBLE1BQUlDLE1BQUo7QUFFQSxRQUFNQyxLQUFLLEdBQUcsSUFBSUMsa0JBQUVDLE9BQU4sQ0FBYyxDQUFDQyxRQUFELEVBQVdDLE9BQVgsS0FBdUI7QUFDakROLElBQUFBLE9BQU8sR0FBR0ssUUFBVjtBQUNBSixJQUFBQSxNQUFNLEdBQUdLLE9BQVQ7QUFDQVAsSUFBQUEsS0FBSyxHQUFHUSxVQUFVLENBQUMsWUFBWTtBQUM3QlAsTUFBQUEsT0FBTztBQUNSLEtBRmlCLEVBRWZGLEVBRmUsQ0FBbEI7QUFHRCxHQU5hLENBQWQ7O0FBVUFJLEVBQUFBLEtBQUssQ0FBQ00sTUFBTixHQUFlLFlBQVk7QUFDekJDLElBQUFBLFlBQVksQ0FBQ1YsS0FBRCxDQUFaO0FBQ0FFLElBQUFBLE1BQU0sQ0FBQyxJQUFJRSxrQkFBRU8saUJBQU4sRUFBRCxDQUFOO0FBQ0QsR0FIRDs7QUFJQSxTQUFPUixLQUFQO0FBQ0Q7O0FBRUQsU0FBU1MsWUFBVCxDQUF1QkMsS0FBdkIsRUFBOEIsR0FBR0MsSUFBakMsRUFBdUM7QUFDckMsU0FBT0QsS0FBSyxDQUFDbEIsR0FBTixDQUFXb0IsSUFBRCxJQUFVO0FBQ3pCLFdBQU9DLGNBQUtmLE9BQUwsQ0FBYWMsSUFBYixFQUFtQixHQUFHRCxJQUF0QixDQUFQO0FBQ0QsR0FGTSxDQUFQO0FBR0Q7O0FBS0QsU0FBU0csYUFBVCxDQUF3QkMsR0FBeEIsRUFBNkI7QUFDM0IsTUFBSTtBQUNGQSxJQUFBQSxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXRixHQUFYLENBQU47QUFDRCxHQUZELENBRUUsT0FBT0csR0FBUCxFQUFZLENBRWI7O0FBQ0QsU0FBT0gsR0FBUDtBQUNEOztBQU9ELFNBQVNJLGFBQVQsQ0FBd0JDLEVBQXhCLEVBQTRCO0FBQUEsYUFDSCxDQUFDMUQsMEJBQUQsRUFBNkIsU0FBN0IsQ0FERzs7QUFDMUIsMkNBQWdFO0FBQTNELFVBQU0yRCxRQUFRLFdBQWQ7O0FBQ0gsUUFBSXhELGdCQUFFeUQsR0FBRixDQUFNRixFQUFOLEVBQVVDLFFBQVYsQ0FBSixFQUF5QjtBQUN2QixhQUFPRCxFQUFFLENBQUNDLFFBQUQsQ0FBVDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT0QsRUFBUDtBQUNEOztBQUVELFNBQVNHLFdBQVQsQ0FBc0JDLFNBQXRCLEVBQWlDO0FBQy9CLFNBQU87QUFDTEMsSUFBQUEsT0FBTyxFQUFFRCxTQURKO0FBRUwsS0FBQzlELDBCQUFELEdBQThCOEQ7QUFGekIsR0FBUDtBQUlEOztBQVVELFNBQVNFLFlBQVQsQ0FBdUJYLEdBQXZCLEVBQTRCWSxTQUE1QixFQUF1QztBQUNyQyxNQUFJQyxNQUFNLEdBQUcvRCxnQkFBRWdFLEtBQUYsQ0FBUWQsR0FBUixDQUFiOztBQUNBLE1BQUlsRCxnQkFBRU0sV0FBRixDQUFjd0QsU0FBZCxDQUFKLEVBQThCO0FBRTVCQSxJQUFBQSxTQUFTLEdBQUlHLENBQUQsSUFBTyxDQUFDakUsZ0JBQUVNLFdBQUYsQ0FBYzJELENBQWQsQ0FBcEI7QUFDRCxHQUhELE1BR08sSUFBSSxDQUFDakUsZ0JBQUVrRSxVQUFGLENBQWFKLFNBQWIsQ0FBTCxFQUE4QjtBQUVuQyxVQUFNSyxjQUFjLEdBQUdMLFNBQXZCOztBQUNBQSxJQUFBQSxTQUFTLEdBQUlHLENBQUQsSUFBT0EsQ0FBQyxLQUFLRSxjQUF6QjtBQUNEOztBQVRvQyxjQVVuQkMsTUFBTSxDQUFDQyxJQUFQLENBQVluQixHQUFaLENBVm1COztBQVVyQywrQ0FBb0M7QUFBL0IsVUFBTW9CLEdBQUcsYUFBVDs7QUFDSCxRQUFJLENBQUNSLFNBQVMsQ0FBQ1osR0FBRyxDQUFDb0IsR0FBRCxDQUFKLEVBQVdwQixHQUFYLENBQWQsRUFBK0I7QUFDN0IsYUFBT2EsTUFBTSxDQUFDTyxHQUFELENBQWI7QUFDRDtBQUNGOztBQUNELFNBQU9QLE1BQVA7QUFDRDs7QUFXRCxTQUFTUSxvQkFBVCxDQUErQkMsS0FBL0IsRUFBc0M7QUFDcEMsUUFBTUMsUUFBUSxHQUFHQyxRQUFRLENBQUNGLEtBQUQsRUFBUSxFQUFSLENBQXpCOztBQUNBLE1BQUluRSxLQUFLLENBQUNvRSxRQUFELENBQUwsSUFBbUJBLFFBQVEsR0FBRyxDQUFsQyxFQUFxQztBQUNuQyxVQUFNLElBQUlFLEtBQUosQ0FBVyxtQkFBa0JILEtBQU0sNkJBQW5DLENBQU47QUFDRDs7QUFDRCxNQUFJQyxRQUFRLElBQUksT0FBTyxJQUFQLEdBQWMsSUFBOUIsRUFBb0M7QUFDbEMsV0FBUSxHQUFFRyxVQUFVLENBQUNILFFBQVEsSUFBSSxPQUFPLElBQVAsR0FBYyxNQUFsQixDQUFULENBQVYsQ0FBOENJLE9BQTlDLENBQXNELENBQXRELENBQXlELEtBQW5FO0FBQ0QsR0FGRCxNQUVPLElBQUlKLFFBQVEsSUFBSSxPQUFPLElBQXZCLEVBQTZCO0FBQ2xDLFdBQVEsR0FBRUcsVUFBVSxDQUFDSCxRQUFRLElBQUksT0FBTyxNQUFYLENBQVQsQ0FBVixDQUF1Q0ksT0FBdkMsQ0FBK0MsQ0FBL0MsQ0FBa0QsS0FBNUQ7QUFDRCxHQUZNLE1BRUEsSUFBSUosUUFBUSxJQUFJLElBQWhCLEVBQXNCO0FBQzNCLFdBQVEsR0FBRUcsVUFBVSxDQUFDSCxRQUFRLEdBQUcsTUFBWixDQUFWLENBQThCSSxPQUE5QixDQUFzQyxDQUF0QyxDQUF5QyxLQUFuRDtBQUNEOztBQUNELFNBQVEsR0FBRUosUUFBUyxJQUFuQjtBQUNEOztBQVlELFNBQVNLLFNBQVQsQ0FBb0JDLFlBQXBCLEVBQWtDaEMsSUFBbEMsRUFBd0NpQyxVQUFVLEdBQUcsSUFBckQsRUFBMkQ7QUFDekQsUUFBTUMsT0FBTyxHQUFHRCxVQUFVLEdBQUdoQyxjQUFLa0MsS0FBUixHQUFnQmxDLGFBQTFDO0FBRHlELGNBRXpDLENBQUMrQixZQUFELEVBQWVoQyxJQUFmLENBRnlDOztBQUV6RCwrQ0FBc0M7QUFBakMsVUFBTW9DLENBQUMsYUFBUDs7QUFDSCxRQUFJLENBQUNGLE9BQU8sQ0FBQ0csVUFBUixDQUFtQkQsQ0FBbkIsQ0FBTCxFQUE0QjtBQUMxQixZQUFNLElBQUlSLEtBQUosQ0FBVyxJQUFHUSxDQUFFLHNDQUFoQixDQUFOO0FBQ0Q7QUFDRjs7QUFDRCxRQUFNRSxjQUFjLEdBQUdKLE9BQU8sQ0FBQ0ssU0FBUixDQUFrQnZDLElBQWxCLENBQXZCO0FBQ0EsUUFBTXdDLGNBQWMsR0FBR04sT0FBTyxDQUFDSyxTQUFSLENBQWtCUCxZQUFsQixDQUF2QjtBQUNBLFNBQU9RLGNBQWMsQ0FBQ0MsVUFBZixDQUEwQkgsY0FBMUIsQ0FBUDtBQUNEOztTQVdjSSxpQjs7Ozs7dURBQWYsV0FBa0NDLEtBQWxDLEVBQXlDQyxLQUF6QyxFQUFnRCxHQUFHQyxLQUFuRCxFQUEwRDtBQUN4RCxVQUFNQyxRQUFRLEdBQUcsQ0FBQ0gsS0FBRCxFQUFRQyxLQUFSLEVBQWUsR0FBR0MsS0FBbEIsQ0FBakI7O0FBQ0EsUUFBSSxRQUFPeEQsa0JBQUUwRCxNQUFGLENBQVNELFFBQVQ7QUFBQSxpREFBbUIsV0FBT0UsQ0FBUCxFQUFVQyxDQUFWO0FBQUEsZUFBZ0JELENBQUMsV0FBVUUsWUFBR0MsTUFBSCxDQUFVRixDQUFWLENBQVYsQ0FBakI7QUFBQSxPQUFuQjs7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUE0RCxJQUE1RCxDQUFQLENBQUosRUFBOEU7QUFDNUUsYUFBTyxLQUFQO0FBQ0Q7O0FBRUQsVUFBTUcsZ0JBQWdCLEdBQUlDLEdBQUQsSUFBUyxDQUFDLENBQUNBLEdBQUcsQ0FBQ04sTUFBSixDQUFXLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFVRCxDQUFDLEtBQUtDLENBQU4sR0FBVUQsQ0FBVixHQUFjTSxHQUFuQyxDQUFwQzs7QUFDQSxRQUFJRixnQkFBZ0IsQ0FBQ04sUUFBRCxDQUFwQixFQUFnQztBQUM5QixhQUFPLElBQVA7QUFDRDs7QUFDRCxXQUFPTSxnQkFBZ0IsUUFBTy9ELGtCQUFFVCxHQUFGLENBQU1rRSxRQUFOO0FBQUEsa0RBQWdCLFdBQU9TLENBQVA7QUFBQSxlQUFhLE9BQU9MLFlBQUdNLElBQUgsQ0FBUUQsQ0FBUixDQUFQLEVBQW1CRSxHQUFoQztBQUFBLE9BQWhCOztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVAsRUFBdkI7QUFDRCxHOzs7O0FBWUQsU0FBU0MsYUFBVCxDQUF3QkMsR0FBeEIsRUFBNkJDLE1BQU0sR0FBRyxJQUF0QyxFQUE0QztBQUMxQyxRQUFNQyxNQUFNLEdBQUdDLGdCQUFPQyxLQUFQLENBQWFELGdCQUFPRSxNQUFQLENBQWUsR0FBRUwsR0FBSSxFQUFyQixDQUFiLENBQWY7O0FBQ0EsTUFBSUMsTUFBTSxJQUFJLENBQUNDLE1BQWYsRUFBdUI7QUFDckIsVUFBTSxJQUFJakMsS0FBSixDQUFXLElBQUcrQixHQUFJLCtDQUFsQixDQUFOO0FBQ0Q7O0FBQ0QsU0FBT0UsTUFBUDtBQUNEOztBQUVELE1BQU1JLG1CQUFtQixHQUFHLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYSxHQUFiLEVBQWtCLEdBQWxCLEVBQXVCLElBQXZCLEVBQTZCLElBQTdCLEVBQW1DLEdBQW5DLENBQTVCOztBQWVBLFNBQVNDLGVBQVQsQ0FBMEJDLElBQTFCLEVBQWdDQyxRQUFoQyxFQUEwQ0MsSUFBMUMsRUFBZ0Q7QUFDOUMsTUFBSSxDQUFDSixtQkFBbUIsQ0FBQ0ssUUFBcEIsQ0FBNkJGLFFBQTdCLENBQUwsRUFBNkM7QUFDM0MsVUFBTSxJQUFJeEMsS0FBSixDQUFXLFFBQU93QyxRQUFTLDBDQUFqQixHQUNiLFNBQVFoRSxJQUFJLENBQUNtRSxTQUFMLENBQWVOLG1CQUFmLENBQW9DLDJCQUR6QyxDQUFOO0FBRUQ7O0FBRUQsUUFBTU8sY0FBYyxHQUFHLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYUYsUUFBYixDQUFzQkYsUUFBdEIsSUFBa0MsR0FBbEMsR0FBd0NBLFFBQS9EOztBQUNBLFFBQU1QLE1BQU0sR0FBR0MsZ0JBQU9XLFNBQVAsQ0FBaUJmLGFBQWEsQ0FBQ1MsSUFBRCxDQUE5QixFQUF1QyxHQUFFSyxjQUFlLEdBQUVkLGFBQWEsQ0FBQ1csSUFBRCxDQUFPLEVBQTlFLENBQWY7O0FBQ0EsU0FBT0QsUUFBUSxLQUFLLElBQWIsR0FBb0IsQ0FBQ1AsTUFBckIsR0FBOEJBLE1BQXJDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5jb25zdCBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiA9ICdlbGVtZW50LTYwNjYtMTFlNC1hNTJlLTRmNzM1NDY2Y2VjZic7XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNDb250ZW50ICh2YWwpIHtcbiAgcmV0dXJuIF8uaXNTdHJpbmcodmFsKSAmJiB2YWwgIT09ICcnO1xufVxuXG4vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgdGhlIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIG51bGwsIG9yIE5hTi5cbmZ1bmN0aW9uIGhhc1ZhbHVlICh2YWwpIHtcbiAgbGV0IGhhc1ZhbCA9IGZhbHNlO1xuICAvLyBhdm9pZCBpbmNvcnJlY3RseSBldmFsdWF0aW5nIGAwYCBhcyBmYWxzZVxuICBpZiAoXy5pc051bWJlcih2YWwpKSB7XG4gICAgaGFzVmFsID0gIV8uaXNOYU4odmFsKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNWYWwgPSAhXy5pc1VuZGVmaW5lZCh2YWwpICYmICFfLmlzTnVsbCh2YWwpO1xuICB9XG5cbiAgcmV0dXJuIGhhc1ZhbDtcbn1cblxuLy8gZXNjYXBlIHNwYWNlcyBpbiBzdHJpbmcsIGZvciBjb21tYW5kbGluZSBjYWxsc1xuZnVuY3Rpb24gZXNjYXBlU3BhY2UgKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8gLykuam9pbignXFxcXCAnKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlU3BlY2lhbENoYXJzIChzdHIsIHF1b3RlRXNjYXBlKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgaWYgKHR5cGVvZiBxdW90ZUVzY2FwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBxdW90ZUVzY2FwZSA9IGZhbHNlO1xuICB9XG4gIHN0ciA9IHN0clxuICAgIC5yZXBsYWNlKC9bXFxcXF0vZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvW1xcL10vZywgJ1xcXFwvJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgIC5yZXBsYWNlKC9bXFxiXS9nLCAnXFxcXGInKVxuICAgIC5yZXBsYWNlKC9bXFxmXS9nLCAnXFxcXGYnKVxuICAgIC5yZXBsYWNlKC9bXFxuXS9nLCAnXFxcXG4nKVxuICAgIC5yZXBsYWNlKC9bXFxyXS9nLCAnXFxcXHInKVxuICAgIC5yZXBsYWNlKC9bXFx0XS9nLCAnXFxcXHQnKVxuICAgIC5yZXBsYWNlKC9bXFxcIl0vZywgJ1xcXFxcIicpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAucmVwbGFjZSgvXFxcXCcvZywgXCJcXFxcJ1wiKTtcbiAgaWYgKHF1b3RlRXNjYXBlKSB7XG4gICAgbGV0IHJlID0gbmV3IFJlZ0V4cChxdW90ZUVzY2FwZSwgJ2cnKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShyZSwgYFxcXFwke3F1b3RlRXNjYXBlfWApO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGxvY2FsSXAgKCkge1xuICBsZXQgaXAgPSBfLmNoYWluKG9zLm5ldHdvcmtJbnRlcmZhY2VzKCkpXG4gICAgLnZhbHVlcygpXG4gICAgLmZsYXR0ZW4oKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuICh2YWwuZmFtaWx5ID09PSAnSVB2NCcgJiYgdmFsLmludGVybmFsID09PSBmYWxzZSk7XG4gICAgfSlcbiAgICAubWFwKCdhZGRyZXNzJylcbiAgICAuZmlyc3QoKVxuICAgIC52YWx1ZSgpO1xuICByZXR1cm4gaXA7XG59XG5cbi8qXG4gKiBDcmVhdGVzIGEgcHJvbWlzZSB0aGF0IGlzIGNhbmNlbGxhYmxlLCBhbmQgd2lsbCB0aW1lb3V0XG4gKiBhZnRlciBgbXNgIGRlbGF5XG4gKi9cbmZ1bmN0aW9uIGNhbmNlbGxhYmxlRGVsYXkgKG1zKSB7XG4gIGxldCB0aW1lcjtcbiAgbGV0IHJlc29sdmU7XG4gIGxldCByZWplY3Q7XG5cbiAgY29uc3QgZGVsYXkgPSBuZXcgQi5Qcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgIHJlc29sdmUgPSBfcmVzb2x2ZTtcbiAgICByZWplY3QgPSBfcmVqZWN0O1xuICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSwgbXMpO1xuICB9KTtcblxuICAvLyBvdmVycmlkZSBCbHVlYmlyZCdzIGBjYW5jZWxgLCB3aGljaCBkb2VzIG5vdCB3b3JrIHdoZW4gdXNpbmcgYGF3YWl0YCBvblxuICAvLyBhIHByb21pc2UsIHNpbmNlIGByZXNvbHZlYC9gcmVqZWN0YCBhcmUgbmV2ZXIgY2FsbGVkXG4gIGRlbGF5LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHJlamVjdChuZXcgQi5DYW5jZWxsYXRpb25FcnJvcigpKTtcbiAgfTtcbiAgcmV0dXJuIGRlbGF5O1xufVxuXG5mdW5jdGlvbiBtdWx0aVJlc29sdmUgKHJvb3RzLCAuLi5hcmdzKSB7XG4gIHJldHVybiByb290cy5tYXAoKHJvb3QpID0+IHtcbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHJvb3QsIC4uLmFyZ3MpO1xuICB9KTtcbn1cblxuLypcbiAqIFBhcnNlcyBhbiBvYmplY3QgaWYgcG9zc2libGUuIE90aGVyd2lzZSByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCBwYXJzaW5nLlxuICovXG5mdW5jdGlvbiBzYWZlSnNvblBhcnNlIChvYmopIHtcbiAgdHJ5IHtcbiAgICBvYmogPSBKU09OLnBhcnNlKG9iaik7XG4gIH0gY2F0Y2ggKGlnbikge1xuICAgIC8vIGlnbm9yZTogdGhpcyBpcyBub3QganNvbiBwYXJzYWJsZVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qXG4gKiBSZW1vdmVzIHRoZSB3cmFwcGVyIGZyb20gZWxlbWVudCwgaWYgaXQgZXhpc3RzLlxuICogICB7IEVMRU1FTlQ6IDQgfSBiZWNvbWVzIDRcbiAqICAgeyBlbGVtZW50LTYwNjYtMTFlNC1hNTJlLTRmNzM1NDY2Y2VjZjogNSB9IGJlY29tZXMgNVxuICovXG5mdW5jdGlvbiB1bndyYXBFbGVtZW50IChlbCkge1xuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiwgJ0VMRU1FTlQnXSkge1xuICAgIGlmIChfLmhhcyhlbCwgcHJvcE5hbWUpKSB7XG4gICAgICByZXR1cm4gZWxbcHJvcE5hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmZ1bmN0aW9uIHdyYXBFbGVtZW50IChlbGVtZW50SWQpIHtcbiAgcmV0dXJuIHtcbiAgICBFTEVNRU5UOiBlbGVtZW50SWQsXG4gICAgW1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSXTogZWxlbWVudElkLFxuICB9O1xufVxuXG4vKlxuICogUmV0dXJucyBvYmplY3QgY29uc2lzdGluZyBvZiBhbGwgcHJvcGVydGllcyBpbiB0aGUgb3JpZ2luYWwgZWxlbWVudFxuICogd2hpY2ggd2VyZSB0cnV0aHkgZ2l2ZW4gdGhlIHByZWRpY2F0ZS5cbiAqIElmIHRoZSBwcmVkaWNhdGUgaXNcbiAqICAgKiBtaXNzaW5nIC0gaXQgd2lsbCByZW1vdmUgYWxsIHByb3BlcnRpZXMgd2hvc2UgdmFsdWVzIGFyZSBgdW5kZWZpbmVkYFxuICogICAqIGEgc2NhbGFyIC0gaXQgd2lsbCB0ZXN0IGFsbCBwcm9wZXJ0aWVzJyB2YWx1ZXMgYWdhaW5zdCB0aGF0IHZhbHVlXG4gKiAgICogYSBmdW5jdGlvbiAtIGl0IHdpbGwgcGFzcyBlYWNoIHZhbHVlIGFuZCB0aGUgb3JpZ2luYWwgb2JqZWN0IGludG8gdGhlIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGZpbHRlck9iamVjdCAob2JqLCBwcmVkaWNhdGUpIHtcbiAgbGV0IG5ld09iaiA9IF8uY2xvbmUob2JqKTtcbiAgaWYgKF8uaXNVbmRlZmluZWQocHJlZGljYXRlKSkge1xuICAgIC8vIHJlbW92ZSBhbnkgZWxlbWVudCBmcm9tIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdW5kZWZpbmVkXG4gICAgcHJlZGljYXRlID0gKHYpID0+ICFfLmlzVW5kZWZpbmVkKHYpO1xuICB9IGVsc2UgaWYgKCFfLmlzRnVuY3Rpb24ocHJlZGljYXRlKSkge1xuICAgIC8vIG1ha2UgcHJlZGljYXRlIGludG8gYSBmdW5jdGlvblxuICAgIGNvbnN0IHZhbHVlUHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIHByZWRpY2F0ZSA9ICh2KSA9PiB2ID09PSB2YWx1ZVByZWRpY2F0ZTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgaWYgKCFwcmVkaWNhdGUob2JqW2tleV0sIG9iaikpIHtcbiAgICAgIGRlbGV0ZSBuZXdPYmpba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld09iajtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBudW1iZXIgb2YgYnl0ZXMgdG8gYSByZWFkYWJsZSBzaXplIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGJ5dGVzIC0gVGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiwgZm9yIGV4YW1wbGVcbiAqICAgICAgICAgICAgICAgICAgICcxLjAwIEtCJyBmb3IgJzEwMjQgQidcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBieXRlcyBjb3VudCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGFuIGludGVnZXIgb3JcbiAqICAgICAgICAgICAgICAgICBpZiBpdCBpcyBsZXNzIHRoYW4gemVyby5cbiAqL1xuZnVuY3Rpb24gdG9SZWFkYWJsZVNpemVTdHJpbmcgKGJ5dGVzKSB7XG4gIGNvbnN0IGludEJ5dGVzID0gcGFyc2VJbnQoYnl0ZXMsIDEwKTtcbiAgaWYgKGlzTmFOKGludEJ5dGVzKSB8fCBpbnRCeXRlcyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICcke2J5dGVzfScgdG8gYSByZWFkYWJsZSBzaXplIGZvcm1hdGApO1xuICB9XG4gIGlmIChpbnRCeXRlcyA+PSAxMDI0ICogMTAyNCAqIDEwMjQpIHtcbiAgICByZXR1cm4gYCR7cGFyc2VGbG9hdChpbnRCeXRlcyAvICgxMDI0ICogMTAyNCAqIDEwMjQuMCkpLnRvRml4ZWQoMil9IEdCYDtcbiAgfSBlbHNlIGlmIChpbnRCeXRlcyA+PSAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KGludEJ5dGVzIC8gKDEwMjQgKiAxMDI0LjApKS50b0ZpeGVkKDIpfSBNQmA7XG4gIH0gZWxzZSBpZiAoaW50Qnl0ZXMgPj0gMTAyNCkge1xuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KGludEJ5dGVzIC8gMTAyNC4wKS50b0ZpeGVkKDIpfSBLQmA7XG4gIH1cbiAgcmV0dXJuIGAke2ludEJ5dGVzfSBCYDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBpcyBhIHN1YnBhdGggb2YgdGhlXG4gKiBwYXJ0aWN1bGFyIHJvb3QgZm9sZGVyLiBCb3RoIHBhdGhzIGNhbiBpbmNsdWRlIC4uIGFuZCAuIHNwZWNpZmllcnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxQYXRoIFRoZSBhYnNvbHV0ZSBmaWxlL2ZvbGRlciBwYXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9vdCBUaGUgYWJzb2x1dGUgcm9vdCBmb2xkZXIgcGF0aFxuICogQHBhcmFtIHs/Ym9vbGVhbn0gZm9yY2VQb3NpeCBTZXQgaXQgdG8gdHJ1ZSBpZiBwYXRocyBtdXN0IGJlIGludGVycHJldGVkIGluIFBPU0lYIGZvcm1hdFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIG9yaWdpbmFsIHBhdGggaXMgdGhlIHN1YnBhdGggb2YgdGhlIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW55IG9mIHRoZSBnaXZlbiBwYXRocyBpcyBub3QgYWJzb2x1dGVcbiAqL1xuZnVuY3Rpb24gaXNTdWJQYXRoIChvcmlnaW5hbFBhdGgsIHJvb3QsIGZvcmNlUG9zaXggPSBudWxsKSB7XG4gIGNvbnN0IHBhdGhPYmogPSBmb3JjZVBvc2l4ID8gcGF0aC5wb3NpeCA6IHBhdGg7XG4gIGZvciAoY29uc3QgcCBvZiBbb3JpZ2luYWxQYXRoLCByb290XSkge1xuICAgIGlmICghcGF0aE9iai5pc0Fic29sdXRlKHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3B9JyBpcyBleHBlY3RlZCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290ID0gcGF0aE9iai5ub3JtYWxpemUocm9vdCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aE9iai5ub3JtYWxpemUob3JpZ2luYWxQYXRoKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3QpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRocyBhcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZSBzeXN0ZW1cbiAqIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoMSAtIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gYSBmaWxlL2ZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGgyIC0gQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUvZm9sZGVyXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcGF0aE4gLSBaZXJvIG9yIG1vcmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gZmlsZXMvZm9sZGVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYWxsIHBhdGhzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlIHN5c3RlbSBpdGVtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzU2FtZURlc3RpbmF0aW9uIChwYXRoMSwgcGF0aDIsIC4uLnBhdGhOKSB7XG4gIGNvbnN0IGFsbFBhdGhzID0gW3BhdGgxLCBwYXRoMiwgLi4ucGF0aE5dO1xuICBpZiAoIWF3YWl0IEIucmVkdWNlKGFsbFBhdGhzLCBhc3luYyAoYSwgYikgPT4gYSAmJiBhd2FpdCBmcy5leGlzdHMoYiksIHRydWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYXJlQWxsSXRlbXNFcXVhbCA9IChhcnIpID0+ICEhYXJyLnJlZHVjZSgoYSwgYikgPT4gYSA9PT0gYiA/IGEgOiBOYU4pO1xuICBpZiAoYXJlQWxsSXRlbXNFcXVhbChhbGxQYXRocykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gYXJlQWxsSXRlbXNFcXVhbChhd2FpdCBCLm1hcChhbGxQYXRocywgYXN5bmMgKHgpID0+IChhd2FpdCBmcy5zdGF0KHgpKS5pbm8pKTtcbn1cblxuLyoqXG4gKiBDb2VyY2VzIHRoZSBnaXZlbiBudW1iZXIvc3RyaW5nIHRvIGEgdmFsaWQgdmVyc2lvbiBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHZlciAtIFZlcnNpb24gc3RyaW5nIHRvIGNvZXJjZVxuICogQHBhcmFtIHtib29sZWFufSBzdHJpY3QgW3RydWVdIC0gSWYgdHJ1ZSB0aGVuIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93blxuICogaWYgYHZlcmAgY2Fubm90IGJlIGNvZXJjZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvZXJjZWQgdmVyc2lvbiBudW1iZXIgb3IgbnVsbCBpZiB0aGUgc3RyaW5nIGNhbm5vdCBiZVxuICogY29lcmNlZCBhbmQgc3RyaWN0IG1vZGUgaXMgZGlzYWJsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkIGFuZCBgdmVyYCBjYW5ub3QgYmUgY29lcmNlZFxuICovXG5mdW5jdGlvbiBjb2VyY2VWZXJzaW9uICh2ZXIsIHN0cmljdCA9IHRydWUpIHtcbiAgY29uc3QgcmVzdWx0ID0gc2VtdmVyLnZhbGlkKHNlbXZlci5jb2VyY2UoYCR7dmVyfWApKTtcbiAgaWYgKHN0cmljdCAmJiAhcmVzdWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHt2ZXJ9JyBjYW5ub3QgYmUgY29lcmNlZCB0byBhIHZhbGlkIHZlcnNpb24gbnVtYmVyYCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgU1VQUE9SVEVEX09QRVJBVE9SUyA9IFsnPT0nLCAnIT0nLCAnPicsICc8JywgJz49JywgJzw9JywgJz0nXTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gdmVyc2lvbiBzdHJpbmdzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2ZXIxIC0gVGhlIGZpcnN0IHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUuIFNob3VsZCBiZSBhIHZhbGlkXG4gKiB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgYnkgc2VtdmVyIHBhcnNlci5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmVyMiAtIFRoZSBzZWNvbmQgdmVyc2lvbiBudW1iZXIgdG8gY29tcGFyZS4gU2hvdWxkIGJlIGEgdmFsaWRcbiAqIHZlcnNpb24gbnVtYmVyIHN1cHBvcnRlZCBieSBzZW12ZXIgcGFyc2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIC0gT25lIG9mIHN1cHBvcnRlZCB2ZXJzaW9uIG51bWJlciBvcGVyYXRvcnM6XG4gKiA9PSwgIT0sID4sIDwsIDw9LCA+PSwgPVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgb3IgZmFsc2UgZGVwZW5kaW5nIG9uIHRoZSBhY3R1YWwgY29tcGFyaXNvbiByZXN1bHRcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBhbiB1bnN1cHBvcnRlZCBvcGVyYXRvciBpcyBzdXBwbGllZCBvciBhbnkgb2YgdGhlIHN1cHBsaWVkXG4gKiB2ZXJzaW9uIHN0cmluZ3MgY2Fubm90IGJlIGNvZXJjZWRcbiAqL1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zICh2ZXIxLCBvcGVyYXRvciwgdmVyMikge1xuICBpZiAoIVNVUFBPUlRFRF9PUEVSQVRPUlMuaW5jbHVkZXMob3BlcmF0b3IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJyR7b3BlcmF0b3J9JyBjb21wYXJpc29uIG9wZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQuIGAgK1xuICAgICAgYE9ubHkgJyR7SlNPTi5zdHJpbmdpZnkoU1VQUE9SVEVEX09QRVJBVE9SUyl9JyBvcGVyYXRvcnMgYXJlIHN1cHBvcnRlZGApO1xuICB9XG5cbiAgY29uc3Qgc2VtdmVyT3BlcmF0b3IgPSBbJz09JywgJyE9J10uaW5jbHVkZXMob3BlcmF0b3IpID8gJz0nIDogb3BlcmF0b3I7XG4gIGNvbnN0IHJlc3VsdCA9IHNlbXZlci5zYXRpc2ZpZXMoY29lcmNlVmVyc2lvbih2ZXIxKSwgYCR7c2VtdmVyT3BlcmF0b3J9JHtjb2VyY2VWZXJzaW9uKHZlcjIpfWApO1xuICByZXR1cm4gb3BlcmF0b3IgPT09ICchPScgPyAhcmVzdWx0IDogcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBoYXNWYWx1ZSwgZXNjYXBlU3BhY2UsIGVzY2FwZVNwZWNpYWxDaGFycywgbG9jYWxJcCwgY2FuY2VsbGFibGVEZWxheSxcbiAgbXVsdGlSZXNvbHZlLCBzYWZlSnNvblBhcnNlLCB3cmFwRWxlbWVudCwgdW53cmFwRWxlbWVudCwgZmlsdGVyT2JqZWN0LFxuICB0b1JlYWRhYmxlU2l6ZVN0cmluZywgaXNTdWJQYXRoLCBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUixcbiAgaXNTYW1lRGVzdGluYXRpb24sIGNvbXBhcmVWZXJzaW9ucywgY29lcmNlVmVyc2lvbixcbn07XG4iXSwiZmlsZSI6ImxpYi91dGlsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlsLmpzIl0sIm5hbWVzIjpbIlczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIiwiaGFzQ29udGVudCIsInZhbCIsIl8iLCJpc1N0cmluZyIsImhhc1ZhbHVlIiwiaGFzVmFsIiwiaXNOdW1iZXIiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiZXNjYXBlU3BhY2UiLCJzdHIiLCJzcGxpdCIsImpvaW4iLCJlc2NhcGVTcGVjaWFsQ2hhcnMiLCJxdW90ZUVzY2FwZSIsInJlcGxhY2UiLCJyZSIsIlJlZ0V4cCIsImxvY2FsSXAiLCJpcCIsImNoYWluIiwib3MiLCJuZXR3b3JrSW50ZXJmYWNlcyIsInZhbHVlcyIsImZsYXR0ZW4iLCJmaWx0ZXIiLCJmYW1pbHkiLCJpbnRlcm5hbCIsIm1hcCIsImZpcnN0IiwidmFsdWUiLCJjYW5jZWxsYWJsZURlbGF5IiwibXMiLCJ0aW1lciIsInJlc29sdmUiLCJyZWplY3QiLCJkZWxheSIsIkIiLCJQcm9taXNlIiwiX3Jlc29sdmUiLCJfcmVqZWN0Iiwic2V0VGltZW91dCIsImNhbmNlbCIsImNsZWFyVGltZW91dCIsIkNhbmNlbGxhdGlvbkVycm9yIiwibXVsdGlSZXNvbHZlIiwicm9vdHMiLCJhcmdzIiwicm9vdCIsInBhdGgiLCJzYWZlSnNvblBhcnNlIiwib2JqIiwiSlNPTiIsInBhcnNlIiwiaWduIiwidW53cmFwRWxlbWVudCIsImVsIiwicHJvcE5hbWUiLCJoYXMiLCJ3cmFwRWxlbWVudCIsImVsZW1lbnRJZCIsIkVMRU1FTlQiLCJmaWx0ZXJPYmplY3QiLCJwcmVkaWNhdGUiLCJuZXdPYmoiLCJjbG9uZSIsInYiLCJpc0Z1bmN0aW9uIiwidmFsdWVQcmVkaWNhdGUiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJieXRlcyIsImludEJ5dGVzIiwicGFyc2VJbnQiLCJFcnJvciIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwiaXNTdWJQYXRoIiwib3JpZ2luYWxQYXRoIiwiZm9yY2VQb3NpeCIsInBhdGhPYmoiLCJwb3NpeCIsInAiLCJpc0Fic29sdXRlIiwibm9ybWFsaXplZFJvb3QiLCJub3JtYWxpemUiLCJub3JtYWxpemVkUGF0aCIsInN0YXJ0c1dpdGgiLCJpc1NhbWVEZXN0aW5hdGlvbiIsInBhdGgxIiwicGF0aDIiLCJwYXRoTiIsImFsbFBhdGhzIiwicmVkdWNlIiwiYSIsImIiLCJmcyIsImV4aXN0cyIsImFyZUFsbEl0ZW1zRXF1YWwiLCJhcnIiLCJOYU4iLCJ4Iiwic3RhdCIsImlubyIsImNvZXJjZVZlcnNpb24iLCJ2ZXIiLCJzdHJpY3QiLCJyZXN1bHQiLCJzZW12ZXIiLCJ2YWxpZCIsImNvZXJjZSIsIlNVUFBPUlRFRF9PUEVSQVRPUlMiLCJjb21wYXJlVmVyc2lvbnMiLCJ2ZXIxIiwib3BlcmF0b3IiLCJ2ZXIyIiwiaW5jbHVkZXMiLCJzdHJpbmdpZnkiLCJzZW12ZXJPcGVyYXRvciIsInNhdGlzZmllcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsMEJBQTBCLEdBQUcscUNBQW5DOzs7QUFFTyxTQUFTQyxVQUFULENBQXFCQyxHQUFyQixFQUEwQjtBQUMvQixTQUFPQyxnQkFBRUMsUUFBRixDQUFXRixHQUFYLEtBQW1CQSxHQUFHLEtBQUssRUFBbEM7QUFDRDs7QUFHRCxTQUFTRyxRQUFULENBQW1CSCxHQUFuQixFQUF3QjtBQUN0QixNQUFJSSxNQUFNLEdBQUcsS0FBYjs7QUFFQSxNQUFJSCxnQkFBRUksUUFBRixDQUFXTCxHQUFYLENBQUosRUFBcUI7QUFDbkJJLElBQUFBLE1BQU0sR0FBRyxDQUFDSCxnQkFBRUssS0FBRixDQUFRTixHQUFSLENBQVY7QUFDRCxHQUZELE1BRU87QUFDTEksSUFBQUEsTUFBTSxHQUFHLENBQUNILGdCQUFFTSxXQUFGLENBQWNQLEdBQWQsQ0FBRCxJQUF1QixDQUFDQyxnQkFBRU8sTUFBRixD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U0FBUCxDQUFpQmYsYUFBYSxDQUFDUyxJQUFELENBQTlCLEVBQXVDLEdBQUVLLGNBQWUsR0FBRWQsYUFBYSxDQUFDVyxJQUFELENBQU8sRUFBOUUsQ0FBZjs7QUFDQSxTQUFPRCxRQUFRLEtBQUssSUFBYixHQUFvQixDQUFDUCxNQUFyQixHQUE4QkEsTUFBckM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmNvbnN0IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSID0gJ2VsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmJztcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbnRlbnQgKHZhbCkge1xuICByZXR1cm4gXy5pc1N0cmluZyh2YWwpICYmIHZhbCAhPT0gJyc7XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIHRoZSB0aGUgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgbnVsbCwgb3IgTmFOLlxuZnVuY3Rpb24gaGFzVmFsdWUgKHZhbCkge1xuICBsZXQgaGFzVmFsID0gZmFsc2U7XG4gIC8vIGF2b2lkIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYDBgIGFzIGZhbHNlXG4gIGlmIChfLmlzTnVtYmVyKHZhbCkpIHtcbiAgICBoYXNWYWwgPSAhXy5pc05hTih2YWwpO1xuICB9IGVsc2Uge1xuICAgIGhhc1ZhbCA9ICFfLmlzVW5kZWZpbmVkKHZhbCkgJiYgIV8uaXNOdWxsKHZhbCk7XG4gIH1cblxuICByZXR1cm4gaGFzVmFsO1xufVxuXG4vLyBlc2NhcGUgc3BhY2VzIGluIHN0cmluZywgZm9yIGNvbW1hbmRsaW5lIGNhbGxzXG5mdW5jdGlvbiBlc2NhcGVTcGFjZSAoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyAvKS5qb2luKCdcXFxcICcpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTcGVjaWFsQ2hhcnMgKHN0ciwgcXVvdGVFc2NhcGUpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBpZiAodHlwZW9mIHF1b3RlRXNjYXBlID09PSAndW5kZWZpbmVkJykge1xuICAgIHF1b3RlRXNjYXBlID0gZmFsc2U7XG4gIH1cbiAgc3RyID0gc3RyXG4gICAgLnJlcGxhY2UoL1tcXFxcXS9nLCAnXFxcXFxcXFwnKVxuICAgIC5yZXBsYWNlKC9bXFwvXS9nLCAnXFxcXC8nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgLnJlcGxhY2UoL1tcXGJdL2csICdcXFxcYicpXG4gICAgLnJlcGxhY2UoL1tcXGZdL2csICdcXFxcZicpXG4gICAgLnJlcGxhY2UoL1tcXG5dL2csICdcXFxcbicpXG4gICAgLnJlcGxhY2UoL1tcXHJdL2csICdcXFxccicpXG4gICAgLnJlcGxhY2UoL1tcXHRdL2csICdcXFxcdCcpXG4gICAgLnJlcGxhY2UoL1tcXFwiXS9nLCAnXFxcXFwiJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgIC5yZXBsYWNlKC9cXFxcJy9nLCBcIlxcXFwnXCIpO1xuICBpZiAocXVvdGVFc2NhcGUpIHtcbiAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKHF1b3RlRXNjYXBlLCAnZycpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKHJlLCBgXFxcXCR7cXVvdGVFc2NhcGV9YCk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gbG9jYWxJcCAoKSB7XG4gIGxldCBpcCA9IF8uY2hhaW4ob3MubmV0d29ya0ludGVyZmFjZXMoKSlcbiAgICAudmFsdWVzKClcbiAgICAuZmxhdHRlbigpXG4gICAgLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gKHZhbC5mYW1pbHkgPT09ICdJUHY0JyAmJiB2YWwuaW50ZXJuYWwgPT09IGZhbHNlKTtcbiAgICB9KVxuICAgIC5tYXAoJ2FkZHJlc3MnKVxuICAgIC5maXJzdCgpXG4gICAgLnZhbHVlKCk7XG4gIHJldHVybiBpcDtcbn1cblxuLypcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgaXMgY2FuY2VsbGFibGUsIGFuZCB3aWxsIHRpbWVvdXRcbiAqIGFmdGVyIGBtc2AgZGVsYXlcbiAqL1xuZnVuY3Rpb24gY2FuY2VsbGFibGVEZWxheSAobXMpIHtcbiAgbGV0IHRpbWVyO1xuICBsZXQgcmVzb2x2ZTtcbiAgbGV0IHJlamVjdDtcblxuICBjb25zdCBkZWxheSA9IG5ldyBCLlByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9LCBtcyk7XG4gIH0pO1xuXG4gIC8vIG92ZXJyaWRlIEJsdWViaXJkJ3MgYGNhbmNlbGAsIHdoaWNoIGRvZXMgbm90IHdvcmsgd2hlbiB1c2luZyBgYXdhaXRgIG9uXG4gIC8vIGEgcHJvbWlzZSwgc2luY2UgYHJlc29sdmVgL2ByZWplY3RgIGFyZSBuZXZlciBjYWxsZWRcbiAgZGVsYXkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgcmVqZWN0KG5ldyBCLkNhbmNlbGxhdGlvbkVycm9yKCkpO1xuICB9O1xuICByZXR1cm4gZGVsYXk7XG59XG5cbmZ1bmN0aW9uIG11bHRpUmVzb2x2ZSAocm9vdHMsIC4uLmFyZ3MpIHtcbiAgcmV0dXJuIHJvb3RzLm1hcCgocm9vdCkgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlc29sdmUocm9vdCwgLi4uYXJncyk7XG4gIH0pO1xufVxuXG4vKlxuICogUGFyc2VzIGFuIG9iamVjdCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IHBhcnNpbmcuXG4gKi9cbmZ1bmN0aW9uIHNhZmVKc29uUGFyc2UgKG9iaikge1xuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2Uob2JqKTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgLy8gaWdub3JlOiB0aGlzIGlzIG5vdCBqc29uIHBhcnNhYmxlXG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLypcbiAqIFJlbW92ZXMgdGhlIHdyYXBwZXIgZnJvbSBlbGVtZW50LCBpZiBpdCBleGlzdHMuXG4gKiAgIHsgRUxFTUVOVDogNCB9IGJlY29tZXMgNFxuICogICB7IGVsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmOiA1IH0gYmVjb21lcyA1XG4gKi9cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQgKGVsKSB7XG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgW1czQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSLCAnRUxFTUVOVCddKSB7XG4gICAgaWYgKF8uaGFzKGVsLCBwcm9wTmFtZSkpIHtcbiAgICAgIHJldHVybiBlbFtwcm9wTmFtZV07XG4gICAgfVxuICB9XG4gIHJldHVybiBlbDtcbn1cblxuZnVuY3Rpb24gd3JhcEVsZW1lbnQgKGVsZW1lbnRJZCkge1xuICByZXR1cm4ge1xuICAgIEVMRU1FTlQ6IGVsZW1lbnRJZCxcbiAgICBbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdOiBlbGVtZW50SWQsXG4gIH07XG59XG5cbi8qXG4gKiBSZXR1cm5zIG9iamVjdCBjb25zaXN0aW5nIG9mIGFsbCBwcm9wZXJ0aWVzIGluIHRoZSBvcmlnaW5hbCBlbGVtZW50XG4gKiB3aGljaCB3ZXJlIHRydXRoeSBnaXZlbiB0aGUgcHJlZGljYXRlLlxuICogSWYgdGhlIHByZWRpY2F0ZSBpc1xuICogICAqIG1pc3NpbmcgLSBpdCB3aWxsIHJlbW92ZSBhbGwgcHJvcGVydGllcyB3aG9zZSB2YWx1ZXMgYXJlIGB1bmRlZmluZWRgXG4gKiAgICogYSBzY2FsYXIgLSBpdCB3aWxsIHRlc3QgYWxsIHByb3BlcnRpZXMnIHZhbHVlcyBhZ2FpbnN0IHRoYXQgdmFsdWVcbiAqICAgKiBhIGZ1bmN0aW9uIC0gaXQgd2lsbCBwYXNzIGVhY2ggdmFsdWUgYW5kIHRoZSBvcmlnaW5hbCBvYmplY3QgaW50byB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmlsdGVyT2JqZWN0IChvYmosIHByZWRpY2F0ZSkge1xuICBsZXQgbmV3T2JqID0gXy5jbG9uZShvYmopO1xuICBpZiAoXy5pc1VuZGVmaW5lZChwcmVkaWNhdGUpKSB7XG4gICAgLy8gcmVtb3ZlIGFueSBlbGVtZW50IGZyb20gdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAgICBwcmVkaWNhdGUgPSAodikgPT4gIV8uaXNVbmRlZmluZWQodik7XG4gIH0gZWxzZSBpZiAoIV8uaXNGdW5jdGlvbihwcmVkaWNhdGUpKSB7XG4gICAgLy8gbWFrZSBwcmVkaWNhdGUgaW50byBhIGZ1bmN0aW9uXG4gICAgY29uc3QgdmFsdWVQcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgcHJlZGljYXRlID0gKHYpID0+IHYgPT09IHZhbHVlUHJlZGljYXRlO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBpZiAoIXByZWRpY2F0ZShvYmpba2V5XSwgb2JqKSkge1xuICAgICAgZGVsZXRlIG5ld09ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3T2JqO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIG51bWJlciBvZiBieXRlcyB0byBhIHJlYWRhYmxlIHNpemUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gYnl0ZXMgLSBUaGUgYWN0dWFsIG51bWJlciBvZiBieXRlcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhY3R1YWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBmb3IgZXhhbXBsZVxuICogICAgICAgICAgICAgICAgICAgJzEuMDAgS0InIGZvciAnMTAyNCBCJ1xuICogQHRocm93cyB7RXJyb3J9IElmIGJ5dGVzIGNvdW50IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvclxuICogICAgICAgICAgICAgICAgIGlmIGl0IGlzIGxlc3MgdGhhbiB6ZXJvLlxuICovXG5mdW5jdGlvbiB0b1JlYWRhYmxlU2l6ZVN0cmluZyAoYnl0ZXMpIHtcbiAgY29uc3QgaW50Qnl0ZXMgPSBwYXJzZUludChieXRlcywgMTApO1xuICBpZiAoaXNOYU4oaW50Qnl0ZXMpIHx8IGludEJ5dGVzIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJyR7Ynl0ZXN9JyB0byBhIHJlYWRhYmxlIHNpemUgZm9ybWF0YCk7XG4gIH1cbiAgaWYgKGludEJ5dGVzID49IDEwMjQgKiAxMDI0ICogMTAyNCkge1xuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KGludEJ5dGVzIC8gKDEwMjQgKiAxMDI0ICogMTAyNC4wKSkudG9GaXhlZCgyKX0gR0JgO1xuICB9IGVsc2UgaWYgKGludEJ5dGVzID49IDEwMjQgKiAxMDI0KSB7XG4gICAgcmV0dXJuIGAke3BhcnNlRmxvYXQoaW50Qnl0ZXMgLyAoMTAyNCAqIDEwMjQuMCkpLnRvRml4ZWQoMil9IE1CYDtcbiAgfSBlbHNlIGlmIChpbnRCeXRlcyA+PSAxMDI0KSB7XG4gICAgcmV0dXJuIGAke3BhcnNlRmxvYXQoaW50Qnl0ZXMgLyAxMDI0LjApLnRvRml4ZWQoMil9IEtCYDtcbiAgfVxuICByZXR1cm4gYCR7aW50Qnl0ZXN9IEJgO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRoIGlzIGEgc3VicGF0aCBvZiB0aGVcbiAqIHBhcnRpY3VsYXIgcm9vdCBmb2xkZXIuIEJvdGggcGF0aHMgY2FuIGluY2x1ZGUgLi4gYW5kIC4gc3BlY2lmaWVyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbFBhdGggVGhlIGFic29sdXRlIGZpbGUvZm9sZGVyIHBhdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSByb290IFRoZSBhYnNvbHV0ZSByb290IGZvbGRlciBwYXRoXG4gKiBAcGFyYW0gez9ib29sZWFufSBmb3JjZVBvc2l4IFNldCBpdCB0byB0cnVlIGlmIHBhdGhzIG11c3QgYmUgaW50ZXJwcmV0ZWQgaW4gUE9TSVggZm9ybWF0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gb3JpZ2luYWwgcGF0aCBpcyB0aGUgc3VicGF0aCBvZiB0aGUgcm9vdCBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBhbnkgb2YgdGhlIGdpdmVuIHBhdGhzIGlzIG5vdCBhYnNvbHV0ZVxuICovXG5mdW5jdGlvbiBpc1N1YlBhdGggKG9yaWdpbmFsUGF0aCwgcm9vdCwgZm9yY2VQb3NpeCA9IG51bGwpIHtcbiAgY29uc3QgcGF0aE9iaiA9IGZvcmNlUG9zaXggPyBwYXRoLnBvc2l4IDogcGF0aDtcbiAgZm9yIChjb25zdCBwIG9mIFtvcmlnaW5hbFBhdGgsIHJvb3RdKSB7XG4gICAgaWYgKCFwYXRoT2JqLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7cH0nIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFic29sdXRlIHBhdGhgKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSBwYXRoT2JqLm5vcm1hbGl6ZShyb290KTtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoT2JqLm5vcm1hbGl6ZShvcmlnaW5hbFBhdGgpO1xuICByZXR1cm4gbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkUm9vdCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHBhdGhzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlIHN5c3RlbVxuICogZGVzdGluYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGgxIC0gQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUvZm9sZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aDIgLSBBYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGEgZmlsZS9mb2xkZXJcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwYXRoTiAtIFplcm8gb3IgbW9yZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRocyB0byBmaWxlcy9mb2xkZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbGwgcGF0aHMgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGUgc3lzdGVtIGl0ZW1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNTYW1lRGVzdGluYXRpb24gKHBhdGgxLCBwYXRoMiwgLi4ucGF0aE4pIHtcbiAgY29uc3QgYWxsUGF0aHMgPSBbcGF0aDEsIHBhdGgyLCAuLi5wYXRoTl07XG4gIGlmICghYXdhaXQgQi5yZWR1Y2UoYWxsUGF0aHMsIGFzeW5jIChhLCBiKSA9PiBhICYmIGF3YWl0IGZzLmV4aXN0cyhiKSwgdHJ1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhcmVBbGxJdGVtc0VxdWFsID0gKGFycikgPT4gISFhcnIucmVkdWNlKChhLCBiKSA9PiBhID09PSBiID8gYSA6IE5hTik7XG4gIGlmIChhcmVBbGxJdGVtc0VxdWFsKGFsbFBhdGhzKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBhcmVBbGxJdGVtc0VxdWFsKGF3YWl0IEIubWFwKGFsbFBhdGhzLCBhc3luYyAoeCkgPT4gKGF3YWl0IGZzLnN0YXQoeCkpLmlubykpO1xufVxuXG4vKipcbiAqIENvZXJjZXMgdGhlIGdpdmVuIG51bWJlci9zdHJpbmcgdG8gYSB2YWxpZCB2ZXJzaW9uIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmVyIC0gVmVyc2lvbiBzdHJpbmcgdG8gY29lcmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN0cmljdCBbdHJ1ZV0gLSBJZiB0cnVlIHRoZW4gYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duXG4gKiBpZiBgdmVyYCBjYW5ub3QgYmUgY29lcmNlZFxuICogQHJldHVybnMge3N0cmluZ30gQ29lcmNlZCB2ZXJzaW9uIG51bWJlciBvciBudWxsIGlmIHRoZSBzdHJpbmcgY2Fubm90IGJlXG4gKiBjb2VyY2VkIGFuZCBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZFxuICogQHRocm93cyB7RXJyb3J9IGlmIHN0cmljdCBtb2RlIGlzIGVuYWJsZWQgYW5kIGB2ZXJgIGNhbm5vdCBiZSBjb2VyY2VkXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVZlcnNpb24gKHZlciwgc3RyaWN0ID0gdHJ1ZSkge1xuICBjb25zdCByZXN1bHQgPSBzZW12ZXIudmFsaWQoc2VtdmVyLmNvZXJjZShgJHt2ZXJ9YCkpO1xuICBpZiAoc3RyaWN0ICYmICFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Zlcn0nIGNhbm5vdCBiZSBjb2VyY2VkIHRvIGEgdmFsaWQgdmVyc2lvbiBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBTVVBQT1JURURfT1BFUkFUT1JTID0gWyc9PScsICchPScsICc+JywgJzwnLCAnPj0nLCAnPD0nLCAnPSddO1xuXG4vKipcbiAqIENvbXBhcmVzIHR3byB2ZXJzaW9uIHN0cmluZ3NcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHZlcjEgLSBUaGUgZmlyc3QgdmVyc2lvbiBudW1iZXIgdG8gY29tcGFyZS4gU2hvdWxkIGJlIGEgdmFsaWRcbiAqIHZlcnNpb24gbnVtYmVyIHN1cHBvcnRlZCBieSBzZW12ZXIgcGFyc2VyLlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2ZXIyIC0gVGhlIHNlY29uZCB2ZXJzaW9uIG51bWJlciB0byBjb21wYXJlLiBTaG91bGQgYmUgYSB2YWxpZFxuICogdmVyc2lvbiBudW1iZXIgc3VwcG9ydGVkIGJ5IHNlbXZlciBwYXJzZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgLSBPbmUgb2Ygc3VwcG9ydGVkIHZlcnNpb24gbnVtYmVyIG9wZXJhdG9yczpcbiAqID09LCAhPSwgPiwgPCwgPD0sID49LCA9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gdGhlIGFjdHVhbCBjb21wYXJpc29uIHJlc3VsdFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIHVuc3VwcG9ydGVkIG9wZXJhdG9yIGlzIHN1cHBsaWVkIG9yIGFueSBvZiB0aGUgc3VwcGxpZWRcbiAqIHZlcnNpb24gc3RyaW5ncyBjYW5ub3QgYmUgY29lcmNlZFxuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMgKHZlcjEsIG9wZXJhdG9yLCB2ZXIyKSB7XG4gIGlmICghU1VQUE9SVEVEX09QRVJBVE9SUy5pbmNsdWRlcyhvcGVyYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtvcGVyYXRvcn0nIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICBgT25seSAnJHtKU09OLnN0cmluZ2lmeShTVVBQT1JURURfT1BFUkFUT1JTKX0nIG9wZXJhdG9ycyBhcmUgc3VwcG9ydGVkYCk7XG4gIH1cblxuICBjb25zdCBzZW12ZXJPcGVyYXRvciA9IFsnPT0nLCAnIT0nXS5pbmNsdWRlcyhvcGVyYXRvcikgPyAnPScgOiBvcGVyYXRvcjtcbiAgY29uc3QgcmVzdWx0ID0gc2VtdmVyLnNhdGlzZmllcyhjb2VyY2VWZXJzaW9uKHZlcjEpLCBgJHtzZW12ZXJPcGVyYXRvcn0ke2NvZXJjZVZlcnNpb24odmVyMil9YCk7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gJyE9JyA/ICFyZXN1bHQgOiByZXN1bHQ7XG59XG5cbmV4cG9ydCB7XG4gIGhhc1ZhbHVlLCBlc2NhcGVTcGFjZSwgZXNjYXBlU3BlY2lhbENoYXJzLCBsb2NhbElwLCBjYW5jZWxsYWJsZURlbGF5LFxuICBtdWx0aVJlc29sdmUsIHNhZmVKc29uUGFyc2UsIHdyYXBFbGVtZW50LCB1bndyYXBFbGVtZW50LCBmaWx0ZXJPYmplY3QsXG4gIHRvUmVhZGFibGVTaXplU3RyaW5nLCBpc1N1YlBhdGgsIFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSLFxuICBpc1NhbWVEZXN0aW5hdGlvbiwgY29tcGFyZVZlcnNpb25zLCBjb2VyY2VWZXJzaW9uLFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==

@@ -15,3 +15,3 @@ "use strict";

var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
require("source-map-support/register");

@@ -42,166 +42,118 @@ var _bluebird = _interopRequireDefault(require("bluebird"));

function extractAllTo(_x, _x2) {
return _extractAllTo.apply(this, arguments);
}
function _extractAllTo() {
_extractAllTo = (0, _asyncToGenerator2.default)(function* (zipFilePath, destDir) {
return yield extract(zipFilePath, {
dir: destDir
});
async function extractAllTo(zipFilePath, destDir) {
return await extract(zipFilePath, {
dir: destDir
});
return _extractAllTo.apply(this, arguments);
}
function _extractEntryTo(_x3, _x4, _x5) {
return _extractEntryTo2.apply(this, arguments);
}
async function _extractEntryTo(zipFile, entry, destDir) {
const dstPath = _path.default.resolve(destDir, entry.fileName);
function _extractEntryTo2() {
_extractEntryTo2 = (0, _asyncToGenerator2.default)(function* (zipFile, entry, destDir) {
const dstPath = _path.default.resolve(destDir, entry.fileName);
if (/\/$/.test(entry.fileName)) {
if (!(await _fs2.default.exists(dstPath))) {
await (0, _mkdirp.mkdirp)(dstPath);
}
if (/\/$/.test(entry.fileName)) {
if (!(yield _fs2.default.exists(dstPath))) {
yield (0, _mkdirp.mkdirp)(dstPath);
}
return;
} else if (!(await _fs2.default.exists(_path.default.dirname(dstPath)))) {
await (0, _mkdirp.mkdirp)(_path.default.dirname(dstPath));
}
return;
} else if (!(yield _fs2.default.exists(_path.default.dirname(dstPath)))) {
yield (0, _mkdirp.mkdirp)(_path.default.dirname(dstPath));
}
const writeStream = (0, _fs.createWriteStream)(dstPath, {
flags: 'w'
});
const writeStreamPromise = new _bluebird.default((resolve, reject) => {
writeStream.once('finish', resolve);
writeStream.once('error', reject);
});
const zipReadStream = yield new _bluebird.default((resolve, reject) => {
zipFile.openReadStream(entry, (err, readStream) => err ? reject(err) : resolve(readStream));
});
const zipReadStreamPromise = new _bluebird.default((resolve, reject) => {
zipReadStream.once('end', resolve);
zipReadStream.once('error', reject);
});
zipReadStream.pipe(writeStream);
return yield _bluebird.default.all([zipReadStreamPromise, writeStreamPromise]);
const writeStream = (0, _fs.createWriteStream)(dstPath, {
flags: 'w'
});
return _extractEntryTo2.apply(this, arguments);
const writeStreamPromise = new _bluebird.default((resolve, reject) => {
writeStream.once('finish', resolve);
writeStream.once('error', reject);
});
const zipReadStream = await new _bluebird.default((resolve, reject) => {
zipFile.openReadStream(entry, (err, readStream) => err ? reject(err) : resolve(readStream));
});
const zipReadStreamPromise = new _bluebird.default((resolve, reject) => {
zipReadStream.once('end', resolve);
zipReadStream.once('error', reject);
});
zipReadStream.pipe(writeStream);
return await _bluebird.default.all([zipReadStreamPromise, writeStreamPromise]);
}
function readEntries(_x6, _x7) {
return _readEntries.apply(this, arguments);
}
async function readEntries(zipFilePath, onEntry) {
const zipfile = await open(zipFilePath, {
lazyEntries: true
});
const zipReadStreamPromise = new _bluebird.default((resolve, reject) => {
zipfile.once('end', resolve);
zipfile.once('error', reject);
zipfile.on('entry', async entry => {
const res = await onEntry({
entry,
extractEntryTo: async destDir => await _extractEntryTo(zipfile, entry, destDir)
});
function _readEntries() {
_readEntries = (0, _asyncToGenerator2.default)(function* (zipFilePath, onEntry) {
const zipfile = yield open(zipFilePath, {
lazyEntries: true
});
const zipReadStreamPromise = new _bluebird.default((resolve, reject) => {
zipfile.once('end', resolve);
zipfile.once('error', reject);
zipfile.on('entry', function () {
var _ref = (0, _asyncToGenerator2.default)(function* (entry) {
const res = yield onEntry({
entry,
extractEntryTo: function () {
var _extractEntryTo3 = (0, _asyncToGenerator2.default)(function* (destDir) {
return yield _extractEntryTo(zipfile, entry, destDir);
});
if (res === false) {
return zipfile.emit('end');
}
return function extractEntryTo(_x11) {
return _extractEntryTo3.apply(this, arguments);
};
}()
});
if (res === false) {
return zipfile.emit('end');
}
zipfile.readEntry();
});
return function (_x10) {
return _ref.apply(this, arguments);
};
}());
zipfile.readEntry();
});
zipfile.readEntry();
return yield zipReadStreamPromise;
});
return _readEntries.apply(this, arguments);
zipfile.readEntry();
return await zipReadStreamPromise;
}
function toInMemoryZip(_x8) {
return _toInMemoryZip.apply(this, arguments);
}
function _toInMemoryZip() {
_toInMemoryZip = (0, _asyncToGenerator2.default)(function* (srcDir) {
const zipBufferArr = [];
const zipWriteStream = new _stream.default.Writable({
write: (buffer, encoding, next) => {
zipBufferArr.push(buffer);
next();
}
});
const zipWriteStreamPromise = new _bluebird.default(resolve => {
zipWriteStream.once('finish', resolve);
});
const archive = (0, _archiver.default)('zip', {
zlib: {
level: 9
}
});
const archiveStreamPromise = new _bluebird.default((resolve, reject) => {
archive.once('finish', resolve);
archive.once('error', errStr => reject(new Error(`Failed to zip directory ${srcDir}: ${errStr}`)));
});
archive.directory(srcDir, false);
archive.pipe(zipWriteStream);
archive.finalize();
yield _bluebird.default.all([archiveStreamPromise, zipWriteStreamPromise]);
return Buffer.concat(zipBufferArr);
async function toInMemoryZip(srcDir) {
const zipBufferArr = [];
const zipWriteStream = new _stream.default.Writable({
write: (buffer, encoding, next) => {
zipBufferArr.push(buffer);
next();
}
});
return _toInMemoryZip.apply(this, arguments);
const zipWriteStreamPromise = new _bluebird.default(resolve => {
zipWriteStream.once('finish', resolve);
});
const archive = (0, _archiver.default)('zip', {
zlib: {
level: 9
}
});
const archiveStreamPromise = new _bluebird.default((resolve, reject) => {
archive.once('finish', resolve);
archive.once('error', errStr => reject(new Error(`Failed to zip directory ${srcDir}: ${errStr}`)));
});
archive.directory(srcDir, false);
archive.pipe(zipWriteStream);
archive.finalize();
await _bluebird.default.all([archiveStreamPromise, zipWriteStreamPromise]);
return Buffer.concat(zipBufferArr);
}
function assertValidZip(_x9) {
return _assertValidZip.apply(this, arguments);
}
async function assertValidZip(filePath) {
if (!(await _fs2.default.exists(filePath))) {
throw new Error(`The file at '${filePath}' does not exist`);
}
function _assertValidZip() {
_assertValidZip = (0, _asyncToGenerator2.default)(function* (filePath) {
if (!(yield _fs2.default.exists(filePath))) {
throw new Error(`The file at '${filePath}' does not exist`);
}
const {
size
} = await _fs2.default.stat(filePath);
const _ref2 = yield _fs2.default.stat(filePath),
size = _ref2.size;
if (size < 4) {
throw new Error(`The file at '${filePath}' is too small to be a ZIP archive`);
}
if (size < 4) {
throw new Error(`The file at '${filePath}' is too small to be a ZIP archive`);
}
const fd = await _fs2.default.open(filePath, 'r');
const fd = yield _fs2.default.open(filePath, 'r');
try {
const buffer = Buffer.alloc(ZIP_MAGIC.length);
await _fs2.default.read(fd, buffer, 0, ZIP_MAGIC.length, 0);
const signature = buffer.toString('ascii');
try {
const buffer = Buffer.alloc(ZIP_MAGIC.length);
yield _fs2.default.read(fd, buffer, 0, ZIP_MAGIC.length, 0);
const signature = buffer.toString('ascii');
if (signature !== ZIP_MAGIC) {
throw new Error(`The file signature '${signature}' of '${filePath}' ` + `is not equal to the expected ZIP archive signature '${ZIP_MAGIC}'`);
}
if (signature !== ZIP_MAGIC) {
throw new Error(`The file signature '${signature}' of '${filePath}' ` + `is not equal to the expected ZIP archive signature '${ZIP_MAGIC}'`);
}
return true;
} finally {
yield _fs2.default.close(fd);
}
});
return _assertValidZip.apply(this, arguments);
return true;
} finally {
await _fs2.default.close(fd);
}
}

@@ -218,2 +170,2 @@

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsiZXh0cmFjdCIsIkIiLCJwcm9taXNpZnkiLCJub2RlRXh0cmFjdCIsIm9wZW4iLCJ5YXV6bCIsIlpJUF9NQUdJQyIsImV4dHJhY3RBbGxUbyIsInppcEZpbGVQYXRoIiwiZGVzdERpciIsImRpciIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJlbnRyeSIsImRzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZpbGVOYW1lIiwidGVzdCIsImZzIiwiZXhpc3RzIiwiZGlybmFtZSIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJyZWplY3QiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsIm9wZW5SZWFkU3RyZWFtIiwiZXJyIiwicmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsIm9uIiwicmVzIiwiZXh0cmFjdEVudHJ5VG8iLCJlbWl0IiwicmVhZEVudHJ5IiwidG9Jbk1lbW9yeVppcCIsInNyY0RpciIsInppcEJ1ZmZlckFyciIsInppcFdyaXRlU3RyZWFtIiwic3RyZWFtIiwiV3JpdGFibGUiLCJ3cml0ZSIsImJ1ZmZlciIsImVuY29kaW5nIiwibmV4dCIsInB1c2giLCJ6aXBXcml0ZVN0cmVhbVByb21pc2UiLCJhcmNoaXZlIiwiemxpYiIsImxldmVsIiwiYXJjaGl2ZVN0cmVhbVByb21pc2UiLCJlcnJTdHIiLCJFcnJvciIsImRpcmVjdG9yeSIsImZpbmFsaXplIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInN0YXQiLCJzaXplIiwiZmQiLCJhbGxvYyIsImxlbmd0aCIsInJlYWQiLCJzaWduYXR1cmUiLCJ0b1N0cmluZyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FB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RyxDQUFYLEVBQWM7QUFDWixZQUFNLElBQUlSLEtBQUosQ0FBVyxnQkFBZU0sUUFBUyxvQ0FBbkMsQ0FBTjtBQUNEOztBQUNELFVBQU1HLEVBQUUsU0FBU2xELGFBQUdmLElBQUgsQ0FBUThELFFBQVIsRUFBa0IsR0FBbEIsQ0FBakI7O0FBQ0EsUUFBSTtBQUNGLFlBQU1oQixNQUFNLEdBQUdhLE1BQU0sQ0FBQ08sS0FBUCxDQUFhaEUsU0FBUyxDQUFDaUUsTUFBdkIsQ0FBZjtBQUNBLFlBQU1wRCxhQUFHcUQsSUFBSCxDQUFRSCxFQUFSLEVBQVluQixNQUFaLEVBQW9CLENBQXBCLEVBQXVCNUMsU0FBUyxDQUFDaUUsTUFBakMsRUFBeUMsQ0FBekMsQ0FBTjtBQUNBLFlBQU1FLFNBQVMsR0FBR3ZCLE1BQU0sQ0FBQ3dCLFFBQVAsQ0FBZ0IsT0FBaEIsQ0FBbEI7O0FBQ0EsVUFBSUQsU0FBUyxLQUFLbkUsU0FBbEIsRUFBNkI7QUFDM0IsY0FBTSxJQUFJc0QsS0FBSixDQUFXLHVCQUFzQmEsU0FBVSxTQUFRUCxRQUFTLElBQWxELEdBQ2IsdURBQXNENUQsU0FBVSxHQUQ3RCxDQUFOO0FBRUQ7O0FBQ0QsYUFBTyxJQUFQO0FBQ0QsS0FURCxTQVNVO0FBQ1IsWUFBTWEsYUFBR3dELEtBQUgsQ0FBU04sRUFBVCxDQUFOO0FBQ0Q7QUFDRixHOzs7O2VBR2M7QUFBRTlELEVBQUFBLFlBQUY7QUFBZ0IyQixFQUFBQSxXQUFoQjtBQUE2QlMsRUFBQUEsYUFBN0I7QUFBNENzQixFQUFBQTtBQUE1QyxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG5vZGVFeHRyYWN0IGZyb20gJ2V4dHJhY3QtemlwJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IG1rZGlycCB9IGZyb20gJy4uL2xpYi9ta2RpcnAnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuXG5jb25zdCBleHRyYWN0ID0gQi5wcm9taXNpZnkobm9kZUV4dHJhY3QpO1xuY29uc3Qgb3BlbiA9IEIucHJvbWlzaWZ5KHlhdXpsLm9wZW4pO1xuY29uc3QgWklQX01BR0lDID0gJ1BLJztcblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEFsbFRvICh6aXBGaWxlUGF0aCwgZGVzdERpcikge1xuICByZXR1cm4gYXdhaXQgZXh0cmFjdCh6aXBGaWxlUGF0aCwge2RpcjogZGVzdERpcn0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3Blbih6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjRGlyIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZvbGRlciBiZWluZyB6aXBwZWRcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZm9sZGVyIGFzIG1lbW9yeSBidWZmZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9Jbk1lbW9yeVppcCAoc3JjRGlyKSB7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgemlwQnVmZmVyQXJyID0gW107XG4gIGNvbnN0IHppcFdyaXRlU3RyZWFtID0gbmV3IHN0cmVhbS5Xcml0YWJsZSh7XG4gICAgd3JpdGU6IChidWZmZXIsIGVuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICB6aXBCdWZmZXJBcnIucHVzaChidWZmZXIpO1xuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCB6aXBXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSkgPT4ge1xuICAgIC8vIERvbid0IG5lZWQgdG8gZG8gZXJyb3IgaGFuZGxpbmcgc2luY2UgdGhpcyB3cml0ZVN0cmVhbSBpcyBpbi1tZW1vcnkgYW5kIGRvZXNuJ3QgZW1pdCBhbnkgZXJyb3JzXG4gICAgemlwV3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsOiA5fVxuICB9KTtcbiAgY29uc3QgYXJjaGl2ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLm9uY2UoJ2Vycm9yJywgKGVyclN0cikgPT4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHppcCBkaXJlY3RvcnkgJHtzcmNEaXJ9OiAke2VyclN0cn1gKSkpO1xuICB9KTtcbiAgYXJjaGl2ZS5kaXJlY3Rvcnkoc3JjRGlyLCBmYWxzZSk7XG4gIGFyY2hpdmUucGlwZSh6aXBXcml0ZVN0cmVhbSk7XG4gIGFyY2hpdmUuZmluYWxpemUoKTtcblxuICAvLyBXYWl0IGZvciB0aGUgc3RyZWFtcyB0byBmaW5pc2hcbiAgYXdhaXQgQi5hbGwoW2FyY2hpdmVTdHJlYW1Qcm9taXNlLCB6aXBXcml0ZVN0cmVhbVByb21pc2VdKTtcblxuICAvLyBSZXR1cm4gdGhlIGFycmF5IG9mIHppcCBidWZmZXJzIGNvbmNhdGVuYXRlZCBpbnRvIG9uZSBidWZmZXJcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoemlwQnVmZmVyQXJyKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGEgdmFsaWQgWklQIGFyY2hpdmVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICovXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRWYWxpZFppcCAoZmlsZVBhdGgpIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtmaWxlUGF0aH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gIH1cblxuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgaWYgKHNpemUgPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtmaWxlUGF0aH0nIGlzIHRvbyBzbWFsbCB0byBiZSBhIFpJUCBhcmNoaXZlYCk7XG4gIH1cbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKGZpbGVQYXRoLCAncicpO1xuICB0cnkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhaSVBfTUFHSUMubGVuZ3RoKTtcbiAgICBhd2FpdCBmcy5yZWFkKGZkLCBidWZmZXIsIDAsIFpJUF9NQUdJQy5sZW5ndGgsIDApO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGJ1ZmZlci50b1N0cmluZygnYXNjaWknKTtcbiAgICBpZiAoc2lnbmF0dXJlICE9PSBaSVBfTUFHSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgc2lnbmF0dXJlICcke3NpZ25hdHVyZX0nIG9mICcke2ZpbGVQYXRofScgYCArXG4gICAgICAgIGBpcyBub3QgZXF1YWwgdG8gdGhlIGV4cGVjdGVkIFpJUCBhcmNoaXZlIHNpZ25hdHVyZSAnJHtaSVBfTUFHSUN9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5jbG9zZShmZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgX2V4dHJhY3RFbnRyeVRvLCBhc3NlcnRWYWxpZFppcCB9O1xuZXhwb3J0IGRlZmF1bHQgeyBleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBhc3NlcnRWYWxpZFppcCB9O1xuIl0sImZpbGUiOiJsaWIvemlwLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsiZXh0cmFjdCIsIkIiLCJwcm9taXNpZnkiLCJub2RlRXh0cmFjdCIsIm9wZW4iLCJ5YXV6bCIsIlpJUF9NQUdJQyIsImV4dHJhY3RBbGxUbyIsInppcEZpbGVQYXRoIiwiZGVzdERpciIsImRpciIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJlbnRyeSIsImRzdFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsImZpbGVOYW1lIiwidGVzdCIsImZzIiwiZXhpc3RzIiwiZGlybmFtZSIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJyZWplY3QiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsIm9wZW5SZWFkU3RyZWFtIiwiZXJyIiwicmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsIm9uIiwicmVzIiwiZXh0cmFjdEVudHJ5VG8iLCJlbWl0IiwicmVhZEVudHJ5IiwidG9Jbk1lbW9yeVppcCIsInNyY0RpciIsInppcEJ1ZmZlckFyciIsInppcFdyaXRlU3RyZWFtIiwic3RyZWFtIiwiV3JpdGFibGUiLCJ3cml0ZSIsImJ1ZmZlciIsImVuY29kaW5nIiwibmV4dCIsInB1c2giLCJ6aXBXcml0ZVN0cmVhbVByb21pc2UiLCJhcmNoaXZlIiwiemxpYiIsImxldmVsIiwiYXJjaGl2ZVN0cmVhbVByb21pc2UiLCJlcnJTdHIiLCJFcnJvciIsImRpcmVjdG9yeSIsImZpbmFsaXplIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInNpemUiLCJzdGF0IiwiZmQiLCJhbGxvYyIsImxlbmd0aCIsInJlYWQiLCJzaWduYXR1cmUiLCJ0b1N0cmluZyIsImNsb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FB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Q0Q7O0FBQ0QsUUFBTUcsRUFBRSxHQUFHLE1BQU1sRCxhQUFHZixJQUFILENBQVE4RCxRQUFSLEVBQWtCLEdBQWxCLENBQWpCOztBQUNBLE1BQUk7QUFDRixVQUFNaEIsTUFBTSxHQUFHYSxNQUFNLENBQUNPLEtBQVAsQ0FBYWhFLFNBQVMsQ0FBQ2lFLE1BQXZCLENBQWY7QUFDQSxVQUFNcEQsYUFBR3FELElBQUgsQ0FBUUgsRUFBUixFQUFZbkIsTUFBWixFQUFvQixDQUFwQixFQUF1QjVDLFNBQVMsQ0FBQ2lFLE1BQWpDLEVBQXlDLENBQXpDLENBQU47QUFDQSxVQUFNRSxTQUFTLEdBQUd2QixNQUFNLENBQUN3QixRQUFQLENBQWdCLE9BQWhCLENBQWxCOztBQUNBLFFBQUlELFNBQVMsS0FBS25FLFNBQWxCLEVBQTZCO0FBQzNCLFlBQU0sSUFBSXNELEtBQUosQ0FBVyx1QkFBc0JhLFNBQVUsU0FBUVAsUUFBUyxJQUFsRCxHQUNiLHVEQUFzRDVELFNBQVUsR0FEN0QsQ0FBTjtBQUVEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBVEQsU0FTVTtBQUNSLFVBQU1hLGFBQUd3RCxLQUFILENBQVNOLEVBQVQsQ0FBTjtBQUNEO0FBQ0Y7O2VBR2M7QUFBRTlELEVBQUFBLFlBQUY7QUFBZ0IyQixFQUFBQSxXQUFoQjtBQUE2QlMsRUFBQUEsYUFBN0I7QUFBNENzQixFQUFBQTtBQUE1QyxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IG5vZGVFeHRyYWN0IGZyb20gJ2V4dHJhY3QtemlwJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IG1rZGlycCB9IGZyb20gJy4uL2xpYi9ta2RpcnAnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuXG5jb25zdCBleHRyYWN0ID0gQi5wcm9taXNpZnkobm9kZUV4dHJhY3QpO1xuY29uc3Qgb3BlbiA9IEIucHJvbWlzaWZ5KHlhdXpsLm9wZW4pO1xuY29uc3QgWklQX01BR0lDID0gJ1BLJztcblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdEFsbFRvICh6aXBGaWxlUGF0aCwgZGVzdERpcikge1xuICByZXR1cm4gYXdhaXQgZXh0cmFjdCh6aXBGaWxlUGF0aCwge2RpcjogZGVzdERpcn0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3Blbih6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjRGlyIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZvbGRlciBiZWluZyB6aXBwZWRcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZm9sZGVyIGFzIG1lbW9yeSBidWZmZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9Jbk1lbW9yeVppcCAoc3JjRGlyKSB7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgemlwQnVmZmVyQXJyID0gW107XG4gIGNvbnN0IHppcFdyaXRlU3RyZWFtID0gbmV3IHN0cmVhbS5Xcml0YWJsZSh7XG4gICAgd3JpdGU6IChidWZmZXIsIGVuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICB6aXBCdWZmZXJBcnIucHVzaChidWZmZXIpO1xuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCB6aXBXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSkgPT4ge1xuICAgIC8vIERvbid0IG5lZWQgdG8gZG8gZXJyb3IgaGFuZGxpbmcgc2luY2UgdGhpcyB3cml0ZVN0cmVhbSBpcyBpbi1tZW1vcnkgYW5kIGRvZXNuJ3QgZW1pdCBhbnkgZXJyb3JzXG4gICAgemlwV3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsOiA5fVxuICB9KTtcbiAgY29uc3QgYXJjaGl2ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLm9uY2UoJ2Vycm9yJywgKGVyclN0cikgPT4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIHppcCBkaXJlY3RvcnkgJHtzcmNEaXJ9OiAke2VyclN0cn1gKSkpO1xuICB9KTtcbiAgYXJjaGl2ZS5kaXJlY3Rvcnkoc3JjRGlyLCBmYWxzZSk7XG4gIGFyY2hpdmUucGlwZSh6aXBXcml0ZVN0cmVhbSk7XG4gIGFyY2hpdmUuZmluYWxpemUoKTtcblxuICAvLyBXYWl0IGZvciB0aGUgc3RyZWFtcyB0byBmaW5pc2hcbiAgYXdhaXQgQi5hbGwoW2FyY2hpdmVTdHJlYW1Qcm9taXNlLCB6aXBXcml0ZVN0cmVhbVByb21pc2VdKTtcblxuICAvLyBSZXR1cm4gdGhlIGFycmF5IG9mIHppcCBidWZmZXJzIGNvbmNhdGVuYXRlZCBpbnRvIG9uZSBidWZmZXJcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoemlwQnVmZmVyQXJyKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGEgdmFsaWQgWklQIGFyY2hpdmVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICovXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRWYWxpZFppcCAoZmlsZVBhdGgpIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtmaWxlUGF0aH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gIH1cblxuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgaWYgKHNpemUgPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtmaWxlUGF0aH0nIGlzIHRvbyBzbWFsbCB0byBiZSBhIFpJUCBhcmNoaXZlYCk7XG4gIH1cbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKGZpbGVQYXRoLCAncicpO1xuICB0cnkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhaSVBfTUFHSUMubGVuZ3RoKTtcbiAgICBhd2FpdCBmcy5yZWFkKGZkLCBidWZmZXIsIDAsIFpJUF9NQUdJQy5sZW5ndGgsIDApO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGJ1ZmZlci50b1N0cmluZygnYXNjaWknKTtcbiAgICBpZiAoc2lnbmF0dXJlICE9PSBaSVBfTUFHSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgc2lnbmF0dXJlICcke3NpZ25hdHVyZX0nIG9mICcke2ZpbGVQYXRofScgYCArXG4gICAgICAgIGBpcyBub3QgZXF1YWwgdG8gdGhlIGV4cGVjdGVkIFpJUCBhcmNoaXZlIHNpZ25hdHVyZSAnJHtaSVBfTUFHSUN9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5jbG9zZShmZCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgX2V4dHJhY3RFbnRyeVRvLCBhc3NlcnRWYWxpZFppcCB9O1xuZXhwb3J0IGRlZmF1bHQgeyBleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBhc3NlcnRWYWxpZFppcCB9O1xuIl0sImZpbGUiOiJsaWIvemlwLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=

@@ -10,5 +10,13 @@ /* This library is originated from temp.js at http://github.com/bruce/node-temp */

/**
* Generate a temporary directory in os.tempdir() or process.env.APPIUM_TMP_DIR.
* e.g.
* - No `process.env.APPIUM_TMP_DIR`: `/var/folders/34/2222sh8n27d6rcp7jqlkw8km0000gn/T/xxxxxxxx.yyyy`
* - With `process.env.APPIUM_TMP_DIR = '/path/to/root'`: `/path/to/root/xxxxxxxx.yyyy`
*
* @returns {string} A path to the temporary directory
*/
async function tempDir () {
let now = new Date();
let filePath = nodePath.join(os.tmpdir(),
const now = new Date();
const filePath = nodePath.join(process.env.APPIUM_TMP_DIR || os.tmpdir(),
[

@@ -28,11 +36,38 @@ now.getFullYear(), now.getMonth(), now.getDate(),

/**
* @typedef {Object} Affixes
* @property {string} prefix - prefix of the temp directory name
* @property {string} suffix - suffix of the temp directory name
*/
/**
* Generate a temporary directory in os.tempdir() or process.env.APPIUM_TMP_DIR
* with arbitrary prefix/suffix for the directory name.
*
* @param {string|Affixes} rawAffixes
* @param {?string} defaultPrefix
* @returns {string} A path to the temporary directory with rawAffixes and defaultPrefix
*/
async function path (rawAffixes, defaultPrefix) {
let affixes = parseAffixes(rawAffixes, defaultPrefix);
let name = [affixes.prefix, affixes.suffix].join('');
let tempDirectory = await tempDir();
const affixes = parseAffixes(rawAffixes, defaultPrefix);
const name = `${affixes.prefix || ''}${affixes.suffix || ''}`;
const tempDirectory = await tempDir();
return nodePath.join(tempDirectory, name);
}
/**
* @typedef {Object} OpenedAffixes
* @property {string} path - The path to file
* @property {integer} fd - The file descriptor opened
*/
/**
* Generate a temporary directory in os.tempdir() or process.env.APPIUM_TMP_DIR
* with arbitrary prefix/suffix for the directory name and return it as open.
*
* @param {Affixes} affixes
* @returns {OpenedAffixes}
*/
async function open (affixes) {
let filePath = await path(affixes, 'f-');
const filePath = await path(affixes, 'f-');
try {

@@ -45,5 +80,12 @@ let fd = await fs.open(filePath, RDWR_EXCL, 0o600);

}
}
/**
*
* Returns prefix/suffix object
*
* @param {string|Affixes} rawAffixes
* @param {?string} defaultPrefix
* @returns {Affixes}
*/
function parseAffixes (rawAffixes, defaultPrefix) {

@@ -69,4 +111,15 @@ let affixes = {prefix: null, suffix: null};

const _static = tempDir();
/**
* Returns a new path to a temporary directory
*
* @returns {string} A new tempDir() if tempRootDirectory is not provided
*/
const openDir = tempDir;
/**
* Returns a path to a temporary directory whcih is defined as static in the same process
*
* @returns {string} A temp directory path whcih is defined as static in the same process
*/
async function staticDir () { // eslint-disable-line require-await

@@ -73,0 +126,0 @@ return _static;

@@ -7,3 +7,3 @@ {

],
"version": "2.27.0",
"version": "2.27.1",
"author": "appium",

@@ -80,3 +80,3 @@ "license": "Apache-2.0",

"ajv": "^6.5.3",
"appium-gulp-plugins": "^3.1.0",
"appium-gulp-plugins": "^4.0.0",
"asyncbox": "^2.3.1",

@@ -83,0 +83,0 @@ "chai": "^4.1.2",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc