New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

appcd-client

Package Overview
Dependencies
Maintainers
3
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

appcd-client - npm Package Compare versions

Comparing version 3.0.0 to 3.0.1

5

CHANGELOG.md

@@ -0,1 +1,6 @@

# v3.0.1 (Dec 1, 2020)
* fix: Replaced AMPLIFY CLI references with Axway CLI.
* chore: Updated dependencies.
# v3.0.0 (Jun 12, 2020)

@@ -2,0 +7,0 @@

22

dist/client.js

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

log(`${highlight('appcd')} not found, attempting to locate ${highlight('amplify')}...`);
log(`${highlight('appcd')} not found, attempting to locate ${highlight('axway')}...`);
if (this.amplify === undefined) {
this.amplify = await find('amplify');
if (this.axwayCLI === undefined) {
this.axwayCLI = await find('axway');
}
if (this.amplify) {
if (this.axwayCLI) {
try {
// check if appcd is installed
log('Checking amplify if appcd is installed...');
const packages = JSON.parse(run(this.amplify, 'pm', 'list', '--json').stdout);
log('Checking Axway CLI if appcd is installed...');
const packages = JSON.parse(run(this.axwayCLI, 'pm', 'list', '--json').stdout);
const appcdPkg = Array.isArray(packages) && packages.filter(p => p.name === 'appcd')[0];

@@ -251,3 +251,3 @@

this.fetchedAppcdConfig = false;
log(`amplify found appcd: ${highlight(appcd)}`);
log(`Axway CLI found appcd: ${highlight(appcd)}`);
}

@@ -258,9 +258,9 @@

} catch (e) {
error(`Failed to check amplify for appcd: ${e.message}`);
error(`Failed to check Axway CLI for appcd: ${e.message}`);
}
} else {
log(`${highlight('amplify')} not found`);
log(`${highlight('Axway CLI')} not found`);
}
throw new Error('Unable to find the Appc Daemon (appcd).\n' + `Run ${this.amplify ? '"amplify pm i appcd" or ' : ''}"npm i -g appcd" to install it.`);
throw new Error('Unable to find the Appc Daemon (appcd).\n' + `Run ${this.axwayCLI ? '"axway pm i appcd" or ' : ''}"npm i -g appcd" to install it.`);
} catch (e) {

@@ -541,2 +541,2 @@ emitter.emit('error', e);

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNsaWVudC5qcyJdLCJuYW1lcyI6WyJFcnJvciIsInByZXBhcmVTdGFja1RyYWNlIiwicmVxdWlyZSIsImVycm9yIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJub3RlIiwib2siLCJhcHBjZExvZ2dlciIsInN0eWxlcyIsIkNsaWVudCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNvY2tldCIsInJlcXVlc3RzIiwiaG9zdCIsInBvcnQiLCJUeXBlRXJyb3IiLCJ1c2VyQWdlbnQiLCJjb25zdHJ1Y3RVc2VyQWdlbnQiLCJjb25uZWN0IiwicGFyYW1zIiwiZW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInRyeUNvbm5lY3QiLCJlbWl0IiwiaGVhZGVycyIsImxvY2FsZVZhbHVlIiwicHJvY2VzcyIsImVudiIsIkFQUENEX0xPQ0FMRSIsInVybCIsIldlYlNvY2tldCIsIm9uIiwiZGF0YSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJlIiwibWVzc2FnZSIsIm1zZ3BhY2siLCJkZWNvZGUiLCJpZCIsImhhbmRsZXIiLCJvbmNlIiwiZXJyIiwiY2xvc2UiLCJjb2RlIiwic3RhcnREYWVtb24iLCJhcHBjZCIsInVuZGVmaW5lZCIsImZpbmQiLCJmZXRjaGVkQXBwY2RDb25maWciLCJydW4iLCJzdGFydCIsImNmZyIsInN0ZG91dCIsImN1cnJlbnRIb3N0IiwiY3VycmVudFBvcnQiLCJob3N0bmFtZSIsIm5ld0hvc3QiLCJuZXdQb3J0IiwicmVzdWx0IiwiYW1wbGlmeSIsInBhY2thZ2VzIiwiYXBwY2RQa2ciLCJBcnJheSIsImlzQXJyYXkiLCJmaWx0ZXIiLCJwIiwibmFtZSIsImFwcGNkUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwidmVyc2lvbnMiLCJ2ZXJzaW9uIiwiZnMiLCJleGlzdHNTeW5jIiwic2V0SW1tZWRpYXRlIiwicmVxdWVzdCIsInBhdGhPclBhcmFtcyIsInN0YXJ0VGltZSIsIkRhdGUiLCJyZXEiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlIiwiY2xpZW50IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNDbGFzcyIsIk1hdGgiLCJmbG9vciIsImZpbiIsInN0eWxlIiwic3RhdHVzQ29kZSIsIlN0cmluZyIsInByb3AiLCJrZXlzIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwidmFsdWUiLCJ3cml0YWJsZSIsInNlbmQiLCJzdHJpbmdpZnkiLCJhcmdzIiwiZGlzY29ubmVjdCIsInBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJlbnRyeSIsIm1vZHVsZSIsInBhcmVudCIsImZpbGVuYW1lIiwiYmFzZW5hbWUiLCJyb290IiwiZGlyIiwiZGlybmFtZSIsInBrZ0pzb25GaWxlIiwiam9pbiIsInB1c2giLCJyZWFkSnNvblN5bmMiLCJyZWFkRmlsZVN5bmMiLCJfX2Rpcm5hbWUiLCJzb21lIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJwbGF0Zm9ybSIsImFyY2hpdGVjdHVyZSIsImJpbiIsIndoaWNoIiwic3luYyIsImNtZCIsInRlc3QiLCJleGVjUGF0aCIsInNoaWZ0IiwiREVCVUciLCJTTk9PUExPR0ciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQWhCQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTs7QUFlRCxNQUFNO0FBQUVDLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUE7QUFBVCxJQUFpQiwwQkFBWSxjQUFaLENBQXZCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBLFNBQVQ7QUFBb0JDLEVBQUFBLElBQXBCO0FBQTBCQyxFQUFBQTtBQUExQixJQUFpQ0MscUJBQVlDLE1BQW5EO0FBRUE7Ozs7QUFHZSxNQUFNQyxNQUFOLENBQWE7QUFDM0I7Ozs7Ozs7Ozs7QUFVQUMsRUFBQUEsV0FB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RyxRQUEvRCxHQUEwRTdCLElBQUksQ0FBQzhCLEtBQUwsRUFBdEY7QUFDQXJJLEVBQUFBLEdBQUcsQ0FBRSxhQUFZRSxTQUFTLENBQUUsR0FBRWdJLEdBQUksSUFBRzNCLElBQUksQ0FBQ2MsSUFBTCxDQUFVLEdBQVYsQ0FBZSxFQUExQixDQUE2QixFQUFwRCxDQUFILENBSHFCLENBS3JCOztBQUNBLFFBQU07QUFBRTNGLElBQUFBO0FBQUYsTUFBVUQsT0FBaEI7QUFDQSxTQUFPQyxHQUFHLENBQUM0RyxLQUFYO0FBQ0EsU0FBTzVHLEdBQUcsQ0FBQzZHLFNBQVg7QUFFQSxRQUFNNUUsTUFBTSxHQUFHLDhCQUFVdUUsR0FBVixFQUFlM0IsSUFBZixFQUFxQjtBQUFFN0UsSUFBQUE7QUFBRixHQUFyQixDQUFmOztBQUNBLE1BQUksQ0FBQ2lDLE1BQU0sQ0FBQzJCLE1BQVosRUFBb0I7QUFDbkIsV0FBTzNCLE1BQVA7QUFDQTs7QUFFRCxRQUFNLElBQUkvRCxLQUFKLENBQVcsR0FBRW1JLEdBQUkscUJBQW9CcEUsTUFBTSxDQUFDMkIsTUFBTyxFQUFuRCxDQUFOO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmICghRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcblx0cmVxdWlyZSgnc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyJyk7XG59XG5cbmltcG9ydCBhcHBjZExvZ2dlciBmcm9tICdhcHBjZC1sb2dnZXInO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBtc2dwYWNrIGZyb20gJ21zZ3BhY2stbGl0ZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnd3MnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcblxuaW1wb3J0IHsgYXJjaCB9IGZyb20gJ2FwcGNkLXV0aWwnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IGxvY2FsZSB9IGZyb20gJ2FwcGNkLXJlc3BvbnNlJztcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmNvbnN0IHsgZXJyb3IsIGxvZyB9ID0gYXBwY2RMb2dnZXIoJ2FwcGNkOmNsaWVudCcpO1xuY29uc3QgeyBhbGVydCwgaGlnaGxpZ2h0LCBub3RlLCBvayB9ID0gYXBwY2RMb2dnZXIuc3R5bGVzO1xuXG4vKipcbiAqIFRoZSBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIGFwcGNkIHNlcnZlci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IHtcblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ob3N0PScxMjcuMC4wLjEnXSAtIFRoZSBob3N0IHRvIGNvbm5lY3QgdG8uXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5wb3J0PTE3MzJdIC0gVGhlIHBvcnQgdG8gY29ubmVjdCB0by5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVzZXJBZ2VudF0gLSBUaGUgdXNlciBhZ2VudCBjb250YWluaW5nIHRoZSBuYW1lIGFuZFxuXHQgKiB2ZXJzaW9uIG9mIHRoZSBjbGllbnQuIElmIG5vdCBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSB3ZWJzb2NrZXQgdG8gdGhlIHNlcnZlci5cblx0XHQgKiBAdHlwZSB7V2ViU29ja2V0fVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblxuXHRcdC8qKlxuXHRcdCAqIEFuIGludGVybmFsIG1hcCB1c2VkIHRvIGRpc3BhdGNoIHJlc3BvbnNlcyB0byByZXF1ZXN0ZXJzLlxuXHRcdCAqIEB0eXBlIHtPYmplY3R9XG5cdFx0ICogQGFjY2VzcyBwcml2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy5yZXF1ZXN0cyA9IHt9O1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIGhvc3QgdG8gY29ubmVjdCB0by5cblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMuaG9zdCA9IG9wdHMuaG9zdCB8fCAnMTI3LjAuMC4xJztcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBwb3J0IHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogQHR5cGUge051bWJlcn1cblx0XHQgKiBAYWNjZXNzIHByaXZhdGVcblx0XHQgKi9cblx0XHRpZiAob3B0cy5wb3J0ICYmICh0eXBlb2Ygb3B0cy5wb3J0ICE9PSAnbnVtYmVyJyB8fCBvcHRzLnBvcnQgPCAxIHx8IG9wdHMucG9ydCA+IDY1NTM1KSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwb3J0LCBleHBlY3RlZCBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDY1NTM1Jyk7XG5cdFx0fVxuXHRcdHRoaXMucG9ydCA9IG9wdHMucG9ydCB8fCAxNzMyO1xuXG5cdFx0LyoqXG5cdFx0ICogVGhlIHVzZXIgYWdlbnQgY29udGFpbmluZyB0aGUgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGUgY2xpZW50LiBJZiBub3Rcblx0XHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cblx0XHQgKiBAdHlwZSB7U3RyaW5nfVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMudXNlckFnZW50ID0gY29uc3RydWN0VXNlckFnZW50KG9wdHMudXNlckFnZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb25uZWN0cyB0byB0aGUgc2VydmVyIHZpYSBhIHdlYnNvY2tldC4gWW91IGRvIG5vdCBuZWVkIHRvIGNhbGwgdGhpcy5cblx0ICogYHJlcXVlc3QoKWAgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgdGhpcyBmdW5jdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIC0gVmFyaW91cyBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMuc3RhcnREYWVtb25dIC0gV2hlbiBgdHJ1ZWAsIGVuc3VyZXMgdGhlIGRhZW1vbiBpcyBydW5uaW5nIGFuZCBpZlxuXHQgKiBub3QsIGF0dGVtcHRzIHRvIGxvY2F0ZSB0aGUgZGFlbW9uLCBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24sIHN0YXJ0IGl0LCBhbmQgcmUtY29ubmVjdC5cblx0ICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gRW1pdHMgZXZlbnRzIGBjb25uZWN0ZWRgLCBgY2xvc2VgLCBhbmQgYGVycm9yYC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbm5lY3QocGFyYW1zID0ge30pIHtcblx0XHRjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdFx0Y29uc3QgdHJ5Q29ubmVjdCA9IGFzeW5jICgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNvY2tldCkge1xuXHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Nvbm5lY3RlZCcsIHRoaXMpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGhlYWRlcnMgPSB7XG5cdFx0XHRcdFx0J1VzZXItQWdlbnQnOiB0aGlzLnVzZXJBZ2VudFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGNvbnN0IGxvY2FsZVZhbHVlID0gcHJvY2Vzcy5lbnYuQVBQQ0RfTE9DQUxFIHx8IGF3YWl0IGxvY2FsZSgpO1xuXHRcdFx0XHRpZiAobG9jYWxlVmFsdWUpIHtcblx0XHRcdFx0XHRoZWFkZXJzWydBY2NlcHQtTGFuZ3VhZ2UnXSA9IGxvY2FsZVZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdXJsID0gYHdzOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWA7XG5cdFx0XHRcdGxvZyhgQ29ubmVjdGluZyB0byAke2hpZ2hsaWdodCh1cmwpfWApO1xuXHRcdFx0XHRjb25zdCBzb2NrZXQgPSB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsLCB7IGhlYWRlcnMgfSk7XG5cblx0XHRcdFx0c29ja2V0XG5cdFx0XHRcdFx0Lm9uKCdtZXNzYWdlJywgZGF0YSA9PiB7XG5cdFx0XHRcdFx0XHRsZXQganNvbiA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0anNvbiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBiYWQgcmVzcG9uc2UsIHNob3VsZG4ndCBldmVyIGhhcHBlblxuXHRcdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnd2FybmluZycsIGBTZXJ2ZXIgcmV0dXJuZWQgaW52YWxpZCBKU09OOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGpzb24gPSBtc2dwYWNrLmRlY29kZShkYXRhKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGpzb24gJiYgdHlwZW9mIGpzb24gPT09ICdvYmplY3QnICYmIHRoaXMucmVxdWVzdHNbanNvbi5pZF0pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZXF1ZXN0c1tqc29uLmlkXS5oYW5kbGVyKGpzb24pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCd3YXJuaW5nJywgJ1NlcnZlciByZXNwb25zZSBpcyBub3QgYW4gb2JqZWN0IG9yIGhhcyBhbiBpbnZhbGlkIGlkJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQub24oJ29wZW4nLCAoKSA9PiBlbWl0dGVyLmVtaXQoJ2Nvbm5lY3RlZCcsIHRoaXMpKVxuXHRcdFx0XHRcdC5vbmNlKCdjbG9zZScsICgpID0+IGVtaXR0ZXIuZW1pdCgnY2xvc2UnKSlcblx0XHRcdFx0XHQub25jZSgnZXJyb3InLCBhc3luYyBlcnIgPT4ge1xuXHRcdFx0XHRcdFx0c29ja2V0LmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cblx0XHRcdFx0XHRcdGlmIChlcnIuY29kZSAhPT0gJ0VDT05OUkVGVVNFRCcgfHwgIXBhcmFtcy5zdGFydERhZW1vbikge1xuXHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZXJyKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRsb2coYEZhaWxlZCB0byBjb25uZWN0IHRvIGFwcGNkOiAke2hpZ2hsaWdodChgJHt0aGlzLmhvc3R9OiR7dGhpcy5wb3J0fWApfWApO1xuXHRcdFx0XHRcdFx0XHRsb2coJ0F0dGVtcHRpbmcgdG8gbG9jYXRlIGFwcGNkLCB0aGVuIGRldGVybWluZSBjb25maWd1cmF0aW9uLi4uJyk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwY2QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXBwY2QgPSBhd2FpdCBmaW5kKCdhcHBjZCcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuYXBwY2QpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5mZXRjaGVkQXBwY2RDb25maWcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIG1heWJlIGl0IGp1c3QgbmVlZHMgdG8gYmUgc3RhcnRlZD9cblx0XHRcdFx0XHRcdFx0XHRcdGxvZygnU3RhcnRpbmcgZGFlbW9uLi4uJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRydW4odGhpcy5hcHBjZCwgJ3N0YXJ0Jyk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIGF0IHRoaXMgcG9pbnQsIHdlJ3ZlIGRvbmUgYWxsIHdlIGNhbiBkbyBhbmQgaWYgY29ubmVjdCgpIHRocm93cyBhbiBlcnJvciwgdGhlbiBzbyBiZSBpdFxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRyeUNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bG9nKCdGZXRjaGluZyBhcHBjZCBjb25maWcgdG8gZGV0ZXJtaW5lIGhvc3QgYW5kIHBvcnQuLi4nKTtcblxuXHRcdFx0XHRcdFx0XHRcdGxldCBzdGFydCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hlZEFwcGNkQ29uZmlnID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBjZmcgPSBKU09OLnBhcnNlKHJ1bih0aGlzLmFwcGNkLCAnY29uZmlnJywgJ2dldCcsICdzZXJ2ZXInLCAnLS1qc29uJykuc3Rkb3V0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChjZmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgeyBob3N0OiBjdXJyZW50SG9zdCwgcG9ydDogY3VycmVudFBvcnQgfSA9IHRoaXM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgaG9zdG5hbWU6IG5ld0hvc3QsIHBvcnQ6IG5ld1BvcnQgfSA9IGNmZy5yZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuZXdIb3N0ICYmIGN1cnJlbnRIb3N0ICE9PSBuZXdIb3N0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ob3N0ID0gbmV3SG9zdDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG5ld1BvcnQgJiYgY3VycmVudFBvcnQgIT09IG5ld1BvcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnBvcnQgPSBuZXdQb3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coYFVwZGF0aW5nIGNsaWVudCBjb25maWcgZnJvbSAke2hpZ2hsaWdodChgJHtjdXJyZW50SG9zdH06JHtjdXJyZW50UG9ydH1gKX0gdG8gJHtoaWdobGlnaHQoYCR7bmV3SG9zdH06JHtuZXdQb3J0fWApfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxvZyhgQ2xpZW50IGNvbmZpZyBpcyB1bmNoYW5nZWQ6ICR7aGlnaGxpZ2h0KGAke2N1cnJlbnRIb3N0fToke2N1cnJlbnRQb3J0fWApfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3IoYEZhaWxlZCB0byBnZXQgYXBwY2QgY29uZmlnOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxvZygnU3RhcnRpbmcgZGFlbW9uLi4uJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRydW4odGhpcy5hcHBjZCwgJ3N0YXJ0Jyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRyeUNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGxvZyhgJHtoaWdobGlnaHQoJ2FwcGNkJyl9IG5vdCBmb3VuZCwgYXR0ZW1wdGluZyB0byBsb2NhdGUgJHtoaWdobGlnaHQoJ2FtcGxpZnknKX0uLi5gKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hbXBsaWZ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFtcGxpZnkgPSBhd2FpdCBmaW5kKCdhbXBsaWZ5Jyk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5hbXBsaWZ5KSB7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGFwcGNkIGlzIGluc3RhbGxlZFxuXHRcdFx0XHRcdFx0XHRcdFx0bG9nKCdDaGVja2luZyBhbXBsaWZ5IGlmIGFwcGNkIGlzIGluc3RhbGxlZC4uLicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcGFja2FnZXMgPSBKU09OLnBhcnNlKHJ1bih0aGlzLmFtcGxpZnksICdwbScsICdsaXN0JywgJy0tanNvbicpLnN0ZG91dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhcHBjZFBrZyA9IEFycmF5LmlzQXJyYXkocGFja2FnZXMpICYmIHBhY2thZ2VzLmZpbHRlcihwID0+IHAubmFtZSA9PT0gJ2FwcGNkJylbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXBwY2RQa2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwY2RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcGNkUGtnLnZlcnNpb25zW2FwcGNkUGtnLnZlcnNpb25dLnBhdGgsICdiaW4nLCAnYXBwY2QnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoYXBwY2RQYXRoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYXBwY2QgPSBhcHBjZFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mZXRjaGVkQXBwY2RDb25maWcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coYGFtcGxpZnkgZm91bmQgYXBwY2Q6ICR7aGlnaGxpZ2h0KGFwcGNkKX1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ5Q29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yKGBGYWlsZWQgdG8gY2hlY2sgYW1wbGlmeSBmb3IgYXBwY2Q6ICR7ZS5tZXNzYWdlfWApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRsb2coYCR7aGlnaGxpZ2h0KCdhbXBsaWZ5Jyl9IG5vdCBmb3VuZGApO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdCdVbmFibGUgdG8gZmluZCB0aGUgQXBwYyBEYWVtb24gKGFwcGNkKS5cXG4nXG5cdFx0XHRcdFx0XHRcdFx0KyBgUnVuICR7dGhpcy5hbXBsaWZ5ID8gJ1wiYW1wbGlmeSBwbSBpIGFwcGNkXCIgb3IgJyA6ICcnfVwibnBtIGkgLWcgYXBwY2RcIiB0byBpbnN0YWxsIGl0LmBcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdGVtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBuZWVkIHRvIGRlbGF5IHJlcXVlc3Qgc28gZXZlbnQgZW1pdHRlciBjYW4gYmUgcmV0dXJuZWQgYW5kIGV2ZW50cyBjYW5cblx0XHQvLyBiZSB3aXJlZCB1cFxuXHRcdHNldEltbWVkaWF0ZSgoKSA9PiB0cnlDb25uZWN0KCkpO1xuXG5cdFx0cmV0dXJuIGVtaXR0ZXI7XG5cdH1cblxuXHQvKipcblx0ICogSXNzdWVzIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIG92ZXIgYSB3ZWJzb2NrZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gcGF0aE9yUGFyYW1zIC0gVGhlIHBhdGggdG8gcmVxdWVzdCBvciBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGF0aCxcblx0ICogZGF0YSwgYW5kIHR5cGUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGF0aE9yUGFyYW1zLnBhdGhdIC0gVGhlIHBhdGggdG8gcmVxdWVzdC5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwYXRoT3JQYXJhbXMuZGF0YV0gLSBBbiBvYmplY3QgdG8gc2VuZC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGF0aE9yUGFyYW1zLnN0YXJ0RGFlbW9uXSAtIFdoZW4gYHRydWVgLCBlbnN1cmVzIHRoZSBkYWVtb24gaXMgcnVubmluZyBhbmRcblx0ICogaWYgbm90LCBhdHRlbXB0cyB0byBsb2NhdGUgdGhlIGRhZW1vbiwgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uLCBzdGFydCBpdCwgYW5kXG5cdCAqIHJlLWNvbm5lY3QuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcGF0aE9yUGFyYW1zLnR5cGVdIC0gVGhlIHJlcXVlc3QgdHlwZS4gVmFsaWQgdHlwZXMgaW5jbHVkZSBgY2FsbGAsXG5cdCAqIGBzdWJzY3JpYmVgLCBhbmQgYHVuc3Vic2NyaWJlYC5cblx0ICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gRW1pdHMgZXZlbnRzIGByZXNwb25zZWAgYW5kIGBlcnJvcmAuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRyZXF1ZXN0KHBhdGhPclBhcmFtcykge1xuXHRcdGlmICghcGF0aE9yUGFyYW1zIHx8ICh0eXBlb2YgcGF0aE9yUGFyYW1zICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcGF0aE9yUGFyYW1zICE9PSAnb2JqZWN0JykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG5vbi1lbXB0eSBwYXRoIG9yIHBhcmFtZXRlcnMgb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0XHRjb25zdCBpZCA9IHV1aWR2NCgpO1xuXHRcdGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cdFx0Y29uc3QgcmVxID0ge1xuXHRcdFx0dmVyc2lvbjogJzEuMCcsXG5cdFx0XHRwYXRoOiBwYXRoT3JQYXJhbXMsXG5cdFx0XHRpZFxuXHRcdH07XG5cdFx0bGV0IHN0YXJ0RGFlbW9uID0gZmFsc2U7XG5cblx0XHRpZiAodHlwZW9mIHBhdGhPclBhcmFtcyA9PT0gJ29iamVjdCcpIHtcblx0XHRcdE9iamVjdC5hc3NpZ24ocmVxLCBwYXRoT3JQYXJhbXMpO1xuXHRcdFx0KHsgc3RhcnREYWVtb24gfSA9IHJlcSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFyZXEucGF0aCB8fCB0eXBlb2YgcmVxLnBhdGggIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBwYXRoIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHRcdH1cblxuXHRcdGlmIChyZXEuZGF0YSAmJiAodHlwZW9mIHJlcS5kYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJlcS5kYXRhKSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRhdGEgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcS50eXBlICYmIHR5cGVvZiByZXEudHlwZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHR5cGUgdG8gYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cblx0XHQvLyBuZWVkIHRvIGRlbGF5IHJlcXVlc3Qgc28gZXZlbnQgZW1pdHRlciBjYW4gYmUgcmV0dXJuZWQgYW5kIGV2ZW50cyBjYW5cblx0XHQvLyBiZSB3aXJlZCB1cFxuXHRcdHNldEltbWVkaWF0ZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmNvbm5lY3QoeyBzdGFydERhZW1vbiB9KVxuXHRcdFx0XHQub25jZSgnY29ubmVjdGVkJywgY2xpZW50ID0+IHtcblx0XHRcdFx0XHQvLyBpZiBhIHJlc3BvbnNlIGlzIGNodW5rZWQsIHRoaXMgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgbXVsdGlwbGUgdGltZXNcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzW2lkXSA9IHtcblx0XHRcdFx0XHRcdGhhbmRsZXI6IHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gbm8gbmVlZCBmb3IgdGhlIGlkIGFueW1vcmVcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJlc3BvbnNlLmlkO1xuXG5cdFx0XHRcdFx0XHRcdGxldCB7IHN0YXR1cyB9ID0gdGhpcy5yZXF1ZXN0c1tpZF07XG5cdFx0XHRcdFx0XHRcdGlmICghc3RhdHVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmlyc3QgcmVzcG9uc2Vcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXMgPSB0aGlzLnJlcXVlc3RzW2lkXS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPSB+fnJlc3BvbnNlLnN0YXR1cyB8fCA1MDA7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0dXNDbGFzcyA9IE1hdGguZmxvb3Ioc3RhdHVzIC8gMTAwKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAocmVzcG9uc2UuZmluKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSBzdGF0dXMgPCA0MDAgPyBvayA6IGFsZXJ0O1xuXHRcdFx0XHRcdFx0XHRcdGxvZyhgJHtzdHlsZShzdGF0dXMpfSAke2hpZ2hsaWdodChyZXEucGF0aCl9ICR7bm90ZShgJHtuZXcgRGF0ZSgpIC0gc3RhcnRUaW1lfW1zYCl9YCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKHN0YXR1c0NsYXNzKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3BvbnNlLnR5cGUgIT09ICdmaW5pc2gnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgncmVzcG9uc2UnLCByZXNwb25zZS5tZXNzYWdlLCByZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBgZmluYCBleGlzdHMgb24gdGhlIGxhc3QgbWVzc2FnZSBmcm9tIHRoZSByZXF1ZXN0IHdoaWNoIGNhbiBiZVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW55IG1lc3NhZ2UgdHlwZSwgbm90IGp1c3QgYGZpbmlzaGBcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZXNwb25zZS5maW4pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdmaW5pc2gnKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgNTpcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcihyZXNwb25zZS5tZXNzYWdlIHx8ICdTZXJ2ZXIgRXJyb3InKTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghcmVzcG9uc2Uuc3RhdHVzQ29kZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5zdGF0dXNDb2RlID0gU3RyaW5nKHN0YXR1cyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMocmVzcG9uc2UpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gdXNlIGRlZmluZVByb3BlcnR5KCkgdG8gZm9yY2UgcHJvcGVydGllcyB0byBiZSBjcmVhdGVkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsIHByb3AsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW51bWVyYWJsZTogICB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiAgICAgICAgcmVzcG9uc2VbcHJvcF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JpdGFibGU6ICAgICB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVyciwgcmVzcG9uc2UpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGxvZygnU2VuZGluZyByZXF1ZXN0OicsIHJlcSk7XG5cblx0XHRcdFx0XHRjbGllbnQuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignd2FybmluZycsICguLi5hcmdzKSA9PiBlbWl0dGVyLmVtaXQoJ3dhcm5pbmcnLCAuLi5hcmdzKSlcblx0XHRcdFx0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnJlcXVlc3RzW2lkXTtcblx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Nsb3NlJyk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbmNlKCdlcnJvcicsIGVyciA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMucmVxdWVzdHNbaWRdO1xuXHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnZXJyb3InLCBlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBlbWl0dGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2Nvbm5lY3RzIGZyb20gdGhlIHNlcnZlci5cblx0ICpcblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGRpc2Nvbm5lY3QoKSB7XG5cdFx0aWYgKHRoaXMuc29ja2V0KSB7XG5cdFx0XHR0aGlzLnNvY2tldC5jbG9zZSgpO1xuXHRcdH1cblx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1c2VyIGFnZW50IHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQtbW9zdCBzY3JpcHRcbiAqIG5hbWUsIE5vZGUuanMgdmVyc2lvbiwgcGxhdGZvcm0gbmFtZSwgYW5kIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gW3VzZXJBZ2VudF0gLSBUaGUgaW52b2tpbmcgY2xpZW50J3MgdXNlciBhZ2VudC4gVGhpcyBzaW1wbHkgbmVlZHMgdG8gYmUgdGhlXG4gKiBgbmFtZS92ZXJzaW9uYC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbnN0cnVjdFVzZXJBZ2VudCh1c2VyQWdlbnQpIHtcblx0aWYgKHVzZXJBZ2VudCAmJiB0eXBlb2YgdXNlckFnZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHVzZXIgYWdlbnQgdG8gYmUgYSBzdHJpbmcnKTtcblx0fVxuXG5cdGNvbnN0IHBhcnRzID0gdXNlckFnZW50ID8gdXNlckFnZW50LnNwbGl0KCcgJykgOiBbXTtcblxuXHRpZiAoIXBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBlbnRyeSA9IG1vZHVsZTtcblx0XHR3aGlsZSAoZW50cnkucGFyZW50KSB7XG5cdFx0XHRlbnRyeSA9IGVudHJ5LnBhcmVudDtcblx0XHR9XG5cblx0XHRpZiAoZW50cnkuZmlsZW5hbWUpIHtcblx0XHRcdGNvbnN0IG5hbWUgPSBwYXRoLmJhc2VuYW1lKGVudHJ5LmZpbGVuYW1lKTtcblx0XHRcdGNvbnN0IHJvb3QgPSBwYXRoLnJlc29sdmUoJy8nKTtcblx0XHRcdGxldCBkaXIgPSBwYXRoLmRpcm5hbWUoZW50cnkuZmlsZW5hbWUpO1xuXG5cdFx0XHRkbyB7XG5cdFx0XHRcdGNvbnN0IHBrZ0pzb25GaWxlID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cGFydHMucHVzaChgJHtuYW1lfS8ke2ZzLnJlYWRKc29uU3luYyhwa2dKc29uRmlsZSkudmVyc2lvbiB8fCAnJ31gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdC8vIGVpdGhlciB0aGUgcGFja2FnZS5qc29uIGRvZXNuJ3QgZXhpc3Qgb3IgdGhlIEpTT04gd2FzIG1hbGZvcm1lZFxuXHRcdFx0XHRcdGlmIChlLmNvZGUgIT09ICdFTk9FTlQnKSB7XG5cdFx0XHRcdFx0XHQvLyBtdXN0IGJlIG1hbGZvcm1lZCBKU09OLCB3ZSBjYW4gc3RvcFxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG5cdFx0XHR9IHdoaWxlIChkaXIgIT09IHJvb3QpO1xuXHRcdH1cblx0fVxuXG5cdHBhcnRzLnB1c2goYGFwcGNkLWNsaWVudC8ke0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKSkpLnZlcnNpb259YCk7XG5cblx0aWYgKCFwYXJ0cy5zb21lKHAgPT4gcC5pbmRleE9mKCdub2RlLycpID09PSAwKSkge1xuXHRcdHBhcnRzLnB1c2goYG5vZGUvJHtwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgvXnYvLCAnJyl9YCk7XG5cdH1cblxuXHRpZiAoIXBhcnRzLnNvbWUocCA9PiBwID09PSBwcm9jZXNzLnBsYXRmb3JtKSkge1xuXHRcdHBhcnRzLnB1c2gocHJvY2Vzcy5wbGF0Zm9ybSk7XG5cdH1cblxuXHRjb25zdCBhcmNoaXRlY3R1cmUgPSBhcmNoKCk7XG5cdGlmICghcGFydHMuc29tZShwID0+IHAgPT09IGFyY2hpdGVjdHVyZSkpIHtcblx0XHRwYXJ0cy5wdXNoKGFyY2hpdGVjdHVyZSk7XG5cdH1cblxuXHRyZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxvY2F0ZSBhbiBleGVjdXRhYmxlIGluIHRoZSBzeXN0ZW0gcGF0aC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluIC0gVGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH1cbiAqL1xuZnVuY3Rpb24gZmluZChiaW4pIHtcblx0dHJ5IHtcblx0XHRjb25zdCBwYXRoID0gd2hpY2guc3luYyhiaW4pO1xuXHRcdGxvZyhgRm91bmQgJHtiaW59OiAke2hpZ2hsaWdodChwYXRoKX1gKTtcblx0XHRyZXR1cm4gcGF0aDtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogU3luY2hyb25vdXNseSBzcGF3bnMgYSBwcm9jZXNzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIElmIHRoZSBwcm9jZXNzIHJldHVybnMgYSBub24temVybyBleGl0XG4gKiBjb2RlLCB0aGVuIGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKlxuICogQHBhcmFtIHsuLi5TdHJpbmd9IGFyZ3MgLSBUaGUgY29tbWFuZCBhbmQgYXJndW1lbnRzLiBJZiB0aGUgcGxhdGZvcm0gaXMgV2luZG93cyBhbmQgdGhlIGZpcnN0XG4gKiBhcmd1bWVudCBpcyBub3QgYSBgLmNtZGAsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgY29tbWFuZCB0byB0aGUgY3VycmVudCBOb2RlXG4gKiBleGVjdXRhYmxlLlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcnVuKC4uLmFyZ3MpIHtcblx0Y29uc3QgYmluID0gYXJnc1swXTtcblx0Y29uc3QgY21kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiAhL1xcLmNtZCQvaS50ZXN0KGJpbikgPyBwcm9jZXNzLmV4ZWNQYXRoIDogYXJncy5zaGlmdCgpO1xuXHRsb2coYEV4ZWN1dGluZyAke2hpZ2hsaWdodChgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9YCl9YCk7XG5cblx0Ly8gcmVtb3ZlIGRlYnVnIGVudiB2YXJzIHNvIHRoYXQgSlNPTiByZXNwb25zZXMgYXJlbid0IG1hbGZvcm1lZFxuXHRjb25zdCB7IGVudiB9ID0gcHJvY2Vzcztcblx0ZGVsZXRlIGVudi5ERUJVRztcblx0ZGVsZXRlIGVudi5TTk9PUExPR0c7XG5cblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNtZCwgYXJncywgeyBlbnYgfSk7XG5cdGlmICghcmVzdWx0LnN0YXR1cykge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYCR7YmlufSBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gKTtcbn1cbiJdLCJmaWxlIjoiY2xpZW50LmpzIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNsaWVudC5qcyJdLCJuYW1lcyI6WyJFcnJvciIsInByZXBhcmVTdGFja1RyYWNlIiwicmVxdWlyZSIsImVycm9yIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJub3RlIiwib2siLCJhcHBjZExvZ2dlciIsInN0eWxlcyIsIkNsaWVudCIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNvY2tldCIsInJlcXVlc3RzIiwiaG9zdCIsInBvcnQiLCJUeXBlRXJyb3IiLCJ1c2VyQWdlbnQiLCJjb25zdHJ1Y3RVc2VyQWdlbnQiLCJjb25uZWN0IiwicGFyYW1zIiwiZW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInRyeUNvbm5lY3QiLCJlbWl0IiwiaGVhZGVycyIsImxvY2FsZVZhbHVlIiwicHJvY2VzcyIsImVudiIsIkFQUENEX0xPQ0FMRSIsInVybCIsIldlYlNvY2tldCIsIm9uIiwiZGF0YSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJlIiwibWVzc2FnZSIsIm1zZ3BhY2siLCJkZWNvZGUiLCJpZCIsImhhbmRsZXIiLCJvbmNlIiwiZXJyIiwiY2xvc2UiLCJjb2RlIiwic3RhcnREYWVtb24iLCJhcHBjZCIsInVuZGVmaW5lZCIsImZpbmQiLCJmZXRjaGVkQXBwY2RDb25maWciLCJydW4iLCJzdGFydCIsImNmZyIsInN0ZG91dCIsImN1cnJlbnRIb3N0IiwiY3VycmVudFBvcnQiLCJob3N0bmFtZSIsIm5ld0hvc3QiLCJuZXdQb3J0IiwicmVzdWx0IiwiYXh3YXlDTEkiLCJwYWNrYWdlcyIsImFwcGNkUGtnIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwicCIsIm5hbWUiLCJhcHBjZFBhdGgiLCJwYXRoIiwicmVzb2x2ZSIsInZlcnNpb25zIiwidmVyc2lvbiIsImZzIiwiZXhpc3RzU3luYyIsInNldEltbWVkaWF0ZSIsInJlcXVlc3QiLCJwYXRoT3JQYXJhbXMiLCJzdGFydFRpbWUiLCJEYXRlIiwicmVxIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZSIsImNsaWVudCIsInJlc3BvbnNlIiwic3RhdHVzIiwic3RhdHVzQ2xhc3MiLCJNYXRoIiwiZmxvb3IiLCJmaW4iLCJzdHlsZSIsInN0YXR1c0NvZGUiLCJTdHJpbmciLCJwcm9wIiwia2V5cyIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsInZhbHVlIiwid3JpdGFibGUiLCJzZW5kIiwic3RyaW5naWZ5IiwiYXJncyIsImRpc2Nvbm5lY3QiLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiZW50cnkiLCJtb2R1bGUiLCJwYXJlbnQiLCJmaWxlbmFtZSIsImJhc2VuYW1lIiwicm9vdCIsImRpciIsImRpcm5hbWUiLCJwa2dKc29uRmlsZSIsImpvaW4iLCJwdXNoIiwicmVhZEpzb25TeW5jIiwicmVhZEZpbGVTeW5jIiwiX19kaXJuYW1lIiwic29tZSIsImluZGV4T2YiLCJyZXBsYWNlIiwicGxhdGZvcm0iLCJhcmNoaXRlY3R1cmUiLCJiaW4iLCJ3aGljaCIsInN5bmMiLCJjbWQiLCJ0ZXN0IiwiZXhlY1BhdGgiLCJzaGlmdCIsIkRFQlVHIiwiU05PT1BMT0dHIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFoQkE7QUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ0MsaUJBQVgsRUFBOEI7QUFDN0JDLEVBQUFBLE9BQU8sQ0FBQyw2QkFBRCxDQUFQO0FBQ0E7O0FBZUQsTUFBTTtBQUFFQyxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBO0FBQVQsSUFBaUIsMEJBQVksY0FBWixDQUF2QjtBQUNBLE1BQU07QUFBRUMsRUFBQUEsS0FBRjtBQUFTQyxFQUFBQSxTQUFUO0FBQW9CQyxFQUFBQSxJQUFwQjtBQUEwQkMsRUFBQUE7QUFBMUIsSUFBaUNDLHFCQUFZQyxNQUFuRDtBQUVBO0FBQ0E7QUFDQTs7QUFDZSxNQUFNQyxNQUFOLENBQWE7QUFDM0I7QUFDRDtBQUNBO0FBQ0E7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LENBQUg7QUFDQSxXQUFPQSxJQUFQO0FBQ0EsR0FKRCxDQUlFLE9BQU9sQyxDQUFQLEVBQVU7QUFDWCxXQUFPLElBQVA7QUFDQTtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTZSxHQUFULENBQWEsR0FBR3FELElBQWhCLEVBQXNCO0FBQ3JCLFFBQU13QixHQUFHLEdBQUd4QixJQUFJLENBQUMsQ0FBRCxDQUFoQjtBQUNBLFFBQU0yQixHQUFHLEdBQUd6RyxPQUFPLENBQUNvRyxRQUFSLEtBQXFCLE9BQXJCLElBQWdDLENBQUMsVUFBVU0sSUFBVixDQUFlSixHQUFmLENBQWpDLEdBQXVEdEcsT0FBTyxDQUFDMkcsUUFBL0QsR0FBMEU3QixJQUFJLENBQUM4QixLQUFMLEVBQXRGO0FBQ0FySSxFQUFBQSxHQUFHLENBQUUsYUFBWUUsU0FBUyxDQUFFLEdBQUVnSSxHQUFJLElBQUczQixJQUFJLENBQUNjLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFBMUIsQ0FBNkIsRUFBcEQsQ0FBSCxDQUhxQixDQUtyQjs7QUFDQSxRQUFNO0FBQUUzRixJQUFBQTtBQUFGLE1BQVVELE9BQWhCO0FBQ0EsU0FBT0MsR0FBRyxDQUFDNEcsS0FBWDtBQUNBLFNBQU81RyxHQUFHLENBQUM2RyxTQUFYO0FBRUEsUUFBTTVFLE1BQU0sR0FBRyw4QkFBVXVFLEdBQVYsRUFBZTNCLElBQWYsRUFBcUI7QUFBRTdFLElBQUFBO0FBQUYsR0FBckIsQ0FBZjs7QUFDQSxNQUFJLENBQUNpQyxNQUFNLENBQUMyQixNQUFaLEVBQW9CO0FBQ25CLFdBQU8zQixNQUFQO0FBQ0E7O0FBRUQsUUFBTSxJQUFJL0QsS0FBSixDQUFXLEdBQUVtSSxHQUFJLHFCQUFvQnBFLE1BQU0sQ0FBQzJCLE1BQU8sRUFBbkQsQ0FBTjtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoIUVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG5cdHJlcXVpcmUoJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3RlcicpO1xufVxuXG5pbXBvcnQgYXBwY2RMb2dnZXIgZnJvbSAnYXBwY2QtbG9nZ2VyJztcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgbXNncGFjayBmcm9tICdtc2dwYWNrLWxpdGUnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgV2ViU29ja2V0IGZyb20gJ3dzJztcbmltcG9ydCB3aGljaCBmcm9tICd3aGljaCc7XG5cbmltcG9ydCB7IGFyY2ggfSBmcm9tICdhcHBjZC11dGlsJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgeyBsb2NhbGUgfSBmcm9tICdhcHBjZC1yZXNwb25zZSc7XG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5jb25zdCB7IGVycm9yLCBsb2cgfSA9IGFwcGNkTG9nZ2VyKCdhcHBjZDpjbGllbnQnKTtcbmNvbnN0IHsgYWxlcnQsIGhpZ2hsaWdodCwgbm90ZSwgb2sgfSA9IGFwcGNkTG9nZ2VyLnN0eWxlcztcblxuLyoqXG4gKiBUaGUgY2xpZW50IGZvciBjb25uZWN0aW5nIHRvIHRoZSBhcHBjZCBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudCB7XG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgY2xpZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaG9zdD0nMTI3LjAuMC4xJ10gLSBUaGUgaG9zdCB0byBjb25uZWN0IHRvLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdHMucG9ydD0xNzMyXSAtIFRoZSBwb3J0IHRvIGNvbm5lY3QgdG8uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy51c2VyQWdlbnRdIC0gVGhlIHVzZXIgYWdlbnQgY29udGFpbmluZyB0aGUgbmFtZSBhbmRcblx0ICogdmVyc2lvbiBvZiB0aGUgY2xpZW50LiBJZiBub3Qgc3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHQvKipcblx0XHQgKiBUaGUgd2Vic29ja2V0IHRvIHRoZSBzZXJ2ZXIuXG5cdFx0ICogQHR5cGUge1dlYlNvY2tldH1cblx0XHQgKiBAYWNjZXNzIHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnNvY2tldCA9IG51bGw7XG5cblx0XHQvKipcblx0XHQgKiBBbiBpbnRlcm5hbCBtYXAgdXNlZCB0byBkaXNwYXRjaCByZXNwb25zZXMgdG8gcmVxdWVzdGVycy5cblx0XHQgKiBAdHlwZSB7T2JqZWN0fVxuXHRcdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMucmVxdWVzdHMgPSB7fTtcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSBob3N0IHRvIGNvbm5lY3QgdG8uXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAYWNjZXNzIHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLmhvc3QgPSBvcHRzLmhvc3QgfHwgJzEyNy4wLjAuMSc7XG5cblx0XHQvKipcblx0XHQgKiBUaGUgcG9ydCB0byBjb25uZWN0IHRvLlxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XG5cdFx0ICogQGFjY2VzcyBwcml2YXRlXG5cdFx0ICovXG5cdFx0aWYgKG9wdHMucG9ydCAmJiAodHlwZW9mIG9wdHMucG9ydCAhPT0gJ251bWJlcicgfHwgb3B0cy5wb3J0IDwgMSB8fCBvcHRzLnBvcnQgPiA2NTUzNSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcG9ydCwgZXhwZWN0ZWQgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA2NTUzNScpO1xuXHRcdH1cblx0XHR0aGlzLnBvcnQgPSBvcHRzLnBvcnQgfHwgMTczMjtcblxuXHRcdC8qKlxuXHRcdCAqIFRoZSB1c2VyIGFnZW50IGNvbnRhaW5pbmcgdGhlIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhlIGNsaWVudC4gSWYgbm90XG5cdFx0ICogc3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG5cdFx0ICogQHR5cGUge1N0cmluZ31cblx0XHQgKiBAYWNjZXNzIHByaXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnVzZXJBZ2VudCA9IGNvbnN0cnVjdFVzZXJBZ2VudChvcHRzLnVzZXJBZ2VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29ubmVjdHMgdG8gdGhlIHNlcnZlciB2aWEgYSB3ZWJzb2NrZXQuIFlvdSBkbyBub3QgbmVlZCB0byBjYWxsIHRoaXMuXG5cdCAqIGByZXF1ZXN0KClgIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSAtIFZhcmlvdXMgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbcGFyYW1zLnN0YXJ0RGFlbW9uXSAtIFdoZW4gYHRydWVgLCBlbnN1cmVzIHRoZSBkYWVtb24gaXMgcnVubmluZyBhbmQgaWZcblx0ICogbm90LCBhdHRlbXB0cyB0byBsb2NhdGUgdGhlIGRhZW1vbiwgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uLCBzdGFydCBpdCwgYW5kIHJlLWNvbm5lY3QuXG5cdCAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IEVtaXRzIGV2ZW50cyBgY29ubmVjdGVkYCwgYGNsb3NlYCwgYW5kIGBlcnJvcmAuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25uZWN0KHBhcmFtcyA9IHt9KSB7XG5cdFx0Y29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRcdGNvbnN0IHRyeUNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5zb2NrZXQpIHtcblx0XHRcdFx0ZW1pdHRlci5lbWl0KCdjb25uZWN0ZWQnLCB0aGlzKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBoZWFkZXJzID0ge1xuXHRcdFx0XHRcdCdVc2VyLUFnZW50JzogdGhpcy51c2VyQWdlbnRcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBsb2NhbGVWYWx1ZSA9IHByb2Nlc3MuZW52LkFQUENEX0xPQ0FMRSB8fCBhd2FpdCBsb2NhbGUoKTtcblx0XHRcdFx0aWYgKGxvY2FsZVZhbHVlKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1snQWNjZXB0LUxhbmd1YWdlJ10gPSBsb2NhbGVWYWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHVybCA9IGB3czovLyR7dGhpcy5ob3N0fToke3RoaXMucG9ydH1gO1xuXHRcdFx0XHRsb2coYENvbm5lY3RpbmcgdG8gJHtoaWdobGlnaHQodXJsKX1gKTtcblx0XHRcdFx0Y29uc3Qgc29ja2V0ID0gdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KHVybCwgeyBoZWFkZXJzIH0pO1xuXG5cdFx0XHRcdHNvY2tldFxuXHRcdFx0XHRcdC5vbignbWVzc2FnZScsIGRhdGEgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IGpzb24gPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdGpzb24gPSBKU09OLnBhcnNlKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYmFkIHJlc3BvbnNlLCBzaG91bGRuJ3QgZXZlciBoYXBwZW5cblx0XHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ3dhcm5pbmcnLCBgU2VydmVyIHJldHVybmVkIGludmFsaWQgSlNPTjogJHtlLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRqc29uID0gbXNncGFjay5kZWNvZGUoZGF0YSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChqc29uICYmIHR5cGVvZiBqc29uID09PSAnb2JqZWN0JyAmJiB0aGlzLnJlcXVlc3RzW2pzb24uaWRdKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdHNbanNvbi5pZF0uaGFuZGxlcihqc29uKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnd2FybmluZycsICdTZXJ2ZXIgcmVzcG9uc2UgaXMgbm90IGFuIG9iamVjdCBvciBoYXMgYW4gaW52YWxpZCBpZCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Lm9uKCdvcGVuJywgKCkgPT4gZW1pdHRlci5lbWl0KCdjb25uZWN0ZWQnLCB0aGlzKSlcblx0XHRcdFx0XHQub25jZSgnY2xvc2UnLCAoKSA9PiBlbWl0dGVyLmVtaXQoJ2Nsb3NlJykpXG5cdFx0XHRcdFx0Lm9uY2UoJ2Vycm9yJywgYXN5bmMgZXJyID0+IHtcblx0XHRcdFx0XHRcdHNvY2tldC5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0dGhpcy5zb2NrZXQgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRpZiAoZXJyLmNvZGUgIT09ICdFQ09OTlJFRlVTRUQnIHx8ICFwYXJhbXMuc3RhcnREYWVtb24pIHtcblx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0bG9nKGBGYWlsZWQgdG8gY29ubmVjdCB0byBhcHBjZDogJHtoaWdobGlnaHQoYCR7dGhpcy5ob3N0fToke3RoaXMucG9ydH1gKX1gKTtcblx0XHRcdFx0XHRcdFx0bG9nKCdBdHRlbXB0aW5nIHRvIGxvY2F0ZSBhcHBjZCwgdGhlbiBkZXRlcm1pbmUgY29uZmlndXJhdGlvbi4uLicpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFwcGNkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFwcGNkID0gYXdhaXQgZmluZCgnYXBwY2QnKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmFwcGNkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZmV0Y2hlZEFwcGNkQ29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBtYXliZSBpdCBqdXN0IG5lZWRzIHRvIGJlIHN0YXJ0ZWQ/XG5cdFx0XHRcdFx0XHRcdFx0XHRsb2coJ1N0YXJ0aW5nIGRhZW1vbi4uLicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cnVuKHRoaXMuYXBwY2QsICdzdGFydCcpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBhdCB0aGlzIHBvaW50LCB3ZSd2ZSBkb25lIGFsbCB3ZSBjYW4gZG8gYW5kIGlmIGNvbm5lY3QoKSB0aHJvd3MgYW4gZXJyb3IsIHRoZW4gc28gYmUgaXRcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnlDb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGxvZygnRmV0Y2hpbmcgYXBwY2QgY29uZmlnIHRvIGRldGVybWluZSBob3N0IGFuZCBwb3J0Li4uJyk7XG5cblx0XHRcdFx0XHRcdFx0XHRsZXQgc3RhcnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmZldGNoZWRBcHBjZENvbmZpZyA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgY2ZnID0gSlNPTi5wYXJzZShydW4odGhpcy5hcHBjZCwgJ2NvbmZpZycsICdnZXQnLCAnc2VydmVyJywgJy0tanNvbicpLnN0ZG91dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoY2ZnKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHsgaG9zdDogY3VycmVudEhvc3QsIHBvcnQ6IGN1cnJlbnRQb3J0IH0gPSB0aGlzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IGhvc3RuYW1lOiBuZXdIb3N0LCBwb3J0OiBuZXdQb3J0IH0gPSBjZmcucmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobmV3SG9zdCAmJiBjdXJyZW50SG9zdCAhPT0gbmV3SG9zdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuaG9zdCA9IG5ld0hvc3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuZXdQb3J0ICYmIGN1cnJlbnRQb3J0ICE9PSBuZXdQb3J0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5wb3J0ID0gbmV3UG9ydDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bG9nKGBVcGRhdGluZyBjbGllbnQgY29uZmlnIGZyb20gJHtoaWdobGlnaHQoYCR7Y3VycmVudEhvc3R9OiR7Y3VycmVudFBvcnR9YCl9IHRvICR7aGlnaGxpZ2h0KGAke25ld0hvc3R9OiR7bmV3UG9ydH1gKX1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coYENsaWVudCBjb25maWcgaXMgdW5jaGFuZ2VkOiAke2hpZ2hsaWdodChgJHtjdXJyZW50SG9zdH06JHtjdXJyZW50UG9ydH1gKX1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yKGBGYWlsZWQgdG8gZ2V0IGFwcGNkIGNvbmZpZzogJHtlLm1lc3NhZ2V9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsb2coJ1N0YXJ0aW5nIGRhZW1vbi4uLicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cnVuKHRoaXMuYXBwY2QsICdzdGFydCcpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnlDb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRsb2coYCR7aGlnaGxpZ2h0KCdhcHBjZCcpfSBub3QgZm91bmQsIGF0dGVtcHRpbmcgdG8gbG9jYXRlICR7aGlnaGxpZ2h0KCdheHdheScpfS4uLmApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmF4d2F5Q0xJID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF4d2F5Q0xJID0gYXdhaXQgZmluZCgnYXh3YXknKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmF4d2F5Q0xJKSB7XG5cdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGFwcGNkIGlzIGluc3RhbGxlZFxuXHRcdFx0XHRcdFx0XHRcdFx0bG9nKCdDaGVja2luZyBBeHdheSBDTEkgaWYgYXBwY2QgaXMgaW5zdGFsbGVkLi4uJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYWNrYWdlcyA9IEpTT04ucGFyc2UocnVuKHRoaXMuYXh3YXlDTEksICdwbScsICdsaXN0JywgJy0tanNvbicpLnN0ZG91dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhcHBjZFBrZyA9IEFycmF5LmlzQXJyYXkocGFja2FnZXMpICYmIHBhY2thZ2VzLmZpbHRlcihwID0+IHAubmFtZSA9PT0gJ2FwcGNkJylbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYXBwY2RQa2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYXBwY2RQYXRoID0gcGF0aC5yZXNvbHZlKGFwcGNkUGtnLnZlcnNpb25zW2FwcGNkUGtnLnZlcnNpb25dLnBhdGgsICdiaW4nLCAnYXBwY2QnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZzLmV4aXN0c1N5bmMoYXBwY2RQYXRoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYXBwY2QgPSBhcHBjZFBhdGg7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mZXRjaGVkQXBwY2RDb25maWcgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsb2coYEF4d2F5IENMSSBmb3VuZCBhcHBjZDogJHtoaWdobGlnaHQoYXBwY2QpfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnlDb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3IoYEZhaWxlZCB0byBjaGVjayBBeHdheSBDTEkgZm9yIGFwcGNkOiAke2UubWVzc2FnZX1gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9nKGAke2hpZ2hsaWdodCgnQXh3YXkgQ0xJJyl9IG5vdCBmb3VuZGApO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcdCdVbmFibGUgdG8gZmluZCB0aGUgQXBwYyBEYWVtb24gKGFwcGNkKS5cXG4nXG5cdFx0XHRcdFx0XHRcdFx0KyBgUnVuICR7dGhpcy5heHdheUNMSSA/ICdcImF4d2F5IHBtIGkgYXBwY2RcIiBvciAnIDogJyd9XCJucG0gaSAtZyBhcHBjZFwiIHRvIGluc3RhbGwgaXQuYFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIG5lZWQgdG8gZGVsYXkgcmVxdWVzdCBzbyBldmVudCBlbWl0dGVyIGNhbiBiZSByZXR1cm5lZCBhbmQgZXZlbnRzIGNhblxuXHRcdC8vIGJlIHdpcmVkIHVwXG5cdFx0c2V0SW1tZWRpYXRlKCgpID0+IHRyeUNvbm5lY3QoKSk7XG5cblx0XHRyZXR1cm4gZW1pdHRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBJc3N1ZXMgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgb3ZlciBhIHdlYnNvY2tldC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBwYXRoT3JQYXJhbXMgLSBUaGUgcGF0aCB0byByZXF1ZXN0IG9yIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXRoLFxuXHQgKiBkYXRhLCBhbmQgdHlwZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXRoT3JQYXJhbXMucGF0aF0gLSBUaGUgcGF0aCB0byByZXF1ZXN0LlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3BhdGhPclBhcmFtcy5kYXRhXSAtIEFuIG9iamVjdCB0byBzZW5kLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXRoT3JQYXJhbXMuc3RhcnREYWVtb25dIC0gV2hlbiBgdHJ1ZWAsIGVuc3VyZXMgdGhlIGRhZW1vbiBpcyBydW5uaW5nIGFuZFxuXHQgKiBpZiBub3QsIGF0dGVtcHRzIHRvIGxvY2F0ZSB0aGUgZGFlbW9uLCBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24sIHN0YXJ0IGl0LCBhbmRcblx0ICogcmUtY29ubmVjdC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtwYXRoT3JQYXJhbXMudHlwZV0gLSBUaGUgcmVxdWVzdCB0eXBlLiBWYWxpZCB0eXBlcyBpbmNsdWRlIGBjYWxsYCxcblx0ICogYHN1YnNjcmliZWAsIGFuZCBgdW5zdWJzY3JpYmVgLlxuXHQgKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBFbWl0cyBldmVudHMgYHJlc3BvbnNlYCBhbmQgYGVycm9yYC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHJlcXVlc3QocGF0aE9yUGFyYW1zKSB7XG5cdFx0aWYgKCFwYXRoT3JQYXJhbXMgfHwgKHR5cGVvZiBwYXRoT3JQYXJhbXMgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBwYXRoT3JQYXJhbXMgIT09ICdvYmplY3QnKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbm9uLWVtcHR5IHBhdGggb3IgcGFyYW1ldGVycyBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHRcdGNvbnN0IGlkID0gdXVpZHY0KCk7XG5cdFx0Y29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcblx0XHRjb25zdCByZXEgPSB7XG5cdFx0XHR2ZXJzaW9uOiAnMS4wJyxcblx0XHRcdHBhdGg6IHBhdGhPclBhcmFtcyxcblx0XHRcdGlkXG5cdFx0fTtcblx0XHRsZXQgc3RhcnREYWVtb24gPSBmYWxzZTtcblxuXHRcdGlmICh0eXBlb2YgcGF0aE9yUGFyYW1zID09PSAnb2JqZWN0Jykge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihyZXEsIHBhdGhPclBhcmFtcyk7XG5cdFx0XHQoeyBzdGFydERhZW1vbiB9ID0gcmVxKTtcblx0XHR9XG5cblx0XHRpZiAoIXJlcS5wYXRoIHx8IHR5cGVvZiByZXEucGF0aCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhdGggdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcS5kYXRhICYmICh0eXBlb2YgcmVxLmRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocmVxLmRhdGEpKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZGF0YSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAocmVxLnR5cGUgJiYgdHlwZW9mIHJlcS50eXBlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdHlwZSB0byBiZSBhIHN0cmluZycpO1xuXHRcdH1cblxuXHRcdC8vIG5lZWQgdG8gZGVsYXkgcmVxdWVzdCBzbyBldmVudCBlbWl0dGVyIGNhbiBiZSByZXR1cm5lZCBhbmQgZXZlbnRzIGNhblxuXHRcdC8vIGJlIHdpcmVkIHVwXG5cdFx0c2V0SW1tZWRpYXRlKCgpID0+IHtcblx0XHRcdHRoaXMuY29ubmVjdCh7IHN0YXJ0RGFlbW9uIH0pXG5cdFx0XHRcdC5vbmNlKCdjb25uZWN0ZWQnLCBjbGllbnQgPT4ge1xuXHRcdFx0XHRcdC8vIGlmIGEgcmVzcG9uc2UgaXMgY2h1bmtlZCwgdGhpcyBoYW5kbGVyIHdpbGwgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lc1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNbaWRdID0ge1xuXHRcdFx0XHRcdFx0aGFuZGxlcjogcmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdFx0XHQvLyBubyBuZWVkIGZvciB0aGUgaWQgYW55bW9yZVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgcmVzcG9uc2UuaWQ7XG5cblx0XHRcdFx0XHRcdFx0bGV0IHsgc3RhdHVzIH0gPSB0aGlzLnJlcXVlc3RzW2lkXTtcblx0XHRcdFx0XHRcdFx0aWYgKCFzdGF0dXMpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBmaXJzdCByZXNwb25zZVxuXHRcdFx0XHRcdFx0XHRcdHN0YXR1cyA9IHRoaXMucmVxdWVzdHNbaWRdLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA9IH5+cmVzcG9uc2Uuc3RhdHVzIHx8IDUwMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN0YXR1c0NsYXNzID0gTWF0aC5mbG9vcihzdGF0dXMgLyAxMDApO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChyZXNwb25zZS5maW4pIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzdHlsZSA9IHN0YXR1cyA8IDQwMCA/IG9rIDogYWxlcnQ7XG5cdFx0XHRcdFx0XHRcdFx0bG9nKGAke3N0eWxlKHN0YXR1cyl9ICR7aGlnaGxpZ2h0KHJlcS5wYXRoKX0gJHtub3RlKGAke25ldyBEYXRlKCkgLSBzdGFydFRpbWV9bXNgKX1gKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoc3RhdHVzQ2xhc3MpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzcG9uc2UudHlwZSAhPT0gJ2ZpbmlzaCcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdyZXNwb25zZScsIHJlc3BvbnNlLm1lc3NhZ2UsIHJlc3BvbnNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIGBmaW5gIGV4aXN0cyBvbiB0aGUgbGFzdCBtZXNzYWdlIGZyb20gdGhlIHJlcXVlc3Qgd2hpY2ggY2FuIGJlXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBhbnkgbWVzc2FnZSB0eXBlLCBub3QganVzdCBgZmluaXNoYFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3BvbnNlLmZpbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2ZpbmlzaCcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0XHRjYXNlIDQ6XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSA1OlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZXJyID0gbmV3IEVycm9yKHJlc3BvbnNlLm1lc3NhZ2UgfHwgJ1NlcnZlciBFcnJvcicpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFyZXNwb25zZS5zdGF0dXNDb2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLnN0YXR1c0NvZGUgPSBTdHJpbmcoc3RhdHVzKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhyZXNwb25zZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gd2UgbmVlZCB0byB1c2UgZGVmaW5lUHJvcGVydHkoKSB0byBmb3JjZSBwcm9wZXJ0aWVzIHRvIGJlIGNyZWF0ZWRcblx0XHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgcHJvcCwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbnVtZXJhYmxlOiAgIHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6ICAgICAgICByZXNwb25zZVtwcm9wXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3cml0YWJsZTogICAgIHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZXJyLCByZXNwb25zZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0bG9nKCdTZW5kaW5nIHJlcXVlc3Q6JywgcmVxKTtcblxuXHRcdFx0XHRcdGNsaWVudC5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShyZXEpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uKCd3YXJuaW5nJywgKC4uLmFyZ3MpID0+IGVtaXR0ZXIuZW1pdCgnd2FybmluZycsIC4uLmFyZ3MpKVxuXHRcdFx0XHQub25jZSgnY2xvc2UnLCAoKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMucmVxdWVzdHNbaWRdO1xuXHRcdFx0XHRcdGVtaXR0ZXIuZW1pdCgnY2xvc2UnKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Lm9uY2UoJ2Vycm9yJywgZXJyID0+IHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5yZXF1ZXN0c1tpZF07XG5cdFx0XHRcdFx0ZW1pdHRlci5lbWl0KCdlcnJvcicsIGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGVtaXR0ZXI7XG5cdH1cblxuXHQvKipcblx0ICogRGlzY29ubmVjdHMgZnJvbSB0aGUgc2VydmVyLlxuXHQgKlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0ZGlzY29ubmVjdCgpIHtcblx0XHRpZiAodGhpcy5zb2NrZXQpIHtcblx0XHRcdHRoaXMuc29ja2V0LmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMuc29ja2V0ID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVzZXIgYWdlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHBhcmVudC1tb3N0IHNjcmlwdFxuICogbmFtZSwgTm9kZS5qcyB2ZXJzaW9uLCBwbGF0Zm9ybSBuYW1lLCBhbmQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBbdXNlckFnZW50XSAtIFRoZSBpbnZva2luZyBjbGllbnQncyB1c2VyIGFnZW50LiBUaGlzIHNpbXBseSBuZWVkcyB0byBiZSB0aGVcbiAqIGBuYW1lL3ZlcnNpb25gLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0VXNlckFnZW50KHVzZXJBZ2VudCkge1xuXHRpZiAodXNlckFnZW50ICYmIHR5cGVvZiB1c2VyQWdlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdXNlciBhZ2VudCB0byBiZSBhIHN0cmluZycpO1xuXHR9XG5cblx0Y29uc3QgcGFydHMgPSB1c2VyQWdlbnQgPyB1c2VyQWdlbnQuc3BsaXQoJyAnKSA6IFtdO1xuXG5cdGlmICghcGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IGVudHJ5ID0gbW9kdWxlO1xuXHRcdHdoaWxlIChlbnRyeS5wYXJlbnQpIHtcblx0XHRcdGVudHJ5ID0gZW50cnkucGFyZW50O1xuXHRcdH1cblxuXHRcdGlmIChlbnRyeS5maWxlbmFtZSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHBhdGguYmFzZW5hbWUoZW50cnkuZmlsZW5hbWUpO1xuXHRcdFx0Y29uc3Qgcm9vdCA9IHBhdGgucmVzb2x2ZSgnLycpO1xuXHRcdFx0bGV0IGRpciA9IHBhdGguZGlybmFtZShlbnRyeS5maWxlbmFtZSk7XG5cblx0XHRcdGRvIHtcblx0XHRcdFx0Y29uc3QgcGtnSnNvbkZpbGUgPSBwYXRoLmpvaW4oZGlyLCAncGFja2FnZS5qc29uJyk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwYXJ0cy5wdXNoKGAke25hbWV9LyR7ZnMucmVhZEpzb25TeW5jKHBrZ0pzb25GaWxlKS52ZXJzaW9uIHx8ICcnfWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Ly8gZWl0aGVyIHRoZSBwYWNrYWdlLmpzb24gZG9lc24ndCBleGlzdCBvciB0aGUgSlNPTiB3YXMgbWFsZm9ybWVkXG5cdFx0XHRcdFx0aWYgKGUuY29kZSAhPT0gJ0VOT0VOVCcpIHtcblx0XHRcdFx0XHRcdC8vIG11c3QgYmUgbWFsZm9ybWVkIEpTT04sIHdlIGNhbiBzdG9wXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaXIgPSBwYXRoLmRpcm5hbWUoZGlyKTtcblx0XHRcdH0gd2hpbGUgKGRpciAhPT0gcm9vdCk7XG5cdFx0fVxuXHR9XG5cblx0cGFydHMucHVzaChgYXBwY2QtY2xpZW50LyR7SlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpKSkudmVyc2lvbn1gKTtcblxuXHRpZiAoIXBhcnRzLnNvbWUocCA9PiBwLmluZGV4T2YoJ25vZGUvJykgPT09IDApKSB7XG5cdFx0cGFydHMucHVzaChgbm9kZS8ke3Byb2Nlc3MudmVyc2lvbi5yZXBsYWNlKC9edi8sICcnKX1gKTtcblx0fVxuXG5cdGlmICghcGFydHMuc29tZShwID0+IHAgPT09IHByb2Nlc3MucGxhdGZvcm0pKSB7XG5cdFx0cGFydHMucHVzaChwcm9jZXNzLnBsYXRmb3JtKTtcblx0fVxuXG5cdGNvbnN0IGFyY2hpdGVjdHVyZSA9IGFyY2goKTtcblx0aWYgKCFwYXJ0cy5zb21lKHAgPT4gcCA9PT0gYXJjaGl0ZWN0dXJlKSkge1xuXHRcdHBhcnRzLnB1c2goYXJjaGl0ZWN0dXJlKTtcblx0fVxuXG5cdHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gbG9jYXRlIGFuIGV4ZWN1dGFibGUgaW4gdGhlIHN5c3RlbSBwYXRoLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW4gLSBUaGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSB0byBmaW5kLlxuICogQHJldHVybnMge1N0cmluZ3xudWxsfVxuICovXG5mdW5jdGlvbiBmaW5kKGJpbikge1xuXHR0cnkge1xuXHRcdGNvbnN0IHBhdGggPSB3aGljaC5zeW5jKGJpbik7XG5cdFx0bG9nKGBGb3VuZCAke2Jpbn06ICR7aGlnaGxpZ2h0KHBhdGgpfWApO1xuXHRcdHJldHVybiBwYXRoO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBTeW5jaHJvbm91c2x5IHNwYXducyBhIHByb2Nlc3MgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gSWYgdGhlIHByb2Nlc3MgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXRcbiAqIGNvZGUsIHRoZW4gaXQgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0gey4uLlN0cmluZ30gYXJncyAtIFRoZSBjb21tYW5kIGFuZCBhcmd1bWVudHMuIElmIHRoZSBwbGF0Zm9ybSBpcyBXaW5kb3dzIGFuZCB0aGUgZmlyc3RcbiAqIGFyZ3VtZW50IGlzIG5vdCBhIGAuY21kYCwgdGhlbiBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBjb21tYW5kIHRvIHRoZSBjdXJyZW50IE5vZGVcbiAqIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBydW4oLi4uYXJncykge1xuXHRjb25zdCBiaW4gPSBhcmdzWzBdO1xuXHRjb25zdCBjbWQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmICEvXFwuY21kJC9pLnRlc3QoYmluKSA/IHByb2Nlc3MuZXhlY1BhdGggOiBhcmdzLnNoaWZ0KCk7XG5cdGxvZyhgRXhlY3V0aW5nICR7aGlnaGxpZ2h0KGAke2NtZH0gJHthcmdzLmpvaW4oJyAnKX1gKX1gKTtcblxuXHQvLyByZW1vdmUgZGVidWcgZW52IHZhcnMgc28gdGhhdCBKU09OIHJlc3BvbnNlcyBhcmVuJ3QgbWFsZm9ybWVkXG5cdGNvbnN0IHsgZW52IH0gPSBwcm9jZXNzO1xuXHRkZWxldGUgZW52LkRFQlVHO1xuXHRkZWxldGUgZW52LlNOT09QTE9HRztcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY21kLCBhcmdzLCB7IGVudiB9KTtcblx0aWYgKCFyZXN1bHQuc3RhdHVzKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihgJHtiaW59IGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWApO1xufVxuIl0sImZpbGUiOiJjbGllbnQuanMifQ==
{
"name": "appcd-client",
"version": "3.0.0",
"version": "3.0.1",
"description": "The Node.js client for connecting to the Appc Daemon.",

@@ -25,14 +25,14 @@ "main": "./dist/client",

"dependencies": {
"appcd-logger": "^3.0.0",
"appcd-response": "^3.0.0",
"appcd-util": "^3.0.0",
"appcd-logger": "^3.0.1",
"appcd-response": "^3.0.1",
"appcd-util": "^3.1.0",
"fs-extra": "^9.0.1",
"msgpack-lite": "^0.1.26",
"source-map-support": "^0.5.19",
"uuid": "^8.1.0",
"uuid": "^8.3.1",
"which": "^2.0.2",
"ws": "^7.3.0"
"ws": "^7.4.0"
},
"devDependencies": {
"appcd-gulp": "^3.0.1"
"appcd-gulp": "^3.1.0"
},

@@ -39,0 +39,0 @@ "homepage": "https://github.com/appcelerator/appc-daemon",

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