@appium/support 2.55.2 → 2.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/env.js +102 -0
- package/build/lib/fs.js +74 -56
- package/build/lib/image-util.js +4 -332
- package/build/lib/index.js +18 -6
- package/build/lib/log-internal.js +2 -4
- package/build/lib/logger.js +2 -4
- package/build/lib/logging.js +2 -4
- package/build/lib/mjpeg.js +2 -4
- package/build/lib/mkdirp.js +7 -11
- package/build/lib/net.js +2 -4
- package/build/lib/node.js +99 -2
- package/build/lib/npm.js +240 -0
- package/build/lib/plist.js +2 -4
- package/build/lib/process.js +2 -4
- package/build/lib/system.js +2 -4
- package/build/lib/tempdir.js +2 -4
- package/build/lib/timing.js +2 -4
- package/build/lib/util.js +6 -8
- package/build/lib/zip.js +4 -8
- package/lib/env.js +162 -0
- package/lib/fs.js +193 -69
- package/lib/image-util.js +3 -570
- package/lib/index.js +8 -2
- package/lib/log-internal.js +2 -2
- package/lib/logging.js +1 -1
- package/lib/mkdirp.js +3 -6
- package/lib/net.js +4 -4
- package/lib/node.js +104 -1
- package/lib/npm.js +335 -0
- package/lib/tempdir.js +6 -6
- package/lib/util.js +28 -24
- package/lib/zip.js +7 -8
- package/package.json +20 -9
- package/build/test/assets/sample_binary.plist +0 -0
- package/build/test/assets/sample_text.plist +0 -28
- package/build/test/fs-specs.js +0 -264
- package/build/test/helpers.js +0 -35
- package/build/test/image-util-e2e-specs.js +0 -227
- package/build/test/index-specs.js +0 -49
- package/build/test/log-internals-specs.js +0 -97
- package/build/test/logger/helpers.js +0 -71
- package/build/test/logger/logger-force-specs.js +0 -41
- package/build/test/logger/logger-normal-specs.js +0 -113
- package/build/test/logger/logger-test-specs.js +0 -40
- package/build/test/mjpeg-e2e-specs.js +0 -96
- package/build/test/net-e2e-specs.js +0 -32
- package/build/test/node-e2e-specs.js +0 -22
- package/build/test/plist-specs.js +0 -54
- package/build/test/process-specs.js +0 -104
- package/build/test/system-specs.js +0 -136
- package/build/test/tempdir-specs.js +0 -86
- package/build/test/timing-specs.js +0 -125
- package/build/test/util-e2e-specs.js +0 -136
- package/build/test/util-specs.js +0 -537
- package/build/test/zip-e2e-specs.js +0 -233
package/build/lib/env.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.MANIFEST_RELATIVE_PATH = exports.MANIFEST_BASENAME = exports.DEFAULT_APPIUM_HOME = void 0;
|
|
9
|
+
exports.hasAppiumDependency = hasAppiumDependency;
|
|
10
|
+
exports.resolveManifestPath = exports.resolveAppiumHome = exports.readPackageInDir = void 0;
|
|
11
|
+
|
|
12
|
+
require("source-map-support/register");
|
|
13
|
+
|
|
14
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
+
|
|
16
|
+
var _os = require("os");
|
|
17
|
+
|
|
18
|
+
var _path = _interopRequireDefault(require("path"));
|
|
19
|
+
|
|
20
|
+
var _pkgDir = _interopRequireDefault(require("pkg-dir"));
|
|
21
|
+
|
|
22
|
+
var _readPkg = _interopRequireDefault(require("read-pkg"));
|
|
23
|
+
|
|
24
|
+
var _npm = require("./npm");
|
|
25
|
+
|
|
26
|
+
const DEFAULT_APPIUM_HOME = _path.default.resolve((0, _os.homedir)(), '.appium');
|
|
27
|
+
|
|
28
|
+
exports.DEFAULT_APPIUM_HOME = DEFAULT_APPIUM_HOME;
|
|
29
|
+
const MANIFEST_BASENAME = 'extensions.yaml';
|
|
30
|
+
exports.MANIFEST_BASENAME = MANIFEST_BASENAME;
|
|
31
|
+
|
|
32
|
+
const MANIFEST_RELATIVE_PATH = _path.default.join('node_modules', '.cache', 'appium', MANIFEST_BASENAME);
|
|
33
|
+
|
|
34
|
+
exports.MANIFEST_RELATIVE_PATH = MANIFEST_RELATIVE_PATH;
|
|
35
|
+
|
|
36
|
+
async function hasAppiumDependency(cwd) {
|
|
37
|
+
let listResult;
|
|
38
|
+
let resolved;
|
|
39
|
+
let version;
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
var _listResult$dependenc, _listResult, _listResult$dependenc2, _listResult$dependenc3, _listResult$dependenc4, _listResult2, _listResult2$dependen, _listResult2$dependen2;
|
|
43
|
+
|
|
44
|
+
listResult = await _npm.npm.list(cwd, 'appium');
|
|
45
|
+
resolved = (_listResult$dependenc = (_listResult = listResult) === null || _listResult === void 0 ? void 0 : (_listResult$dependenc2 = _listResult.dependencies) === null || _listResult$dependenc2 === void 0 ? void 0 : (_listResult$dependenc3 = _listResult$dependenc2.appium) === null || _listResult$dependenc3 === void 0 ? void 0 : _listResult$dependenc3.resolved) !== null && _listResult$dependenc !== void 0 ? _listResult$dependenc : '';
|
|
46
|
+
version = (_listResult$dependenc4 = (_listResult2 = listResult) === null || _listResult2 === void 0 ? void 0 : (_listResult2$dependen = _listResult2.dependencies) === null || _listResult2$dependen === void 0 ? void 0 : (_listResult2$dependen2 = _listResult2$dependen.appium) === null || _listResult2$dependen2 === void 0 ? void 0 : _listResult2$dependen2.version) !== null && _listResult$dependenc4 !== void 0 ? _listResult$dependenc4 : '';
|
|
47
|
+
} catch {
|
|
48
|
+
try {
|
|
49
|
+
var _ref, _pkg$dependencies$app, _pkg$dependencies, _pkg$devDependencies, _pkg$optionalDependen;
|
|
50
|
+
|
|
51
|
+
const pkg = await readPackageInDir(cwd);
|
|
52
|
+
version = resolved = (_ref = (_pkg$dependencies$app = pkg === null || pkg === void 0 ? void 0 : (_pkg$dependencies = pkg.dependencies) === null || _pkg$dependencies === void 0 ? void 0 : _pkg$dependencies.appium) !== null && _pkg$dependencies$app !== void 0 ? _pkg$dependencies$app : pkg === null || pkg === void 0 ? void 0 : (_pkg$devDependencies = pkg.devDependencies) === null || _pkg$devDependencies === void 0 ? void 0 : _pkg$devDependencies.appium) !== null && _ref !== void 0 ? _ref : pkg === null || pkg === void 0 ? void 0 : (_pkg$optionalDependen = pkg.optionalDependencies) === null || _pkg$optionalDependen === void 0 ? void 0 : _pkg$optionalDependen.appium;
|
|
53
|
+
} catch {}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return Boolean(version && (!resolved || resolved && !resolved.startsWith('file:')) && !version.startsWith('1') && !version.startsWith('0'));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const readPackageInDir = _lodash.default.memoize(async function _readPackageInDir(cwd) {
|
|
60
|
+
return await (0, _readPkg.default)({
|
|
61
|
+
cwd,
|
|
62
|
+
normalize: true
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
exports.readPackageInDir = readPackageInDir;
|
|
67
|
+
|
|
68
|
+
const resolveAppiumHome = _lodash.default.memoize(async function _resolveAppiumHome(cwd = process.cwd()) {
|
|
69
|
+
if (process.env.APPIUM_HOME) {
|
|
70
|
+
return process.env.APPIUM_HOME;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!_path.default.isAbsolute(cwd)) {
|
|
74
|
+
throw new TypeError('`cwd` parameter must be an absolute path');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
let currentPkgDir;
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
currentPkgDir = await (0, _pkgDir.default)(cwd);
|
|
81
|
+
|
|
82
|
+
if (!currentPkgDir) {
|
|
83
|
+
return DEFAULT_APPIUM_HOME;
|
|
84
|
+
}
|
|
85
|
+
} catch {
|
|
86
|
+
return DEFAULT_APPIUM_HOME;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return (await hasAppiumDependency(currentPkgDir)) ? currentPkgDir : DEFAULT_APPIUM_HOME;
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
exports.resolveAppiumHome = resolveAppiumHome;
|
|
93
|
+
|
|
94
|
+
const resolveManifestPath = _lodash.default.memoize(async function _resolveManifestPath(appiumHome) {
|
|
95
|
+
var _appiumHome;
|
|
96
|
+
|
|
97
|
+
appiumHome = (_appiumHome = appiumHome) !== null && _appiumHome !== void 0 ? _appiumHome : await resolveAppiumHome();
|
|
98
|
+
return _path.default.join(appiumHome, MANIFEST_RELATIVE_PATH);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
exports.resolveManifestPath = resolveManifestPath;
|
|
102
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lbnYuanMiXSwibmFtZXMiOlsiREVGQVVMVF9BUFBJVU1fSE9NRSIsInBhdGgiLCJyZXNvbHZlIiwiTUFOSUZFU1RfQkFTRU5BTUUiLCJNQU5JRkVTVF9SRUxBVElWRV9QQVRIIiwiam9pbiIsImhhc0FwcGl1bURlcGVuZGVuY3kiLCJjd2QiLCJsaXN0UmVzdWx0IiwicmVzb2x2ZWQiLCJ2ZXJzaW9uIiwibnBtIiwibGlzdCIsImRlcGVuZGVuY2llcyIsImFwcGl1bSIsInBrZyIsInJlYWRQYWNrYWdlSW5EaXIiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsIkJvb2xlYW4iLCJzdGFydHNXaXRoIiwiXyIsIm1lbW9pemUiLCJfcmVhZFBhY2thZ2VJbkRpciIsIm5vcm1hbGl6ZSIsInJlc29sdmVBcHBpdW1Ib21lIiwiX3Jlc29sdmVBcHBpdW1Ib21lIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9IT01FIiwiaXNBYnNvbHV0ZSIsIlR5cGVFcnJvciIsImN1cnJlbnRQa2dEaXIiLCJyZXNvbHZlTWFuaWZlc3RQYXRoIiwiX3Jlc29sdmVNYW5pZmVzdFBhdGgiLCJhcHBpdW1Ib21lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTU8sTUFBTUEsbUJBQW1CLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYSxrQkFBYixFQUF3QixTQUF4QixDQUE1Qjs7O0FBTUEsTUFBTUMsaUJBQWlCLEdBQUcsaUJBQTFCOzs7QUFNQSxNQUFNQyxzQkFBc0IsR0FBR0gsY0FBS0ksSUFBTCxDQUNwQyxjQURvQyxFQUVwQyxRQUZvQyxFQUdwQyxRQUhvQyxFQUlwQ0YsaUJBSm9DLENBQS9COzs7O0FBdUJBLGVBQWVHLG1CQUFmLENBQW9DQyxHQUFwQyxFQUF5QztBQUs5QyxNQUFJQyxVQUFKO0FBRUEsTUFBSUMsUUFBSjtBQUVBLE1BQUlDLE9BQUo7O0FBQ0EsTUFBSTtB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Y2tcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnRGlyIGZyb20gJ3BrZy1kaXInO1xuaW1wb3J0IHJlYWRQa2cgZnJvbSAncmVhZC1wa2cnO1xuaW1wb3J0IHsgbnBtIH0gZnJvbSAnLi9ucG0nO1xuXG4vKipcbiAqIFBhdGggdG8gdGhlIGRlZmF1bHQgYEFQUElVTV9IT01FYCBkaXIgKGB+Ly5hcHBpdW1gKS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FQUElVTV9IT01FID0gcGF0aC5yZXNvbHZlKGhvbWVkaXIoKSwgJy5hcHBpdW0nKTtcblxuLyoqXG4gKiBCYXNlbmFtZSBvZiBleHRlbnNpb24gbWFuaWZlc3QgZmlsZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBNQU5JRkVTVF9CQVNFTkFNRSA9ICdleHRlbnNpb25zLnlhbWwnO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gZXh0ZW5zaW9uIG1hbmlmZXN0IGZpbGUgZnJvbSBgQVBQSVVNX0hPTUVgLlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IE1BTklGRVNUX1JFTEFUSVZFX1BBVEggPSBwYXRoLmpvaW4oXG4gICdub2RlX21vZHVsZXMnLFxuICAnLmNhY2hlJyxcbiAgJ2FwcGl1bScsXG4gIE1BTklGRVNUX0JBU0VOQU1FLFxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiBhcHBpdW0gaXMgaW5zdGFsbGVkIGFzIGEgZGVwZW5kZW5jeSBvZiBhIGxvY2FsIHBhY2thZ2UgYXQgYGN3ZGAuXG4gKlxuICogVGhlIGZvbGxvd2luZyBzcGVjaWFsIGNhc2VzIGFyZSBjb25zaWRlcmVkOlxuICpcbiAqIC0gSWYgYHJlc29sdmVkYCBzdGFydHMgd2l0aCBgZmlsZTpgLCB0aGVuIGBjd2RgIGxpa2VseSBwb2ludHMgdG8gYGFwcGl1bS1tb25vcmVwb2AsIGFuZCAoZm9yIG5vdykgd2UgZXhwZWN0IGBBUFBJVU1fSE9NRWAgdG8gYmUgdGhlIGRlZmF1bHQuXG4gKiAtIElmIHRoZSBgdmVyc2lvbmAgYmVnaW5zIHdpdGggYDBgIG9yIGAxYCwgd2UncmUgbG9va2luZyBhdCBhbiBvbGQgdmVyc2lvbiBvZiBgYXBwaXVtYCAobm90IHRoaXMgb25lISlcbiAqXG4gKiBOb3RlIHRoYXQgd2UgYXJlIF9ub3RfIHBlcmZvcm1pbmcgdGhlIGNoZWNrIFwiaXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIEFwcGl1bSB0aGUgc2FtZSBvbmUgYXMgZm91bmQgaW4gdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzXCIsIGJlY2F1c2UgSSdtIG5vdCBzdXJlIGl0IGFjdHVhbGx5IG1hdHRlcnMgKGFzc3VtaW5nIHRoZSB2ZXJzaW9ucyBhcmUgY29tcGF0aWJsZSkuXG4gKiBSZWdhcmRsZXNzIHdlIG1heSB3YW50IHRvIG1ha2UgdGhpcyBtb3JlIHJvYnVzdCBpbiB0aGUgZnV0dXJlLCBhcyB3ZSBoaXQgZWRnZSBjYXNlcy5cbiAqXG4gKiBfQWxzb18gbm90ZSB0aGF0IGlmIGBhcHBpdW1gIGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5IGluIGBwYWNrYWdlLmpzb25gIF9idXQgaXQgaXMgbm90IHlldCBpbnN0YWxsZWRfIHRoaXMgZnVuY3Rpb24gd2lsbCByZXNvbHZlIGBmYWxzZWAuICBUaGlzIG1heSBub3QgYmUgZXhhY3RseSB3aGF0IHdlIHdhbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNBcHBpdW1EZXBlbmRlbmN5IChjd2QpIHtcbiAgLyoqXG4gICAqIEB0b2RvIHR5cGUgdGhpc1xuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKi9cbiAgbGV0IGxpc3RSZXN1bHQ7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IHJlc29sdmVkO1xuICAvKiogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9ICovXG4gIGxldCB2ZXJzaW9uO1xuICB0cnkge1xuICAgIGxpc3RSZXN1bHQgPSBhd2FpdCBucG0ubGlzdChjd2QsICdhcHBpdW0nKTtcbiAgICAvLyBpZiBcInJlc29sdmVkXCIgaXMgZW1wdHksIHRoZW4gYGFwcGl1bWAgaXMgaW4gZGVwZW5kZW5jaWVzLCBidXQgYG5wbSBpbnN0YWxsYCBoYXMgbm90IGJlZW4gcnVuLlxuICAgIC8vIGluIG90aGVyIHdvcmRzLCB0aGlzIGZ1bmN0aW9uIGNhbiByZXNvbHZlIGB0cnVlYCBldmVuIGlmIGByZXNvbHZlZGAgaXMgZW1wdHkuLi5cbiAgICByZXNvbHZlZCA9IGxpc3RSZXN1bHQ/LmRlcGVuZGVuY2llcz8uYXBwaXVtPy5yZXNvbHZlZCA/PyAnJztcbiAgICAvLyAuLi5ob3dldmVyLCBpdCBjYW5ub3QgZG8gc28gdW5sZXNzIGB2ZXJzaW9uYCBpcyBub25lbXB0eS5cbiAgICB2ZXJzaW9uID0gbGlzdFJlc3VsdD8uZGVwZW5kZW5jaWVzPy5hcHBpdW0/LnZlcnNpb24gPz8gJyc7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBhd2FpdCByZWFkUGFja2FnZUluRGlyKGN3ZCk7XG4gICAgICAvLyB3ZSdyZSBvbmx5IGdvaW5nIHRvIGxvb2sgYXQgdGhlc2UgdGhyZWUgZmllbGRzIGZvciBub3csIGJ1dCB3ZSBjYW4gY2hhbmdlIGl0IGxhdGVyIGlmIG5lZWQgYmUuXG4gICAgICB2ZXJzaW9uID0gcmVzb2x2ZWQgPVxuICAgICAgICBwa2c/LmRlcGVuZGVuY2llcz8uYXBwaXVtID8/XG4gICAgICAgIHBrZz8uZGV2RGVwZW5kZW5jaWVzPy5hcHBpdW0gPz9cbiAgICAgICAgcGtnPy5vcHRpb25hbERlcGVuZGVuY2llcz8uYXBwaXVtO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gQm9vbGVhbihcbiAgICB2ZXJzaW9uICYmXG4gICAgICAoIXJlc29sdmVkIHx8IChyZXNvbHZlZCAmJiAhcmVzb2x2ZWQuc3RhcnRzV2l0aCgnZmlsZTonKSkpICYmXG4gICAgICAvLyBkb2luZyBhbnkgZnVydGhlciBjaGVja2luZyBoZXJlIG1heSBiZSBhIGZvb2wncyBlcnJhbmQsIGJlY2F1c2UgeW91IGNhbiBwaW4gdGhlIHZlcnNpb25cbiAgICAgIC8vIHRvIGEgX2xvdF8gb2YgZGlmZmVyZW50IHRoaW5ncyAodGFncywgVVJMcywgZXRjKS5cbiAgICAgICF2ZXJzaW9uLnN0YXJ0c1dpdGgoJzEnKSAmJlxuICAgICAgIXZlcnNpb24uc3RhcnRzV2l0aCgnMCcpLFxuICApO1xufVxuXG4vKipcbiAqIFJlYWQgYSBgcGFja2FnZS5qc29uYCBpbiBkaXIgYGN3ZGAuICBJZiBub25lIGZvdW5kLCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBjb25zdCByZWFkUGFja2FnZUluRGlyID0gXy5tZW1vaXplKFxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZCAtIERpcmVjdG9yeSBvc3RlbnNpYmx5IGhhdmluZyBhIGBwYWNrYWdlLmpzb25gXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgncmVhZC1wa2cnKS5Ob3JtYWxpemVkUGFja2FnZUpzb258dW5kZWZpbmVkPn1cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIF9yZWFkUGFja2FnZUluRGlyIChjd2QpIHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZFBrZyh7Y3dkLCBub3JtYWxpemU6IHRydWV9KTtcbiAgfSxcbik7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBsb2NhdGlvbiBvZiBBcHBpdW0ncyBcImhvbWVcIiBkaXJcbiAqXG4gKiAtIElmIGBBUFBJVU1fSE9NRWAgaXMgc2V0IGluIHRoZSBlbnZpcm9ubWVudCwgdXNlIHRoYXRcbiAqIC0gSWYgd2UgaGF2ZSBhbiBgZXh0ZW5zaW9ucy55YW1sYCBpbiB7QGxpbmtjb2RlIERFRkFVTFRfQVBQSVVNX0hPTUV9LCB0aGVuIHVzZSB0aGF0LlxuICogLSBJZiB3ZSBmaW5kIGEgYHBhY2thZ2UuanNvbmAgaW4gb3IgYWJvdmUgYGN3ZGAgYW5kIHtAbGlua2NvZGUgc2hvdWxkVXNlQ3dkRm9yQXBwaXVtSG9tZX0gcmV0dXJucyBgdHJ1ZWAsIHRoZW4gdXNlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYHBhY2thZ2UuanNvbmAuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQXBwaXVtSG9tZSA9IF8ubWVtb2l6ZShcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY3dkXSAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBfTXVzdF8gYmUgYWJzb2x1dGUsIGlmIHNwZWNpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIF9yZXNvbHZlQXBwaXVtSG9tZSAoY3dkID0gcHJvY2Vzcy5jd2QoKSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fSE9NRSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFQUElVTV9IT01FO1xuICAgIH1cblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGN3ZCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Bjd2RgIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9ICovXG4gICAgbGV0IGN1cnJlbnRQa2dEaXI7XG5cbiAgICB0cnkge1xuICAgICAgY3VycmVudFBrZ0RpciA9IGF3YWl0IHBrZ0Rpcihjd2QpO1xuXG4gICAgICAvLyBpZiB3ZSBjYW4ndCBmaW5kIGEgYHBhY2thZ2UuanNvbmAsIHVzZSB0aGUgZGVmYXVsdFxuICAgICAgaWYgKCFjdXJyZW50UGtnRGlyKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX0FQUElVTV9IT01FO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5jbGVhciBpZiB0aGlzIGNhbiBhY3R1YWxseSBoYXBwZW5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gREVGQVVMVF9BUFBJVU1fSE9NRTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGF3YWl0IGhhc0FwcGl1bURlcGVuZGVuY3koY3VycmVudFBrZ0RpcikpXG4gICAgICA/IGN1cnJlbnRQa2dEaXJcbiAgICAgIDogREVGQVVMVF9BUFBJVU1fSE9NRTtcbiAgfSxcbik7XG5cbi8qKlxuICogRmlndXJlIG91dCBtYW5pZmVzdCBwYXRoIGJhc2VkIG9uIGBhcHBpdW1Ib21lYC5cbiAqXG4gKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0LCBpZiBgYXBwaXVtSG9tZWAgaGFzIGJlZW4gcHJvdmlkZWQsIGl0IHdhcyByZXNvbHZlZCB2aWEge0BsaW5rIHJlc29sdmVBcHBpdW1Ib21lIGByZXNvbHZlQXBwaXVtSG9tZSgpYH0hICBJZiB1bnN1cmUsXG4gKiBkb24ndCBwYXNzIGEgcGFyYW1ldGVyIGFuZCBsZXQgYHJlc29sdmVBcHBpdW1Ib21lKClgIGhhbmRsZSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVNYW5pZmVzdFBhdGggPSBfLm1lbW9pemUoXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FwcGl1bUhvbWVdIC0gQXBwaXVtIGhvbWUgZGlyZWN0b3J5XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBfcmVzb2x2ZU1hbmlmZXN0UGF0aCAoYXBwaXVtSG9tZSkge1xuICAgIC8vIGNhbiB5b3UgXCJhd2FpdFwiIGluIGEgZGVmYXVsdCBwYXJhbWV0ZXI/IGlzIHRoYXQgYSBnb29kIGlkZWE/XG4gICAgYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWUgPz8gKGF3YWl0IHJlc29sdmVBcHBpdW1Ib21lKCkpO1xuICAgIHJldHVybiBwYXRoLmpvaW4oYXBwaXVtSG9tZSwgTUFOSUZFU1RfUkVMQVRJVkVfUEFUSCk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3JlYWQtcGtnJykuTm9ybWFsaXplZFBhY2thZ2VKc29ufSBOb3JtYWxpemVkUGFja2FnZUpzb25cbiAqL1xuIl19
|
package/build/lib/fs.js
CHANGED
|
@@ -9,48 +9,48 @@ exports.fs = exports.default = void 0;
|
|
|
9
9
|
|
|
10
10
|
require("source-map-support/register");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _crypto = _interopRequireDefault(require("crypto"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _fs = require("fs");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _glob = _interopRequireDefault(require("glob"));
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _klaw = _interopRequireDefault(require("klaw"));
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
23
23
|
|
|
24
24
|
var _mv = _interopRequireDefault(require("mv"));
|
|
25
25
|
|
|
26
|
-
var
|
|
26
|
+
var _ncp = _interopRequireDefault(require("ncp"));
|
|
27
27
|
|
|
28
|
-
var
|
|
28
|
+
var _path = _interopRequireDefault(require("path"));
|
|
29
29
|
|
|
30
|
-
var
|
|
30
|
+
var _pkgDir = _interopRequireDefault(require("pkg-dir"));
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _readPkg = _interopRequireDefault(require("read-pkg"));
|
|
33
33
|
|
|
34
|
-
var
|
|
34
|
+
var _rimraf = _interopRequireDefault(require("rimraf"));
|
|
35
35
|
|
|
36
|
-
var
|
|
36
|
+
var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
|
|
37
37
|
|
|
38
|
-
var
|
|
38
|
+
var _which = _interopRequireDefault(require("which"));
|
|
39
39
|
|
|
40
40
|
var _logger = _interopRequireDefault(require("./logger"));
|
|
41
41
|
|
|
42
42
|
var _timing = _interopRequireDefault(require("./timing"));
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
var _util = require("./util");
|
|
45
45
|
|
|
46
46
|
const ncpAsync = _bluebird.default.promisify(_ncp.default);
|
|
47
47
|
|
|
48
|
-
const findRootCached = _lodash.default.memoize(
|
|
48
|
+
const findRootCached = _lodash.default.memoize(_pkgDir.default.sync);
|
|
49
49
|
|
|
50
50
|
const fs = {
|
|
51
51
|
async hasAccess(path) {
|
|
52
52
|
try {
|
|
53
|
-
await
|
|
53
|
+
await _fs.promises.access(path, _fs.constants.R_OK);
|
|
54
54
|
} catch (err) {
|
|
55
55
|
return false;
|
|
56
56
|
}
|
|
@@ -58,37 +58,37 @@ const fs = {
|
|
|
58
58
|
return true;
|
|
59
59
|
},
|
|
60
60
|
|
|
61
|
-
exists(path) {
|
|
62
|
-
return
|
|
61
|
+
async exists(path) {
|
|
62
|
+
return await fs.hasAccess(path);
|
|
63
63
|
},
|
|
64
64
|
|
|
65
65
|
rimraf: _bluebird.default.promisify(_rimraf.default),
|
|
66
|
-
rimrafSync: _rimraf.default.sync
|
|
66
|
+
rimrafSync: _rimraf.default.sync,
|
|
67
67
|
|
|
68
|
-
async mkdir(
|
|
68
|
+
async mkdir(filepath, opts = {}) {
|
|
69
69
|
try {
|
|
70
|
-
return await
|
|
70
|
+
return await _fs.promises.mkdir(filepath, opts);
|
|
71
71
|
} catch (err) {
|
|
72
|
-
if (err
|
|
72
|
+
if ((err === null || err === void 0 ? void 0 : err.code) !== 'EEXIST') {
|
|
73
73
|
throw err;
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
|
|
78
|
-
async copyFile(source, destination,
|
|
79
|
-
if (!(await
|
|
78
|
+
async copyFile(source, destination, opts = {}) {
|
|
79
|
+
if (!(await fs.hasAccess(source))) {
|
|
80
80
|
throw new Error(`The file at '${source}' does not exist or is not accessible`);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
return await ncpAsync(source, destination,
|
|
83
|
+
return await ncpAsync(source, destination, opts);
|
|
84
84
|
},
|
|
85
85
|
|
|
86
86
|
async md5(filePath) {
|
|
87
|
-
return await
|
|
87
|
+
return await fs.hash(filePath, 'md5');
|
|
88
88
|
},
|
|
89
89
|
|
|
90
90
|
mv: _bluebird.default.promisify(_mv.default),
|
|
91
|
-
which:
|
|
91
|
+
which: _which.default,
|
|
92
92
|
glob: _bluebird.default.promisify(_glob.default),
|
|
93
93
|
sanitizeName: _sanitizeFilename.default,
|
|
94
94
|
|
|
@@ -96,14 +96,23 @@ const fs = {
|
|
|
96
96
|
return await new _bluebird.default((resolve, reject) => {
|
|
97
97
|
const fileHash = _crypto.default.createHash(algorithm);
|
|
98
98
|
|
|
99
|
-
const readStream =
|
|
100
|
-
|
|
99
|
+
const readStream = (0, _fs.createReadStream)(filePath);
|
|
101
100
|
readStream.on('error', e => reject(new Error(`Cannot calculate ${algorithm} hash for '${filePath}'. Original error: ${e.message}`)));
|
|
102
101
|
readStream.on('data', chunk => fileHash.update(chunk));
|
|
103
102
|
readStream.on('end', () => resolve(fileHash.digest('hex')));
|
|
104
103
|
});
|
|
105
104
|
},
|
|
106
105
|
|
|
106
|
+
walk(dir, opts) {
|
|
107
|
+
return (0, _klaw.default)(dir, opts);
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
async mkdirp(dir) {
|
|
111
|
+
return await fs.mkdir(dir, {
|
|
112
|
+
recursive: true
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
|
|
107
116
|
async walkDir(dir, recursive, callback) {
|
|
108
117
|
let isValidRoot = false;
|
|
109
118
|
let errMsg = null;
|
|
@@ -153,7 +162,9 @@ const fs = {
|
|
|
153
162
|
reject(err);
|
|
154
163
|
}
|
|
155
164
|
}).on('end', function () {
|
|
156
|
-
lastFileProcessed.then(
|
|
165
|
+
lastFileProcessed.then(file => {
|
|
166
|
+
resolve(file !== null && file !== void 0 ? file : null);
|
|
167
|
+
}).catch(function (err) {
|
|
157
168
|
_logger.default.warn(`Unexpected error: ${err.message}`);
|
|
158
169
|
|
|
159
170
|
reject(err);
|
|
@@ -168,11 +179,13 @@ const fs = {
|
|
|
168
179
|
});
|
|
169
180
|
},
|
|
170
181
|
|
|
171
|
-
readPackageJsonFrom(dir) {
|
|
172
|
-
const
|
|
182
|
+
readPackageJsonFrom(dir, opts = {}) {
|
|
183
|
+
const cwd = fs.findRoot(dir);
|
|
173
184
|
|
|
174
185
|
try {
|
|
175
|
-
return
|
|
186
|
+
return _readPkg.default.sync({ ...opts,
|
|
187
|
+
cwd
|
|
188
|
+
});
|
|
176
189
|
} catch (err) {
|
|
177
190
|
err.message = `Failed to read a \`package.json\` from dir \`${dir}\`:\n\n${err.message}`;
|
|
178
191
|
throw err;
|
|
@@ -191,30 +204,35 @@ const fs = {
|
|
|
191
204
|
}
|
|
192
205
|
|
|
193
206
|
return result;
|
|
194
|
-
}
|
|
207
|
+
},
|
|
195
208
|
|
|
209
|
+
access: _fs.promises.access,
|
|
210
|
+
appendFile: _fs.promises.appendFile,
|
|
211
|
+
chmod: _fs.promises.chmod,
|
|
212
|
+
close: _bluebird.default.promisify(_fs.close),
|
|
213
|
+
constants: _fs.constants,
|
|
214
|
+
createWriteStream: _fs.createWriteStream,
|
|
215
|
+
createReadStream: _fs.createReadStream,
|
|
216
|
+
lstat: _fs.promises.lstat,
|
|
217
|
+
open: _bluebird.default.promisify(_fs.open),
|
|
218
|
+
openFile: _fs.promises.open,
|
|
219
|
+
readdir: _fs.promises.readdir,
|
|
220
|
+
read: _bluebird.default.promisify(_fs.read),
|
|
221
|
+
readFile: _fs.promises.readFile,
|
|
222
|
+
readlink: _fs.promises.readlink,
|
|
223
|
+
realpath: _fs.promises.realpath,
|
|
224
|
+
rename: _fs.promises.rename,
|
|
225
|
+
stat: _fs.promises.stat,
|
|
226
|
+
symlink: _fs.promises.symlink,
|
|
227
|
+
unlink: _fs.promises.unlink,
|
|
228
|
+
write: _bluebird.default.promisify(_fs.write),
|
|
229
|
+
writeFile: _fs.promises.writeFile,
|
|
230
|
+
F_OK: _fs.constants.F_OK,
|
|
231
|
+
R_OK: _fs.constants.R_OK,
|
|
232
|
+
W_OK: _fs.constants.W_OK,
|
|
233
|
+
X_OK: _fs.constants.X_OK
|
|
196
234
|
};
|
|
197
235
|
exports.fs = fs;
|
|
198
|
-
const simples = ['open', 'close', 'access', 'readFile', 'writeFile', 'write', 'read', 'readlink', 'chmod', 'unlink', 'readdir', 'stat', 'rename', 'lstat', 'appendFile', 'realpath', 'symlink'];
|
|
199
|
-
|
|
200
|
-
for (const s of simples) {
|
|
201
|
-
fs[s] = _bluebird.default.promisify(_fs2.default[s]);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
const syncFunctions = ['createReadStream', 'createWriteStream'];
|
|
205
|
-
|
|
206
|
-
for (const s of syncFunctions) {
|
|
207
|
-
fs[s] = _fs2.default[s];
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const constants = ['F_OK', 'R_OK', 'W_OK', 'X_OK', 'constants'];
|
|
211
|
-
|
|
212
|
-
for (const c of constants) {
|
|
213
|
-
fs[c] = _fs2.default[c];
|
|
214
|
-
}
|
|
215
|
-
|
|
216
236
|
var _default = fs;
|
|
217
|
-
exports.default = _default;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJta2RpckFzeW5jIiwiQiIsInByb21pc2lmeSIsIl9mcyIsIm1rZGlyIiwibmNwQXN5bmMiLCJuY3AiLCJmaW5kUm9vdENhY2hlZCIsIl8iLCJtZW1vaXplIiwiZmluZFJvb3QiLCJmcyIsImhhc0FjY2VzcyIsInBhdGgiLCJhY2Nlc3MiLCJSX09LIiwiZXJyIiwiZXhpc3RzIiwicmltcmFmIiwicmltcmFmU3luYyIsInN5bmMiLCJiaW5kIiwiYXJncyIsImNvZGUiLCJjb3B5RmlsZSIsInNvdXJjZSIsImRlc3RpbmF0aW9uIiwib3RoZXJBcmdzIiwiRXJyb3IiLCJtZDUiLCJmaWxlUGF0aCIsImhhc2giLCJtdiIsIndoaWNoIiwiZ2xvYiIsInNhbml0aXplTmFtZSIsInNhbml0aXplIiwiYWxnb3JpdGhtIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVIYXNoIiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsInJlYWRTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwib24iLCJlIiwibWVzc2FnZSIsImNodW5rIiwidXBkYXRlIiwiZGlnZXN0Iiwid2Fsa0RpciIsImRpciIsInJlY3Vyc2l2ZSIsImNhbGxiYWNrIiwiaXNWYWxpZFJvb3QiLCJlcnJNc2ciLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJ3YWxrZXIiLCJmaWxlQ291bnQiLCJkaXJlY3RvcnlDb3VudCIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsImxhc3RGaWxlUHJvY2Vzc2VkIiwiZGVwdGhMaW1pdCIsIml0ZW0iLCJwYXVzZSIsInN0YXRzIiwidHJ5IiwidGhlbiIsImRvbmUiLCJyZXN1bWUiLCJjYXRjaCIsImxvZyIsIndhcm4iLCJmaW5hbGx5IiwiZGVidWciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImRlc3Ryb3kiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwicm9vdCIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsImpvaW4iLCJpc0Fic29sdXRlIiwiVHlwZUVycm9yIiwicmVzdWx0Iiwic2ltcGxlcyIsInMiLCJzeW5jRnVuY3Rpb25zIiwiY29uc3RhbnRzIiwiYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLGFBQUlDLEtBQWhCLENBQW5COztBQUNBLE1BQU1DLFFBQVEsR0FBR0osa0JBQUVDLFNBQUYsQ0FBWUksWUFBWixDQUFqQjs7QUFDQSxNQUFNQyxjQUFjLEdBQUdDLGdCQUFFQyxPQUFGLENBQVVDLGlCQUFWLENBQXZCOztBQUVBLE1BQU1DLEVBQUUsR0FBRztBQUNULFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNLEtBQUtDLE1BQUwsQ0FBWUQsSUFBWixFQUFrQlYsYUFBSVksSUFBdEIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQVJROztBQVNUQyxFQUFBQSxNQUFNLENBQUVKLElBQUYsRUFBUTtBQUFFLFdBQU8sS0FBS0QsU0FBTCxDQUFlQyxJQUFmLENBQVA7QUFBOEIsR0FUckM7O0FBVVRLLEVBQUFBLE1BQU0sRUFBRWpCLGtCQUFFQyxTQUFGLENBQVlnQixlQUFaLENBVkM7QUFXVEMsRUFBQUEsVUFBVSxFQUFFRCxnQkFBT0UsSUFBUCxDQUFZQyxJQUFaLENBQWlCSCxlQUFqQixDQVhIOztBQVlULFFBQU1kLEtBQU4sQ0FBYSxHQUFHa0IsSUFBaEIsRUFBc0I7QUFDcEIsUUFBSTtBQUNGLGFBQU8sTUFBTXRCLFVBQVUsQ0FBQyxHQUFHc0IsSUFBSixDQUF2QjtBQUNELEtBRkQsQ0FFRSxPQUFPTixHQUFQLEVBQVk7QUFD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QStCO0FBQzdCbkYsRUFBQUEsRUFBRSxDQUFDa0YsQ0FBRCxDQUFGLEdBQVExRixhQUFJMEYsQ0FBSixDQUFSO0FBQ0Q7O0FBR0QsTUFBTUUsU0FBUyxHQUFHLENBQ2hCLE1BRGdCLEVBQ1IsTUFEUSxFQUNBLE1BREEsRUFDUSxNQURSLEVBQ2dCLFdBRGhCLENBQWxCOztBQUdBLEtBQUssTUFBTUMsQ0FBWCxJQUFnQkQsU0FBaEIsRUFBMkI7QUFDekJwRixFQUFBQSxFQUFFLENBQUNxRixDQUFELENBQUYsR0FBUTdGLGFBQUk2RixDQUFKLENBQVI7QUFDRDs7ZUFHY3JGLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBqc2hpbnQgaWdub3JlOiBzdGFydFxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5pbXBvcnQgcmltcmFmIGZyb20gJ3JpbXJhZic7XG5pbXBvcnQgbmNwIGZyb20gJ25jcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbXYgZnJvbSAnbXYnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGtsYXcgZnJvbSAna2xhdyc7XG5pbXBvcnQgc2FuaXRpemUgZnJvbSAnc2FuaXRpemUtZmlsZW5hbWUnO1xuaW1wb3J0IGZpbmRSb290IGZyb20gJ2ZpbmQtcm9vdCc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuXG5jb25zdCBta2RpckFzeW5jID0gQi5wcm9taXNpZnkoX2ZzLm1rZGlyKTtcbmNvbnN0IG5jcEFzeW5jID0gQi5wcm9taXNpZnkobmNwKTtcbmNvbnN0IGZpbmRSb290Q2FjaGVkID0gXy5tZW1vaXplKGZpbmRSb290KTtcblxuY29uc3QgZnMgPSB7XG4gIGFzeW5jIGhhc0FjY2VzcyAocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFjY2VzcyhwYXRoLCBfZnMuUl9PSyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBleGlzdHMgKHBhdGgpIHsgcmV0dXJuIHRoaXMuaGFzQWNjZXNzKHBhdGgpOyB9LFxuICByaW1yYWY6IEIucHJvbWlzaWZ5KHJpbXJhZiksXG4gIHJpbXJhZlN5bmM6IHJpbXJhZi5zeW5jLmJpbmQocmltcmFmKSxcbiAgYXN5bmMgbWtkaXIgKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG1rZGlyQXN5bmMoLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBhc3luYyBjb3B5RmlsZSAoc291cmNlLCBkZXN0aW5hdGlvbiwgLi4ub3RoZXJBcmdzKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmhhc0FjY2Vzcyhzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke3NvdXJjZX0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBuY3BBc3luYyhzb3VyY2UsIGRlc3RpbmF0aW9uLCAuLi5vdGhlckFyZ3MpO1xuICB9LFxuICBhc3luYyBtZDUgKGZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFzaChmaWxlUGF0aCwgJ21kNScpO1xuICB9LFxuICBtdjogQi5wcm9taXNpZnkobXYpLFxuICB3aGljaDogQi5wcm9taXNpZnkod2hpY2gpLFxuICBnbG9iOiBCLnByb21pc2lmeShnbG9iKSxcbiAgc2FuaXRpemVOYW1lOiBzYW5pdGl6ZSxcbiAgYXN5bmMgaGFzaCAoZmlsZVBhdGgsIGFsZ29yaXRobSA9ICdzaGExJykge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSk7XG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gX2ZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCAoZSkgPT4gcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYENhbm5vdCBjYWxjdWxhdGUgJHthbGdvcml0aG19IGhhc2ggZm9yICcke2ZpbGVQYXRofScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSkpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4gZmlsZUhhc2gudXBkYXRlKGNodW5rKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGZpbGVIYXNoLmRpZ2VzdCgnaGV4JykpKTtcbiAgICB9KTtcbiAgfSxcbiAgLyoqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGRpcmVjdG9yeSB3YWxraW5nXG4gICAqIEBuYW1lIFdhbGtEaXJDYWxsYmFja1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1QYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRGlyZWN0b3J5IFNob3dzIGlmIGl0IGlzIGEgZGlyZWN0b3J5IG9yIGEgZmlsZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm4gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzdG9wIHdhbGtpbmdcbiAgKi9cblxuICAvKipcbiAgICogV2Fsa3MgYSBkaXJlY3RvcnkgZ2l2ZW4gYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBwYXRoIGpvaW5lZCB3aXRoIHRoZSBkaXIgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgRGlyZWN0b3J5IHBhdGggd2hlcmUgd2Ugd2lsbCBzdGFydCB3YWxraW5nXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjdXJzaXZlIFNldCBpdCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGNvbnRpbnVlIHdhbGtpbmcgc3ViIGRpcmVjdG9yaWVzXG4gICAqIEBwYXJhbSB7V2Fsa0RpckNhbGxiYWNrfSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSBuZXcgcGF0aCBpcyBmb3VuZFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGBkaXJgIHBhcmFtZXRlciBjb250YWlucyBhIHBhdGggdG8gYW4gaW52YWxpZCBmb2xkZXJcbiAgICogQHJldHVybiB7P3N0cmluZ30gcmV0dXJucyB0aGUgZm91bmQgcGF0aCBvciBudWxsIGlmIHRoZSBpdGVtIHdhcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIHdhbGtEaXIgKGRpciwgcmVjdXJzaXZlLCBjYWxsYmFjaykgeyAvL2VzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgbGV0IGlzVmFsaWRSb290ID0gZmFsc2U7XG4gICAgbGV0IGVyck1zZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSb290ID0gKGF3YWl0IGZzLnN0YXQoZGlyKSkuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJNc2cgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFJvb3QpIHtcbiAgICAgIHRocm93IEVycm9yKGAnJHtkaXJ9JyBpcyBub3QgYSB2YWxpZCByb290IGRpcmVjdG9yeWAgKyAoZXJyTXNnID8gYC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyTXNnfWAgOiAnJykpO1xuICAgIH1cblxuICAgIGxldCB3YWxrZXI7XG4gICAgbGV0IGZpbGVDb3VudCA9IDA7XG4gICAgbGV0IGRpcmVjdG9yeUNvdW50ID0gMDtcbiAgICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCBsYXN0RmlsZVByb2Nlc3NlZCA9IEIucmVzb2x2ZSgpO1xuICAgICAgd2Fsa2VyID0ga2xhdyhkaXIsIHtcbiAgICAgICAgZGVwdGhMaW1pdDogcmVjdXJzaXZlID8gLTEgOiAwLFxuICAgICAgfSk7XG4gICAgICB3YWxrZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB3YWxrZXIucGF1c2UoKTtcblxuICAgICAgICBpZiAoIWl0ZW0uc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZpbGVDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdG9yeUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICAgIGxhc3RGaWxlUHJvY2Vzc2VkID0gQi50cnkoYXN5bmMgKCkgPT4gYXdhaXQgY2FsbGJhY2soaXRlbS5wYXRoLCBpdGVtLnN0YXRzLmlzRGlyZWN0b3J5KCkpKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkb25lID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhbGtlci5yZXN1bWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyLCBpdGVtKSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgYW4gZXJyb3Igd2hpbGUgd2Fsa2luZyAnJHtpdGVtLnBhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgLy8ga2xhdyBjYW5ub3QgZ2V0IGJhY2sgZnJvbSBhbiBFTk9FTlQgZXJyb3JcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGxvZy53YXJuKCdBbGwgZmlsZXMgbWF5IG5vdCBoYXZlIGJlZW4gYWNjZXNzZWQnKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0RmlsZVByb2Nlc3NlZFxuICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBVbmV4cGVjdGVkIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJhdmVyc2VkICR7cGx1cmFsaXplKCdkaXJlY3RvcnknLCBkaXJlY3RvcnlDb3VudCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgYW5kICR7cGx1cmFsaXplKCdmaWxlJywgZmlsZUNvdW50LCB0cnVlKX0gYCArXG4gICAgICAgIGBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgaWYgKHdhbGtlcikge1xuICAgICAgICB3YWxrZXIuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvKipcbiAgICogUmVhZHMgdGhlIGNsb3Nlc3QgYHBhY2thZ2UuanNvbmAgZmlsZSBmcm9tIGFic29sdXRlIHBhdGggYGRpcmAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgLSBEaXJlY3RvcnkgdG8gc2VhcmNoIGZyb21cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgZGlyYCBpcyBub3QgYSBub25lbXB0eSBzdHJpbmcgb3IgcmVsYXRpdmUgcGF0aFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcyBmaW5kaW5nIG9yIHJlYWRpbmcgYSBgcGFja2FnZS5qc29uYCBmaWxlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGFyc2VkIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICByZWFkUGFja2FnZUpzb25Gcm9tIChkaXIpIHtcbiAgICBjb25zdCByb290ID0gZnMuZmluZFJvb3QoZGlyKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoX2ZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocm9vdCwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYEZhaWxlZCB0byByZWFkIGEgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gZGlyIFxcYCR7ZGlyfVxcYDpcXG5cXG4ke2Vyci5tZXNzYWdlfWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgZnJvbSBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBkaXJgIGlzIG5vdCBhIG5vbmVtcHR5IHN0cmluZyBvciByZWxhdGl2ZSBwYXRoXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zIGZpbmRpbmcgdGhlIHByb2plY3Qgcm9vdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzZXQgcGFyZW50IGRpciBjb250YWluaW5nIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICBmaW5kUm9vdCAoZGlyKSB7XG4gICAgaWYgKCFkaXIgfHwgIXBhdGguaXNBYnNvbHV0ZShkaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZmluZFJvb3QoKWAgbXVzdCBiZSBwcm92aWRlZCBhIG5vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aCcpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBmaW5kUm9vdENhY2hlZChkaXIpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYGZpbmRSb290KClcXGAgY291bGQgbm90IGZpbmQgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gJHtkaXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbi8vIGFkZCB0aGUgc3VwcG9ydGVkIGBmc2AgZnVuY3Rpb25zXG5jb25zdCBzaW1wbGVzID0gW1xuICAnb3BlbicsICdjbG9zZScsICdhY2Nlc3MnLCAncmVhZEZpbGUnLCAnd3JpdGVGaWxlJywgJ3dyaXRlJywgJ3JlYWQnLFxuICAncmVhZGxpbmsnLCAnY2htb2QnLCAndW5saW5rJywgJ3JlYWRkaXInLCAnc3RhdCcsICdyZW5hbWUnLCAnbHN0YXQnLFxuICAnYXBwZW5kRmlsZScsICdyZWFscGF0aCcsICdzeW1saW5rJyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc2ltcGxlcykge1xuICBmc1tzXSA9IEIucHJvbWlzaWZ5KF9mc1tzXSk7XG59XG5cbmNvbnN0IHN5bmNGdW5jdGlvbnMgPSBbXG4gICdjcmVhdGVSZWFkU3RyZWFtJyxcbiAgJ2NyZWF0ZVdyaXRlU3RyZWFtJyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc3luY0Z1bmN0aW9ucykge1xuICBmc1tzXSA9IF9mc1tzXTtcbn1cblxuLy8gYWRkIHRoZSBjb25zdGFudHMgZnJvbSBgZnNgXG5jb25zdCBjb25zdGFudHMgPSBbXG4gICdGX09LJywgJ1JfT0snLCAnV19PSycsICdYX09LJywgJ2NvbnN0YW50cycsXG5dO1xuZm9yIChjb25zdCBjIG9mIGNvbnN0YW50cykge1xuICBmc1tjXSA9IF9mc1tjXTtcbn1cblxuZXhwb3J0IHsgZnMgfTtcbmV4cG9ydCBkZWZhdWx0IGZzO1xuIl0sImZpbGUiOiJsaWIvZnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
|
237
|
+
exports.default = _default;
|
|
238
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9mcy5qcyJdLCJuYW1lcyI6WyJuY3BBc3luYyIsIkIiLCJwcm9taXNpZnkiLCJuY3AiLCJmaW5kUm9vdENhY2hlZCIsIl8iLCJtZW1vaXplIiwicGtnRGlyIiwic3luYyIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImZzUHJvbWlzZXMiLCJhY2Nlc3MiLCJjb25zdGFudHMiLCJSX09LIiwiZXJyIiwiZXhpc3RzIiwicmltcmFmIiwicmltcmFmU3luYyIsIm1rZGlyIiwiZmlsZXBhdGgiLCJvcHRzIiwiY29kZSIsImNvcHlGaWxlIiwic291cmNlIiwiZGVzdGluYXRpb24iLCJFcnJvciIsIm1kNSIsImZpbGVQYXRoIiwiaGFzaCIsIm12Iiwid2hpY2giLCJnbG9iIiwic2FuaXRpemVOYW1lIiwic2FuaXRpemUiLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsIm9uIiwiZSIsIm1lc3NhZ2UiLCJjaHVuayIsInVwZGF0ZSIsImRpZ2VzdCIsIndhbGsiLCJkaXIiLCJta2RpcnAiLCJyZWN1cnNpdmUiLCJ3YWxrRGlyIiwiY2FsbGJhY2siLCJpc1ZhbGlkUm9vdCIsImVyck1zZyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsIndhbGtlciIsImZpbGVDb3VudCIsImRpcmVjdG9yeUNvdW50IiwidGltZXIiLCJUaW1lciIsInN0YXJ0IiwibGFzdEZpbGVQcm9jZXNzZWQiLCJkZXB0aExpbWl0IiwiaXRlbSIsInBhdXNlIiwic3RhdHMiLCJ0cnkiLCJ0aGVuIiwiZG9uZSIsInJlc3VtZSIsImNhdGNoIiwibG9nIiwid2FybiIsImZpbGUiLCJmaW5hbGx5IiwiZGVidWciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImRlc3Ryb3kiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiY3dkIiwiZmluZFJvb3QiLCJyZWFkUGtnIiwiaXNBYnNvbHV0ZSIsIlR5cGVFcnJvciIsInJlc3VsdCIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNsb3NlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwibHN0YXQiLCJvcGVuIiwib3BlbkZpbGUiLCJyZWFkZGlyIiwicmVhZCIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInN5bWxpbmsiLCJ1bmxpbmsiLCJ3cml0ZSIsIndyaXRlRmlsZSIsIkZfT0siLCJXX09LIiwiWF9PSyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQXlGQyxrQkFBRUMsU0FBRixDQUFZQyxZQUFaLENBQXZHOztBQUNBLE1BQU1DLGNBQWMsR0FBR0MsZ0JBQUVDLE9BQUYsQ0FBVUMsZ0JBQU9DLElBQWpCLENBQXZCOztBQUVBLE1BQU1DLEVBQUUsR0FBRztBQU1ULFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNQyxhQUFXQyxNQUFYLENBQWtCRixJQUFsQixFQUF3QkcsY0FBVUMsSUFBbEMsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQWJROztBQW1CVCxRQUFNQyxNQUFOLENBQWNOLElBQWQsRUFBb0I7QUFDbEIsV0FBTyxNQUFNRixFQUFFLENBQUNDLFNBQUgsQ0FBYUMsSUFBYixDQUFiO0FBQ0QsR0FyQlE7O0FBMkJUTyxFQUFBQSxNQUFNLEVBQTJFakIsa0JBQUVDLFNBQUYsQ0FBWWdCLGVBQVosQ0EzQnhFO0FBaUNUQyxFQUFBQSxVQUFVLEVBQUVELGdCQUFPVixJQWpDVjs7QUEyQ1QsUUFBTVksS0FBTixDQUFhQyxRQUFi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RixFQUFBQSxJQUFJLEVBQUVELGNBQVVDLElBOVJQO0FBb1NUK0YsRUFBQUEsSUFBSSxFQUFFaEcsY0FBVWdHLElBcFNQO0FBMFNUQyxFQUFBQSxJQUFJLEVBQUVqRyxjQUFVaUc7QUExU1AsQ0FBWDs7ZUE4U2V0RyxFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNsb3NlLCBjb25zdGFudHMsIGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCBwcm9taXNlcyBhcyBmc1Byb21pc2VzLCByZWFkLCB3cml0ZSwgb3BlbiB9IGZyb20gJ2ZzJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IGtsYXcgZnJvbSAna2xhdyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG12IGZyb20gJ212JztcbmltcG9ydCBuY3AgZnJvbSAnbmNwJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHBrZ0RpciBmcm9tICdwa2ctZGlyJztcbmltcG9ydCByZWFkUGtnIGZyb20gJ3JlYWQtcGtnJztcbmltcG9ydCByaW1yYWYgZnJvbSAncmltcmFmJztcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICdzYW5pdGl6ZS1maWxlbmFtZSc7XG5pbXBvcnQgd2hpY2ggZnJvbSAnd2hpY2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgbmNwQXN5bmMgPSAvKiogQHR5cGUgeyhzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nLCBvcHRzOiBuY3AuT3B0aW9uc3x1bmRlZmluZWQpID0+IEI8dm9pZD59ICovKEIucHJvbWlzaWZ5KG5jcCkpO1xuY29uc3QgZmluZFJvb3RDYWNoZWQgPSBfLm1lbW9pemUocGtnRGlyLnN5bmMpO1xuXG5jb25zdCBmcyA9IHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIGB0cnVlYCBpZiBgcGF0aGAgaXMgX3JlYWRhYmxlXywgd2hpY2ggZGlmZmVycyBmcm9tIE5vZGUuanMnIGRlZmF1bHQgYmVoYXZpb3Igb2YgXCJjYW4gd2Ugc2VlIGl0P1wiXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdmcycpLlBhdGhMaWtlfSBwYXRoXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzQWNjZXNzIChwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzUHJvbWlzZXMuYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5SX09LKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciB7QGxpbmtjb2RlIGZzLmhhc0FjY2Vzc31cbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IHBhdGhcbiAgICovXG4gIGFzeW5jIGV4aXN0cyAocGF0aCkge1xuICAgIHJldHVybiBhd2FpdCBmcy5oYXNBY2Nlc3MocGF0aCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGRpcmVjdG9yeSBhbmQgYWxsIGl0cyBjb250ZW50cywgcmVjdXJzaXZlbHlcbiAgICogQHRvZG8gUmVwbGFjZSB3aXRoIGBybSgpYCBmcm9tIGBmcy5wcm9taXNlc2Agd2hlbiBOb2RlLmpzIHYxMiBzdXBwb3J0IGlzIGRyb3BwZWQuXG4gICAqL1xuICByaW1yYWY6IC8qKiBAdHlwZSB7KGRpcnBhdGg6IHN0cmluZywgb3B0cz86IHJpbXJhZi5PcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+fSAqLyhCLnByb21pc2lmeShyaW1yYWYpKSxcblxuICAvKipcbiAgICogQWxpYXMgb2Yge0BsaW5rY29kZSByaW1yYWYuc3luY31cbiAgICogQHRvZG8gUmVwbGFjZSB3aXRoIGBybVN5bmMoKWAgZnJvbSBgZnNgIHdoZW4gTm9kZS5qcyB2MTIgc3VwcG9ydCBpcyBkcm9wcGVkLlxuICAgKi9cbiAgcmltcmFmU3luYzogcmltcmFmLnN5bmMsXG5cbiAgLyoqXG4gICAqIExpa2UgTm9kZS5qcycgYGZzUHJvbWlzZXMubWtkaXIoKWAsIGJ1dCB3aWxsIF9ub3RfIHJlamVjdCBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8VVJMfSBmaWxlcGF0aFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnZnMnKS5NYWtlRGlyZWN0b3J5T3B0aW9uc30gW29wdHNdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ3x1bmRlZmluZWQ+fVxuICAgKiBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc3Byb21pc2VzbWtkaXJwYXRoLW9wdGlvbnNcbiAgICovXG4gIGFzeW5jIG1rZGlyIChmaWxlcGF0aCwgb3B0cyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmc1Byb21pc2VzLm1rZGlyKGZpbGVwYXRoLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnI/LmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIC8qKlxuICAgKiBDb3BpZXMgZmlsZXMgX2FuZCBlbnRpcmUgZGlyZWN0b3JpZXNfXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBTb3VyY2UgdG8gY29weVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gLSBEZXN0aW5hdGlvbiB0byBjb3B5IHRvXG4gICAqIEBwYXJhbSB7bmNwLk9wdGlvbnN9IFtvcHRzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gYG5jcGBcbiAgICogQHNlZSBodHRwczovL25wbS5pbS9uY3BcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjb3B5RmlsZSAoc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCFhd2FpdCBmcy5oYXNBY2Nlc3Moc291cmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgbmNwQXN5bmMoc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0cyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNRDUgaGFzaCBvZiBhIGZpbGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdmcycpLlBhdGhMaWtlfSBmaWxlUGF0aFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgYXN5bmMgbWQ1IChmaWxlUGF0aCkge1xuICAgIHJldHVybiBhd2FpdCBmcy5oYXNoKGZpbGVQYXRoLCAnbWQ1Jyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vdmUgYSBmaWxlXG4gICAqL1xuICBtdjogLyoqIEB0eXBlIHsoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcHRzPzogbXYuT3B0aW9ucykgPT4gQjx2b2lkPn0gKi8oQi5wcm9taXNpZnkobXYpKSxcblxuICAvKipcbiAgICogRmluZCBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgaW4gc3lzdGVtIGBQQVRIYFxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS13aGljaFxuICAgKi9cbiAgd2hpY2gsXG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZ2xvYiBwYXR0ZXJuLCByZXNvbHZlIHdpdGggbGlzdCBvZiBmaWxlcyBtYXRjaGluZyB0aGF0IHBhdHRlcm5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYlxuICAgKi9cbiAgZ2xvYjogLyoqIEB0eXBlIHsocGF0dGVybjogc3RyaW5nLCBvcHRzPzogZ2xvYi5JT3B0aW9ucykgPT4gQjxzdHJpbmdbXT59ICovKEIucHJvbWlzaWZ5KGdsb2IpKSxcblxuICAvKipcbiAgICogU2FuaXRpemUgYSBmaWxlbmFtZVxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzaGFwL25vZGUtc2FuaXRpemUtZmlsZW5hbWVcbiAgICovXG4gIHNhbml0aXplTmFtZTogc2FuaXRpemUsXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGhleCBkaWdlc3Qgb2Ygc29tZSBmaWxlIGF0IGBmaWxlUGF0aGBcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IGZpbGVQYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxnb3JpdGhtXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgYXN5bmMgaGFzaCAoZmlsZVBhdGgsIGFsZ29yaXRobSA9ICdzaGExJykge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSk7XG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgQ2Fubm90IGNhbGN1bGF0ZSAke2FsZ29yaXRobX0gaGFzaCBmb3IgJyR7ZmlsZVBhdGh9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiBmaWxlSGFzaC51cGRhdGUoY2h1bmspKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoZmlsZUhhc2guZGlnZXN0KCdoZXgnKSkpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGBXYWxrZXJgIGluc3RhbmNlLCB3aGljaCBpcyBhIHJlYWRhYmxlIHN0cmVhbSAoYW5kIHRodXNseSBhbiBhc3luYyBpdGVyYXRvcikuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgLSBEaXIgdG8gc3RhcnQgd2Fsa2luZyBhdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgna2xhdycpLk9wdGlvbnN9IFtvcHRzXVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdrbGF3JykuV2Fsa2VyfVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2tsYXdcbiAgICovXG4gIHdhbGsgKGRpciwgb3B0cykge1xuICAgIHJldHVybiBrbGF3KGRpciwgb3B0cyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNyZWF0ZSBhIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IGRpclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmd8dW5kZWZpbmVkPn1cbiAgICovXG4gIGFzeW5jIG1rZGlycCAoZGlyKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLm1rZGlyKGRpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXYWxrcyBhIGRpcmVjdG9yeSBnaXZlbiBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uIFRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2l0aCBhIHBhdGggam9pbmVkIHdpdGggdGhlIGRpciBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciBEaXJlY3RvcnkgcGF0aCB3aGVyZSB3ZSB3aWxsIHN0YXJ0IHdhbGtpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgU2V0IGl0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gY29udGludWUgd2Fsa2luZyBzdWIgZGlyZWN0b3JpZXNcbiAgICogQHBhcmFtIHtXYWxrRGlyQ2FsbGJhY2t9IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiBhIG5ldyBwYXRoIGlzIGZvdW5kXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYGRpcmAgcGFyYW1ldGVyIGNvbnRhaW5zIGEgcGF0aCB0byBhbiBpbnZhbGlkIGZvbGRlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn0gcmV0dXJucyB0aGUgZm91bmQgcGF0aCBvciBudWxsIGlmIHRoZSBpdGVtIHdhcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIHdhbGtEaXIgKGRpciwgcmVjdXJzaXZlLCBjYWxsYmFjaykgeyAvL2VzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgbGV0IGlzVmFsaWRSb290ID0gZmFsc2U7XG4gICAgbGV0IGVyck1zZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSb290ID0gKGF3YWl0IGZzLnN0YXQoZGlyKSkuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJNc2cgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFJvb3QpIHtcbiAgICAgIHRocm93IEVycm9yKGAnJHtkaXJ9JyBpcyBub3QgYSB2YWxpZCByb290IGRpcmVjdG9yeWAgKyAoZXJyTXNnID8gYC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyTXNnfWAgOiAnJykpO1xuICAgIH1cblxuICAgIGxldCB3YWxrZXI7XG4gICAgbGV0IGZpbGVDb3VudCA9IDA7XG4gICAgbGV0IGRpcmVjdG9yeUNvdW50ID0gMDtcbiAgICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCBsYXN0RmlsZVByb2Nlc3NlZCA9IEIucmVzb2x2ZSgpO1xuICAgICAgd2Fsa2VyID0ga2xhdyhkaXIsIHtcbiAgICAgICAgZGVwdGhMaW1pdDogcmVjdXJzaXZlID8gLTEgOiAwLFxuICAgICAgfSk7XG4gICAgICB3YWxrZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB3YWxrZXIucGF1c2UoKTtcblxuICAgICAgICBpZiAoIWl0ZW0uc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZpbGVDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdG9yeUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICAgIGxhc3RGaWxlUHJvY2Vzc2VkID0gQi50cnkoYXN5bmMgKCkgPT4gYXdhaXQgY2FsbGJhY2soaXRlbS5wYXRoLCBpdGVtLnN0YXRzLmlzRGlyZWN0b3J5KCkpKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkb25lID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhbGtlci5yZXN1bWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyLCBpdGVtKSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgYW4gZXJyb3Igd2hpbGUgd2Fsa2luZyAnJHtpdGVtLnBhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgLy8ga2xhdyBjYW5ub3QgZ2V0IGJhY2sgZnJvbSBhbiBFTk9FTlQgZXJyb3JcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGxvZy53YXJuKCdBbGwgZmlsZXMgbWF5IG5vdCBoYXZlIGJlZW4gYWNjZXNzZWQnKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0RmlsZVByb2Nlc3NlZFxuICAgICAgICAgIC50aGVuKChmaWxlKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi8oZmlsZSkgPz8gbnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbG9nLndhcm4oYFVuZXhwZWN0ZWQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuICAgICAgbG9nLmRlYnVnKGBUcmF2ZXJzZWQgJHtwbHVyYWxpemUoJ2RpcmVjdG9yeScsIGRpcmVjdG9yeUNvdW50LCB0cnVlKX0gYCArXG4gICAgICAgIGBhbmQgJHtwbHVyYWxpemUoJ2ZpbGUnLCBmaWxlQ291bnQsIHRydWUpfSBgICtcbiAgICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICBpZiAod2Fsa2VyKSB7XG4gICAgICAgIHdhbGtlci5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY2xvc2VzdCBgcGFja2FnZS5qc29uYCBmaWxlIGZyb20gYWJzb2x1dGUgcGF0aCBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAcGFyYW0ge2ltcG9ydCgncmVhZC1wa2cnKS5PcHRpb25zfSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGByZWFkLXBrZ2BcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdlcmUgcHJvYmxlbXMgZmluZGluZyBvciByZWFkaW5nIGEgYHBhY2thZ2UuanNvbmAgZmlsZVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBIHBhcnNlZCBgcGFja2FnZS5qc29uYFxuICAgKi9cbiAgcmVhZFBhY2thZ2VKc29uRnJvbSAoZGlyLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBjd2QgPSBmcy5maW5kUm9vdChkaXIpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVhZFBrZy5zeW5jKHsuLi5vcHRzLCBjd2R9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYEZhaWxlZCB0byByZWFkIGEgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gZGlyIFxcYCR7ZGlyfVxcYDpcXG5cXG4ke2Vyci5tZXNzYWdlfWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgZnJvbSBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBkaXJgIGlzIG5vdCBhIG5vbmVtcHR5IHN0cmluZyBvciByZWxhdGl2ZSBwYXRoXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zIGZpbmRpbmcgdGhlIHByb2plY3Qgcm9vdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzZXQgcGFyZW50IGRpciBjb250YWluaW5nIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICBmaW5kUm9vdCAoZGlyKSB7XG4gICAgaWYgKCFkaXIgfHwgIXBhdGguaXNBYnNvbHV0ZShkaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZmluZFJvb3QoKWAgbXVzdCBiZSBwcm92aWRlZCBhIG5vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aCcpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBmaW5kUm9vdENhY2hlZChkaXIpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYGZpbmRSb290KClcXGAgY291bGQgbm90IGZpbmQgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gJHtkaXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG5cbiAgLy8gYWRkIHRoZSBzdXBwb3J0ZWQgYGZzYCBmdW5jdGlvbnNcbiAgYWNjZXNzOiBmc1Byb21pc2VzLmFjY2VzcyxcbiAgYXBwZW5kRmlsZTogZnNQcm9taXNlcy5hcHBlbmRGaWxlLFxuICBjaG1vZDogZnNQcm9taXNlcy5jaG1vZCxcbiAgY2xvc2U6IEIucHJvbWlzaWZ5KGNsb3NlKSxcbiAgY29uc3RhbnRzLFxuICBjcmVhdGVXcml0ZVN0cmVhbSxcbiAgY3JlYXRlUmVhZFN0cmVhbSxcbiAgbHN0YXQ6IGZzUHJvbWlzZXMubHN0YXQsXG4gIC8qKlxuICAgKiBXYXJuaW5nOiB0aGlzIGlzIGEgcHJvbWlzaWZpZWQge0BsaW5rY29kZSBvcGVuIGZzLm9wZW59LlxuICAgKiBJdCByZXNvbHZlcyB3L2EgZmlsZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgYSB7QGxpbmtjb2RlIGZzUHJvbWlzZXMuRmlsZUhhbmRsZSBGaWxlSGFuZGxlfSBvYmplY3QsIGFzIHtAbGlua2NvZGUgZnNQcm9taXNlcy5vcGVufSBkb2VzLiBVc2Uge0BsaW5rY29kZSBmcy5vcGVuRmlsZX0gaWYgeW91IHdhbnQgYSBgRmlsZUhhbmRsZWAuXG4gICAqL1xuICBvcGVuOiBCLnByb21pc2lmeShvcGVuKSxcbiAgb3BlbkZpbGU6IGZzUHJvbWlzZXMub3BlbixcbiAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICByZWFkOiBCLnByb21pc2lmeShyZWFkKSxcbiAgcmVhZEZpbGU6IGZzUHJvbWlzZXMucmVhZEZpbGUsXG4gIHJlYWRsaW5rOiBmc1Byb21pc2VzLnJlYWRsaW5rLFxuICByZWFscGF0aDogZnNQcm9taXNlcy5yZWFscGF0aCxcbiAgcmVuYW1lOiBmc1Byb21pc2VzLnJlbmFtZSxcbiAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICBzeW1saW5rOiBmc1Byb21pc2VzLnN5bWxpbmssXG4gIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gIHdyaXRlOiBCLnByb21pc2lmeSh3cml0ZSksXG4gIHdyaXRlRmlsZTogZnNQcm9taXNlcy53cml0ZUZpbGUsXG5cbiAgLy8gZGVwcmVjYXRlZCBwcm9wc1xuXG4gIC8qKlxuICAgKiBVc2UgYGNvbnN0YW50cy5GX09LYCBpbnN0ZWFkLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgRl9PSzogY29uc3RhbnRzLkZfT0ssXG5cbiAgLyoqXG4gICAqIFVzZSBgY29uc3RhbnRzLlJfT0tgIGluc3RlYWQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBSX09LOiBjb25zdGFudHMuUl9PSyxcblxuICAvKipcbiAgICogVXNlIGBjb25zdGFudHMuV19PS2AgaW5zdGVhZC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIFdfT0s6IGNvbnN0YW50cy5XX09LLFxuXG4gIC8qKlxuICAgKiBVc2UgYGNvbnN0YW50cy5YX09LYCBpbnN0ZWFkLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgWF9PSzogY29uc3RhbnRzLlhfT0tcbn07XG5cbmV4cG9ydCB7IGZzIH07XG5leHBvcnQgZGVmYXVsdCBmcztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBkaXJlY3Rvcnkgd2Fsa2luZ1xuICogQGNhbGxiYWNrIFdhbGtEaXJDYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1QYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlclxuICogQHBhcmFtIHtib29sZWFufSBpc0RpcmVjdG9yeSBTaG93cyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBvciBhIGZpbGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybiB0cnVlIGlmIHlvdSB3YW50IHRvIHN0b3Agd2Fsa2luZ1xuKi9cblxuIl19
|