Files
fitness_walk_nwnu/node_modules/node-simctl/build/lib/simctl.js
T
2026-09-08 20:28:54 +08:00

140 lines
17 KiB
JavaScript

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.Simctl = void 0;
require("source-map-support/register");
var _lodash = _interopRequireDefault(require("lodash"));
var _index = _interopRequireDefault(require("./subcommands/index.js"));
var _which = _interopRequireDefault(require("which"));
var _logger = _interopRequireWildcard(require("./logger"));
var _helpers = require("./helpers");
var _teen_process = require("teen_process");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const SIMCTL_ENV_PREFIX = 'SIMCTL_CHILD_';
const DEFAULT_OPTS = {
xcrun: {
path: null
},
execTimeout: _helpers.DEFAULT_EXEC_TIMEOUT,
logErrors: true
};
class Simctl {
constructor(opts = {}) {
opts = _lodash.default.cloneDeep(opts);
_lodash.default.defaultsDeep(opts, DEFAULT_OPTS);
for (const key of _lodash.default.keys(DEFAULT_OPTS)) {
this[key] = opts[key];
}
this._udid = _lodash.default.isNil(opts.udid) ? null : opts.udid;
this._devicesSetPath = _lodash.default.isNil(opts.devicesSetPath) ? null : opts.devicesSetPath;
}
set udid(value) {
this._udid = value;
}
get udid() {
return this._udid;
}
set devicesSetPath(value) {
this._devicesSetPath = value;
}
get devicesSetPath() {
return this._devicesSetPath;
}
requireUdid(commandName = null) {
if (!this.udid) {
throw new Error(`udid is required to be set for ` + (commandName ? `the '${commandName}' command` : 'this simctl command'));
}
return this.udid;
}
async requireXcrun() {
const xcrunBinary = (0, _helpers.getXcrunBinary)();
if (!this.xcrun.path) {
try {
this.xcrun.path = await (0, _which.default)(xcrunBinary);
} catch (e) {
throw new Error(`${xcrunBinary} tool has not been found in PATH. ` + `Are Xcode developers tools installed?`);
}
}
return this.xcrun.path;
}
async exec(subcommand, opts = {}) {
let {
args = [],
env = {},
asynchronous = false,
encoding,
logErrors = true
} = opts;
args = ['simctl', ...(this.devicesSetPath ? ['--set', this.devicesSetPath] : []), subcommand, ...args];
env = _lodash.default.defaults(_lodash.default.mapKeys(env, (value, key) => _lodash.default.startsWith(key, SIMCTL_ENV_PREFIX) ? key : `${SIMCTL_ENV_PREFIX}${key}`), process.env);
const execOpts = {
env,
encoding
};
if (!asynchronous) {
execOpts.timeout = this.execTimeout;
}
const xcrun = await this.requireXcrun();
try {
return asynchronous ? new _teen_process.SubProcess(xcrun, args, execOpts) : await (0, _teen_process.exec)(xcrun, args, execOpts);
} catch (e) {
if (!this.logErrors || !logErrors) {} else if (e.stderr) {
const msg = `Error running '${subcommand}': ${e.stderr.trim()}`;
_logger.default.debug(_logger.LOG_PREFIX, msg);
e.message = msg;
} else {
_logger.default.debug(_logger.LOG_PREFIX, e.message);
}
throw e;
}
}
}
exports.Simctl = Simctl;
for (const [fnName, fn] of _lodash.default.toPairs(_index.default)) {
Simctl.prototype[fnName] = fn;
}
var _default = Simctl;
exports.default = _default;require('source-map-support').install();
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zaW1jdGwuanMiXSwibmFtZXMiOlsiU0lNQ1RMX0VOVl9QUkVGSVgiLCJERUZBVUxUX09QVFMiLCJ4Y3J1biIsInBhdGgiLCJleGVjVGltZW91dCIsIkRFRkFVTFRfRVhFQ19USU1FT1VUIiwibG9nRXJyb3JzIiwiU2ltY3RsIiwiY29uc3RydWN0b3IiLCJvcHRzIiwiXyIsImNsb25lRGVlcCIsImRlZmF1bHRzRGVlcCIsImtleSIsImtleXMiLCJfdWRpZCIsImlzTmlsIiwidWRpZCIsIl9kZXZpY2VzU2V0UGF0aCIsImRldmljZXNTZXRQYXRoIiwidmFsdWUiLCJyZXF1aXJlVWRpZCIsImNvbW1hbmROYW1lIiwiRXJyb3IiLCJyZXF1aXJlWGNydW4iLCJ4Y3J1bkJpbmFyeSIsImUiLCJleGVjIiwic3ViY29tbWFuZCIsImFyZ3MiLCJlbnYiLCJhc3luY2hyb25vdXMiLCJlbmNvZGluZyIsImRlZmF1bHRzIiwibWFwS2V5cyIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzIiwiZXhlY09wdHMiLCJ0aW1lb3V0IiwiU3ViUHJvY2VzcyIsInN0ZGVyciIsIm1zZyIsInRyaW0iLCJsb2ciLCJkZWJ1ZyIsIkxPR19QUkVGSVgiLCJtZXNzYWdlIiwiZm5OYW1lIiwiZm4iLCJ0b1BhaXJzIiwic3ViY29tbWFuZHMiLCJwcm90b3R5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7OztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLGVBQTFCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHO0FBQ25CQyxFQUFBQSxLQUFLLEVBQUU7QUFDTEMsSUFBQUEsSUFBSSxFQUFFO0FBREQsR0FEWTtBQUluQkMsRUFBQUEsV0FBVyxFQUFFQyw2QkFKTTtBQUtuQkMsRUFBQUEsU0FBUyxFQUFFO0FBTFEsQ0FBckI7O0FBMkNBLE1BQU1DLE1BQU4sQ0FBYTtBQUlYQyxFQUFBQSxXQUFXLENBQUVDLElBQUksR0FBRyxFQUFULEVB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QUFDakJNLE1BQUFBLFFBQVEsQ0FBQ0MsT0FBVCxHQUFtQixLQUFLbEMsV0FBeEI7QUFDRDs7QUFDRCxVQUFNRixLQUFLLEdBQUcsTUFBTSxLQUFLc0IsWUFBTCxFQUFwQjs7QUFDQSxRQUFJO0FBQ0YsYUFBT08sWUFBWSxHQUFHLElBQUlRLHdCQUFKLENBQWVyQyxLQUFmLEVBQXNCMkIsSUFBdEIsRUFBNEJRLFFBQTVCLENBQUgsR0FBMkMsTUFBTSx3QkFBT25DLEtBQVAsRUFBYzJCLElBQWQsRUFBb0JRLFFBQXBCLENBQXBFO0FBQ0QsS0FGRCxDQUVFLE9BQU9YLENBQVAsRUFBVTtBQUNWLFVBQUksQ0FBQyxLQUFLcEIsU0FBTixJQUFtQixDQUFDQSxTQUF4QixFQUFtQyxDQUdsQyxDQUhELE1BR08sSUFBSW9CLENBQUMsQ0FBQ2MsTUFBTixFQUFjO0FBQ25CLGNBQU1DLEdBQUcsR0FBSSxrQkFBaUJiLFVBQVcsTUFBS0YsQ0FBQyxDQUFDYyxNQUFGLENBQVNFLElBQVQsRUFBZ0IsRUFBOUQ7O0FBQ0FDLHdCQUFJQyxLQUFKLENBQVVDLGtCQUFWLEVBQXNCSixHQUF0Qjs7QUFDQWYsUUFBQUEsQ0FBQyxDQUFDb0IsT0FBRixHQUFZTCxHQUFaO0FBQ0QsT0FKTSxNQUlBO0FBQ0xFLHdCQUFJQyxLQUFKLENBQVVDLGtCQUFWLEVBQXNCbkIsQ0FBQyxDQUFDb0IsT0FBeEI7QUFDRDs7QUFDRCxZQUFNcEIsQ0FBTjtBQUNEO0FBQ0Y7O0FBM0dVOzs7O0FBZ0hiLEtBQUssTUFBTSxDQUFDcUIsTUFBRCxFQUFTQyxFQUFULENBQVgsSUFBMkJ0QyxnQkFBRXVDLE9BQUYsQ0FBVUMsY0FBVixDQUEzQixFQUFtRDtBQUNqRDNDLEVBQUFBLE1BQU0sQ0FBQzRDLFNBQVAsQ0FBaUJKLE1BQWpCLElBQTJCQyxFQUEzQjtBQUNEOztlQUVjekMsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgc3ViY29tbWFuZHMgZnJvbSAnLi9zdWJjb21tYW5kcy9pbmRleC5qcyc7XG5pbXBvcnQgd2hpY2ggZnJvbSAnd2hpY2gnO1xuaW1wb3J0IGxvZywgeyBMT0dfUFJFRklYIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9FWEVDX1RJTUVPVVQsIGdldFhjcnVuQmluYXJ5LFxufSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXhlYyBhcyB0cEV4ZWMsIFN1YlByb2Nlc3MgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuXG5jb25zdCBTSU1DVExfRU5WX1BSRUZJWCA9ICdTSU1DVExfQ0hJTERfJztcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcbiAgeGNydW46IHtcbiAgICBwYXRoOiBudWxsLFxuICB9LFxuICBleGVjVGltZW91dDogREVGQVVMVF9FWEVDX1RJTUVPVVQsXG4gIGxvZ0Vycm9yczogdHJ1ZSxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXhlY09wdHNcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IGFyZ3MgW1tdXSAtIFRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgc3ViY29tbWFuZCBhcmd1bWVudHMuXG4gKiBJdCdzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge09iamVjdH0gZW52IFt7fV0gLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgbWFwcGluZy4gQWxsIHRoZXNlIHZhcmlhYmxlc1xuICogd2lsbCBiZSBwYXNzZWQgU2ltdWxhdG9yIGFuZCB1c2VkIGluIHRoZSBleGVjdXRpbmcgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0Vycm9ycyBbdHJ1ZV0gLSBTZXQgaXQgdG8gX2ZhbHNlXyB0byB0aHJvdyBleGVjdXRpb24gZXJyb3JzXG4gKiBpbW1lZGlhdGVseSB3aXRob3V0IGxvZ2dpbmcgYW55IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFzeW5jaHJvbm91cyBbZmFsc2VdIC0gV2hldGhlciB0byBleGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kXG4gKiAnc3luY2hyb25vdXNseScgb3IgJ2FzeW5jaHJvbm91c2x5Jy4gQWZmZWN0cyB0aGUgcmV0dXJuZWQgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZW5jb2RpbmcgLSBFeHBsaWNpdGx5IHNldHMgc3RyZWFtcyBlbmNvZGluZyBmb3IgdGhlIGV4ZWN1dGVkXG4gKiBjb21tYW5kIGlucHV0IGFuZCBvdXRwdXRzLlxuICovXG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTaW1jdGxPcHRzXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IHhjcnVuIC0gVGhlIHhjcnVuIHByb3BlcnRpZXMuIEN1cnJlbnRseSBvbmx5IG9uZSBwcm9wZXJ0eVxuICogaXMgc3VwcG9ydGVkLCB3aGljaCBpcyBgcGF0aGAgYW5kIGl0IGJ5IGRlZmF1bHQgY29udGFpbnMgYG51bGxgLCB3aGljaCBlbmZvcmNlc1xuICogdGhlIGluc3RhbmNlIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBmdWxsIHBhdGggdG8gYHhjcnVuYCB0b29sIGFuZCB0byB0aHJvd1xuICogYW4gZXhjZXB0aW9uIGlmIGl0IGNhbm5vdCBiZSBkZXRlY3RlZC4gSWYgdGhlIHBhdGggaXMgc2V0IHVwb24gaW5zdGFuY2UgY3JlYXRpb25cbiAqIHRoZW4gaXQgaXMgZ29pbmcgdG8gYmUgdXNlZCBieSBgZXhlY2AgYW5kIG5vIGF1dG9kZXRlY3Rpb24gd2lsbCBoYXBwZW4uXG4gKiBAcHJvcGVydHkgez9udW1iZXJ9IGV4ZWNUaW1lb3V0IFs2MDAwMDBdIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCBmb3Igc2luZ2xlIHN5bmNocm9ub3VzIHhjcnVuIGNvbW1hbmQuXG4gKiBAcHJvcGVydHkgez9ib29sZWFufSBsb2dFcnJvcnMgW3RydWVdIC0gV2hldGhlciB0byB3aXJlIHhjcnVuIGVycm9yIG1lc3NhZ2VzXG4gKiBpbnRvIGRlYnVnIGxvZyBiZWZvcmUgdGhyb3dpbmcgdGhlbS5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gdWRpZCBbbnVsbF0gLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGN1cnJlbnQgZGV2aWNlLCB3aGljaCBpc1xuICogZ29pbmcgdG8gYmUgaW1wbGljaXRseSBwYXNzZWQgdG8gYWxsIG1ldGhvZHMsIHdoaWNoIHJlcXVpcmUgaXQuIEl0IGNhbiBlaXRoZXIgYmUgc2V0XG4gKiB1cG9uIGluc3RhbmNlIGNyZWF0aW9uIGlmIGl0IGlzIGFscmVhZHkga25vd24gaW4gYWR2YW5jZSBvciBsYXRlciB3aGVuL2lmIG5lZWRlZCB2aWEgdGhlXG4gKiBjb3JyZXNwb25kaW5nIGluc3RhbmNlIHNldHRlci5cbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gZGV2aWNlc1NldFBhdGggLSBGdWxsIHBhdGggdG8gdGhlIHNldCBvZiBkZXZpY2VzIHRoYXQgeW91IHdhbnQgdG8gbWFuYWdlLlxuICogQnkgZGVmYXVsdCB0aGlzIHBhdGggdXN1YWxseSBlcXVhbHMgdG8gfi9MaWJyYXJ5L0RldmVsb3Blci9Db3JlU2ltdWxhdG9yL0RldmljZXNcbiAqL1xuXG5cbmNsYXNzIFNpbWN0bCB7XG4gIC8qKlxuICAgKiBAcGFyYW0gez9TaW1jdGxPcHRzfSBvcHRzXG4gICAqL1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgb3B0cyA9IF8uY2xvbmVEZWVwKG9wdHMpO1xuICAgIF8uZGVmYXVsdHNEZWVwKG9wdHMsIERFRkFVTFRfT1BUUyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgXy5rZXlzKERFRkFVTFRfT1BUUykpIHtcbiAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcbiAgICB9XG4gICAgdGhpcy5fdWRpZCA9IF8uaXNOaWwob3B0cy51ZGlkKSA/IG51bGwgOiBvcHRzLnVkaWQ7XG4gICAgdGhpcy5fZGV2aWNlc1NldFBhdGggPSBfLmlzTmlsKG9wdHMuZGV2aWNlc1NldFBhdGgpID8gbnVsbCA6IG9wdHMuZGV2aWNlc1NldFBhdGg7XG4gIH1cblxuICBzZXQgdWRpZCAodmFsdWUpIHtcbiAgICB0aGlzLl91ZGlkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdWRpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VkaWQ7XG4gIH1cblxuICBzZXQgZGV2aWNlc1NldFBhdGggKHZhbHVlKSB7XG4gICAgdGhpcy5fZGV2aWNlc1NldFBhdGggPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBkZXZpY2VzU2V0UGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RldmljZXNTZXRQYXRoO1xuICB9XG5cbiAgcmVxdWlyZVVkaWQgKGNvbW1hbmROYW1lID0gbnVsbCkge1xuICAgIGlmICghdGhpcy51ZGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVkaWQgaXMgcmVxdWlyZWQgdG8gYmUgc2V0IGZvciBgICtcbiAgICAgICAgKGNvbW1hbmROYW1lID8gYHRoZSAnJHtjb21tYW5kTmFtZX0nIGNvbW1hbmRgIDogJ3RoaXMgc2ltY3RsIGNvbW1hbmQnKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVkaWQ7XG4gIH1cblxuICBhc3luYyByZXF1aXJlWGNydW4gKCkge1xuICAgIGNvbnN0IHhjcnVuQmluYXJ5ID0gZ2V0WGNydW5CaW5hcnkoKTtcblxuICAgIGlmICghdGhpcy54Y3J1bi5wYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnhjcnVuLnBhdGggPSBhd2FpdCB3aGljaCh4Y3J1bkJpbmFyeSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt4Y3J1bkJpbmFyeX0gdG9vbCBoYXMgbm90IGJlZW4gZm91bmQgaW4gUEFUSC4gYCArXG4gICAgICAgICAgYEFyZSBYY29kZSBkZXZlbG9wZXJzIHRvb2xzIGluc3RhbGxlZD9gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMueGNydW4ucGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBwYXJ0aWN1bGFyIHNpbWN0bCBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViY29tbWFuZCAtIE9uZSBvZiBhdmFpbGFibGUgc2ltY3RsIHN1YmNvbW1hbmRzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGUgYHhjcnVuIHNpbWN0bGAgaW4gVGVybWluYWwgdG8gc2VlIHRoZSBmdWxsIGxpc3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBhdmFpbGFibGUgc3ViY29tbWFuZHMuXG4gICAqIEBwYXJhbSB7P0V4ZWNPcHRzfSBvcHRzXG4gICAqIEByZXR1cm4ge0V4ZWNSZXN1bHR8U3ViUHJvY2Vzc30gRWl0aGVyIHRoZSByZXN1bHQgb2YgdGVlbiBwcm9jZXNzJ3MgYGV4ZWNgIG9yXG4gICAqIGBTdWJQcm9jZXNzYCBpbnN0YW5jZSBkZXBlbmRpbmcgb2YgYG9wdHMuYXN5bmNocm9ub3VzYCB2YWx1ZS5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzaW1jdGwgc3ViY29tbWFuZCBjb21tYW5kIHJldHVybnMgbm9uLXplcm8gcmV0dXJuIGNvZGUuXG4gICAqL1xuICBhc3luYyBleGVjIChzdWJjb21tYW5kLCBvcHRzID0ge30pIHtcbiAgICBsZXQge1xuICAgICAgYXJncyA9IFtdLFxuICAgICAgZW52ID0ge30sXG4gICAgICBhc3luY2hyb25vdXMgPSBmYWxzZSxcbiAgICAgIGVuY29kaW5nLFxuICAgICAgbG9nRXJyb3JzID0gdHJ1ZSxcbiAgICB9ID0gb3B0cztcbiAgICAvLyBydW4gYSBwYXJ0aWN1bGFyIHNpbWN0bCBjb21tYW5kXG4gICAgYXJncyA9IFsnc2ltY3RsJyxcbiAgICAgIC4uLih0aGlzLmRldmljZXNTZXRQYXRoID8gWyctLXNldCcsIHRoaXMuZGV2aWNlc1NldFBhdGhdIDogW10pLFxuICAgICAgc3ViY29tbWFuZCxcbiAgICAgIC4uLmFyZ3NcbiAgICBdO1xuICAgIC8vIFByZWZpeCBhbGwgcGFzc2VkIGluIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoICdTSU1DVExfQ0hJTERfJywgc2ltY3RsXG4gICAgLy8gd2lsbCB0aGVuIHBhc3MgdGhlc2UgdG8gdGhlIGNoaWxkIChzcGF3bmVkKSBwcm9jZXNzLlxuICAgIGVudiA9IF8uZGVmYXVsdHMoXG4gICAgICBfLm1hcEtleXMoZW52LFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gXy5zdGFydHNXaXRoKGtleSwgU0lNQ1RMX0VOVl9QUkVGSVgpID8ga2V5IDogYCR7U0lNQ1RMX0VOVl9QUkVGSVh9JHtrZXl9YCksXG4gICAgICBwcm9jZXNzLmVudik7XG5cbiAgICBjb25zdCBleGVjT3B0cyA9IHtcbiAgICAgIGVudixcbiAgICAgIGVuY29kaW5nLFxuICAgIH07XG4gICAgaWYgKCFhc3luY2hyb25vdXMpIHtcbiAgICAgIGV4ZWNPcHRzLnRpbWVvdXQgPSB0aGlzLmV4ZWNUaW1lb3V0O1xuICAgIH1cbiAgICBjb25zdCB4Y3J1biA9IGF3YWl0IHRoaXMucmVxdWlyZVhjcnVuKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhc3luY2hyb25vdXMgPyBuZXcgU3ViUHJvY2Vzcyh4Y3J1biwgYXJncywgZXhlY09wdHMpIDogYXdhaXQgdHBFeGVjKHhjcnVuLCBhcmdzLCBleGVjT3B0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCF0aGlzLmxvZ0Vycm9ycyB8fCAhbG9nRXJyb3JzKSB7XG4gICAgICAgIC8vIGlmIHdlIGRvbid0IHdhbnQgdG8gc2VlIHRoZSBlcnJvcnMsIGp1c3QgdGhyb3cgYW5kIGFsbG93IHRoZSBjYWxsaW5nXG4gICAgICAgIC8vIGNvZGUgZG8gd2hhdCBpdCB3YW50c1xuICAgICAgfSBlbHNlIGlmIChlLnN0ZGVycikge1xuICAgICAgICBjb25zdCBtc2cgPSBgRXJyb3IgcnVubmluZyAnJHtzdWJjb21tYW5kfSc6ICR7ZS5zdGRlcnIudHJpbSgpfWA7XG4gICAgICAgIGxvZy5kZWJ1ZyhMT0dfUFJFRklYLCBtc2cpO1xuICAgICAgICBlLm1lc3NhZ2UgPSBtc2c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoTE9HX1BSRUZJWCwgZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG5cblxuLy8gYWRkIGFsbCB0aGUgc3ViY29tbWFuZHMgdG8gdGhlIFNpbWN0bCBwcm90b3R5cGVcbmZvciAoY29uc3QgW2ZuTmFtZSwgZm5dIG9mIF8udG9QYWlycyhzdWJjb21tYW5kcykpIHtcbiAgU2ltY3RsLnByb3RvdHlwZVtmbk5hbWVdID0gZm47XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbWN0bDtcbmV4cG9ydCB7IFNpbWN0bCB9O1xuIl0sImZpbGUiOiJsaWIvc2ltY3RsLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=