Socket
Socket
Sign inDemoInstall

@atlas.js/atlas

Package Overview
Dependencies
Maintainers
2
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@atlas.js/atlas - npm Package Compare versions

Comparing version 1.3.0 to 1.3.1

11

CHANGELOG.md

@@ -6,2 +6,13 @@ # Change Log

<a name="1.3.1"></a>
## [1.3.1](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@1.3.0...@atlas.js/atlas@1.3.1) (2018-02-12)
### Bug Fixes
* **atlas:** Properly handle service errors during start/stop ([86d2ae9](https://github.com/strvcom/atlas.js/commit/86d2ae9)), closes [#29](https://github.com/strvcom/atlas.js/issues/29)
<a name="1.3.0"></a>

@@ -8,0 +19,0 @@ # [1.3.0](https://github.com/strvcom/atlas.js/compare/@atlas.js/atlas@1.2.1...@atlas.js/atlas@1.3.0) (2018-02-08)

2

package.json
{
"name": "@atlas.js/atlas",
"description": "The main package containing the core functionality of @atlas.js",
"version": "1.3.0",
"version": "1.3.1",
"author": "Robert Rossmann <robert.rossmann@strv.com>",

@@ -6,0 +6,0 @@ "bugs": "https://github.com/strvcom/atlas.js/issues",

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

await Promise.all(Array.from(services).map(([alias, service]) => lifecycle.service.prepare.call(this, alias, service.component)));
await Promise.all(Array.from(services).map(([alias, service]) => lifecycle.service.prepare.call(this, alias, service)));
_create.default.call(this).prepared = true;

@@ -208,6 +208,2 @@ await _private.dispatch.call(this, 'afterPrepare', this, hooks);

async start() {
if (this.started) {
return this;
}
const hooks = _create.default.call(this).catalog.hooks;

@@ -223,3 +219,21 @@

for (const [alias, service] of services) {
await lifecycle.service.start.call(this, alias, service.component);
if (service.started) {
this.log.warn({
service: alias
}, 'service:start:already-started');
continue;
}
try {
await lifecycle.service.start.call(this, alias, service);
} catch (err) {
this.log.error({
err,
service: alias
}, 'service:start:failure');
await this.stop().catch(stopErr => void this.log.fatal({
err: stopErr
}, 'atlas:start:rollback-failure'));
throw err;
}
}

@@ -234,6 +248,2 @@

async stop() {
if (!this.started) {
return this;
}
const {

@@ -246,5 +256,21 @@ services,

await _private.dispatch.call(this, 'beforeStop', this, hooks);
let error;
for (const [alias, service] of Array.from(services).reverse()) {
await lifecycle.service.stop.call(this, alias, service.component);
if (!service.started) {
this.log.warn({
service: alias
}, 'service:stop:already-stopped');
continue;
}
try {
await lifecycle.service.stop.call(this, alias, service);
} catch (err) {
this.log.error({
err,
service: alias
}, 'service:stop:failure');
error = err;
}
}

@@ -260,2 +286,7 @@

this.log.info('atlas:stopped');
if (error) {
throw error;
}
return this;

@@ -284,3 +315,3 @@ }

}, 'service:prepare:before');
const instance = await service.prepare();
const instance = await service.component.prepare();

@@ -298,3 +329,4 @@ _private.expose.call(this, 'services', alias, instance);

}, 'service:start:before');
await service.start(this.services[alias]);
await service.component.start(this.services[alias]);
service.started = true;
this.log.trace({

@@ -311,3 +343,4 @@ service: alias

delete this.services[alias];
await service.stop(instance);
await service.component.stop(instance);
service.started = false;
this.log.trace({

@@ -322,2 +355,2 @@ service: alias

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJvcHRpb25hbCIsImxvZyIsImRlYnVnIiwiY29tcG9uZW50cyIsIk9iamVjdCIsImtleXMiLCJhbGlhcyIsIkhvb2siLCJlbnRyaWVzIiwiaG9vayIsIlNlcnZpY2UiLCJzZXJ2aWNlIiwiQWN0aW9uIiwiYWN0aW9uIiwicHJlcGFyZWQiLCJzdGFydGVkIiwiY29uc3RydWN0b3IiLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJjYXRhbG9nIiwiTWFwIiwiZGVmYXVsdHMiLCJsb2NhdGlvbiIsImFic29sdXRlIiwibG9hZCIsImNvbnRlbnRzIiwibm9ybWFsaXNlIiwiZGVmYXVsdCIsIkNvbXBvbmVudCIsIm9wdHMiLCJwcmVwYXJlIiwiY29tcG9uZW50IiwiUHJvbWlzZSIsImFsbCIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImxpZmVjeWNsZSIsInN0YXJ0IiwiaW5mbyIsInN0b3AiLCJyZXZlcnNlIiwibmFtZSIsImJhc2VuYW1lIiwiY3dkIiwibGV2ZWwiLCJzZXJpYWxpemVycyIsInN0ZFNlcmlhbGl6ZXJzIiwidHJhY2UiLCJpbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOzs7O0FBY0EsTUFBTUEsS0FBTixDQUFZO0FBdUJWLFNBQU9DLElBQVAsQ0FBWUMsVUFBVSxFQUF0QixFQUEwQjtBQUN4Qiw4QkFBU0EsT0FBVCxFQUFrQjtBQUNoQkMsY0FBUSxRQURRO0FBRWhCQyxhQUFPLE9BRlM7QUFHaEJDLGdCQUFVLFVBSE07QUFJaEJDLGVBQVMsU0FKTztBQUtoQkMsZUFBUztBQUxPLEtBQWxC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QVcsTUFBTXRDLFFBQVFtQixPQUFSLEVBQXZCOztBQUNBLGlDQUFhLFVBQWIsRUFBeUJ4QixLQUF6QixFQUFnQzJDLFFBQWhDOztBQUNBLFdBQUtoRCxHQUFMLENBQVMrQyxLQUFULENBQWU7QUFBRXJDLGlCQUFTTDtBQUFYLE9BQWYsRUFBbUMsdUJBQW5DO0FBQ0QsS0FkTTs7QUF1QlAsVUFBTWdDLEtBQU4sQ0FBWWhDLEtBQVosRUFBbUJLLE9BQW5CLEVBQTRCO0FBQzFCLFdBQUtWLEdBQUwsQ0FBUytDLEtBQVQsQ0FBZTtBQUFFckMsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxzQkFBbkM7QUFDQSxZQUFNSyxRQUFRMkIsS0FBUixDQUFjLEtBQUtsRCxRQUFMLENBQWNrQixLQUFkLENBQWQsQ0FBTjtBQUNBLFdBQUtMLEdBQUwsQ0FBUytDLEtBQVQsQ0FBZTtBQUFFckMsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxxQkFBbkM7QUFDRCxLQTNCTTs7QUFvQ1AsVUFBTWtDLElBQU4sQ0FBV2xDLEtBQVgsRUFBa0JLLE9BQWxCLEVBQTJCO0FBQ3pCLFdBQUtWLEdBQUwsQ0FBUytDLEtBQVQsQ0FBZTtBQUFFckMsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxxQkFBbkM7QUFDQSxZQUFNMkMsV0FBVyxLQUFLN0QsUUFBTCxDQUFja0IsS0FBZCxDQUFqQjtBQUNBLGFBQU8sS0FBS2xCLFFBQUwsQ0FBY2tCLEtBQWQsQ0FBUDtBQUNBLFlBQU1LLFFBQVE2QixJQUFSLENBQWFTLFFBQWIsQ0FBTjtBQUNBLFdBQUtoRCxHQUFMLENBQVMrQyxLQUFULENBQWU7QUFBRXJDLGlCQUFTTDtBQUFYLE9BQWYsRUFBbUMsb0JBQW5DO0FBQ0Q7O0FBMUNNO0FBRE8sQ0FBbEI7ZUErQ2V2QixLIiwiZmlsZSI6ImF0bGFzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2UgdXNlIGZvci1hd2FpdCBwYXR0ZXJuIHF1aXRlIGV4dGVuc2l2ZWx5IGhlcmUgZm9yIGxlZ2l0aW1hdGUgcHVycG9zZXNcbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBwaW5vIGZyb20gJ3Bpbm8nXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGlzUGxhaW5PYmplY3QsXG59IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBoaWRkZW4gZnJvbSAnbG9jYWwtc2NvcGUvY3JlYXRlJ1xuaW1wb3J0IHsgRnJhbWV3b3JrRXJyb3IgfSBmcm9tICdAYXRsYXMuanMvZXJyb3JzJ1xuaW1wb3J0IHtcbiAgZXhwb3NlLFxuICBkaXNwYXRjaCxcbiAgY29tcG9uZW50LFxuICBta2NvbmZpZyxcbiAgbWtsb2csXG4gIG9wdHJlcXVpcmUsXG59IGZyb20gJy4vcHJpdmF0ZSdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgeW91ciBhcHBsaWNhdGlvbiBhbmQgYWdncmVnYXRlcyBhbGwgY29tcG9uZW50cyB0b2dldGhlclxuICpcbiAqIFlvdSBzaG91bGQgZ2VuZXJhbGx5IGNyZWF0ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGluIGEgcHJvZ3JhbS5cbiAqL1xuY2xhc3MgQXRsYXMge1xuICBzdGF0aWMgZGVmYXVsdHMgPSB7XG4gICAgbG9nOiB7XG4gICAgICBuYW1lOiBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuY3dkKCkpLFxuICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgIHNlcmlhbGl6ZXJzOiBwaW5vLnN0ZFNlcmlhbGl6ZXJzLFxuICAgIH0sXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBhIGJyYW5kLW5ldyBhdGxhcyBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiBtb2R1bGUgbG9jYXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuZW52ICAgICAgICAgICAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0byBvcGVyYXRlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLnJvb3QgICAgICAgICAgICAgICAgICBUaGUgcm9vdCBkaXJlY3RvcnkgdG8gd2hpY2ggYWxsIG90aGVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyBtZW50aW9uZWQgaGVyZSBhcmUgcmVsYXRpdmVcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuY29uZmlnPSdjb25maWcnICAgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuaG9va3M9J2hvb2tzJyAgICAgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGhvb2tzXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLnNlcnZpY2VzPSdzZXJ2aWNlcycgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBzZXJ2aWNlc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5hY3Rpb25zPSdhY3Rpb25zJyAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgYWN0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5hbGlhc2VzPSdhbGlhc2VzJyAgICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgYWxpYXNlc1xuICAgKiBAcmV0dXJuICAgIHtBdGxhc31cbiAgICovXG4gIHN0YXRpYyBpbml0KG9wdGlvbnMgPSB7fSkge1xuICAgIGRlZmF1bHRzKG9wdGlvbnMsIHtcbiAgICAgIGNvbmZpZzogJ2NvbmZpZycsXG4gICAgICBob29rczogJ2hvb2tzJyxcbiAgICAgIHNlcnZpY2VzOiAnc2VydmljZXMnLFxuICAgICAgYWN0aW9uczogJ2FjdGlvbnMnLFxuICAgICAgYWxpYXNlczogJ2FsaWFzZXMnLFxuICAgIH0pXG5cbiAgICBjb25zdCBhdGxhcyA9IG5ldyB0aGlzKHtcbiAgICAgIGVudjogb3B0aW9ucy5lbnYsXG4gICAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgICBjb25maWc6IG9wdGlvbnMuY29uZmlnLFxuICAgIH0pXG4gICAgY29uc3QgdHlwZXMgPSBbXG4gICAgICAnaG9va3MnLFxuICAgICAgJ3NlcnZpY2VzJyxcbiAgICAgICdhY3Rpb25zJyxcbiAgICAgICdhbGlhc2VzJyxcbiAgICBdXG4gICAgY29uc3QgcGF0aHMgPSB7fVxuICAgIGNvbnN0IG1vZHVsZXMgPSB7fVxuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBwYXRoc1t0eXBlXSA9IHBhdGgucmVzb2x2ZShvcHRpb25zLnJvb3QsIG9wdGlvbnNbdHlwZV0pXG4gICAgICBtb2R1bGVzW3R5cGVdID0gYXRsYXMucmVxdWlyZShvcHRpb25zW3R5cGVdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgfVxuXG4gICAgZGVmYXVsdHMobW9kdWxlcywge1xuICAgICAgYWxpYXNlczoge1xuICAgICAgICBhY3Rpb25zOiB7fSxcbiAgICAgICAgaG9va3M6IHt9LFxuICAgICAgICBzZXJ2aWNlczoge30sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBhdGxhcy5sb2cuZGVidWcoe1xuICAgICAgZW52OiBhdGxhcy5lbnYsXG4gICAgICByb290OiBhdGxhcy5yb290LFxuICAgICAgcGF0aHMsXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIGFjdGlvbnM6IE9iamVjdC5rZXlzKG1vZHVsZXMuYWN0aW9ucyksXG4gICAgICAgIGhvb2tzOiBPYmplY3Qua2V5cyhtb2R1bGVzLmhvb2tzKSxcbiAgICAgICAgc2VydmljZXM6IE9iamVjdC5rZXlzKG1vZHVsZXMuc2VydmljZXMpLFxuICAgICAgfSxcbiAgICB9LCAnYXRsYXM6aW5pdCcpXG5cbiAgICAvLyBIb29rc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBIb29rXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLmhvb2tzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5ob29rc1thbGlhc11cbiAgICAgIGF0bGFzLmhvb2soYWxpYXMsIEhvb2ssIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIFNlcnZpY2VzXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIFNlcnZpY2VdIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuc2VydmljZXMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgYXRsYXMuc2VydmljZShhbGlhcywgU2VydmljZSwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgLy8gQWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBBY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKG1vZHVsZXMuYWN0aW9ucykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuYWN0aW9uc1thbGlhc11cbiAgICAgIGF0bGFzLmFjdGlvbihhbGlhcywgQWN0aW9uLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gYXRsYXNcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGVudmlyb25tZW50IHVuZGVyIHdoaWNoIHRoaXMgaW5zdGFuY2Ugb3BlcmF0ZXNcbiAgICpcbiAgICogRGVmYXVsdHMgdG8gTk9ERV9FTlYgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtTdHJpbmd9XG4gICAqL1xuICBnZXQgZW52KCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5lbnZcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBmb2xkZXIgd2hlcmUgYWxsIG90aGVyIHBhdGhzIHNob3VsZCBiZSByZWxhdGl2ZSB0b1xuICAgKlxuICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBzZXQgdGhpcyB0byB0aGUgcHJvamVjdCdzIHJvb3QgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXM6OmhpZGRlbigpLnJvb3RcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGluc3RhbmNlIGluIGEgcHJlcGFyZWQgc3RhdGU/XG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAcmV0dXJuICAgIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHByZXBhcmVkKCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5wcmVwYXJlZFxuICB9XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgaW5zdGFuY2UgaW4gYSBzdGFydGVkIHN0YXRlP1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBzdGFydGVkKCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5zdGFydGVkXG4gIH1cblxuICAvKipcbiAgICogQXRsYXMgY29uZmlndXJhdGlvbiwgYXMgcGFzc2VkIGluIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgY29uZmlnID0ge31cblxuICAvKipcbiAgICogQWxsIHNlcnZpY2VzIGFkZGVkIHRvIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIHNlcnZpY2VzID0ge31cblxuICAvKipcbiAgICogQWxsIGFjdGlvbnMgYWRkZWQgdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAdHlwZSAgICB7T2JqZWN0fVxuICAgKi9cbiAgYWN0aW9ucyA9IHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZVxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMgICAgICAgICAgICAgT3B0aW9ucyBmb3IgdGhlIGluc3RhbmNlXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucy5jb25maWcgICAgICBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIGluc3RhbmNlIGFuZCBmb3IgYWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBvciBvdGhlciBjb21wb25lbnRzIHdoaWNoIHdpbGwgYmUgYWRkZWQgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIG9wdGlvbnMucm9vdCAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIG9wdGlvbnMuZW52ICAgICAgICAgVGhlIGVudmlyb25tZW50IHVuZGVyIHdoaWNoIHRoaXMgaW5zdGFuY2Ugb3BlcmF0ZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRzIG1heSB1c2UgdGhpcyB2YWx1ZSBmb3IgdmFyaW91cyBwdXJwb3Nlcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIE5PREVfRU5WLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gSW5pdGlhbGlzZSBwcml2YXRlIHN0dWZmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb2Nlc3MtZW52XG4gICAgdGhpczo6aGlkZGVuKCkuZW52ID0gb3B0aW9ucy5lbnYgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlZcbiAgICB0aGlzOjpoaWRkZW4oKS5yb290ID0gb3B0aW9ucy5yb290XG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSBmYWxzZVxuICAgIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWQgPSBmYWxzZVxuICAgIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cgPSB7XG4gICAgICBzZXJ2aWNlczogbmV3IE1hcCgpLFxuICAgICAgaG9va3M6IG5ldyBNYXAoKSxcbiAgICAgIGFjdGlvbnM6IG5ldyBNYXAoKSxcbiAgICB9XG5cbiAgICAvLyBTYWZldHkgY2hlY2tzXG4gICAgaWYgKCF0aGlzLmVudikge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKCdlbnYgbm90IHNwZWNpZmllZCBhbmQgTk9ERV9FTlYgd2FzIG5vdCBzZXQnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5yb290ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGByb290IG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQsIGdvdCAke29wdGlvbnMucm9vdH1gKVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gdGhpczo6bWtjb25maWcob3B0aW9ucy5jb25maWcsIHtcbiAgICAgIGF0bGFzOiBBdGxhcy5kZWZhdWx0cyxcbiAgICAgIHNlcnZpY2VzOiB7fSxcbiAgICAgIGhvb2tzOiB7fSxcbiAgICAgIGFjdGlvbnM6IHt9LFxuICAgIH0pXG4gICAgLy8gTG9nZ2VyIPCfjLJcbiAgICB0aGlzLmxvZyA9IHRoaXM6Om1rbG9nKHRoaXMuY29uZmlnLmF0bGFzLmxvZylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlIGEgbW9kdWxlIGJ5IHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3RcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBsb2NhdGlvbiAgICAgICAgICBUaGUgbW9kdWxlJ3MgbG9jYXRpb24sIHJlbGF0aXZlIHRvIHJvb3RcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zPXt9ICAgICAgICBPcHRpb25zXG4gICAqIEBwYXJhbSAgICAge0Jvb2xlYW59ICAgb3B0aW9ucy5vcHRpb25hbCAgSWYgdHJ1ZSwgd2lsbCBub3QgdGhyb3cgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBleGlzdFxuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMubm9ybWFsaXNlIElmIHRydWUsIGl0IHdpbGwgcHJlZmVyIHRoZSBFUyBtb2R1bGVzJyBkZWZhdWx0IGV4cG9ydFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXIgbmFtZWQgZXhwb3J0cyBvciB0aGUgQ29tbW9uSlMgZXhwb3J0c1xuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMuYWJzb2x1dGUgIElmIHRydWUsIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2aW5nIHRoZSBtb2R1bGUncyBuYW1lIHRvIHRoZSBwcm9qZWN0IHJvb3QgKGl0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBsb2FkIHRoZSBtb2R1bGUgdXNpbmcgc3RhbmRhcmQgTm9kZSdzIG1lY2hhbmlzbSlcbiAgICogQHJldHVybiAgICB7bWl4ZWR9ICAgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kdWxlJ3MgY29udGVudHNcbiAgICovXG4gIHJlcXVpcmUobG9jYXRpb24sIG9wdGlvbnMgPSB7fSkge1xuICAgIGxvY2F0aW9uID0gb3B0aW9ucy5hYnNvbHV0ZVxuICAgICAgPyBsb2NhdGlvblxuICAgICAgOiBwYXRoLnJlc29sdmUodGhpcy5yb290LCBsb2NhdGlvbilcblxuICAgIGNvbnN0IGxvYWQgPSBvcHRpb25zLm9wdGlvbmFsXG4gICAgICA/IG9wdHJlcXVpcmVcbiAgICAgIDogcmVxdWlyZVxuICAgIGNvbnN0IGNvbnRlbnRzID0gbG9hZChsb2NhdGlvbilcblxuICAgIHJldHVybiBvcHRpb25zLm5vcm1hbGlzZSAmJiBpc1BsYWluT2JqZWN0KGNvbnRlbnRzLmRlZmF1bHQpXG4gICAgICA/IGNvbnRlbnRzLmRlZmF1bHRcbiAgICAgIDogY29udGVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHNlcnZpY2UgaW50byB0aGlzIGF0bGFzIGF0IGdpdmVuIGFsaWFzXG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgICAgIFRoZSBhbGlhcyBmb3IgdGhlIHNlcnZpY2UgLSBpdCB3aWxsIGJlIHVzZWQgZm9yIGV4cG9zaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXJ2aWNlJ3MgQVBJIG9uIHRoZSBhdGxhcy5zZXJ2aWNlcyBvYmplY3QgYW5kIGZvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgc2VydmljZSBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgc2VydmljZShhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpczo6Y29tcG9uZW50KHtcbiAgICAgIHR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgIGFsaWFzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgYWxpYXNlczogb3B0cy5hbGlhc2VzLFxuICAgIH0sIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuc2VydmljZXMpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBob29rIGludG8gdGhpcyBhdGxhcyB1c2luZyBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBob29rIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBwYXNzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBpdFxuICAgKiBAcGFyYW0gICAgIHtjbGFzc30gICAgIENvbXBvbmVudCAgICAgICBUaGUgaG9vayBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBob29rXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgaG9vayhhbGlhcywgQ29tcG9uZW50LCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpczo6Y29tcG9uZW50KHtcbiAgICAgIHR5cGU6ICdob29rJyxcbiAgICAgIGFsaWFzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgYWxpYXNlczogb3B0cy5hbGlhc2VzLFxuICAgIH0sIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuaG9va3MpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYW4gYWN0aW9uIGludG8gdGhpcyBhdGxhcyBhdCBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBhY3Rpb24gLSBpdCB3aWxsIGJlIHVzZWQgZm9yIGV4cG9zaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhY3Rpb24ncyBBUEkgb24gdGhlIGF0bGFzLmFjdGlvbnMgb2JqZWN0IGFuZCBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIGFjdGlvbiBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMgICAgICAgICAgICBSdW50aW1lIG9wdGlvbnMgZm9yIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzLmFsaWFzZXMgICAgQmluZGluZ3MgdG8gb3RoZXIgZGVmaW5lZCBjb21wb25lbnRzXG4gICAqIEByZXR1cm4gICAge3RoaXN9XG4gICAqL1xuICBhY3Rpb24oYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnYWN0aW9uJyxcbiAgICAgIGFsaWFzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgYWxpYXNlczogb3B0cy5hbGlhc2VzLFxuICAgIH0sIHRoaXM6OmhpZGRlbigpLmNhdGFsb2cuYWN0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGFsbCBzZXJ2aWNlcyBhbmQgaG9va3MgZm9yIHVzZVxuICAgKlxuICAgKiBHZW5lcmFsbHkgeW91IHNob3VsZCB1c2UgYGF0bGFzLnN0YXJ0KClgIGluc3RlYWQgdG8gZ2V0IHlvdXIgaW5zdGFuY2UgdXAgYW5kIHJ1bm5pbmcuIEhvd2V2ZXIsXG4gICAqIHNvbWV0aW1lcyBpdCBpcyBuZWNlc3NhcnkgdG8gZ2V0IGFsbCB0aGUgc2VydmljZXMgaW50byBhIFwiZ2V0LXJlYWR5XCIgc3RhdGUgYmVmb3JlIHRoZXkgc3RhcnRcbiAgICogY29ubmVjdGluZyB0byByZW1vdGUgcmVzb3VyY2VzIG9yIGRvaW5nIGFueSBpbnRlbnNpdmUgSS9PIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIGlmICh0aGlzLnByZXBhcmVkKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2VydmljZXMsIGFjdGlvbnMsIGhvb2tzIH0gPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nXG5cbiAgICAvLyBQcmVwYXJlIGFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgYWN0aW9uXSBvZiBhY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnNbYWxpYXNdID0gYWN0aW9uLmNvbXBvbmVudFxuICAgIH1cblxuICAgIC8vIFByZXBhcmUgYWxsIHNlcnZpY2VzLCBpbiBwYXJhbGxlbCDwn5KqXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShzZXJ2aWNlcykubWFwKChbYWxpYXMsIHNlcnZpY2VdKSA9PlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB0aGlzOjpsaWZlY3ljbGUuc2VydmljZS5wcmVwYXJlKGFsaWFzLCBzZXJ2aWNlLmNvbXBvbmVudCkpKVxuXG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMsIGhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhbGwgc2VydmljZXNcbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgY29uc3QgaG9va3MgPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmhvb2tzXG5cbiAgICBhd2FpdCB0aGlzLnByZXBhcmUoKVxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdiZWZvcmVTdGFydCcsIHRoaXMsIGhvb2tzKVxuXG4gICAgY29uc3QgeyBzZXJ2aWNlcyB9ID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZ1xuXG4gICAgLy8gU3RhcnQgYWxsIHNlcnZpY2VzLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIHRvIHRoZSBpbnN0YW5jZSDwn5KqXG4gICAgLy8gT3JkZXJpbmcgaXMgaW1wb3J0YW50IGhlcmUhIFNvbWUgc2VydmljZXMgc2hvdWxkIGJlIHN0YXJ0ZWQgYXMgdGhlIGxhc3Qgb25lcyBiZWNhdXNlIHRoZXlcbiAgICAvLyBleHBvc2Ugc29tZSBmdW5jdGlvbmFsaXR5IHRvIHRoZSBvdXRzaWRlIHdvcmxkIGFuZCBzdGFydGluZyB0aG9zZSBiZWZvcmUgaWUuIGEgZGF0YWJhc2VcbiAgICAvLyBzZXJ2aWNlIGlzIHN0YXJ0ZWQgbWlnaHQgYnJlYWsgc3R1ZmYhXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIHNlcnZpY2VdIG9mIHNlcnZpY2VzKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIGF3YWl0IHRoaXM6OmxpZmVjeWNsZS5zZXJ2aWNlLnN0YXJ0KGFsaWFzLCBzZXJ2aWNlLmNvbXBvbmVudClcbiAgICB9XG5cbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gdHJ1ZVxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdhZnRlclN0YXJ0JywgdGhpcywgaG9va3MpXG4gICAgdGhpcy5sb2cuaW5mbygnYXRsYXM6cmVhZHknKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGFsbCBzZXJ2aWNlcywgdW5yZWdpc3RlciBhbGwgYWN0aW9ucyBhbmQgaG9va3MgYW5kIHVucHVibGlzaCBhbnkgQVBJcyBleHBvc2VkIGJ5IHRoZW1cbiAgICpcbiAgICogVGhpcyBwdXRzIHRoZSB3aG9sZSBhcHBsaWNhdGlvbiBpbnRvIGEgc3RhdGUgYXMgaXQgd2FzIGJlZm9yZSBgYXRsYXMucHJlcGFyZSgpYCBhbmQvb3JcbiAgICogYGF0bGFzLnN0YXJ0KClgIHdhcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm4gICAge1Byb21pc2U8dGhpcz59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2VydmljZXMsIGFjdGlvbnMsIGhvb2tzIH0gPSB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nXG5cbiAgICBhd2FpdCB0aGlzOjpkaXNwYXRjaCgnYmVmb3JlU3RvcCcsIHRoaXMsIGhvb2tzKVxuXG4gICAgLy8gU3RvcCBhbGwgc2VydmljZXMsIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgaW5zdGFuY2Ug8J+SqlxuICAgIC8vIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIG1vc3QgaW1wb3J0YW50IHNlcnZpY2VzIGFyZSBzdG9wcGVkIGZpcnN0LlxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBzZXJ2aWNlXSBvZiBBcnJheS5mcm9tKHNlcnZpY2VzKS5yZXZlcnNlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgYXdhaXQgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2Uuc3RvcChhbGlhcywgc2VydmljZS5jb21wb25lbnQpXG4gICAgfVxuXG4gICAgLy8gVW5yZWdpc3RlciBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXNdIG9mIGFjdGlvbnMpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGlvbnNbYWxpYXNdXG4gICAgfVxuXG4gICAgdGhpczo6aGlkZGVuKCkuc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSBmYWxzZVxuXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyU3RvcCcsIG51bGwsIGhvb2tzKVxuICAgIHRoaXMubG9nLmluZm8oJ2F0bGFzOnN0b3BwZWQnKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5jb25zdCBsaWZlY3ljbGUgPSB7XG4gIHNlcnZpY2U6IHtcbiAgICAvKipcbiAgICAgKiBQcmVwYXJlIGEgc2VydmljZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgIFRoZSBTZXJ2aWNlJ3MgYWxpYXNcbiAgICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIHNlcnZpY2UgICAgIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBwcmVwYXJlKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnByZXBhcmU6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgc2VydmljZS5wcmVwYXJlKClcbiAgICAgIHRoaXM6OmV4cG9zZSgnc2VydmljZXMnLCBhbGlhcywgaW5zdGFuY2UpXG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnByZXBhcmU6YWZ0ZXInKVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3RhcnQgYSBzZXJ2aWNlXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgYWxpYXMgICAgICAgVGhlIFNlcnZpY2UncyBhbGlhc1xuICAgICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgc2VydmljZSAgICAgVGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0YXJ0OmJlZm9yZScpXG4gICAgICBhd2FpdCBzZXJ2aWNlLnN0YXJ0KHRoaXMuc2VydmljZXNbYWxpYXNdKVxuICAgICAgdGhpcy5sb2cudHJhY2UoeyBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpzdGFydDphZnRlcicpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTdG9wIGEgc2VydmljZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgIFRoZSBTZXJ2aWNlJ3MgYWxpYXNcbiAgICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIHNlcnZpY2UgICAgIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBzdG9wKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgYXdhaXQgc2VydmljZS5zdG9wKGluc3RhbmNlKVxuICAgICAgdGhpcy5sb2cudHJhY2UoeyBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpzdG9wOmFmdGVyJylcbiAgICB9LFxuICB9LFxufVxuXG5leHBvcnQgZGVmYXVsdCBBdGxhc1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0bGFzLm1qcyJdLCJuYW1lcyI6WyJBdGxhcyIsImluaXQiLCJvcHRpb25zIiwiY29uZmlnIiwiaG9va3MiLCJzZXJ2aWNlcyIsImFjdGlvbnMiLCJhbGlhc2VzIiwiYXRsYXMiLCJlbnYiLCJyb290IiwidHlwZXMiLCJwYXRocyIsIm1vZHVsZXMiLCJ0eXBlIiwicmVzb2x2ZSIsInJlcXVpcmUiLCJvcHRpb25hbCIsImxvZyIsImRlYnVnIiwiY29tcG9uZW50cyIsIk9iamVjdCIsImtleXMiLCJhbGlhcyIsIkhvb2siLCJlbnRyaWVzIiwiaG9vayIsIlNlcnZpY2UiLCJzZXJ2aWNlIiwiQWN0aW9uIiwiYWN0aW9uIiwicHJlcGFyZWQiLCJzdGFydGVkIiwiY29uc3RydWN0b3IiLCJwcm9jZXNzIiwiTk9ERV9FTlYiLCJjYXRhbG9nIiwiTWFwIiwiZGVmYXVsdHMiLCJsb2NhdGlvbiIsImFic29sdXRlIiwibG9hZCIsImNvbnRlbnRzIiwibm9ybWFsaXNlIiwiZGVmYXVsdCIsIkNvbXBvbmVudCIsIm9wdHMiLCJwcmVwYXJlIiwiY29tcG9uZW50IiwiUHJvbWlzZSIsImFsbCIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImxpZmVjeWNsZSIsInN0YXJ0Iiwid2FybiIsImVyciIsImVycm9yIiwic3RvcCIsImNhdGNoIiwic3RvcEVyciIsImZhdGFsIiwiaW5mbyIsInJldmVyc2UiLCJuYW1lIiwiYmFzZW5hbWUiLCJjd2QiLCJsZXZlbCIsInNlcmlhbGl6ZXJzIiwic3RkU2VyaWFsaXplcnMiLCJ0cmFjZSIsImluc3RhbmNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7Ozs7QUFjQSxNQUFNQSxLQUFOLENBQVk7QUF1QlYsU0FBT0MsSUFBUCxDQUFZQyxVQUFVLEVBQXRCLEVBQTBCO0FBQ3hCLDhCQUFTQSxPQUFULEVBQWtCO0FBQ2hCQyxjQUFRLFFBRFE7QUFFaEJDLGFBQU8sT0FGUztBQUdoQkMsZ0JBQVUsVUFITTtBQUloQkMsZUFBUyxTQUpPO0FBS2hCQyxlQUFTO0FBTE8sS0FBbEI7QUFRQSxVQUFNQyxRQUFRLElBQUksSUFBSixDQUFTO0FBQ3JCQyxXQUFLUCxRQUFRTyxHQURRO0FBRXJCQyxZQUFNUixRQUFRUSxJQUZPO0FBR3JCUCxjQUFRRCxRQUFRQztBQUhLLEtBQVQsQ0FBZDtBQUtBLFVBQU1RLFFBQVEsQ0FDWixPQURZLEVBRVosVUFGWSxFQUdaLFNBSFksRUFJWixTQUpZLENBQWQ7QUFNQSxVQUFNQyxRQUFRLEVBQWQ7QUFDQSxVQUFNQyxVQUFVLEVBQWhCOztBQUVBLFNBQUssTUFBTUMsSUFBWCxJQUFtQkgsS0FBbkIsRUFBMEI7QUFDeEJDLFlBQU1FLElBQU4sSUFBYyxjQUFLQyxPQUFMLENBQWFiLFFBQVFRLElBQXJCLEVBQTJCUixRQUFRWSxJQUFSLENBQTNCLENBQWQ7QUFDQUQsY0FBUUMsSUFBUixJQUFnQk4sTUFBTVEsT0FBTixDQUFjZCxRQUFRWSxJQUFSLENBQWQsRUFBNkI7QUFBRUcsa0JBQVU7QUFBWixPQUE3QixDQUFoQjtBQUNEOztBQUVELDhCQUFTSixPQUFULEVBQWtCO0FBQ2hCTixlQUFTO0FBQ1BELGlCQUFTLEVBREY7QUFFUEYsZUFBTyxFQUZBO0FBR1BDLGtCQUFVO0FBSEg7QUFETyxLQUFsQjtBQVFBRyxVQUFNVSxHQUFOLENBQVVDLEtBQVYsQ0FBZ0I7QUFDZFYsV0FBS0QsTUFBTUMsR0FERztBQUVkQyxZQUFNRixNQUFNRSxJQUZFO0FBR2RFLFdBSGM7QUFJZFEsa0JBQVk7QUFDVmQsaUJBQVNlLE9BQU9DLElBQVAsQ0FBWVQsUUFBUVAsT0FBcEIsQ0FEQztBQUVWRixlQUFPaUIsT0FBT0MsSUFBUCxDQUFZVCxRQUFRVCxLQUFwQixDQUZHO0FBR1ZDLGtCQUFVZ0IsT0FBT0MsSUFBUCxDQUFZVCxRQUFRUixRQUFwQjtBQUhBO0FBSkUsS0FBaEIsRUFTRyxZQVRIOztBQVlBLFNBQUssTUFBTSxDQUFDa0IsS0FBRCxFQUFRQyxJQUFSLENBQVgsSUFBNEJILE9BQU9JLE9BQVAsQ0FBZVosUUFBUVQsS0FBdkIsQ0FBNUIsRUFBMkQ7QUFDekQsWUFBTUcsVUFBVU0sUUFBUU4sT0FBUixDQUFnQkgsS0FBaEIsQ0FBc0JtQixLQUF0QixDQUFoQjtBQUNBZixZQUFNa0IsSUFBTixDQUFXSCxLQUFYLEVBQWtCQyxJQUFsQixFQUF3QjtBQUFFakI7QUFBRixPQUF4QjtBQUNEOztBQUdELFNBQUssTUFBTSxDQUFDZ0IsS0FBRCxFQUFRSSxPQUFSLENBQVgsSUFBK0JOLE9BQU9JLE9BQVAsQ0FBZVosUUFBUVIsUUFBdkIsQ0FBL0IsRUFBaUU7QUFDL0QsWUFBTUUsVUFBVU0sUUFBUU4sT0FBUixDQUFnQkYsUUFBaEIsQ0FBeUJrQixLQUF6QixDQUFoQjtBQUNBZixZQUFNb0IsT0FBTixDQUFjTCxLQUFkLEVBQXFCSSxPQUFyQixFQUE4QjtBQUFFcEI7QUFBRixPQUE5QjtBQUNEOztBQUdELFNBQUssTUFBTSxDQUFDZ0IsS0FBRCxFQUFRTSxNQUFSLENBQVgsSUFBOEJSLE9BQU9JLE9BQVAsQ0FBZVosUUFBUVAsT0FBdkIsQ0FBOUIsRUFBK0Q7QUFDN0QsWUFBTUMsVUFBVU0sUUFBUU4sT0FBUixDQUFnQkQsT0FBaEIsQ0FBd0JpQixLQUF4QixDQUFoQjtBQUNBZixZQUFNc0IsTUFBTixDQUFhUCxLQUFiLEVBQW9CTSxNQUFwQixFQUE0QjtBQUFFdEI7QUFBRixPQUE1QjtBQUNEOztBQUVELFdBQU9DLEtBQVA7QUFDRDs7QUFXRCxNQUFJQyxHQUFKLEdBQVU7QUFDUixXQUFPLDJCQUFlQSxHQUF0QjtBQUNEOztBQVVELE1BQUlDLElBQUosR0FBVztBQUNULFdBQU8sMkJBQWVBLElBQXRCO0FBQ0Q7O0FBUUQsTUFBSXFCLFFBQUosR0FBZTtBQUNiLFdBQU8sMkJBQWVBLFFBQXRCO0FBQ0Q7O0FBUUQsTUFBSUMsT0FBSixHQUFjO0FBQ1osV0FBTywyQkFBZUEsT0FBdEI7QUFDRDs7QUFtQ0RDLGNBQVkvQixVQUFVLEVBQXRCLEVBQTBCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQTVCakI7QUE0QmlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQXJCZjtBQXFCZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFkaEI7QUFjZ0I7QUFHeEIsK0JBQWVPLEdBQWYsR0FBcUJQLFFBQVFPLEdBQVIsSUFBZXlCLFFBQVF6QixHQUFSLENBQVkwQixRQUFoRDtBQUNBLCtCQUFlekIsSUFBZixHQUFzQlIsUUFBUVEsSUFBOUI7QUFDQSwrQkFBZXFCLFFBQWYsR0FBMEIsS0FBMUI7QUFDQSwrQkFBZUMsT0FBZixHQUF5QixLQUF6QjtBQUNBLCtCQUFlSSxPQUFmLEdBQXlCO0FBQ3ZCL0IsZ0JBQVUsSUFBSWdDLEdBQUosRUFEYTtBQUV2QmpDLGFBQU8sSUFBSWlDLEdBQUosRUFGZ0I7QUFHdkIvQixlQUFTLElBQUkrQixHQUFKO0FBSGMsS0FBekI7O0FBT0EsUUFBSSxDQUFDLEtBQUs1QixHQUFWLEVBQWU7QUFDYixZQUFNLDJCQUFtQiw0Q0FBbkIsQ0FBTjtBQUNEOztBQUVELFFBQUksT0FBTyxLQUFLQyxJQUFaLEtBQXFCLFFBQXpCLEVBQW1DO0FBQ2pDLFlBQU0sMkJBQW9CLDBDQUF5Q1IsUUFBUVEsSUFBSyxFQUExRSxDQUFOO0FBQ0Q7O0FBRUQsU0FBS1AsTUFBTCxHQUFjLDZCQUFlRCxRQUFRQyxNQUF2QixFQUErQjtBQUMzQ0ssYUFBT1IsTUFBTXNDLFFBRDhCO0FBRTNDakMsZ0JBQVUsRUFGaUM7QUFHM0NELGFBQU8sRUFIb0M7QUFJM0NFLGVBQVM7QUFKa0MsS0FBL0IsQ0FBZDtBQU9BLFNBQUtZLEdBQUwsR0FBVywwQkFBWSxLQUFLZixNQUFMLENBQVlLLEtBQVosQ0FBa0JVLEdBQTlCLENBQVg7QUFDRDs7QUFlREYsVUFBUXVCLFFBQVIsRUFBa0JyQyxVQUFVLEVBQTVCLEVBQWdDO0FBQzlCcUMsZUFBV3JDLFFBQVFzQyxRQUFSLEdBQ1BELFFBRE8sR0FFUCxjQUFLeEIsT0FBTCxDQUFhLEtBQUtMLElBQWxCLEVBQXdCNkIsUUFBeEIsQ0FGSjtBQUlBLFVBQU1FLE9BQU92QyxRQUFRZSxRQUFSLHlCQUVURCxPQUZKO0FBR0EsVUFBTTBCLFdBQVdELEtBQUtGLFFBQUwsQ0FBakI7QUFFQSxXQUFPckMsUUFBUXlDLFNBQVIsSUFBcUIsMkJBQWNELFNBQVNFLE9BQXZCLENBQXJCLEdBQ0hGLFNBQVNFLE9BRE4sR0FFSEYsUUFGSjtBQUdEOztBQWFEZCxVQUFRTCxLQUFSLEVBQWVzQixTQUFmLEVBQTBCQyxPQUFPLEVBQWpDLEVBQXFDO0FBQ25DLFdBQU8sOEJBQWdCO0FBQ3JCaEMsWUFBTSxTQURlO0FBRXJCUyxXQUZxQjtBQUdyQnNCLGVBSHFCO0FBSXJCdEMsZUFBU3VDLEtBQUt2QztBQUpPLEtBQWhCLEVBS0osMkJBQWU2QixPQUFmLENBQXVCL0IsUUFMbkIsQ0FBUDtBQU1EOztBQVlEcUIsT0FBS0gsS0FBTCxFQUFZc0IsU0FBWixFQUF1QkMsT0FBTyxFQUE5QixFQUFrQztBQUNoQyxXQUFPLDhCQUFnQjtBQUNyQmhDLFlBQU0sTUFEZTtBQUVyQlMsV0FGcUI7QUFHckJzQixlQUhxQjtBQUlyQnRDLGVBQVN1QyxLQUFLdkM7QUFKTyxLQUFoQixFQUtKLDJCQUFlNkIsT0FBZixDQUF1QmhDLEtBTG5CLENBQVA7QUFNRDs7QUFhRDBCLFNBQU9QLEtBQVAsRUFBY3NCLFNBQWQsRUFBeUJDLE9BQU8sRUFBaEMsRUFBb0M7QUFDbEMsV0FBTyw4QkFBZ0I7QUFDckJoQyxZQUFNLFFBRGU7QUFFckJTLFdBRnFCO0FBR3JCc0IsZUFIcUI7QUFJckJ0QyxlQUFTdUMsS0FBS3ZDO0FBSk8sS0FBaEIsRUFLSiwyQkFBZTZCLE9BQWYsQ0FBdUI5QixPQUxuQixDQUFQO0FBTUQ7O0FBV0QsUUFBTXlDLE9BQU4sR0FBZ0I7QUFDZCxRQUFJLEtBQUtoQixRQUFULEVBQW1CO0FBQ2pCLGFBQU8sSUFBUDtBQUNEOztBQUVELFVBQU07QUFBRTFCLGNBQUY7QUFBWUMsYUFBWjtBQUFxQkY7QUFBckIsUUFBK0IsMkJBQWVnQyxPQUFwRDs7QUFHQSxTQUFLLE1BQU0sQ0FBQ2IsS0FBRCxFQUFRTyxNQUFSLENBQVgsSUFBOEJ4QixPQUE5QixFQUF1QztBQUNyQyxXQUFLQSxPQUFMLENBQWFpQixLQUFiLElBQXNCTyxPQUFPa0IsU0FBN0I7QUFDRDs7QUFHRCxVQUFNQyxRQUFRQyxHQUFSLENBQVlDLE1BQU1DLElBQU4sQ0FBVy9DLFFBQVgsRUFBcUJnRCxHQUFyQixDQUF5QixDQUFDLENBQUM5QixLQUFELEVBQVFLLE9BQVIsQ0FBRCxLQUVuQzBCLFVBQVUxQixPQUFWLENBQWtCbUIsT0FBeEIsWUFBZ0N4QixLQUFoQyxFQUF1Q0ssT0FBdkMsQ0FGZ0IsQ0FBWixDQUFOO0FBSUEsK0JBQWVHLFFBQWYsR0FBMEIsSUFBMUI7QUFDQSxVQUFNLDZCQUFlLGNBQWYsRUFBK0IsSUFBL0IsRUFBcUMzQixLQUFyQyxDQUFOO0FBRUEsV0FBTyxJQUFQO0FBQ0Q7O0FBT0QsUUFBTW1ELEtBQU4sR0FBYztBQUNaLFVBQU1uRCxRQUFRLDJCQUFlZ0MsT0FBZixDQUF1QmhDLEtBQXJDOztBQUVBLFVBQU0sS0FBSzJDLE9BQUwsRUFBTjtBQUNBLFVBQU0sNkJBQWUsYUFBZixFQUE4QixJQUE5QixFQUFvQzNDLEtBQXBDLENBQU47O0FBRUEsVUFBTTtBQUFFQztBQUFGLFFBQWUsMkJBQWUrQixPQUFwQzs7QUFNQSxTQUFLLE1BQU0sQ0FBQ2IsS0FBRCxFQUFRSyxPQUFSLENBQVgsSUFBK0J2QixRQUEvQixFQUF5QztBQUN2QyxVQUFJdUIsUUFBUUksT0FBWixFQUFxQjtBQUNuQixhQUFLZCxHQUFMLENBQVNzQyxJQUFULENBQWM7QUFBRTVCLG1CQUFTTDtBQUFYLFNBQWQsRUFBa0MsK0JBQWxDO0FBQ0E7QUFDRDs7QUFFRCxVQUFJO0FBRUYsY0FBWStCLFVBQVUxQixPQUFWLENBQWtCMkIsS0FBeEIsWUFBOEJoQyxLQUE5QixFQUFxQ0ssT0FBckMsQ0FBTjtBQUNELE9BSEQsQ0FHRSxPQUFPNkIsR0FBUCxFQUFZO0FBQ1osYUFBS3ZDLEdBQUwsQ0FBU3dDLEtBQVQsQ0FBZTtBQUFFRCxhQUFGO0FBQU83QixtQkFBU0w7QUFBaEIsU0FBZixFQUF3Qyx1QkFBeEM7QUFFQSxjQUFNLEtBQUtvQyxJQUFMLEdBRUhDLEtBRkcsQ0FFR0MsV0FBVyxLQUFLLEtBQUszQyxHQUFMLENBQVM0QyxLQUFULENBQWU7QUFBRUwsZUFBS0k7QUFBUCxTQUFmLEVBQWlDLDhCQUFqQyxDQUZuQixDQUFOO0FBS0EsY0FBTUosR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsK0JBQWV6QixPQUFmLEdBQXlCLElBQXpCO0FBQ0EsVUFBTSw2QkFBZSxZQUFmLEVBQTZCLElBQTdCLEVBQW1DNUIsS0FBbkMsQ0FBTjtBQUNBLFNBQUtjLEdBQUwsQ0FBUzZDLElBQVQsQ0FBYyxhQUFkO0FBRUEsV0FBTyxJQUFQO0FBQ0Q7O0FBVUQsUUFBTUosSUFBTixHQUFhO0FBQ1gsVUFBTTtBQUFFdEQsY0FBRjtBQUFZQyxhQUFaO0FBQXFCRjtBQUFyQixRQUErQiwyQkFBZWdDLE9BQXBEOztBQUVBLFVBQU0sNkJBQWUsWUFBZixFQUE2QixJQUE3QixFQUFtQ2hDLEtBQW5DLENBQU47QUFFQSxRQUFJc0QsS0FBSjs7QUFJQSxTQUFLLE1BQU0sQ0FBQ25DLEtBQUQsRUFBUUssT0FBUixDQUFYLElBQStCdUIsTUFBTUMsSUFBTixDQUFXL0MsUUFBWCxFQUFxQjJELE9BQXJCLEVBQS9CLEVBQStEO0FBQzdELFVBQUksQ0FBQ3BDLFFBQVFJLE9BQWIsRUFBc0I7QUFDcEIsYUFBS2QsR0FBTCxDQUFTc0MsSUFBVCxDQUFjO0FBQUU1QixtQkFBU0w7QUFBWCxTQUFkLEVBQWtDLDhCQUFsQztBQUNBO0FBQ0Q7O0FBRUQsVUFBSTtBQUVGLGNBQVkrQixVQUFVMUIsT0FBVixDQUFrQitCLElBQXhCLFlBQTZCcEMsS0FBN0IsRUFBb0NLLE9BQXBDLENBQU47QUFDRCxPQUhELENBR0UsT0FBTzZCLEdBQVAsRUFBWTtBQUNaLGFBQUt2QyxHQUFMLENBQVN3QyxLQUFULENBQWU7QUFBRUQsYUFBRjtBQUFPN0IsbUJBQVNMO0FBQWhCLFNBQWYsRUFBd0Msc0JBQXhDO0FBQ0FtQyxnQkFBUUQsR0FBUjtBQUdEO0FBQ0Y7O0FBR0QsU0FBSyxNQUFNLENBQUNsQyxLQUFELENBQVgsSUFBc0JqQixPQUF0QixFQUErQjtBQUM3QixhQUFPLEtBQUtBLE9BQUwsQ0FBYWlCLEtBQWIsQ0FBUDtBQUNEOztBQUVELCtCQUFlUyxPQUFmLEdBQXlCLEtBQXpCO0FBQ0EsK0JBQWVELFFBQWYsR0FBMEIsS0FBMUI7QUFFQSxVQUFNLDZCQUFlLFdBQWYsRUFBNEIsSUFBNUIsRUFBa0MzQixLQUFsQyxDQUFOO0FBQ0EsU0FBS2MsR0FBTCxDQUFTNkMsSUFBVCxDQUFjLGVBQWQ7O0FBR0EsUUFBSUwsS0FBSixFQUFXO0FBQ1QsWUFBTUEsS0FBTjtBQUNEOztBQUVELFdBQU8sSUFBUDtBQUNEOztBQWhhUzs7c0JBQU4xRCxLOzs7O1NBQ2M7QUFDaEJrQixTQUFLO0FBQ0grQyxZQUFNLGNBQUtDLFFBQUwsQ0FBY2hDLFFBQVFpQyxHQUFSLEVBQWQsQ0FESDtBQUVIQyxhQUFPLE1BRko7QUFHSEMsbUJBQWEsY0FBS0M7QUFIZjtBQURXOztBQWthcEIsTUFBTWhCLFlBQVk7QUFDaEIxQixXQUFTO0FBU1AsVUFBTW1CLE9BQU4sQ0FBY3hCLEtBQWQsRUFBcUJLLE9BQXJCLEVBQThCO0FBQzVCLFdBQUtWLEdBQUwsQ0FBU3FELEtBQVQsQ0FBZTtBQUFFM0MsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyx3QkFBbkM7QUFDQSxZQUFNaUQsV0FBVyxNQUFNNUMsUUFBUW9CLFNBQVIsQ0FBa0JELE9BQWxCLEVBQXZCOztBQUNBLGlDQUFhLFVBQWIsRUFBeUJ4QixLQUF6QixFQUFnQ2lELFFBQWhDOztBQUNBLFdBQUt0RCxHQUFMLENBQVNxRCxLQUFULENBQWU7QUFBRTNDLGlCQUFTTDtBQUFYLE9BQWYsRUFBbUMsdUJBQW5DO0FBQ0QsS0FkTTs7QUF1QlAsVUFBTWdDLEtBQU4sQ0FBWWhDLEtBQVosRUFBbUJLLE9BQW5CLEVBQTRCO0FBQzFCLFdBQUtWLEdBQUwsQ0FBU3FELEtBQVQsQ0FBZTtBQUFFM0MsaUJBQVNMO0FBQVgsT0FBZixFQUFtQyxzQkFBbkM7QUFDQSxZQUFNSyxRQUFRb0IsU0FBUixDQUFrQk8sS0FBbEIsQ0FBd0IsS0FBS2xELFFBQUwsQ0FBY2tCLEtBQWQsQ0FBeEIsQ0FBTjtBQUNBSyxjQUFRSSxPQUFSLEdBQWtCLElBQWxCO0FBQ0EsV0FBS2QsR0FBTCxDQUFTcUQsS0FBVCxDQUFlO0FBQUUzQyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLHFCQUFuQztBQUNELEtBNUJNOztBQXFDUCxVQUFNb0MsSUFBTixDQUFXcEMsS0FBWCxFQUFrQkssT0FBbEIsRUFBMkI7QUFDekIsV0FBS1YsR0FBTCxDQUFTcUQsS0FBVCxDQUFlO0FBQUUzQyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLHFCQUFuQztBQUNBLFlBQU1pRCxXQUFXLEtBQUtuRSxRQUFMLENBQWNrQixLQUFkLENBQWpCO0FBQ0EsYUFBTyxLQUFLbEIsUUFBTCxDQUFja0IsS0FBZCxDQUFQO0FBQ0EsWUFBTUssUUFBUW9CLFNBQVIsQ0FBa0JXLElBQWxCLENBQXVCYSxRQUF2QixDQUFOO0FBQ0E1QyxjQUFRSSxPQUFSLEdBQWtCLEtBQWxCO0FBQ0EsV0FBS2QsR0FBTCxDQUFTcUQsS0FBVCxDQUFlO0FBQUUzQyxpQkFBU0w7QUFBWCxPQUFmLEVBQW1DLG9CQUFuQztBQUNEOztBQTVDTTtBQURPLENBQWxCO2VBaURldkIsSyIsImZpbGUiOiJhdGxhcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIHVzZSBmb3ItYXdhaXQgcGF0dGVybiBxdWl0ZSBleHRlbnNpdmVseSBoZXJlIGZvciBsZWdpdGltYXRlIHB1cnBvc2VzXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgcGlubyBmcm9tICdwaW5vJ1xuaW1wb3J0IHtcbiAgZGVmYXVsdHNEZWVwIGFzIGRlZmF1bHRzLFxuICBpc1BsYWluT2JqZWN0LFxufSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgaGlkZGVuIGZyb20gJ2xvY2FsLXNjb3BlL2NyZWF0ZSdcbmltcG9ydCB7IEZyYW1ld29ya0Vycm9yIH0gZnJvbSAnQGF0bGFzLmpzL2Vycm9ycydcbmltcG9ydCB7XG4gIGV4cG9zZSxcbiAgZGlzcGF0Y2gsXG4gIGNvbXBvbmVudCxcbiAgbWtjb25maWcsXG4gIG1rbG9nLFxuICBvcHRyZXF1aXJlLFxufSBmcm9tICcuL3ByaXZhdGUnXG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHlvdXIgYXBwbGljYXRpb24gYW5kIGFnZ3JlZ2F0ZXMgYWxsIGNvbXBvbmVudHMgdG9nZXRoZXJcbiAqXG4gKiBZb3Ugc2hvdWxkIGdlbmVyYWxseSBjcmVhdGUgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpbiBhIHByb2dyYW0uXG4gKi9cbmNsYXNzIEF0bGFzIHtcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xuICAgIGxvZzoge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSxcbiAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICBzZXJpYWxpemVyczogcGluby5zdGRTZXJpYWxpemVycyxcbiAgICB9LFxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgYSBicmFuZC1uZXcgYXRsYXMgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gbW9kdWxlIGxvY2F0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgb3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmVudiAgICAgICAgICAgICAgICAgICBUaGUgZW52aXJvbm1lbnQgdW5kZXIgd2hpY2ggdG8gb3BlcmF0ZVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5yb290ICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5IHRvIHdoaWNoIGFsbCBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGhlcmUgYXJlIHJlbGF0aXZlXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmNvbmZpZz0nY29uZmlnJyAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgICBvcHRpb25zLmhvb2tzPSdob29rcycgICAgICAgICBNb2R1bGUgbG9jYXRpb24gZm9yIHRoZSBob29rc1xuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgb3B0aW9ucy5zZXJ2aWNlcz0nc2VydmljZXMnICAgTW9kdWxlIGxvY2F0aW9uIGZvciB0aGUgc2VydmljZXNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWN0aW9ucz0nYWN0aW9ucycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFjdGlvbnNcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgIG9wdGlvbnMuYWxpYXNlcz0nYWxpYXNlcycgICAgIE1vZHVsZSBsb2NhdGlvbiBmb3IgdGhlIGFsaWFzZXNcbiAgICogQHJldHVybiAgICB7QXRsYXN9XG4gICAqL1xuICBzdGF0aWMgaW5pdChvcHRpb25zID0ge30pIHtcbiAgICBkZWZhdWx0cyhvcHRpb25zLCB7XG4gICAgICBjb25maWc6ICdjb25maWcnLFxuICAgICAgaG9va3M6ICdob29rcycsXG4gICAgICBzZXJ2aWNlczogJ3NlcnZpY2VzJyxcbiAgICAgIGFjdGlvbnM6ICdhY3Rpb25zJyxcbiAgICAgIGFsaWFzZXM6ICdhbGlhc2VzJyxcbiAgICB9KVxuXG4gICAgY29uc3QgYXRsYXMgPSBuZXcgdGhpcyh7XG4gICAgICBlbnY6IG9wdGlvbnMuZW52LFxuICAgICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgICAgY29uZmlnOiBvcHRpb25zLmNvbmZpZyxcbiAgICB9KVxuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgJ2hvb2tzJyxcbiAgICAgICdzZXJ2aWNlcycsXG4gICAgICAnYWN0aW9ucycsXG4gICAgICAnYWxpYXNlcycsXG4gICAgXVxuICAgIGNvbnN0IHBhdGhzID0ge31cbiAgICBjb25zdCBtb2R1bGVzID0ge31cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcGF0aHNbdHlwZV0gPSBwYXRoLnJlc29sdmUob3B0aW9ucy5yb290LCBvcHRpb25zW3R5cGVdKVxuICAgICAgbW9kdWxlc1t0eXBlXSA9IGF0bGFzLnJlcXVpcmUob3B0aW9uc1t0eXBlXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGRlZmF1bHRzKG1vZHVsZXMsIHtcbiAgICAgIGFsaWFzZXM6IHtcbiAgICAgICAgYWN0aW9uczoge30sXG4gICAgICAgIGhvb2tzOiB7fSxcbiAgICAgICAgc2VydmljZXM6IHt9LFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgYXRsYXMubG9nLmRlYnVnKHtcbiAgICAgIGVudjogYXRsYXMuZW52LFxuICAgICAgcm9vdDogYXRsYXMucm9vdCxcbiAgICAgIHBhdGhzLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBhY3Rpb25zOiBPYmplY3Qua2V5cyhtb2R1bGVzLmFjdGlvbnMpLFxuICAgICAgICBob29rczogT2JqZWN0LmtleXMobW9kdWxlcy5ob29rcyksXG4gICAgICAgIHNlcnZpY2VzOiBPYmplY3Qua2V5cyhtb2R1bGVzLnNlcnZpY2VzKSxcbiAgICAgIH0sXG4gICAgfSwgJ2F0bGFzOmluaXQnKVxuXG4gICAgLy8gSG9va3NcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgSG9va10gb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcy5ob29rcykpIHtcbiAgICAgIGNvbnN0IGFsaWFzZXMgPSBtb2R1bGVzLmFsaWFzZXMuaG9va3NbYWxpYXNdXG4gICAgICBhdGxhcy5ob29rKGFsaWFzLCBIb29rLCB7IGFsaWFzZXMgfSlcbiAgICB9XG5cbiAgICAvLyBTZXJ2aWNlc1xuICAgIGZvciAoY29uc3QgW2FsaWFzLCBTZXJ2aWNlXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLnNlcnZpY2VzKSkge1xuICAgICAgY29uc3QgYWxpYXNlcyA9IG1vZHVsZXMuYWxpYXNlcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGF0bGFzLnNlcnZpY2UoYWxpYXMsIFNlcnZpY2UsIHsgYWxpYXNlcyB9KVxuICAgIH1cblxuICAgIC8vIEFjdGlvbnNcbiAgICBmb3IgKGNvbnN0IFthbGlhcywgQWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhtb2R1bGVzLmFjdGlvbnMpKSB7XG4gICAgICBjb25zdCBhbGlhc2VzID0gbW9kdWxlcy5hbGlhc2VzLmFjdGlvbnNbYWxpYXNdXG4gICAgICBhdGxhcy5hY3Rpb24oYWxpYXMsIEFjdGlvbiwgeyBhbGlhc2VzIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGF0bGFzXG4gIH1cblxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIE5PREVfRU5WIGZyb20gdGhlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0IGVudigpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuZW52XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJvb3QgZm9sZGVyIHdoZXJlIGFsbCBvdGhlciBwYXRocyBzaG91bGQgYmUgcmVsYXRpdmUgdG9cbiAgICpcbiAgICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3Ugc2V0IHRoaXMgdG8gdGhlIHByb2plY3QncyByb290IGRpcmVjdG9yeS5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge1N0cmluZ31cbiAgICovXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzOjpoaWRkZW4oKS5yb290XG4gIH1cblxuICAvKipcbiAgICogSXMgdGhpcyBpbnN0YW5jZSBpbiBhIHByZXBhcmVkIHN0YXRlP1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHJldHVybiAgICB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBwcmVwYXJlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkucHJlcGFyZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGluc3RhbmNlIGluIGEgc3RhcnRlZCBzdGF0ZT9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm4gICAge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgc3RhcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpczo6aGlkZGVuKCkuc3RhcnRlZFxuICB9XG5cbiAgLyoqXG4gICAqIEF0bGFzIGNvbmZpZ3VyYXRpb24sIGFzIHBhc3NlZCBpbiB0byB0aGUgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGNvbmZpZyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBzZXJ2aWNlcyBhZGRlZCB0byB0aGlzIGluc3RhbmNlXG4gICAqXG4gICAqIEB0eXBlICAgIHtPYmplY3R9XG4gICAqL1xuICBzZXJ2aWNlcyA9IHt9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3Rpb25zIGFkZGVkIHRvIHRoaXMgaW5zdGFuY2VcbiAgICpcbiAgICogQHR5cGUgICAge09iamVjdH1cbiAgICovXG4gIGFjdGlvbnMgPSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2VcbiAgICpcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRpb25zICAgICAgICAgICAgIE9wdGlvbnMgZm9yIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdGlvbnMuY29uZmlnICAgICAgQ29uZmlndXJhdGlvbiBvYmplY3QgZm9yIHRoZSBpbnN0YW5jZSBhbmQgZm9yIGFsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZXMgb3Igb3RoZXIgY29tcG9uZW50cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLnJvb3QgICAgICAgIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgaW5zdGFuY2VcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBvcHRpb25zLmVudiAgICAgICAgIFRoZSBlbnZpcm9ubWVudCB1bmRlciB3aGljaCB0aGlzIGluc3RhbmNlIG9wZXJhdGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cyBtYXkgdXNlIHRoaXMgdmFsdWUgZm9yIHZhcmlvdXMgcHVycG9zZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBOT0RFX0VOVi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEluaXRpYWxpc2UgcHJpdmF0ZSBzdHVmZlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm9jZXNzLWVudlxuICAgIHRoaXM6OmhpZGRlbigpLmVudiA9IG9wdGlvbnMuZW52IHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WXG4gICAgdGhpczo6aGlkZGVuKCkucm9vdCA9IG9wdGlvbnMucm9vdFxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nID0ge1xuICAgICAgc2VydmljZXM6IG5ldyBNYXAoKSxcbiAgICAgIGhvb2tzOiBuZXcgTWFwKCksXG4gICAgICBhY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgfVxuXG4gICAgLy8gU2FmZXR5IGNoZWNrc1xuICAgIGlmICghdGhpcy5lbnYpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcignZW52IG5vdCBzcGVjaWZpZWQgYW5kIE5PREVfRU5WIHdhcyBub3Qgc2V0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucm9vdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgcm9vdCBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBnb3QgJHtvcHRpb25zLnJvb3R9YClcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IHRoaXM6Om1rY29uZmlnKG9wdGlvbnMuY29uZmlnLCB7XG4gICAgICBhdGxhczogQXRsYXMuZGVmYXVsdHMsXG4gICAgICBzZXJ2aWNlczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICBhY3Rpb25zOiB7fSxcbiAgICB9KVxuICAgIC8vIExvZ2dlciDwn4yyXG4gICAgdGhpcy5sb2cgPSB0aGlzOjpta2xvZyh0aGlzLmNvbmZpZy5hdGxhcy5sb2cpXG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZSBhIG1vZHVsZSBieSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290XG4gICAqXG4gICAqIEBwYXJhbSAgICAge1N0cmluZ30gICAgbG9jYXRpb24gICAgICAgICAgVGhlIG1vZHVsZSdzIGxvY2F0aW9uLCByZWxhdGl2ZSB0byByb290XG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0aW9ucz17fSAgICAgICAgT3B0aW9uc1xuICAgKiBAcGFyYW0gICAgIHtCb29sZWFufSAgIG9wdGlvbnMub3B0aW9uYWwgIElmIHRydWUsIHdpbGwgbm90IHRocm93IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3RcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLm5vcm1hbGlzZSBJZiB0cnVlLCBpdCB3aWxsIHByZWZlciB0aGUgRVMgbW9kdWxlcycgZGVmYXVsdCBleHBvcnRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyIG5hbWVkIGV4cG9ydHMgb3IgdGhlIENvbW1vbkpTIGV4cG9ydHNcbiAgICogQHBhcmFtICAgICB7Qm9vbGVhbn0gICBvcHRpb25zLmFic29sdXRlICBJZiB0cnVlLCB3aWxsIHRyeSB0byBsb2FkIHRoZSBtb2R1bGUgd2l0aG91dFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmluZyB0aGUgbW9kdWxlJ3MgbmFtZSB0byB0aGUgcHJvamVjdCByb290IChpdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgbG9hZCB0aGUgbW9kdWxlIHVzaW5nIHN0YW5kYXJkIE5vZGUncyBtZWNoYW5pc20pXG4gICAqIEByZXR1cm4gICAge21peGVkfSAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZHVsZSdzIGNvbnRlbnRzXG4gICAqL1xuICByZXF1aXJlKGxvY2F0aW9uLCBvcHRpb25zID0ge30pIHtcbiAgICBsb2NhdGlvbiA9IG9wdGlvbnMuYWJzb2x1dGVcbiAgICAgID8gbG9jYXRpb25cbiAgICAgIDogcGF0aC5yZXNvbHZlKHRoaXMucm9vdCwgbG9jYXRpb24pXG5cbiAgICBjb25zdCBsb2FkID0gb3B0aW9ucy5vcHRpb25hbFxuICAgICAgPyBvcHRyZXF1aXJlXG4gICAgICA6IHJlcXVpcmVcbiAgICBjb25zdCBjb250ZW50cyA9IGxvYWQobG9jYXRpb24pXG5cbiAgICByZXR1cm4gb3B0aW9ucy5ub3JtYWxpc2UgJiYgaXNQbGFpbk9iamVjdChjb250ZW50cy5kZWZhdWx0KVxuICAgICAgPyBjb250ZW50cy5kZWZhdWx0XG4gICAgICA6IGNvbnRlbnRzXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBzZXJ2aWNlIGludG8gdGhpcyBhdGxhcyBhdCBnaXZlbiBhbGlhc1xuICAgKlxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgICAgICBUaGUgYWxpYXMgZm9yIHRoZSBzZXJ2aWNlIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBleHBvc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2VydmljZSdzIEFQSSBvbiB0aGUgYXRsYXMuc2VydmljZXMgb2JqZWN0IGFuZCBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2luZyBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIHNlcnZpY2UgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzICAgICAgICAgICAgUnVudGltZSBvcHRpb25zIGZvciB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIHNlcnZpY2UoYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLnNlcnZpY2VzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgaG9vayBpbnRvIHRoaXMgYXRsYXMgdXNpbmcgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgaG9vayAtIGl0IHdpbGwgYmUgdXNlZCBmb3IgcGFzc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRhdGEgdG8gaXRcbiAgICogQHBhcmFtICAgICB7Y2xhc3N9ICAgICBDb21wb25lbnQgICAgICAgVGhlIGhvb2sgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzICAgICAgICAgICAgUnVudGltZSBvcHRpb25zIGZvciB0aGUgaG9va1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIG9wdHMuYWxpYXNlcyAgICBCaW5kaW5ncyB0byBvdGhlciBkZWZpbmVkIGNvbXBvbmVudHNcbiAgICogQHJldHVybiAgICB7dGhpc31cbiAgICovXG4gIGhvb2soYWxpYXMsIENvbXBvbmVudCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXM6OmNvbXBvbmVudCh7XG4gICAgICB0eXBlOiAnaG9vaycsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmhvb2tzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIGFjdGlvbiBpbnRvIHRoaXMgYXRsYXMgYXQgZ2l2ZW4gYWxpYXNcbiAgICpcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICAgICAgVGhlIGFsaWFzIGZvciB0aGUgYWN0aW9uIC0gaXQgd2lsbCBiZSB1c2VkIGZvciBleHBvc2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWN0aW9uJ3MgQVBJIG9uIHRoZSBhdGxhcy5hY3Rpb25zIG9iamVjdCBhbmQgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhIHRvIGl0XG4gICAqIEBwYXJhbSAgICAge2NsYXNzfSAgICAgQ29tcG9uZW50ICAgICAgIFRoZSBhY3Rpb24gY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBvcHRzICAgICAgICAgICAgUnVudGltZSBvcHRpb25zIGZvciB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgb3B0cy5hbGlhc2VzICAgIEJpbmRpbmdzIHRvIG90aGVyIGRlZmluZWQgY29tcG9uZW50c1xuICAgKiBAcmV0dXJuICAgIHt0aGlzfVxuICAgKi9cbiAgYWN0aW9uKGFsaWFzLCBDb21wb25lbnQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzOjpjb21wb25lbnQoe1xuICAgICAgdHlwZTogJ2FjdGlvbicsXG4gICAgICBhbGlhcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIGFsaWFzZXM6IG9wdHMuYWxpYXNlcyxcbiAgICB9LCB0aGlzOjpoaWRkZW4oKS5jYXRhbG9nLmFjdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBhbGwgc2VydmljZXMgYW5kIGhvb2tzIGZvciB1c2VcbiAgICpcbiAgICogR2VuZXJhbGx5IHlvdSBzaG91bGQgdXNlIGBhdGxhcy5zdGFydCgpYCBpbnN0ZWFkIHRvIGdldCB5b3VyIGluc3RhbmNlIHVwIGFuZCBydW5uaW5nLiBIb3dldmVyLFxuICAgKiBzb21ldGltZXMgaXQgaXMgbmVjZXNzYXJ5IHRvIGdldCBhbGwgdGhlIHNlcnZpY2VzIGludG8gYSBcImdldC1yZWFkeVwiIHN0YXRlIGJlZm9yZSB0aGV5IHN0YXJ0XG4gICAqIGNvbm5lY3RpbmcgdG8gcmVtb3RlIHJlc291cmNlcyBvciBkb2luZyBhbnkgaW50ZW5zaXZlIEkvTyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHRoaXM+fVxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICBpZiAodGhpcy5wcmVwYXJlZCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBjb25zdCB7IHNlcnZpY2VzLCBhY3Rpb25zLCBob29rcyB9ID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZ1xuXG4gICAgLy8gUHJlcGFyZSBhY3Rpb25zXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGFjdGlvbl0gb2YgYWN0aW9ucykge1xuICAgICAgdGhpcy5hY3Rpb25zW2FsaWFzXSA9IGFjdGlvbi5jb21wb25lbnRcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGFsbCBzZXJ2aWNlcywgaW4gcGFyYWxsZWwg8J+SqlxuICAgIGF3YWl0IFByb21pc2UuYWxsKEFycmF5LmZyb20oc2VydmljZXMpLm1hcCgoW2FsaWFzLCBzZXJ2aWNlXSkgPT5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2UucHJlcGFyZShhbGlhcywgc2VydmljZSkpKVxuXG4gICAgdGhpczo6aGlkZGVuKCkucHJlcGFyZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyUHJlcGFyZScsIHRoaXMsIGhvb2tzKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhbGwgc2VydmljZXNcbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpczo6aGlkZGVuKCkuY2F0YWxvZy5ob29rc1xuXG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlKClcbiAgICBhd2FpdCB0aGlzOjpkaXNwYXRjaCgnYmVmb3JlU3RhcnQnLCB0aGlzLCBob29rcylcblxuICAgIGNvbnN0IHsgc2VydmljZXMgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcblxuICAgIC8vIFN0YXJ0IGFsbCBzZXJ2aWNlcywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgaW5zdGFuY2Ug8J+SqlxuICAgIC8vIE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlISBTb21lIHNlcnZpY2VzIHNob3VsZCBiZSBzdGFydGVkIGFzIHRoZSBsYXN0IG9uZXMgYmVjYXVzZSB0aGV5XG4gICAgLy8gZXhwb3NlIHNvbWUgZnVuY3Rpb25hbGl0eSB0byB0aGUgb3V0c2lkZSB3b3JsZCBhbmQgc3RhcnRpbmcgdGhvc2UgYmVmb3JlIGllLiBhIGRhdGFiYXNlXG4gICAgLy8gc2VydmljZSBpcyBzdGFydGVkIG1pZ2h0IGJyZWFrIHN0dWZmIVxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBzZXJ2aWNlXSBvZiBzZXJ2aWNlcykge1xuICAgICAgaWYgKHNlcnZpY2Uuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RhcnQ6YWxyZWFkeS1zdGFydGVkJylcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGF3YWl0IHRoaXM6OmxpZmVjeWNsZS5zZXJ2aWNlLnN0YXJ0KGFsaWFzLCBzZXJ2aWNlKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKHsgZXJyLCBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpzdGFydDpmYWlsdXJlJylcbiAgICAgICAgLy8gUm9sbCBiYWNrXG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcCgpXG4gICAgICAgICAgLy8gU2hpdCBqdXN0IGdvdCBzZXJpb3VzIPCfmLFcbiAgICAgICAgICAuY2F0Y2goc3RvcEVyciA9PiB2b2lkIHRoaXMubG9nLmZhdGFsKHsgZXJyOiBzdG9wRXJyIH0sICdhdGxhczpzdGFydDpyb2xsYmFjay1mYWlsdXJlJykpXG5cbiAgICAgICAgLy8gUmUtdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIHdoaWNoIGNhdXNlZCBBdGxhcyB0byBmYWlsIHRvIHN0YXJ0XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWQgPSB0cnVlXG4gICAgYXdhaXQgdGhpczo6ZGlzcGF0Y2goJ2FmdGVyU3RhcnQnLCB0aGlzLCBob29rcylcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpyZWFkeScpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYWxsIHNlcnZpY2VzLCB1bnJlZ2lzdGVyIGFsbCBhY3Rpb25zIGFuZCBob29rcyBhbmQgdW5wdWJsaXNoIGFueSBBUElzIGV4cG9zZWQgYnkgdGhlbVxuICAgKlxuICAgKiBUaGlzIHB1dHMgdGhlIHdob2xlIGFwcGxpY2F0aW9uIGludG8gYSBzdGF0ZSBhcyBpdCB3YXMgYmVmb3JlIGBhdGxhcy5wcmVwYXJlKClgIGFuZC9vclxuICAgKiBgYXRsYXMuc3RhcnQoKWAgd2FzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybiAgICB7UHJvbWlzZTx0aGlzPn1cbiAgICovXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgY29uc3QgeyBzZXJ2aWNlcywgYWN0aW9ucywgaG9va3MgfSA9IHRoaXM6OmhpZGRlbigpLmNhdGFsb2dcblxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdiZWZvcmVTdG9wJywgdGhpcywgaG9va3MpXG5cbiAgICBsZXQgZXJyb3JcblxuICAgIC8vIFN0b3AgYWxsIHNlcnZpY2VzLCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGluc3RhbmNlIPCfkqpcbiAgICAvLyBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBtb3N0IGltcG9ydGFudCBzZXJ2aWNlcyBhcmUgc3RvcHBlZCBmaXJzdC5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgc2VydmljZV0gb2YgQXJyYXkuZnJvbShzZXJ2aWNlcykucmV2ZXJzZSgpKSB7XG4gICAgICBpZiAoIXNlcnZpY2Uuc3RhcnRlZCkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RvcDphbHJlYWR5LXN0b3BwZWQnKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgYXdhaXQgdGhpczo6bGlmZWN5Y2xlLnNlcnZpY2Uuc3RvcChhbGlhcywgc2VydmljZSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcih7IGVyciwgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RvcDpmYWlsdXJlJylcbiAgICAgICAgZXJyb3IgPSBlcnJcbiAgICAgICAgLy8gTGVhdmUgdGhpcyBzZXJ2aWNlIGFzIGlzIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHNlcnZpY2UuIFdlIHByb2JhYmx5IGNhbm5vdCBkbyBhbnl0aGluZyB0b1xuICAgICAgICAvLyBwcm9wZXJseSBzdG9wIHRoaXMgc2VydmljZS4g8J+ZgVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVucmVnaXN0ZXIgYWN0aW9uc1xuICAgIGZvciAoY29uc3QgW2FsaWFzXSBvZiBhY3Rpb25zKSB7XG4gICAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2FsaWFzXVxuICAgIH1cblxuICAgIHRoaXM6OmhpZGRlbigpLnN0YXJ0ZWQgPSBmYWxzZVxuICAgIHRoaXM6OmhpZGRlbigpLnByZXBhcmVkID0gZmFsc2VcblxuICAgIGF3YWl0IHRoaXM6OmRpc3BhdGNoKCdhZnRlclN0b3AnLCBudWxsLCBob29rcylcbiAgICB0aGlzLmxvZy5pbmZvKCdhdGxhczpzdG9wcGVkJylcblxuICAgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB0aHJvd24gaW4gb25lIG9mIHRoZSBzZXJ2aWNlcyBkdXJpbmcgLnN0b3AoKSwgcmUtdGhyb3cgaXQgbm93XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuY29uc3QgbGlmZWN5Y2xlID0ge1xuICBzZXJ2aWNlOiB7XG4gICAgLyoqXG4gICAgICogUHJlcGFyZSBhIHNlcnZpY2VcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICBUaGUgU2VydmljZSdzIGFsaWFzXG4gICAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBzZXJ2aWNlICAgICBUaGUgc2VydmljZSBjb21wb25lbnQgY29udGFpbmVyXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBwcmVwYXJlKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnByZXBhcmU6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgc2VydmljZS5jb21wb25lbnQucHJlcGFyZSgpXG4gICAgICB0aGlzOjpleHBvc2UoJ3NlcnZpY2VzJywgYWxpYXMsIGluc3RhbmNlKVxuICAgICAgdGhpcy5sb2cudHJhY2UoeyBzZXJ2aWNlOiBhbGlhcyB9LCAnc2VydmljZTpwcmVwYXJlOmFmdGVyJylcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFN0YXJ0IGEgc2VydmljZVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgIGFsaWFzICAgICAgIFRoZSBTZXJ2aWNlJ3MgYWxpYXNcbiAgICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgIHNlcnZpY2UgICAgIFRoZSBzZXJ2aWNlIGNvbXBvbmVudCBjb250YWluZXJcbiAgICAgKiBAcmV0dXJuICAgIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIGFzeW5jIHN0YXJ0KGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0YXJ0OmJlZm9yZScpXG4gICAgICBhd2FpdCBzZXJ2aWNlLmNvbXBvbmVudC5zdGFydCh0aGlzLnNlcnZpY2VzW2FsaWFzXSlcbiAgICAgIHNlcnZpY2Uuc3RhcnRlZCA9IHRydWVcbiAgICAgIHRoaXMubG9nLnRyYWNlKHsgc2VydmljZTogYWxpYXMgfSwgJ3NlcnZpY2U6c3RhcnQ6YWZ0ZXInKVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3RvcCBhIHNlcnZpY2VcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICBhbGlhcyAgICAgICBUaGUgU2VydmljZSdzIGFsaWFzXG4gICAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICBzZXJ2aWNlICAgICBUaGUgc2VydmljZSBjb21wb25lbnQgY29udGFpbmVyXG4gICAgICogQHJldHVybiAgICB7UHJvbWlzZTx2b2lkPn1cbiAgICAgKi9cbiAgICBhc3luYyBzdG9wKGFsaWFzLCBzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YmVmb3JlJylcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5zZXJ2aWNlc1thbGlhc11cbiAgICAgIGRlbGV0ZSB0aGlzLnNlcnZpY2VzW2FsaWFzXVxuICAgICAgYXdhaXQgc2VydmljZS5jb21wb25lbnQuc3RvcChpbnN0YW5jZSlcbiAgICAgIHNlcnZpY2Uuc3RhcnRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmxvZy50cmFjZSh7IHNlcnZpY2U6IGFsaWFzIH0sICdzZXJ2aWNlOnN0b3A6YWZ0ZXInKVxuICAgIH0sXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0bGFzXG4iXX0=

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

Object.defineProperty(this, "started", {
configurable: true,
enumerable: true,
writable: true,
value: false
});
this.type = info.type;

@@ -83,2 +89,2 @@ this.alias = info.alias;

exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwidHlwZSIsImFsaWFzIiwiYWxpYXNlcyIsIkNvbXBvbmVudCIsInByb3ZpZGVkIiwiT2JqZWN0Iiwia2V5cyIsInJlcXVpcmVkIiwicmVxdWlyZXMiLCJtaXNzaW5nIiwiZXh0cmEiLCJsZW5ndGgiLCJqb2luIiwibG9nIiwidHJhY2UiLCJjb21wb25lbnQiLCJjb25maWciLCJkZWZhdWx0cyIsImNoaWxkIiwicmVzb2x2ZSIsIm5hbWUiLCJyZXNvbHZlZCIsInNwbGl0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFVQSxNQUFNQSxrQkFBTixDQUF5QjtBQWF2QkMsY0FBWUMsSUFBWixFQUFrQkMsS0FBbEIsRUFBeUI7QUFBQTs7QUFDdkIsU0FBS0MsSUFBTCxHQUFZRixLQUFLRSxJQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYUgsS0FBS0csS0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVKLEtBQUtJLE9BQUwsSUFBZ0IsRUFBL0I7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTCxLQUFLSyxTQUF0Qjs7QUFFQSxRQUFJLE9BQU8sS0FBS0EsU0FBWixLQUEwQixVQUE5QixFQUEwQztBQUN4QyxZQUFNSCxPQUFPLE9BQU8sS0FBS0csU0FBekI7QUFDQSxZQUFNLDJCQUFvQixhQUFZLEtBQUtILElBQUssSUFBRyxLQUFLQyxLQUFNLHVCQUFzQkQsSUFBSyxFQUFuRixDQUFOO0FBQ0Q7O0FBR0QsVUFBTUUsVUFBVTtBQUNkRSxnQkFBVUMsT0FBT0MsSUFBUCxDQUFZLEtBQUtKLE9BQWpCLENBREk7QUFFZEssZ0JBQVUsS0FBS0osU0FBTCxDQUFlSyxRQUFmLElBQTJCO0FBRnZCLEtBQWhCO0FBSUEsVUFBTUMsVUFBVSx3QkFBV1AsUUFBUUssUUFBbkIsRUFBNkJMLFFBQVFFLFFBQXJDLENBQWhCO0FBQ0EsVUFBTU0sUUFBUSx3QkFBV1IsUUFBUUUsUUFBbkIsRUFBNkJGLFFBQVFLLFFBQXJDLENBQWQ7O0FBRUEsUUFBSUUsUUFBUUUsTUFBWixFQUFvQjtBQUNsQixZQUFNLDJCQUFvQixpQ0FBZ0MsS0FBS1YsS0FBTSxLQUFJUSxRQUFRRyxJQUFSLENBQWEsSUFBYixDQUFtQixFQUF0RixDQUFOO0FBQ0Q7O0FBRUQsUUFBSUYsTUFBTUMsTUFBVixFQUFrQjtBQUNoQixZQUFNLDJCQUFvQixrQ0FBaUMsS0FBS1YsS0FBTSxLQUFJUyxNQUFNRSxJQUFOLENBQVcsSUFBWCxDQUFpQixFQUFyRixDQUFOO0FBQ0Q7O0FBRURiLFVBQU1jLEdBQU4sQ0FBVUMsS0FBVixDQUFnQjtBQUNkQyxpQkFBVyxLQUFLZCxLQURGO0FBRWRlLGNBQVFsQixLQUFLa0IsTUFGQztBQUdkQyxnQkFBVSxLQUFLZCxTQUFMLENBQWVjO0FBSFgsS0FBaEIsRUFJRyxrQkFKSDtBQU1BLFNBQUtGLFNBQUwsR0FBaUIsSUFBSSxLQUFLWixTQUFULENBQW1CO0FBQ2xDSixXQURrQztBQUVsQ2MsV0FBS2QsTUFBTWMsR0FBTixDQUFVSyxLQUFWLENBQWdCO0FBQUUsU0FBQyxLQUFLbEIsSUFBTixHQUFhLEtBQUtDO0FBQXBCLE9BQWhCLENBRjZCO0FBR2xDZSxjQUFRLDBCQUFTbEIsS0FBS2tCLE1BQWQsRUFBc0IsS0FBS2IsU0FBTCxDQUFlYyxRQUFyQyxDQUgwQjtBQUlsQ0YsaUJBQVdJO0FBSnVCLEtBQW5CLENBQWpCO0FBUUEscUJBQUtKLFNBQUwsa0NBQXlCYixPQUF6QixHQUFtQyxLQUFLQSxPQUF4QztBQUNEOztBQXZEc0I7O0FBMER6QixTQUFTaUIsT0FBVCxDQUFpQkMsSUFBakIsRUFBdUI7QUFDckIsUUFBTUMsV0FBVywyQkFBZW5CLE9BQWYsQ0FBdUJrQixJQUF2QixDQUFqQjs7QUFFQSxNQUFJLENBQUNDLFFBQUwsRUFBZTtBQUNiLFVBQU0sMkJBQW9CLGFBQVlELElBQUssY0FBckMsQ0FBTjtBQUNEOztBQUVELFFBQU0sQ0FBQ3BCLElBQUQsSUFBU29CLEtBQUtFLEtBQUwsQ0FBVyxHQUFYLENBQWY7QUFFQSxRQUFNUCxZQUFZLEtBQUtoQixLQUFMLENBQVksR0FBRUMsSUFBSyxHQUFuQixFQUF1QnFCLFFBQXZCLENBQWxCOztBQUVBLE1BQUksQ0FBQ04sU0FBTCxFQUFnQjtBQUNkLFVBQU0sMkJBQW9CLGtCQUFpQmYsSUFBSyxJQUFHcUIsUUFBUyxlQUFjRCxJQUFLLEVBQXpFLENBQU47QUFDRDs7QUFFRCxTQUFPTCxTQUFQO0FBQ0Q7O2VBRWNuQixrQiIsImZpbGUiOiJjb21wb25lbnQtY29udGFpbmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhpZGRlbiBmcm9tICdsb2NhbC1zY29wZS9jcmVhdGUnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGRpZmZlcmVuY2UsXG59IGZyb20gJ2xvZGFzaCdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhvbGRzIGFuZCBtYW5hZ2VzIGEgY29tcG9uZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29tcG9uZW50Q29udGFpbmVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgY29udGFpbmVyIGZvciBhIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvICAgICAgICAgICAgICBDb21wb25lbnQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby50eXBlICAgICAgICAgVGhlIGNvbXBvbmVudCdzIHR5cGUgKHNlcnZpY2UsIGhvb2ssIGFjdGlvbilcbiAgICogQHBhcmFtICAgICB7U3RyaW5nfSAgICAgICAgaW5mby5hbGlhcyAgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIG5hbWUvYWxpYXNcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5hbGlhc2VzICAgICAgQmluZGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyIHRvIGxvY2F0ZSBvdGhlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzXG4gICAqIEBwYXJhbSAgICAge0NsYXNzfSAgICAgICAgIGluZm8uQ29tcG9uZW50ICAgIFRoZSBjb21wb25lbnQgY2xhc3NcbiAgICogQHBhcmFtICAgICB7T2JqZWN0fSAgICAgICAgaW5mby5jb25maWcgICAgICAgVGhlIGNvbXBvbmVudCdzIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtICAgICB7QXRsYXN9ICAgICAgICAgYXRsYXMgICAgICAgICAgICAgVGhlIEF0bGFzIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihpbmZvLCBhdGxhcykge1xuICAgIHRoaXMudHlwZSA9IGluZm8udHlwZVxuICAgIHRoaXMuYWxpYXMgPSBpbmZvLmFsaWFzXG4gICAgdGhpcy5hbGlhc2VzID0gaW5mby5hbGlhc2VzIHx8IHt9XG4gICAgdGhpcy5Db21wb25lbnQgPSBpbmZvLkNvbXBvbmVudFxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLkNvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB0aGlzLkNvbXBvbmVudFxuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBDb21wb25lbnQgJHt0aGlzLnR5cGV9OiR7dGhpcy5hbGlhc30gbXVzdCBiZSBjbGFzcywgbm90ICR7dHlwZX1gKVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBjb21wb25lbnQgcmVjZWl2ZWQgYWxsIHRoZSBhbGlhc2VzIGl0IHJlcXVpcmVzXG4gICAgY29uc3QgYWxpYXNlcyA9IHtcbiAgICAgIHByb3ZpZGVkOiBPYmplY3Qua2V5cyh0aGlzLmFsaWFzZXMpLFxuICAgICAgcmVxdWlyZWQ6IHRoaXMuQ29tcG9uZW50LnJlcXVpcmVzIHx8IFtdLFxuICAgIH1cbiAgICBjb25zdCBtaXNzaW5nID0gZGlmZmVyZW5jZShhbGlhc2VzLnJlcXVpcmVkLCBhbGlhc2VzLnByb3ZpZGVkKVxuICAgIGNvbnN0IGV4dHJhID0gZGlmZmVyZW5jZShhbGlhc2VzLnByb3ZpZGVkLCBhbGlhc2VzLnJlcXVpcmVkKVxuXG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYE1pc3NpbmcgYWxpYXNlcyBmb3IgY29tcG9uZW50ICR7dGhpcy5hbGlhc306ICR7bWlzc2luZy5qb2luKCcsICcpfWApXG4gICAgfVxuXG4gICAgaWYgKGV4dHJhLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBVbm5lZWRlZCBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHtleHRyYS5qb2luKCcsICcpfWApXG4gICAgfVxuXG4gICAgYXRsYXMubG9nLnRyYWNlKHtcbiAgICAgIGNvbXBvbmVudDogdGhpcy5hbGlhcyxcbiAgICAgIGNvbmZpZzogaW5mby5jb25maWcsXG4gICAgICBkZWZhdWx0czogdGhpcy5Db21wb25lbnQuZGVmYXVsdHMsXG4gICAgfSwgJ2NvbXBvbmVudDpjb25maWcnKVxuXG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgdGhpcy5Db21wb25lbnQoe1xuICAgICAgYXRsYXMsXG4gICAgICBsb2c6IGF0bGFzLmxvZy5jaGlsZCh7IFt0aGlzLnR5cGVdOiB0aGlzLmFsaWFzIH0pLFxuICAgICAgY29uZmlnOiBkZWZhdWx0cyhpbmZvLmNvbmZpZywgdGhpcy5Db21wb25lbnQuZGVmYXVsdHMpLFxuICAgICAgY29tcG9uZW50OiByZXNvbHZlLFxuICAgIH0pXG5cbiAgICAvLyBTYXZlIHRoZSBhbGlhc2VzIGZvciB0aGlzIGNvbXBvbmVudFxuICAgIHRoaXMuY29tcG9uZW50OjpoaWRkZW4oKS5hbGlhc2VzID0gdGhpcy5hbGlhc2VzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZShuYW1lKSB7XG4gIGNvbnN0IHJlc29sdmVkID0gdGhpczo6aGlkZGVuKCkuYWxpYXNlc1tuYW1lXVxuXG4gIGlmICghcmVzb2x2ZWQpIHtcbiAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYEFsaWFzIGZvciAke25hbWV9IG5vdCBkZWZpbmVkYClcbiAgfVxuXG4gIGNvbnN0IFt0eXBlXSA9IG5hbWUuc3BsaXQoJzonKVxuICAvLyBVc2UgYSBwbHVyYWwgZm9ybSBvZiB0aGUgY29tcG9uZW50IHR5cGUsIGllLiwgYWN0aW9uIC0+IGFjdGlvbnMsIHNlcnZpY2UgLT4gc2VydmljZXMgZXRjLlxuICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmF0bGFzW2Ake3R5cGV9c2BdW3Jlc29sdmVkXVxuXG4gIGlmICghY29tcG9uZW50KSB7XG4gICAgdGhyb3cgbmV3IEZyYW1ld29ya0Vycm9yKGBVbmFibGUgdG8gZmluZCAke3R5cGV9ICR7cmVzb2x2ZWR9IGFsaWFzZWQgYXMgJHtuYW1lfWApXG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvbmVudENvbnRhaW5lclxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudC1jb250YWluZXIubWpzIl0sIm5hbWVzIjpbIkNvbXBvbmVudENvbnRhaW5lciIsImNvbnN0cnVjdG9yIiwiaW5mbyIsImF0bGFzIiwidHlwZSIsImFsaWFzIiwiYWxpYXNlcyIsIkNvbXBvbmVudCIsInByb3ZpZGVkIiwiT2JqZWN0Iiwia2V5cyIsInJlcXVpcmVkIiwicmVxdWlyZXMiLCJtaXNzaW5nIiwiZXh0cmEiLCJsZW5ndGgiLCJqb2luIiwibG9nIiwidHJhY2UiLCJjb21wb25lbnQiLCJjb25maWciLCJkZWZhdWx0cyIsImNoaWxkIiwicmVzb2x2ZSIsIm5hbWUiLCJyZXNvbHZlZCIsInNwbGl0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFVQSxNQUFNQSxrQkFBTixDQUF5QjtBQW1CdkJDLGNBQVlDLElBQVosRUFBa0JDLEtBQWxCLEVBQXlCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQWRmO0FBY2U7QUFDdkIsU0FBS0MsSUFBTCxHQUFZRixLQUFLRSxJQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYUgsS0FBS0csS0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVKLEtBQUtJLE9BQUwsSUFBZ0IsRUFBL0I7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTCxLQUFLSyxTQUF0Qjs7QUFFQSxRQUFJLE9BQU8sS0FBS0EsU0FBWixLQUEwQixVQUE5QixFQUEwQztBQUN4QyxZQUFNSCxPQUFPLE9BQU8sS0FBS0csU0FBekI7QUFDQSxZQUFNLDJCQUFvQixhQUFZLEtBQUtILElBQUssSUFBRyxLQUFLQyxLQUFNLHVCQUFzQkQsSUFBSyxFQUFuRixDQUFOO0FBQ0Q7O0FBR0QsVUFBTUUsVUFBVTtBQUNkRSxnQkFBVUMsT0FBT0MsSUFBUCxDQUFZLEtBQUtKLE9BQWpCLENBREk7QUFFZEssZ0JBQVUsS0FBS0osU0FBTCxDQUFlSyxRQUFmLElBQTJCO0FBRnZCLEtBQWhCO0FBSUEsVUFBTUMsVUFBVSx3QkFBV1AsUUFBUUssUUFBbkIsRUFBNkJMLFFBQVFFLFFBQXJDLENBQWhCO0FBQ0EsVUFBTU0sUUFBUSx3QkFBV1IsUUFBUUUsUUFBbkIsRUFBNkJGLFFBQVFLLFFBQXJDLENBQWQ7O0FBRUEsUUFBSUUsUUFBUUUsTUFBWixFQUFvQjtBQUNsQixZQUFNLDJCQUFvQixpQ0FBZ0MsS0FBS1YsS0FBTSxLQUFJUSxRQUFRRyxJQUFSLENBQWEsSUFBYixDQUFtQixFQUF0RixDQUFOO0FBQ0Q7O0FBRUQsUUFBSUYsTUFBTUMsTUFBVixFQUFrQjtBQUNoQixZQUFNLDJCQUFvQixrQ0FBaUMsS0FBS1YsS0FBTSxLQUFJUyxNQUFNRSxJQUFOLENBQVcsSUFBWCxDQUFpQixFQUFyRixDQUFOO0FBQ0Q7O0FBRURiLFVBQU1jLEdBQU4sQ0FBVUMsS0FBVixDQUFnQjtBQUNkQyxpQkFBVyxLQUFLZCxLQURGO0FBRWRlLGNBQVFsQixLQUFLa0IsTUFGQztBQUdkQyxnQkFBVSxLQUFLZCxTQUFMLENBQWVjO0FBSFgsS0FBaEIsRUFJRyxrQkFKSDtBQU1BLFNBQUtGLFNBQUwsR0FBaUIsSUFBSSxLQUFLWixTQUFULENBQW1CO0FBQ2xDSixXQURrQztBQUVsQ2MsV0FBS2QsTUFBTWMsR0FBTixDQUFVSyxLQUFWLENBQWdCO0FBQUUsU0FBQyxLQUFLbEIsSUFBTixHQUFhLEtBQUtDO0FBQXBCLE9BQWhCLENBRjZCO0FBR2xDZSxjQUFRLDBCQUFTbEIsS0FBS2tCLE1BQWQsRUFBc0IsS0FBS2IsU0FBTCxDQUFlYyxRQUFyQyxDQUgwQjtBQUlsQ0YsaUJBQVdJO0FBSnVCLEtBQW5CLENBQWpCO0FBUUEscUJBQUtKLFNBQUwsa0NBQXlCYixPQUF6QixHQUFtQyxLQUFLQSxPQUF4QztBQUNEOztBQTdEc0I7O0FBZ0V6QixTQUFTaUIsT0FBVCxDQUFpQkMsSUFBakIsRUFBdUI7QUFDckIsUUFBTUMsV0FBVywyQkFBZW5CLE9BQWYsQ0FBdUJrQixJQUF2QixDQUFqQjs7QUFFQSxNQUFJLENBQUNDLFFBQUwsRUFBZTtBQUNiLFVBQU0sMkJBQW9CLGFBQVlELElBQUssY0FBckMsQ0FBTjtBQUNEOztBQUVELFFBQU0sQ0FBQ3BCLElBQUQsSUFBU29CLEtBQUtFLEtBQUwsQ0FBVyxHQUFYLENBQWY7QUFFQSxRQUFNUCxZQUFZLEtBQUtoQixLQUFMLENBQVksR0FBRUMsSUFBSyxHQUFuQixFQUF1QnFCLFFBQXZCLENBQWxCOztBQUVBLE1BQUksQ0FBQ04sU0FBTCxFQUFnQjtBQUNkLFVBQU0sMkJBQW9CLGtCQUFpQmYsSUFBSyxJQUFHcUIsUUFBUyxlQUFjRCxJQUFLLEVBQXpFLENBQU47QUFDRDs7QUFFRCxTQUFPTCxTQUFQO0FBQ0Q7O2VBRWNuQixrQiIsImZpbGUiOiJjb21wb25lbnQtY29udGFpbmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGhpZGRlbiBmcm9tICdsb2NhbC1zY29wZS9jcmVhdGUnXG5pbXBvcnQgeyBGcmFtZXdvcmtFcnJvciB9IGZyb20gJ0BhdGxhcy5qcy9lcnJvcnMnXG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAgYXMgZGVmYXVsdHMsXG4gIGRpZmZlcmVuY2UsXG59IGZyb20gJ2xvZGFzaCdcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhvbGRzIGFuZCBtYW5hZ2VzIGEgY29tcG9uZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29tcG9uZW50Q29udGFpbmVyIHtcbiAgLyoqXG4gICAqIElzIHRoaXMgY29tcG9uZW50IGFscmVhZHkgc3RhcnRlZD9cbiAgICogQHR5cGUgICAge0Jvb2xlYW59XG4gICAqL1xuICBzdGFydGVkID0gZmFsc2VcblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBjb250YWluZXIgZm9yIGEgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSAgICAge09iamVjdH0gICAgICAgIGluZm8gICAgICAgICAgICAgIENvbXBvbmVudCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgICBpbmZvLnR5cGUgICAgICAgICBUaGUgY29tcG9uZW50J3MgdHlwZSAoc2VydmljZSwgaG9vaywgYWN0aW9uKVxuICAgKiBAcGFyYW0gICAgIHtTdHJpbmd9ICAgICAgICBpbmZvLmFsaWFzICAgICAgICBUaGUgY29tcG9uZW50J3MgdXNlci1zcGVjaWZpZWQgbmFtZS9hbGlhc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvLmFsaWFzZXMgICAgICBCaW5kaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIgdG8gbG9jYXRlIG90aGVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNcbiAgICogQHBhcmFtICAgICB7Q2xhc3N9ICAgICAgICAgaW5mby5Db21wb25lbnQgICAgVGhlIGNvbXBvbmVudCBjbGFzc1xuICAgKiBAcGFyYW0gICAgIHtPYmplY3R9ICAgICAgICBpbmZvLmNvbmZpZyAgICAgICBUaGUgY29tcG9uZW50J3MgdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gICAgIHtBdGxhc30gICAgICAgICBhdGxhcyAgICAgICAgICAgICBUaGUgQXRsYXMgaW5zdGFuY2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKGluZm8sIGF0bGFzKSB7XG4gICAgdGhpcy50eXBlID0gaW5mby50eXBlXG4gICAgdGhpcy5hbGlhcyA9IGluZm8uYWxpYXNcbiAgICB0aGlzLmFsaWFzZXMgPSBpbmZvLmFsaWFzZXMgfHwge31cbiAgICB0aGlzLkNvbXBvbmVudCA9IGluZm8uQ29tcG9uZW50XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuQ29tcG9uZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHRoaXMuQ29tcG9uZW50XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYENvbXBvbmVudCAke3RoaXMudHlwZX06JHt0aGlzLmFsaWFzfSBtdXN0IGJlIGNsYXNzLCBub3QgJHt0eXBlfWApXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNvbXBvbmVudCByZWNlaXZlZCBhbGwgdGhlIGFsaWFzZXMgaXQgcmVxdWlyZXNcbiAgICBjb25zdCBhbGlhc2VzID0ge1xuICAgICAgcHJvdmlkZWQ6IE9iamVjdC5rZXlzKHRoaXMuYWxpYXNlcyksXG4gICAgICByZXF1aXJlZDogdGhpcy5Db21wb25lbnQucmVxdWlyZXMgfHwgW10sXG4gICAgfVxuICAgIGNvbnN0IG1pc3NpbmcgPSBkaWZmZXJlbmNlKGFsaWFzZXMucmVxdWlyZWQsIGFsaWFzZXMucHJvdmlkZWQpXG4gICAgY29uc3QgZXh0cmEgPSBkaWZmZXJlbmNlKGFsaWFzZXMucHJvdmlkZWQsIGFsaWFzZXMucmVxdWlyZWQpXG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgTWlzc2luZyBhbGlhc2VzIGZvciBjb21wb25lbnQgJHt0aGlzLmFsaWFzfTogJHttaXNzaW5nLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVubmVlZGVkIGFsaWFzZXMgZm9yIGNvbXBvbmVudCAke3RoaXMuYWxpYXN9OiAke2V4dHJhLmpvaW4oJywgJyl9YClcbiAgICB9XG5cbiAgICBhdGxhcy5sb2cudHJhY2Uoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLmFsaWFzLFxuICAgICAgY29uZmlnOiBpbmZvLmNvbmZpZyxcbiAgICAgIGRlZmF1bHRzOiB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cyxcbiAgICB9LCAnY29tcG9uZW50OmNvbmZpZycpXG5cbiAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyB0aGlzLkNvbXBvbmVudCh7XG4gICAgICBhdGxhcyxcbiAgICAgIGxvZzogYXRsYXMubG9nLmNoaWxkKHsgW3RoaXMudHlwZV06IHRoaXMuYWxpYXMgfSksXG4gICAgICBjb25maWc6IGRlZmF1bHRzKGluZm8uY29uZmlnLCB0aGlzLkNvbXBvbmVudC5kZWZhdWx0cyksXG4gICAgICBjb21wb25lbnQ6IHJlc29sdmUsXG4gICAgfSlcblxuICAgIC8vIFNhdmUgdGhlIGFsaWFzZXMgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgdGhpcy5jb21wb25lbnQ6OmhpZGRlbigpLmFsaWFzZXMgPSB0aGlzLmFsaWFzZXNcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlKG5hbWUpIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzOjpoaWRkZW4oKS5hbGlhc2VzW25hbWVdXG5cbiAgaWYgKCFyZXNvbHZlZCkge1xuICAgIHRocm93IG5ldyBGcmFtZXdvcmtFcnJvcihgQWxpYXMgZm9yICR7bmFtZX0gbm90IGRlZmluZWRgKVxuICB9XG5cbiAgY29uc3QgW3R5cGVdID0gbmFtZS5zcGxpdCgnOicpXG4gIC8vIFVzZSBhIHBsdXJhbCBmb3JtIG9mIHRoZSBjb21wb25lbnQgdHlwZSwgaWUuLCBhY3Rpb24gLT4gYWN0aW9ucywgc2VydmljZSAtPiBzZXJ2aWNlcyBldGMuXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuYXRsYXNbYCR7dHlwZX1zYF1bcmVzb2x2ZWRdXG5cbiAgaWYgKCFjb21wb25lbnQpIHtcbiAgICB0aHJvdyBuZXcgRnJhbWV3b3JrRXJyb3IoYFVuYWJsZSB0byBmaW5kICR7dHlwZX0gJHtyZXNvbHZlZH0gYWxpYXNlZCBhcyAke25hbWV9YClcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9uZW50Q29udGFpbmVyXG4iXX0=

@@ -19,2 +19,5 @@ "use strict";

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
DummyService.prototype.start = sinon.stub().resolves();
DummyService.prototype.stop = sinon.stub().resolves();
options = {

@@ -25,3 +28,3 @@ root: __dirname,

log: {
level: 'warn'
level: 'fatal'
}

@@ -56,3 +59,2 @@ },

beforeEach(() => {
DummyService.prototype.start = sinon.stub().resolves();
atlas.service('dummy', DummyService);

@@ -77,2 +79,15 @@ });

});
it('re-throws component errors thrown during .start()', () => {
DummyService.prototype.start.rejects(new Error('fail!'));
return expect(atlas.start()).to.eventually.be.rejectedWith(/fail!/);
});
it('stops already started service if one of the components fails to start', async () => {
class FailingService extends _service.default {}
sinon.stub(FailingService.prototype, 'start').rejects(new Error('fail!'));
atlas.service('failing-service', FailingService);
await atlas.start().catch(() => {});
expect(DummyService.prototype.start).to.have.callCount(1);
expect(DummyService.prototype.stop).to.have.callCount(1);
});
});

@@ -82,4 +97,2 @@ describe('Hook interactions - dispatching events', () => {

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
for (const event of events) {

@@ -115,2 +128,2 @@ DummyHook.prototype[event] = sinon.stub().resolves();

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YXJ0LnRlc3QubWpzIl0sIm5hbWVzIjpbIkR1bW15U2VydmljZSIsIkR1bW15SG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJsb2ciLCJsZXZlbCIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwicHJlcGFyZSIsInNpbm9uIiwic3R1YiIsInJlc29sdmVzIiwiaXQiLCJleHBlY3QiLCJzdGFydCIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwic3RhcnRlZCIsImhhdmUiLCJjYWxsQ291bnQiLCJwcm90b3R5cGUiLCJzZXJ2aWNlIiwiaW5zdGFuY2UiLCJiZWVuIiwiY2FsbGVkV2l0aCIsImV2ZW50cyIsImV2ZW50IiwiaG9vayIsInByb3RvIiwiRW1wdHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFOLDBCQUFtQzs7QUFFbkMsTUFBTUMsU0FBTix1QkFBNkI7O0FBRTdCQyxTQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0IsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZELGNBQVU7QUFDUkUsWUFBTUMsU0FERTtBQUVSQyxjQUFRO0FBQ05MLGVBQU87QUFDTE0sZUFBSztBQUNIQyxtQkFBTztBQURKO0FBREEsU0FERDtBQU1OQyxrQkFBVTtBQUNSQyxpQkFBTztBQUNMQyxrQkFBTTtBQUREO0FBREM7QUFOSjtBQUZBLEtBQVY7QUFlQVYsWUFBUSxZQUFVQyxPQUFWLENBQVI7QUFDQUQsVUFBTVcsT0FBTixHQUFnQkMsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQWhCO0FBQ0QsR0FsQkQ7QUFxQkFDLEtBQUcsVUFBSCxFQUFlLE1BQU07QUFDbkJDLFdBQU9oQixNQUFNaUIsS0FBTixFQUFQLEVBQXNCQyxFQUF0QixDQUF5QkMsRUFBekIsQ0FBNEJD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Q0FBcUQsQ0FBckQ7QUFDRDtBQUNGLEtBTkQ7QUFRQVYsT0FBRyx5Q0FBSCxFQUE4QyxZQUFZO0FBQ3hELFlBQU1tQixRQUFRcEMsVUFBVTRCLFNBQXhCO0FBQ0EsWUFBTTFCLE1BQU1pQixLQUFOLEVBQU47O0FBRUEsV0FBSyxNQUFNZSxLQUFYLElBQW9CRCxNQUFwQixFQUE0QjtBQUMxQmYsZUFBT2tCLE1BQU1GLEtBQU4sQ0FBUCxFQUFxQmQsRUFBckIsQ0FBd0JNLElBQXhCLENBQTZCSyxJQUE3QixDQUFrQ0MsVUFBbEMsQ0FBNkM5QixLQUE3QztBQUNEO0FBQ0YsS0FQRDtBQVNBZSxPQUFHLHVEQUFILEVBQTRELFlBQVk7QUFDdEUsWUFBTW9CLEtBQU4sQ0FBWTs7QUFFWm5DLFlBQU1pQyxJQUFOLENBQVcsT0FBWCxFQUFvQkUsS0FBcEI7QUFFQSxZQUFNbkMsTUFBTWlCLEtBQU4sRUFBTjtBQUNELEtBTkQ7QUFPRCxHQTFDRDtBQTJDRCxDQXJIRCIsImZpbGUiOiJzdGFydC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuaW1wb3J0IEhvb2sgZnJvbSAnQGF0bGFzLmpzL2hvb2snXG5cbmNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OnN0YXJ0KCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnd2FybicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICBhdGxhcy5wcmVwYXJlID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcbiAgfSlcblxuXG4gIGl0KCdpcyBhc3luYycsICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuc3RhcnQoKSkudG8uYmUuaW5zdGFuY2VvZihQcm9taXNlKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoaXMnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF3YWl0IGF0bGFzLnN0YXJ0KCkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdzZXRzIGF0bGFzLnN0YXJ0ZWQgdG8gdHJ1ZScsIGFzeW5jICgpID0+IHtcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwoZmFsc2UpXG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbCh0cnVlKVxuICB9KVxuXG4gIGl0KCdjYWxscyBhdGxhcy5wcmVwYXJlKCknLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICB9KVxuXG5cbiAgICBpdCgnY2FsbHMgc3RhcnQgb24gdGhlIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHN0YXJ0IHdpdGggdGhlIGluc3RhbmNlIHJldHVybmVkIGZyb20gcHJlcGFyZSgpIHN0ZXAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHsgdGVzdDogdHJ1ZSB9XG4gICAgICBhdGxhcy5zZXJ2aWNlcy5kdW1teSA9IGluc3RhbmNlXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChpbnN0YW5jZSlcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBtZXRob2Qgb25seSBvbmNlIGZvciBlYWNoIHNlcnZpY2UgZm9yIG11bHRpcGxlIC5zdGFydCgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ0hvb2sgaW50ZXJhY3Rpb25zIC0gZGlzcGF0Y2hpbmcgZXZlbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdGFydCcsXG4gICAgICAnYWZ0ZXJTdGFydCcsXG4gICAgXVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBEdW1teVNlcnZpY2UucHJvdG90eXBlLnByZXBhcmUgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuXG4gICAgICAvLyBTdHViIG91dCBhbGwgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBEdW1teUhvb2sucHJvdG90eXBlW2V2ZW50XSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgICB9XG5cbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgc3RhcnQgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV4cGVjdChEdW1teUhvb2sucHJvdG90eXBlW2V2ZW50XSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBob29rcyB3aXRoIHRoZSBhdGxhcyBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBleHBlY3QocHJvdG9bZXZlbnRdKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaXQoJ2NhbiBoYW5kbGUgaG9va3Mgd2hpY2ggZG8gbm90IGltcGxlbWVudCBhbnkgbGlzdGVuZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY2xhc3MgRW1wdHkge31cblxuICAgICAgYXRsYXMuaG9vaygnZW1wdHknLCBFbXB0eSlcbiAgICAgIC8vIFRoaXMgbm90IHRocm93aW5nIHdpbGwgc3VmZmljZSDwn5iOXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0YXJ0LnRlc3QubWpzIl0sIm5hbWVzIjpbIkR1bW15U2VydmljZSIsIkR1bW15SG9vayIsImRlc2NyaWJlIiwiYXRsYXMiLCJvcHRpb25zIiwiYmVmb3JlRWFjaCIsInByb3RvdHlwZSIsInByZXBhcmUiLCJzaW5vbiIsInN0dWIiLCJyZXNvbHZlcyIsInN0YXJ0Iiwic3RvcCIsInJvb3QiLCJfX2Rpcm5hbWUiLCJjb25maWciLCJsb2ciLCJsZXZlbCIsInNlcnZpY2VzIiwiZHVtbXkiLCJ0ZXN0IiwiaXQiLCJleHBlY3QiLCJ0byIsImJlIiwiaW5zdGFuY2VvZiIsIlByb21pc2UiLCJlcXVhbCIsInN0YXJ0ZWQiLCJoYXZlIiwiY2FsbENvdW50Iiwic2VydmljZSIsImluc3RhbmNlIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJyZWplY3RzIiwiRXJyb3IiLCJldmVudHVhbGx5IiwicmVqZWN0ZWRXaXRoIiwiRmFpbGluZ1NlcnZpY2UiLCJjYXRjaCIsImV2ZW50cyIsImV2ZW50IiwiaG9vayIsInByb3RvIiwiRW1wdHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFOLDBCQUFtQzs7QUFFbkMsTUFBTUMsU0FBTix1QkFBNkI7O0FBRTdCQyxTQUFTLGdCQUFULEVBQTJCLE1BQU07QUFDL0IsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZMLGlCQUFhTSxTQUFiLENBQXVCQyxPQUF2QixHQUFpQ0MsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQWpDO0FBQ0FWLGlCQUFhTSxTQUFiLENBQXVCSyxLQUF2QixHQUErQkgsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQS9CO0FBQ0FWLGlCQUFhTSxTQUFiLENBQXVCTSxJQUF2QixHQUE4QkosTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQTlCO0FBRUFOLGNBQVU7QUFDUlMsWUFBTUMsU0FERTtBQUVSQyxjQUFRO0FBQ05aLGVBQU87QUFD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QUFNUSxLQUFOLEVBQU47O0FBRUEsV0FBSyxNQUFNK0IsS0FBWCxJQUFvQkQsTUFBcEIsRUFBNEI7QUFDMUJuQixlQUFPc0IsTUFBTUYsS0FBTixDQUFQLEVBQXFCbkIsRUFBckIsQ0FBd0JNLElBQXhCLENBQTZCSSxJQUE3QixDQUFrQ0MsVUFBbEMsQ0FBNkMvQixLQUE3QztBQUNEO0FBQ0YsS0FQRDtBQVNBa0IsT0FBRyx1REFBSCxFQUE0RCxZQUFZO0FBQ3RFLFlBQU13QixLQUFOLENBQVk7O0FBRVoxQyxZQUFNd0MsSUFBTixDQUFXLE9BQVgsRUFBb0JFLEtBQXBCO0FBRUEsWUFBTTFDLE1BQU1RLEtBQU4sRUFBTjtBQUNELEtBTkQ7QUFPRCxHQXhDRDtBQXlDRCxDQXhJRCIsImZpbGUiOiJzdGFydC50ZXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRsYXMgfSBmcm9tICcuLidcbmltcG9ydCBTZXJ2aWNlIGZyb20gJ0BhdGxhcy5qcy9zZXJ2aWNlJ1xuaW1wb3J0IEhvb2sgZnJvbSAnQGF0bGFzLmpzL2hvb2snXG5cbmNsYXNzIER1bW15U2VydmljZSBleHRlbmRzIFNlcnZpY2Uge31cblxuY2xhc3MgRHVtbXlIb29rIGV4dGVuZHMgSG9vayB7fVxuXG5kZXNjcmliZSgnQXRsYXM6OnN0YXJ0KCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gICAgYXRsYXMucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gIH0pXG5cblxuICBpdCgnaXMgYXN5bmMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0KCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdGFydCgpKS50by5lcXVhbChhdGxhcylcbiAgfSlcblxuICBpdCgnc2V0cyBhdGxhcy5zdGFydGVkIHRvIHRydWUnLCBhc3luYyAoKSA9PiB7XG4gICAgZXhwZWN0KGF0bGFzLnN0YXJ0ZWQpLnRvLmVxdWFsKGZhbHNlKVxuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwodHJ1ZSlcbiAgfSlcblxuICBpdCgnY2FsbHMgYXRsYXMucHJlcGFyZSgpJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICBleHBlY3QoYXRsYXMucHJlcGFyZSkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuICAgIH0pXG5cblxuICAgIGl0KCdjYWxscyBzdGFydCBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgc3RhcnQgd2l0aCB0aGUgaW5zdGFuY2UgcmV0dXJuZWQgZnJvbSBwcmVwYXJlKCkgc3RlcCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0geyB0ZXN0OiB0cnVlIH1cbiAgICAgIGF0bGFzLnNlcnZpY2VzLmR1bW15ID0gaW5zdGFuY2VcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQpLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKGluc3RhbmNlKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIG1ldGhvZCBvbmx5IG9uY2UgZm9yIGVhY2ggc2VydmljZSBmb3IgbXVsdGlwbGUgLnN0YXJ0KCkgY2FsbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0YXJ0KS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgIH0pXG5cbiAgICBpdCgncmUtdGhyb3dzIGNvbXBvbmVudCBlcnJvcnMgdGhyb3duIGR1cmluZyAuc3RhcnQoKScsICgpID0+IHtcbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUuc3RhcnQucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG5cbiAgICAgIHJldHVybiBleHBlY3QoYXRsYXMuc3RhcnQoKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL2ZhaWwhLylcbiAgICB9KVxuXG4gICAgaXQoJ3N0b3BzIGFscmVhZHkgc3RhcnRlZCBzZXJ2aWNlIGlmIG9uZSBvZiB0aGUgY29tcG9uZW50cyBmYWlscyB0byBzdGFydCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEZhaWxpbmdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuICAgICAgc2lub24uc3R1YihGYWlsaW5nU2VydmljZS5wcm90b3R5cGUsICdzdGFydCcpLnJlamVjdHMobmV3IEVycm9yKCdmYWlsIScpKVxuICAgICAgYXRsYXMuc2VydmljZSgnZmFpbGluZy1zZXJ2aWNlJywgRmFpbGluZ1NlcnZpY2UpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcbiAgICAgICAgLmNhdGNoKCgpID0+IHt9KVxuXG4gICAgICBleHBlY3QoRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdGFydCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdIb29rIGludGVyYWN0aW9ucyAtIGRpc3BhdGNoaW5nIGV2ZW50cycsICgpID0+IHtcbiAgICBjb25zdCBldmVudHMgPSBbXG4gICAgICAnYmVmb3JlU3RhcnQnLFxuICAgICAgJ2FmdGVyU3RhcnQnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICAgIGF0bGFzLmhvb2soJ2R1bW15JywgRHVtbXlIb29rKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0YXJ0IGhvb2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgICBleHBlY3QoRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0pLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgaG9va3Mgd2l0aCB0aGUgYXRsYXMgaW5zdGFuY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0YXJ0KClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KHByb3RvW2V2ZW50XSkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoYXRsYXMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGl0KCdjYW4gaGFuZGxlIGhvb2tzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgYW55IGxpc3RlbmVycycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEVtcHR5IHt9XG5cbiAgICAgIGF0bGFzLmhvb2soJ2VtcHR5JywgRW1wdHkpXG4gICAgICAvLyBUaGlzIG5vdCB0aHJvd2luZyB3aWxsIHN1ZmZpY2Ug8J+YjlxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgIH0pXG4gIH0pXG59KVxuIl19

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

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
DummyService.prototype.stop = sinon.stub().resolves();
options = {

@@ -27,3 +29,3 @@ root: __dirname,

log: {
level: 'warn'
level: 'fatal'
}

@@ -63,5 +65,2 @@ },

describe('Service interactions', () => {
beforeEach(() => {
DummyService.prototype.stop = sinon.stub().resolves();
});
it('calls stop on the service', async () => {

@@ -71,7 +70,7 @@ await atlas.stop();

});
it('passes the exposed instance to the stop() method on the service', async function () {
it('passes the exposed instance to the stop() method on the service', async () => {
const instance = {
test: true
};
this.sandbox.stub(DummyService.prototype, 'prepare').resolves(instance);
DummyService.prototype.prepare.resolves(instance);
atlas = new _.Atlas(options);

@@ -93,2 +92,16 @@ atlas.service('dummy', DummyService);

});
it('re-throws component errors thrown during .stop()', () => {
DummyService.prototype.stop.rejects(new Error('fail!'));
return expect(atlas.stop()).to.eventually.be.rejectedWith(/fail!/);
});
it('stops the other services if one of the services throws during .stop()', async () => {
class FailingService extends _service.default {}
sinon.stub(FailingService.prototype, 'stop').rejects(new Error('fail!'));
atlas.service('failing-service', FailingService);
await atlas.start();
await atlas.stop().catch(() => {});
expect(FailingService.prototype.stop).to.have.callCount(1);
expect(DummyService.prototype.stop).to.have.callCount(1);
});
});

@@ -98,4 +111,2 @@ describe('Service interactions - dispatching events', () => {

beforeEach(() => {
DummyService.prototype.prepare = sinon.stub().resolves();
for (const event of events) {

@@ -133,2 +144,2 @@ DummyHook.prototype[event] = sinon.stub().resolves();

});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3AudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiRHVtbXlBY3Rpb24iLCJEdW1teUhvb2siLCJkZXNjcmliZSIsImF0bGFzIiwib3B0aW9ucyIsImJlZm9yZUVhY2giLCJyb290IiwiX19kaXJuYW1lIiwiY29uZmlnIiwibG9nIiwibGV2ZWwiLCJzZXJ2aWNlcyIsImR1bW15IiwidGVzdCIsImhvb2tzIiwic2VydmljZSIsImFjdGlvbiIsImhvb2siLCJzdGFydCIsIml0IiwiZXhwZWN0Iiwic3RvcCIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwic3RhcnRlZCIsInByZXBhcmVkIiwicHJvdG90eXBlIiwic2lub24iLCJzdHViIiwicmVzb2x2ZXMiLCJoYXZlIiwiY2FsbENvdW50IiwiaW5zdGFuY2UiLCJzYW5kYm94IiwiYmVlbiIsImNhbGxlZFdpdGgiLCJwcm9wZXJ0eSIsIm5vdCIsImV2ZW50cyIsInByZXBhcmUiLCJldmVudCIsInByb3RvIiwiYmVmb3JlU3RvcCIsImFyZ3MiLCJhZnRlclN0b3AiLCJsYXN0Q2FsbCIsImxlbmd0aCIsImFjdGlvbnMiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxZQUFOLDBCQUFtQzs7QUFFbkMsTUFBTUMsV0FBTixDQUFrQjs7QUFFbEIsTUFBTUMsU0FBTix1QkFBNkI7O0FBRTdCQyxTQUFTLGVBQVQsRUFBMEIsTUFBTTtBQUM5QixNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsT0FBSjtBQUVBQyxhQUFXLE1BQU07QUFDZkQsY0FBVTtBQUNSRSxZQUFNQyxTQURFO0FBRVJDLGNBQVE7QUFDTkwsZUFBTztBQUNMTSxlQUFLO0FBQ0hDLG1CQUFPO0FBREo7QUFEQSxTQUREO0FBTU5DLGtCQUFVO0FBQ1JDLGlCQUFPO0FBQ0xDLGtCQUFNO0FBREQ7QUFEQyxTQU5KO0FBV05DLGVBQU87QUFDTEYsaUJBQU87QUFDTEMsa0JBQU07QUFE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O0FBRUExQixhQUFPMEIsSUFBUCxFQUFheEIsRUFBYixDQUFnQlcsSUFBaEIsQ0FBcUJnQixNQUFyQixDQUE0QixDQUE1QjtBQUNBN0IsYUFBTzBCLEtBQUssQ0FBTCxDQUFQLEVBQWdCeEIsRUFBaEIsQ0FBbUJJLEtBQW5CLENBQXlCLElBQXpCO0FBQ0QsS0FQRDtBQVFELEdBdENEO0FBeUNBeEIsV0FBUyxxQkFBVCxFQUFnQyxNQUFNO0FBQ3BDaUIsT0FBRyxzQ0FBSCxFQUEyQyxZQUFZO0FBRXJEQyxhQUFPakIsTUFBTStDLE9BQWIsRUFBc0I1QixFQUF0QixDQUF5QlcsSUFBekIsQ0FBOEJNLFFBQTlCLENBQXVDLE9BQXZDO0FBRUEsWUFBTXBDLE1BQU1rQixJQUFOLEVBQU47QUFDQUQsYUFBT2pCLE1BQU0rQyxPQUFiLEVBQXNCNUIsRUFBdEIsQ0FBeUJrQixHQUF6QixDQUE2QlAsSUFBN0IsQ0FBa0NNLFFBQWxDLENBQTJDLE9BQTNDO0FBQ0QsS0FORDtBQU9ELEdBUkQ7QUFTRCxDQTVJRCIsImZpbGUiOiJzdG9wLnRlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdGxhcyB9IGZyb20gJy4uJ1xuaW1wb3J0IFNlcnZpY2UgZnJvbSAnQGF0bGFzLmpzL3NlcnZpY2UnXG5pbXBvcnQgSG9vayBmcm9tICdAYXRsYXMuanMvaG9vaydcblxuY2xhc3MgRHVtbXlTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuXG5jbGFzcyBEdW1teUFjdGlvbiB7fVxuXG5jbGFzcyBEdW1teUhvb2sgZXh0ZW5kcyBIb29rIHt9XG5cbmRlc2NyaWJlKCdBdGxhczo6c3RvcCgpJywgKCkgPT4ge1xuICBsZXQgYXRsYXNcbiAgbGV0IG9wdGlvbnNcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgcm9vdDogX19kaXJuYW1lLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGF0bGFzOiB7XG4gICAgICAgICAgbG9nOiB7XG4gICAgICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG5cbiAgICByZXR1cm4gYXRsYXMuc3RhcnQoKVxuICB9KVxuXG5cbiAgaXQoJ2lzIGFzeW5jJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdG9wKCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdG9wKCkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdzZXRzIGF0bGFzLnN0YXJ0ZWQgYW5kIGF0bGFzLnByZXBhcmVkIHRvIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbCh0cnVlKVxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlZCkudG8uZXF1YWwodHJ1ZSlcbiAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwoZmFsc2UpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgfSlcblxuXG4gICAgaXQoJ2NhbGxzIHN0b3Agb24gdGhlIHNlcnZpY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdwYXNzZXMgdGhlIGV4cG9zZWQgaW5zdGFuY2UgdG8gdGhlIHN0b3AoKSBtZXRob2Qgb24gdGhlIHNlcnZpY2UnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0geyB0ZXN0OiB0cnVlIH1cbiAgICAgIHRoaXMuc2FuZGJveC5zdHViKER1bW15U2VydmljZS5wcm90b3R5cGUsICdwcmVwYXJlJykucmVzb2x2ZXMoaW5zdGFuY2UpXG5cbiAgICAgIGF0bGFzID0gbmV3IEF0bGFzKG9wdGlvbnMpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcblxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuYmVlbi5jYWxsZWRXaXRoKGluc3RhbmNlKVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIG1ldGhvZCBvbmx5IG9uY2UgZm9yIGVhY2ggc2VydmljZSBmb3IgbXVsdGlwbGUgLnN0b3AoKSBjYWxscycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChEdW1teVNlcnZpY2UucHJvdG90eXBlLnN0b3ApLnRvLmhhdmUuY2FsbENvdW50KDEpXG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmVzIGdldHRlcnMgZm9yIHNlcnZpY2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZXhwZWN0KGF0bGFzLnNlcnZpY2VzKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICAgIGV4cGVjdChhdGxhcy5zZXJ2aWNlcykudG8ubm90LmhhdmUucHJvcGVydHkoJ2R1bW15JylcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zIC0gZGlzcGF0Y2hpbmcgZXZlbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5wcmVwYXJlID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0b3AgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGVbZXZlbnRdKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIGJlZm9yZVN0b3AgaG9vayB3aXRoIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5iZWZvcmVTdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclN0b3AgaG9vayB3aXRoIG51bGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgY29uc3QgYXJncyA9IHByb3RvLmFmdGVyU3RvcC5sYXN0Q2FsbC5hcmdzXG5cbiAgICAgIGV4cGVjdChhcmdzKS50by5oYXZlLmxlbmd0aCgxKVxuICAgICAgZXhwZWN0KGFyZ3NbMF0pLnRvLmVxdWFsKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW1vdmVzIHRoZSBhY3Rpb24gZnJvbSB0aGlzLmFjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYW5pdHkgY2hlY2tcbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3AudGVzdC5tanMiXSwibmFtZXMiOlsiRHVtbXlTZXJ2aWNlIiwiRHVtbXlBY3Rpb24iLCJEdW1teUhvb2siLCJkZXNjcmliZSIsImF0bGFzIiwib3B0aW9ucyIsImJlZm9yZUVhY2giLCJwcm90b3R5cGUiLCJwcmVwYXJlIiwic2lub24iLCJzdHViIiwicmVzb2x2ZXMiLCJzdG9wIiwicm9vdCIsIl9fZGlybmFtZSIsImNvbmZpZyIsImxvZyIsImxldmVsIiwic2VydmljZXMiLCJkdW1teSIsInRlc3QiLCJob29rcyIsInNlcnZpY2UiLCJhY3Rpb24iLCJob29rIiwic3RhcnQiLCJpdCIsImV4cGVjdCIsInRvIiwiYmUiLCJpbnN0YW5jZW9mIiwiUHJvbWlzZSIsImVxdWFsIiwic3RhcnRlZCIsInByZXBhcmVkIiwiaGF2ZSIsImNhbGxDb3VudCIsImluc3RhbmNlIiwiYmVlbiIsImNhbGxlZFdpdGgiLCJwcm9wZXJ0eSIsIm5vdCIsInJlamVjdHMiLCJFcnJvciIsImV2ZW50dWFsbHkiLCJyZWplY3RlZFdpdGgiLCJGYWlsaW5nU2VydmljZSIsImNhdGNoIiwiZXZlbnRzIiwiZXZlbnQiLCJwcm90byIsImJlZm9yZVN0b3AiLCJhcmdzIiwiYWZ0ZXJTdG9wIiwibGFzdENhbGwiLCJsZW5ndGgiLCJhY3Rpb25zIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsWUFBTiwwQkFBbUM7O0FBRW5DLE1BQU1DLFdBQU4sQ0FBa0I7O0FBRWxCLE1BQU1DLFNBQU4sdUJBQTZCOztBQUU3QkMsU0FBUyxlQUFULEVBQTBCLE1BQU07QUFDOUIsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFFQUMsYUFBVyxNQUFNO0FBQ2ZOLGlCQUFhTyxTQUFiLENBQXVCQyxPQUF2QixHQUFpQ0MsTUFBTUMsSUFBTixHQUFhQyxRQUFiLEVBQWpDO0FBQ0FYLGlCQUFhTyxTQUFiLENBQXVCSyxJQUF2QixHQUE4QkgsTUFBTUMsSUFBTixH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c0NBQUgsRUFBMkMsWUFBWTtBQUVyREMsYUFBT3ZCLE1BQU1vRCxPQUFiLEVBQXNCNUIsRUFBdEIsQ0FBeUJPLElBQXpCLENBQThCSyxRQUE5QixDQUF1QyxPQUF2QztBQUVBLFlBQU1wQyxNQUFNUSxJQUFOLEVBQU47QUFDQWUsYUFBT3ZCLE1BQU1vRCxPQUFiLEVBQXNCNUIsRUFBdEIsQ0FBeUJhLEdBQXpCLENBQTZCTixJQUE3QixDQUFrQ0ssUUFBbEMsQ0FBMkMsT0FBM0M7QUFDRCxLQU5EO0FBT0QsR0FSRDtBQVNELENBM0pEIiwiZmlsZSI6InN0b3AudGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0bGFzIH0gZnJvbSAnLi4nXG5pbXBvcnQgU2VydmljZSBmcm9tICdAYXRsYXMuanMvc2VydmljZSdcbmltcG9ydCBIb29rIGZyb20gJ0BhdGxhcy5qcy9ob29rJ1xuXG5jbGFzcyBEdW1teVNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlIHt9XG5cbmNsYXNzIER1bW15QWN0aW9uIHt9XG5cbmNsYXNzIER1bW15SG9vayBleHRlbmRzIEhvb2sge31cblxuZGVzY3JpYmUoJ0F0bGFzOjpzdG9wKCknLCAoKSA9PiB7XG4gIGxldCBhdGxhc1xuICBsZXQgb3B0aW9uc1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygpXG4gICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wID0gc2lub24uc3R1YigpLnJlc29sdmVzKClcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICByb290OiBfX2Rpcm5hbWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXRsYXM6IHtcbiAgICAgICAgICBsb2c6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZmF0YWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNlcnZpY2VzOiB7XG4gICAgICAgICAgZHVtbXk6IHtcbiAgICAgICAgICAgIHRlc3Q6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICBkdW1teToge1xuICAgICAgICAgICAgdGVzdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICBhdGxhcy5zZXJ2aWNlKCdkdW1teScsIER1bW15U2VydmljZSlcbiAgICBhdGxhcy5hY3Rpb24oJ2R1bW15JywgRHVtbXlBY3Rpb24pXG4gICAgYXRsYXMuaG9vaygnZHVtbXknLCBEdW1teUhvb2spXG5cbiAgICByZXR1cm4gYXRsYXMuc3RhcnQoKVxuICB9KVxuXG5cbiAgaXQoJ2lzIGFzeW5jJywgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdG9wKCkpLnRvLmJlLmluc3RhbmNlb2YoUHJvbWlzZSlcbiAgfSlcblxuICBpdCgncmV0dXJucyB0aGlzJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhd2FpdCBhdGxhcy5zdG9wKCkpLnRvLmVxdWFsKGF0bGFzKVxuICB9KVxuXG4gIGl0KCdzZXRzIGF0bGFzLnN0YXJ0ZWQgYW5kIGF0bGFzLnByZXBhcmVkIHRvIGZhbHNlJywgYXN5bmMgKCkgPT4ge1xuICAgIGV4cGVjdChhdGxhcy5zdGFydGVkKS50by5lcXVhbCh0cnVlKVxuICAgIGV4cGVjdChhdGxhcy5wcmVwYXJlZCkudG8uZXF1YWwodHJ1ZSlcbiAgICBhd2FpdCBhdGxhcy5zdG9wKClcbiAgICBleHBlY3QoYXRsYXMuc3RhcnRlZCkudG8uZXF1YWwoZmFsc2UpXG4gICAgZXhwZWN0KGF0bGFzLnByZXBhcmVkKS50by5lcXVhbChmYWxzZSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdTZXJ2aWNlIGludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgc3RvcCBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ3Bhc3NlcyB0aGUgZXhwb3NlZCBpbnN0YW5jZSB0byB0aGUgc3RvcCgpIG1ldGhvZCBvbiB0aGUgc2VydmljZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0geyB0ZXN0OiB0cnVlIH1cbiAgICAgIER1bW15U2VydmljZS5wcm90b3R5cGUucHJlcGFyZS5yZXNvbHZlcyhpbnN0YW5jZSlcblxuICAgICAgYXRsYXMgPSBuZXcgQXRsYXMob3B0aW9ucylcbiAgICAgIGF0bGFzLnNlcnZpY2UoJ2R1bW15JywgRHVtbXlTZXJ2aWNlKVxuXG4gICAgICBhd2FpdCBhdGxhcy5zdGFydCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5iZWVuLmNhbGxlZFdpdGgoaW5zdGFuY2UpXG4gICAgfSlcblxuICAgIGl0KCdjYWxscyB0aGUgbWV0aG9kIG9ubHkgb25jZSBmb3IgZWFjaCBzZXJ2aWNlIGZvciBtdWx0aXBsZSAuc3RvcCgpIGNhbGxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuXG4gICAgaXQoJ3JlbW92ZXMgZ2V0dGVycyBmb3Igc2VydmljZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBleHBlY3QoYXRsYXMuc2VydmljZXMpLnRvLmhhdmUucHJvcGVydHkoJ2R1bW15JylcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLnNlcnZpY2VzKS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnZHVtbXknKVxuICAgIH0pXG5cbiAgICBpdCgncmUtdGhyb3dzIGNvbXBvbmVudCBlcnJvcnMgdGhyb3duIGR1cmluZyAuc3RvcCgpJywgKCkgPT4ge1xuICAgICAgRHVtbXlTZXJ2aWNlLnByb3RvdHlwZS5zdG9wLnJlamVjdHMobmV3IEVycm9yKCdmYWlsIScpKVxuXG4gICAgICByZXR1cm4gZXhwZWN0KGF0bGFzLnN0b3AoKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL2ZhaWwhLylcbiAgICB9KVxuXG4gICAgaXQoJ3N0b3BzIHRoZSBvdGhlciBzZXJ2aWNlcyBpZiBvbmUgb2YgdGhlIHNlcnZpY2VzIHRocm93cyBkdXJpbmcgLnN0b3AoKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNsYXNzIEZhaWxpbmdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7fVxuICAgICAgc2lub24uc3R1YihGYWlsaW5nU2VydmljZS5wcm90b3R5cGUsICdzdG9wJykucmVqZWN0cyhuZXcgRXJyb3IoJ2ZhaWwhJykpXG4gICAgICBhdGxhcy5zZXJ2aWNlKCdmYWlsaW5nLXNlcnZpY2UnLCBGYWlsaW5nU2VydmljZSlcblxuICAgICAgYXdhaXQgYXRsYXMuc3RhcnQoKVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSlcblxuICAgICAgZXhwZWN0KEZhaWxpbmdTZXJ2aWNlLnByb3RvdHlwZS5zdG9wKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgZXhwZWN0KER1bW15U2VydmljZS5wcm90b3R5cGUuc3RvcCkudG8uaGF2ZS5jYWxsQ291bnQoMSlcbiAgICB9KVxuICB9KVxuXG5cbiAgZGVzY3JpYmUoJ1NlcnZpY2UgaW50ZXJhY3Rpb25zIC0gZGlzcGF0Y2hpbmcgZXZlbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICdiZWZvcmVTdG9wJyxcbiAgICAgICdhZnRlclN0b3AnLFxuICAgIF1cblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgLy8gU3R1YiBvdXQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgRHVtbXlIb29rLnByb3RvdHlwZVtldmVudF0gPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIHN0b3AgaG9va3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBhdGxhcy5zdG9wKClcblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXhwZWN0KER1bW15SG9vay5wcm90b3R5cGVbZXZlbnRdKS50by5oYXZlLmNhbGxDb3VudCgxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpdCgnY2FsbHMgdGhlIGJlZm9yZVN0b3AgaG9vayB3aXRoIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3RvID0gRHVtbXlIb29rLnByb3RvdHlwZVxuICAgICAgYXdhaXQgYXRsYXMuc3RvcCgpXG5cbiAgICAgIGV4cGVjdChwcm90by5iZWZvcmVTdG9wKS50by5oYXZlLmJlZW4uY2FsbGVkV2l0aChhdGxhcylcbiAgICB9KVxuXG4gICAgaXQoJ2NhbGxzIHRoZSBhZnRlclN0b3AgaG9vayB3aXRoIG51bGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90byA9IER1bW15SG9vay5wcm90b3R5cGVcbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgY29uc3QgYXJncyA9IHByb3RvLmFmdGVyU3RvcC5sYXN0Q2FsbC5hcmdzXG5cbiAgICAgIGV4cGVjdChhcmdzKS50by5oYXZlLmxlbmd0aCgxKVxuICAgICAgZXhwZWN0KGFyZ3NbMF0pLnRvLmVxdWFsKG51bGwpXG4gICAgfSlcbiAgfSlcblxuXG4gIGRlc2NyaWJlKCdBY3Rpb24gaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdyZW1vdmVzIHRoZSBhY3Rpb24gZnJvbSB0aGlzLmFjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBTYW5pdHkgY2hlY2tcbiAgICAgIGV4cGVjdChhdGxhcy5hY3Rpb25zKS50by5oYXZlLnByb3BlcnR5KCdkdW1teScpXG5cbiAgICAgIGF3YWl0IGF0bGFzLnN0b3AoKVxuICAgICAgZXhwZWN0KGF0bGFzLmFjdGlvbnMpLnRvLm5vdC5oYXZlLnByb3BlcnR5KCdkdW1teScpXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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