Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

otel-cli

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

otel-cli - npm Package Compare versions

Comparing version
1.0.0
to
1.0.1
+7
-0
CHANGELOG.md

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

<a name="1.0.0"></a>
# 1.0.0 (2023-07-09)
### Features
* Ready to use public release
<a name="0.0.1"></a>

@@ -8,0 +15,0 @@ # 0.0.1 (2023-07-09)

+13
-14

@@ -27,3 +27,2 @@ "use strict";

exports.ExportCommandExecutor = void 0;
const logger_1 = require("../../logger");
const exit_1 = require("../../exit");

@@ -40,8 +39,8 @@ const Span_1 = require("../../domain/Span");

return new Map((keyValuePairs || []).map((pair) => {
const parts = pair.split('=');
if (parts.length != 2) {
(0, logger_1.error)(`Key-value pair must be in "key=value" format: ${pair}`);
const separatorIdx = pair.indexOf('=');
if (separatorIdx < 0) {
logger.error(`Key-value pair must be in "key=value" format: ${pair}`);
(0, exit_1.exit)(1);
}
return [parts[0], parts[1]];
return [pair.substring(0, separatorIdx), pair.substring(separatorIdx + 1)];
}));

@@ -92,3 +91,3 @@ }

if (!this.exporterOTLPEndpoint && !this.exporterOTLPTracesEndpoint) {
(0, logger_1.error)('One of the OTEL Exporter OTLP endpoint ' +
logger.error('One of the OTEL Exporter OTLP endpoint ' +
'or OTEL Exporter OTLP traces endpoint configurations must be specified!');

@@ -98,19 +97,19 @@ (0, exit_1.exit)(1);

if (this.traceParent && !(0, utils_1.validateTraceParent)(this.traceParent)) {
(0, logger_1.error)(`Invalid trace parent: ${this.traceParent}!`);
logger.error(`Invalid trace parent: ${this.traceParent}!`);
(0, exit_1.exit)(1);
}
if (!this.traceId) {
(0, logger_1.error)(`Trace id is not specified: ${this.traceId}!`);
logger.error(`Trace id is not specified: ${this.traceId}!`);
(0, exit_1.exit)(1);
}
if (!(0, utils_1.validateTraceId)(this.traceId)) {
(0, logger_1.error)(`Invalid trace id: ${this.traceId}!`);
logger.error(`Invalid trace id: ${this.traceId}!`);
(0, exit_1.exit)(1);
}
if (!(0, utils_1.validateSpanId)(this.spanId)) {
(0, logger_1.error)(`Invalid span id: ${this.spanId}!`);
logger.error(`Invalid span id: ${this.spanId}!`);
(0, exit_1.exit)(1);
}
if (this.parentSpanId && !(0, utils_1.validateSpanId)(this.parentSpanId)) {
(0, logger_1.error)(`Invalid parent span id: ${this.parentSpanId}!`);
logger.error(`Invalid parent span id: ${this.parentSpanId}!`);
(0, exit_1.exit)(1);

@@ -122,3 +121,3 @@ }

!this.spanStartTimeSecs) {
(0, logger_1.error)('Span start time must be specified in one of the supported formats ' +
logger.error('Span start time must be specified in one of the supported formats ' +
'(nanoseconds, microseconds, milliseconds, or seconds)!');

@@ -131,3 +130,3 @@ (0, exit_1.exit)(1);

!this.spanEndTimeSecs) {
(0, logger_1.error)('Span end time must be specified in one of the supported formats ' +
logger.error('Span end time must be specified in one of the supported formats ' +
'(nanoseconds, microseconds, milliseconds, or seconds)!');

@@ -348,2 +347,2 @@ (0, exit_1.exit)(1);

exports.ExportCommandExecutor = ExportCommandExecutor;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0Q29tbWFuZEV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmQvZXhwb3J0L0V4cG9ydENvbW1hbmRFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHlDQUFxQztBQUNyQyxxQ0FBa0M7QUFDbEMsNENBQStFO0FBQy9FLHVDQVFxQjtBQUlyQiwrQ0FJeUI7QUFFekIseUNBQXlGO0FBQ3pGLHFEQUF1QztBQUN2QyxvQ0FBb0M7QUFFcEMseUNBQTBEO0FBRTFELE1BQWEscUJBQXFCO0lBMEJ0QixjQUFjLENBQUMsYUFBdUI7UUFDMUMsT0FBTyxJQUFJLEdBQUcsQ0FDVixDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBYSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLElBQUEsY0FBSyxFQUNELGlEQUFpRCxJQUFJLEVBQUUsQ0FDMUQsQ0FBQztnQkFDRixJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLCtCQUErQixDQUFDLE9BQXFCO1FBQ3pELE1BQU0sV0FBVyxHQUFXLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDM0UsSUFBSSxXQUFXLEVBQUU7WUFDYixPQUFPLElBQUEscUNBQTZCLEVBQUMsV0FBVyxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJ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SUFBSSxrQkFBTSxDQUFDLDBCQUEwQixFQUFFLGFBQWEsQ0FBQzthQUNoRCxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDMUIsT0FBTyxDQUFDLHFCQUFjLENBQUMscUJBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QyxPQUFPLENBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDOUQsQ0FDUjthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsZ0NBQWdDLEVBQUUsZ0JBQWdCLENBQUM7YUFDekQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQ2xDO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FDTixzQ0FBc0MsRUFDdEMsMEZBQTBGLENBQUM7YUFDMUYsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQ2xDLENBQUM7SUFDVixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFxQjtRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixNQUFNLFlBQVksR0FBaUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDOUQsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztDQUNKO0FBcmFELHNEQXFhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmRFeGVjdXRvciB9IGZyb20gJy4uL0NvbW1hbmRFeGVjdXRvcic7XG5pbXBvcnQgeyBlcnJvciB9IGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBleGl0IH0gZnJvbSAnLi4vLi4vZXhpdCc7XG5pbXBvcnQgeyBTcGFuLCBTcGFuS2luZCwgU3BhblN0YXR1cywgU3BhblN0YXR1c0NvZGUgfSBmcm9tICcuLi8uLi9kb21haW4vU3Bhbic7XG5pbXBvcnQge1xuICAgIGV4dHJhY3RTcGFuSWRGcm9tVHJhY2VQYXJlbnQsXG4gICAgZXh0cmFjdFRyYWNlSWRGcm9tVHJhY2VQYXJlbnQsXG4gICAgZmxhdHRlbkF0dHJpYnV0ZXMsXG4gICAgZ2VuZXJhdGVTcGFuSWQsXG4gICAgdmFsaWRhdGVTcGFuSWQsXG4gICAgdmFsaWRhdGVUcmFjZUlkLFxuICAgIHZhbGlkYXRlVHJhY2VQYXJlbnQsXG59IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9BdHRyaWJ1dGUnO1xuaW1wb3J0IHsgU2NvcGVTcGFucyB9IGZyb20gJy4uLy4uL2RvbWFpbi9TY29wZVNwYW5zJztcbmltcG9ydCB7IFJlc291cmNlU3BhbnMgfSBmcm9tICcuLi8uLi9kb21haW4vUmVzb3VyY2VTcGFucyc7XG5pbXBvcnQge1xuICAgIE9URUxfQ0xJX05BTUUsXG4gICAgT1RFTF9DTElfVkVSU0lPTixcbiAgICBSRVNPVVJDRV9BVFRSSUJVVEVTLFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVHJhY2VSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vZG9tYWluL1RyYWNlUmVxdWVzdCc7XG5pbXBvcnQgeyBjcmVhdGVUcmFjZUV4cG9ydGVyLCBFeHBvcnRlck9UTFBQcm90b2NvbHMsIFRyYWNlRXhwb3J0ZXIgfSBmcm9tICcuLi8uLi9leHBvcnQnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJy4uL2luZGV4JztcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uLCBPcHRpb25WYWx1ZXMgfSBmcm9tICdjb21tYW5kZXInO1xuXG5leHBvcnQgY2xhc3MgRXhwb3J0Q29tbWFuZEV4ZWN1dG9yIGltcGxlbWVudHMgQ29tbWFuZEV4ZWN1dG9yIHtcbiAgICBwcml2YXRlIHZlcmJvc2VFbmFibGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQRW5kcG9pbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGV4cG9ydGVyT1RMUFRyYWNlc0VuZHBvaW50OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBQcm90b2NvbDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQSGVhZGVyczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcml2YXRlIHRyYWNlUGFyZW50OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB0cmFjZVBhcmVudFByaW50OiBib29sZWFuO1xuICAgIHByaXZhdGUgdHJhY2VJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhbklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwYXJlbnRTcGFuSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHNwYW5OYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhbktpbmQ6IHN0cmluZztcbiAgICBwcml2YXRlIHNwYW5TdGFydFRpbWVOYW5vczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZU1pY3JvczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZU1pbGxpczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZVNlY3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5FbmRUaW1lTmFub3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5FbmRUaW1lTWljcm9zOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuRW5kVGltZU1pbGxpczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhbkVuZFRpbWVTZWNzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhdHVzQ29kZTogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhblN0YXR1c01lc3NhZ2U6IHN0cmluZztcbiAgICBwcml2YXRlIHNwYW5BdHRyaWJ1dGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgcHJpdmF0ZSBfcGFyc2VLZXlWYWx1ZShrZXlWYWx1ZVBhaXJzOiBzdHJpbmdbXSk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbmV3IE1hcChcbiAgICAgICAgICAgIChrZXlWYWx1ZVBhaXJzIHx8IFtdKS5tYXAoKHBhaXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgS2V5LXZhbHVlIHBhaXIgbXVzdCBiZSBpbiBcImtleT12YWx1ZVwiIGZvcm1hdDogJHtwYWlyfWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1swXSwgcGFydHNbMV1dO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlUb0dldFRyYWNlSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9uczogT3B0aW9uVmFsdWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdHJhY2VQYXJlbnQ6IHN0cmluZyA9IG9wdGlvbnMudHJhY2VQYXJlbnQgfHwgcHJvY2Vzcy5lbnYuVFJBQ0VQQVJFTlQ7XG4gICAgICAgIGlmICh0cmFjZVBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RUcmFjZUlkRnJvbVRyYWNlUGFyZW50KHRyYWNlUGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RyeVRvR2V0UGFyZW50U3BhbklkRnJvbVRyYWNlUGFyZW50KG9wdGlvbnM6IE9wdGlvblZhbHVlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50OiBzdHJpbmcgPSBvcHRpb25zLnRyYWNlUGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICBpZiAodHJhY2VQYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0U3BhbklkRnJvbVRyYWNlUGFyZW50KHRyYWNlUGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlT3B0aW9ucyhvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52ZXJib3NlRW5hYmxlZCA9IG9wdGlvbnMudmVyYm9zZTtcbiAgICAgICAgbG9nZ2VyLnNldERlYnVnRW5hYmxlZCh0aGlzLnZlcmJvc2VFbmFibGVkKTtcblxuICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUEVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludDtcbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBUcmFjZXNFbmRwb2ludCA9IG9wdGlvbnMudHJhY2VzRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQUHJvdG9jb2wgPSBvcHRpb25zLnByb3RvY29sO1xuICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUEhlYWRlcnMgPSB0aGlzLl9wYXJzZUtleVZhbHVlKG9wdGlvbnMuaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy50cmFjZVBhcmVudCA9IG9wdGlvbnMudHJhY2VwYXJlbnQgfHwgcHJvY2Vzcy5lbnYuVFJBQ0VQQVJFTlQ7XG4gICAgICAgIHRoaXMudHJhY2VQYXJlbnRQcmludCA9IG9wdGlvbnMudHJhY2VwYXJlbnRQcmludDtcbiAgICAgICAgdGhpcy50cmFjZUlkID0gb3B0aW9ucy50cmFjZUlkIHx8IHRoaXMuX3RyeVRvR2V0VHJhY2VJZEZyb21UcmFjZVBhcmVudChvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zcGFuSWQgPSBvcHRpb25zLnNwYW5JZDtcbiAgICAgICAgdGhpcy5wYXJlbnRTcGFuSWQgPSBvcHRpb25zLnBhcmVudFNwYW5JZCB8fCB0aGlzLl90cnlUb0dldFBhcmVudFNwYW5JZEZyb21UcmFjZVBhcmVudChvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zcGFuTmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IG9wdGlvbnMuc2VydmljZU5hbWU7XG4gICAgICAgIHRoaXMuc3BhbktpbmQgPSBvcHRpb25zLmtpbmQ7XG4gICAgICAgIHRoaXMuc3BhblN0YXJ0VGltZU5hbm9zID0gcGFyc2VJbnQob3B0aW9ucy5zdGFydFRpbWVOYW5vcyk7XG4gICAgICAgIHRoaXMuc3BhblN0YXJ0VGltZU1pY3JvcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTWljcm9zKTtcbiAgICAgICAgdGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzID0gcGFyc2VJbnQob3B0aW9ucy5zdGFydFRpbWVNaWxsaXMpO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVTZWNzID0gcGFyc2VJbnQob3B0aW9ucy5zdGFydFRpbWVTZWNzKTtcbiAgICAgICAgdGhpcy5zcGFuRW5kVGltZU5hbm9zID0gcGFyc2VJbnQob3B0aW9ucy5lbmRUaW1lTmFub3MpO1xuICAgICAgICB0aGlzLnNwYW5FbmRUaW1lTWljcm9zID0gcGFyc2VJbnQob3B0aW9ucy5lbmRUaW1lTWljcm9zKTtcbiAgICAgICAgdGhpcy5zcGFuRW5kVGltZU1pbGxpcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU1pbGxpcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVTZWNzID0gcGFyc2VJbnQob3B0aW9ucy5lbmRUaW1lU2Vjcyk7XG4gICAgICAgIHRoaXMuc3BhblN0YXR1c0NvZGUgPSBvcHRpb25zLnN0YXR1c0NvZGU7XG4gICAgICAgIHRoaXMuc3BhblN0YXR1c01lc3NhZ2UgPSBvcHRpb25zLnN0YXR1c01lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3BhbkF0dHJpYnV0ZXMgPSB0aGlzLl9wYXJzZUtleVZhbHVlKG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZXhwb3J0ZXJPVExQRW5kcG9pbnQgJiYgIXRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICdPbmUgb2YgdGhlIE9URUwgRXhwb3J0ZXIgT1RMUCBlbmRwb2ludCAnICtcbiAgICAgICAgICAgICAgICAgICAgJ29yIE9URUwgRXhwb3J0ZXIgT1RMUCB0cmFjZXMgZW5kcG9pbnQgY29uZmlndXJhdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQhJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudHJhY2VQYXJlbnQgJiYgIXZhbGlkYXRlVHJhY2VQYXJlbnQodGhpcy50cmFjZVBhcmVudCkpIHtcbiAgICAgICAgICAgIGVycm9yKGBJbnZhbGlkIHRyYWNlIHBhcmVudDogJHt0aGlzLnRyYWNlUGFyZW50fSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRyYWNlSWQpIHtcbiAgICAgICAgICAgIGVycm9yKGBUcmFjZSBpZCBpcyBub3Qgc3BlY2lmaWVkOiAke3RoaXMudHJhY2VJZH0hYCk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVUcmFjZUlkKHRoaXMudHJhY2VJZCkpIHtcbiAgICAgICAgICAgIGVycm9yKGBJbnZhbGlkIHRyYWNlIGlkOiAke3RoaXMudHJhY2VJZH0hYCk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsaWRhdGVTcGFuSWQodGhpcy5zcGFuSWQpKSB7XG4gICAgICAgICAgICBlcnJvcihgSW52YWxpZCBzcGFuIGlkOiAke3RoaXMuc3BhbklkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50U3BhbklkICYmICF2YWxpZGF0ZVNwYW5JZCh0aGlzLnBhcmVudFNwYW5JZCkpIHtcbiAgICAgICAgICAgIGVycm9yKGBJbnZhbGlkIHBhcmVudCBzcGFuIGlkOiAke3RoaXMucGFyZW50U3BhbklkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuc3BhblN0YXJ0VGltZU5hbm9zICYmXG4gICAgICAgICAgICAhdGhpcy5zcGFuRW5kVGltZU1pY3JvcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhblN0YXJ0VGltZU1pbGxpcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhblN0YXJ0VGltZVNlY3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBlcnJvcihcbiAgICAgICAgICAgICAgICAnU3BhbiBzdGFydCB0aW1lIG11c3QgYmUgc3BlY2lmaWVkIGluIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgJyArXG4gICAgICAgICAgICAgICAgICAgICcobmFub3NlY29uZHMsIG1pY3Jvc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBvciBzZWNvbmRzKSEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5zcGFuRW5kVGltZU5hbm9zICYmXG4gICAgICAgICAgICAhdGhpcy5zcGFuRW5kVGltZU1pY3JvcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVNaWxsaXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lU2Vjc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIGVuZCB0aW1lIG11c3QgYmUgc3BlY2lmaWVkIGluIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgJyArXG4gICAgICAgICAgICAgICAgICAgICcobmFub3NlY29uZHMsIG1pY3Jvc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBvciBzZWNvbmRzKSEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQgfHxcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQRW5kcG9pbnQgKyAnL3YxL3RyYWNlcydcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlU3BhblN0YXJ0VGltZU5hbm9zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNwYW5TdGFydFRpbWVOYW5vcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhblN0YXJ0VGltZU5hbm9zO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhblN0YXJ0VGltZU1pY3Jvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhblN0YXJ0VGltZU1pY3JvcyAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzICogMTAwMDAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5TdGFydFRpbWVTZWNzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lU2VjcyAqIDEwMDAwMDAwMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNwYW4gc3RhcnQgdGltZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVTcGFuRW5kVGltZU5hbm9zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNwYW5FbmRUaW1lTmFub3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5FbmRUaW1lTmFub3M7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuRW5kVGltZU1pY3Jvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVNaWNyb3MgKiAxMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5FbmRUaW1lTWlsbGlzICogMTAwMDAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5FbmRUaW1lU2Vjcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVTZWNzICogMTAwMDAwMDAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3BhbiBlbmQgdGltZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX25vcm1hbGl6ZUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaWQgJiYgaWQuc3RhcnRzV2l0aCgnMHgnKSkge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoJzB4Jy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVTcGFuKCk6IFNwYW4ge1xuICAgICAgICBjb25zdCB0cmFjZUlkOiBzdHJpbmcgPSB0aGlzLl9ub3JtYWxpemVJZCh0aGlzLnRyYWNlSWQpO1xuICAgICAgICBjb25zdCBzcGFuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuX25vcm1hbGl6ZUlkKHRoaXMuc3BhbklkKTtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fbm9ybWFsaXplSWQodGhpcy5wYXJlbnRTcGFuSWQpO1xuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSB0aGlzLnNwYW5OYW1lO1xuICAgICAgICBjb25zdCBraW5kOiBTcGFuS2luZCA9IFNwYW5LaW5kW3RoaXMuc3BhbktpbmQgYXMga2V5b2YgdHlwZW9mIFNwYW5LaW5kXTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lVW5peE5hbm86IG51bWJlciA9IHRoaXMuX3Jlc29sdmVTcGFuU3RhcnRUaW1lTmFub3MoKTtcbiAgICAgICAgY29uc3QgZW5kVGltZVVuaXhOYW5vOiBudW1iZXIgPSB0aGlzLl9yZXNvbHZlU3BhbkVuZFRpbWVOYW5vcygpO1xuICAgICAgICBjb25zdCBzdGF0dXNDb2RlOiBTcGFuU3RhdHVzQ29kZSA9XG4gICAgICAgICAgICBTcGFuU3RhdHVzQ29kZVt0aGlzLnNwYW5TdGF0dXNDb2RlIGFzIGtleW9mIHR5cGVvZiBTcGFuU3RhdHVzQ29kZV07XG4gICAgICAgIGNvbnN0IHN0YXR1c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuc3BhblN0YXR1c01lc3NhZ2U7XG4gICAgICAgIGNvbnN0IHN0YXR1czogU3BhblN0YXR1cyA9IHtcbiAgICAgICAgICAgIGNvZGU6IHN0YXR1c0NvZGUgfHwgU3BhblN0YXR1c0NvZGUuVU5TRVQsXG4gICAgICAgICAgICBtZXNzYWdlOiBzdGF0dXNNZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IGZsYXR0ZW5BdHRyaWJ1dGVzKHRoaXMuc3BhbkF0dHJpYnV0ZXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgc3BhbklkLFxuICAgICAgICAgICAgdHJhY2VTdGF0ZSxcbiAgICAgICAgICAgIHBhcmVudFNwYW5JZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgc3RhcnRUaW1lVW5peE5hbm8sXG4gICAgICAgICAgICBlbmRUaW1lVW5peE5hbm8sXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogMCxcbiAgICAgICAgfSBhcyBTcGFuO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVNjb3BlU3BhbnMoKTogU2NvcGVTcGFuc1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBPVEVMX0NMSV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBPVEVMX0NMSV9WRVJTSU9OLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwYW5zOiBbdGhpcy5fY3JlYXRlU3BhbigpXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVzb3VyY2VTcGFucygpOiBSZXNvdXJjZVNwYW5zW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFJFU09VUkNFX0FUVFJJQlVURVMuU0VSVklDRV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiB0aGlzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NvcGVTcGFuczogdGhpcy5fY3JlYXRlU2NvcGVTcGFucygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVUcmFjZVJlcXVlc3QoKTogVHJhY2VSZXF1ZXN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc291cmNlU3BhbnM6IHRoaXMuX2NyZWF0ZVJlc291cmNlU3BhbnMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9leHBvcnRUcmFjZVJlcXVlc3QoXG4gICAgICAgIHRyYWNlUmVxdWVzdDogVHJhY2VSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRXhwb3J0ZXJPVExQRW5kcG9pbnQgPVxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUV4cG9ydGVyT1RMUEVuZHBvaW50KCk7XG4gICAgICAgIGNvbnN0IHRyYWNlRXhwb3J0ZXI6IFRyYWNlRXhwb3J0ZXIgPSBjcmVhdGVUcmFjZUV4cG9ydGVyKFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBQcm90b2NvbCxcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpLFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgIGBFeHBvcnRpbmcgdHJhY2UgcmVxdWVzdCB0byA6ICR7cmVzb2x2ZWRFeHBvcnRlck9UTFBFbmRwb2ludH1gLFxuICAgICAgICAgICAgICAgICAgICB0cmFjZVJlcXVlc3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdHJhY2VFeHBvcnRlci5leHBvcnQodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRXhwb3J0ZWQgdHJhY2UgcmVxdWVzdCcpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZXhwb3J0IHRyYWNlIHJlcXVlc3QnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVUcmFjZVBhcmVudCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAwLSR7dGhpcy50cmFjZUlkfS0ke3RoaXMuc3BhbklkfS0wMWA7XG4gICAgfVxuXG4gICAgY29tbWFuZE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENvbW1hbmRzLkVYUE9SVDtcbiAgICB9XG5cbiAgICBkZWZpbmVPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpIHtcbiAgICAgICAgY29tbWFuZFxuICAgICAgICAgICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctdiwgLS12ZXJib3NlJywgJ0VuYWJsZSB2ZXJib3NlIG1vZGUnKVxuICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1ZFUkJPU0UgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9DTElfVkVSQk9TRS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctZSwgLS1lbmRwb2ludCA8dXJsPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgZW5kcG9pbnQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdGUsIC0tdHJhY2VzLWVuZHBvaW50IDx1cmw+JywgJ09URUwgRXhwb3J0ZXIgT1RMUCB0cmFjZXMgZW5kcG9pbnQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXAsIC0tcHJvdG9jb2wgPHByb3RvY29sPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgcHJvdG9jb2wnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfUFJPVE9DT0wgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydGVyT1RMUFByb3RvY29scy5IVFRQX0pTT05cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuY2hvaWNlcyhPYmplY3QudmFsdWVzKEV4cG9ydGVyT1RMUFByb3RvY29scykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1oLCAtLWhlYWRlcnMgPGtleS12YWx1ZS1wYWlycy4uLj4nLCAnT1RFTCBFeHBvcnRlciBPVExQIGhlYWRlcnMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTLnNwbGl0KCcsJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy10cCwgLS10cmFjZXBhcmVudCA8aGVhZGVyPicsICdUcmFjZXBhcmVudCBoZWFkZXIgaW4gVzNDIHRyYWNlIGNvbnRleHQgZm9ybWF0JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdHBwLCAtLXRyYWNlcGFyZW50LXByaW50JywgJ1ByaW50IHRyYWNlcGFyZW50IGhlYWRlciBpbiBXM0MgdHJhY2UgY29udGV4dCBmb3JtYXQgZm9yIHRoZSBleHBvcnRlZCBzcGFuJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1RSQUNFUEFSRU5UX1BSSU5UICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0NMSV9UUkFDRVBBUkVOVF9QUklOVC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy10LCAtLXRyYWNlLWlkIDxpZD4nLCAnVHJhY2UgaWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfVFJBQ0VfSUQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zLCAtLXNwYW4taWQgPGlkPicsICdTcGFuIGlkJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KGdlbmVyYXRlU3BhbklkKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1wLCAtLXBhcmVudC1zcGFuLWlkIDxpZD4nLCAnUGFyZW50IHNwYW4gaWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnU3BhbiBuYW1lJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXNuLCAtLXNlcnZpY2UtbmFtZSA8bmFtZT4nLCAnU2VydmljZSBuYW1lJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfU0VSVklDRV9OQU1FIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX1NFUlZJQ0VfTkFNRSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLWssIC0ta2luZCA8a2luZD4nLCAnU3BhbiBraW5kJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KFNwYW5LaW5kW1NwYW5LaW5kLklOVEVSTkFMXSlcbiAgICAgICAgICAgICAgICAgICAgLmNob2ljZXMoT2JqZWN0LmtleXMoU3BhbktpbmQpLmZpbHRlcigobykgPT4gaXNOYU4oTnVtYmVyKG8pKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1uYW5vcyA8bmFub3M+JywgJ1N0YXJ0IHRpbWUgaW4gbmFub3NlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1zdGFydC10aW1lLW1pY3JvcyA8bWljcm9zPicsICdTdGFydCB0aW1lIGluIG1pY3Jvc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLXN0YXJ0LXRpbWUtbWlsbGlzIDxtaWxsaXM+JywgJ1N0YXJ0IHRpbWUgaW4gbWlsbGlzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1zZWNzIDxzZWNzPicsICdTdGFydCB0aW1lIGluIHNlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1uYW5vcyA8bmFub3M+JywgJ0VuZCB0aW1lIGluIG5hbm9zZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tZW5kLXRpbWUtbWljcm9zIDxtaWNyb3M+JywgJ0VuZCB0aW1lIGluIG1pY3Jvc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLWVuZC10aW1lLW1pbGxpcyA8bWlsbGlzPicsICdFbmQgdGltZSBpbiBtaWxsaXNlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1zZWNzIDxzZWNzPicsICdFbmQgdGltZSBpbiBzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zYyAtLXN0YXR1cy1jb2RlIDxjb2RlPicsICdTdGF0dXMgY29kZScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZS5VTlNFVF0pXG4gICAgICAgICAgICAgICAgICAgIC5jaG9pY2VzKFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoU3BhblN0YXR1c0NvZGUpLmZpbHRlcigobykgPT4gaXNOYU4oTnVtYmVyKG8pKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctc20gLS1zdGF0dXMtbWVzc2FnZSA8bWVzc2FnZT4nLCAnU3RhdHVzIG1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgJy1hIC0tYXR0cmlidXRlcyA8a2V5LXZhbHVlLXBhaXJzLi4uPicsXG4gICAgICAgICAgICAgICAgICAgICdTcGFuIGF0dHJpYnV0ZXMgYXMgc3BhY2Ugc2VwZXJhdGVkIGtleS12YWx1ZSBwYWlycyAoa2V5MT12YWx1ZTEga2V5Mj12YWx1ZTIga2V5Mz12YWx1ZTMpJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGV4ZWN1dGUob3B0aW9uczogT3B0aW9uVmFsdWVzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3BhcnNlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jaGVja09wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCB0cmFjZVJlcXVlc3Q6IFRyYWNlUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZVRyYWNlUmVxdWVzdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9leHBvcnRUcmFjZVJlcXVlc3QodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgaWYgKHRoaXMudHJhY2VQYXJlbnRQcmludCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5fZ2VuZXJhdGVUcmFjZVBhcmVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwb3J0Q29tbWFuZEV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmQvZXhwb3J0L0V4cG9ydENvbW1hbmRFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFDQUFrQztBQUNsQyw0Q0FBK0U7QUFDL0UsdUNBUXFCO0FBSXJCLCtDQUl5QjtBQUV6Qix5Q0FBeUY7QUFDekYscURBQXVDO0FBQ3ZDLG9DQUFvQztBQUVwQyx5Q0FBMEQ7QUFFMUQsTUFBYSxxQkFBcUI7SUEwQnRCLGNBQWMsQ0FBQyxhQUF1QjtRQUMxQyxPQUFPLElBQUksR0FBRyxDQUNWLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDOUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixNQUFNLENBQUMsS0FBSyxDQUNSLGlEQUFpRCxJQUFJLEVBQUUsQ0FDMUQsQ0FBQztnQkFDRixJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQzthQUNYO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxPQUFxQjtRQUN6RCxNQUFNLFdBQVcsR0FBVyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQzNFLElBQUksV0FBVyxFQUFFO1lBQ2IsT0FBTyxJQUFBLHFDQUE2QixFQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLG9DQUFvQyxDQUFDLE9BQXFCO1FBQzlELE1BQU0sV0FBVyxHQUFXLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDM0UsSUFBSSxXQUFXLEVBQUU7WUFDYixPQUFPLElBQUEsb0NBQTRCLEVBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQXFCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN0QyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUN6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUNoRSxNQUFNLENBQUMsS0FBSyxDQUNSLHlDQUF5QztnQkFDckMseUVBQXlFLENBQ2hGLENBQUM7WUFDRixJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBQSwyQkFBbUIsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDNUQsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDM0QsSUFBQSxXQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDNUQsSUFBQSxXQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELElBQUEsV0FBSSxFQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7UUFDRCxJQUFJLENBQUMsSUFBQSxzQkFBYyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBQSxzQkFBYyxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUM5RCxJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFDSSxDQUFDLElBQUksQ0FBQyxrQkFBa0I7WUFDeEIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZCLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUN6QixDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFDekI7WUFDRSxNQUFNLENBQUMsS0FBSyxDQUNSLG9FQUFvRTtnQkFDaEUsd0RBQXdELENBQy9ELENBQUM7WUFDRixJQUFBLFdBQUksRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFDSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDdEIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZCLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUN2QixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQ3ZCO1lBQ0UsTUFBTSxDQUFDLEtBQUssQ0FDUixrRUFBa0U7Z0JBQzlELHdEQUF3RCxDQUMvRCxDQUFDO1lBQ0YsSUFBQSxXQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUM7SUFFTyw0QkFBNEI7UUFDaEMsT0FBTyxDQUNILElBQUksQ0FBQywwQkFBMEI7WUFDL0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FDM0MsQ0FBQztJQUNOLENBQUM7SUFFTywwQkFBMEI7UUFDOUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FDbEM7YUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7U0FDN0M7YUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7U0FDOUM7YUFBTTtZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDaEM7YUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDeEM7YUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQztTQUM1QzthQUFNO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxFQUFVO1FBQzNCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sV0FBVztRQUNmLE1BQU0sT0FBTyxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUF1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUF1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RSxNQUFNLElBQUksR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFhLGVBQVEsQ0FBQyxJQUFJLENBQUMsUUFBaUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0saUJBQWlCLEdBQVcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDcEUsTUFBTSxlQUFlLEdBQVcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQ1oscUJBQWMsQ0FBQyxJQUFJLENBQUMsY0FBNkMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sYUFBYSxHQUF1QixJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQWU7WUFDdkIsSUFBSSxFQUFFLFVBQVUsSUFBSSxxQkFBYyxDQUFDLEtBQUs7WUFDeEMsT0FBTyxFQUFFLGFBQWE7U0FDekIsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFnQixJQUFBLHlCQUFpQixFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV2RSxPQUFPO1lBQ0gsT0FBTztZQUNQLE1BQU07WUFDTixVQUFVO1lBQ1YsWUFBWTtZQUNaLElBQUk7WUFDSixJQUFJO1lBQ0osaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixNQUFNO1lBQ04sVUFBVTtZQUNWLHNCQUFzQixFQUFFLENBQUM7U0FDcEIsQ0FBQztJQUNkLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsT0FBTztZQUNIO2dCQUNJLEtBQUssRUFBRTtvQkFDSCxJQUFJLEVBQUUseUJBQWE7b0JBQ25CLE9BQU8sRUFBRSw0QkFBZ0I7b0JBQ3pCLFVBQVUsRUFBRSxFQUFFO2lCQUNqQjtnQkFDRCxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDOUI7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixPQUFPO1lBQ0g7Z0JBQ0ksUUFBUSxFQUFFO29CQUNOLFVBQVUsRUFBRTt3QkFDUjs0QkFDSSxHQUFHLEVBQUUsK0JBQW1CLENBQUMsWUFBWTs0QkFDckMsS0FBSyxFQUFFO2dDQUNILFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzs2QkFDaEM7eUJBQ0o7cUJBQ0o7b0JBQ0Qsc0JBQXNCLEVBQUUsQ0FBQztpQkFDNUI7Z0JBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRTthQUN2QztTQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE9BQU87WUFDSCxhQUFhLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1NBQzdDLENBQUM7SUFDTixDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUM3QixZQUEwQjtRQUUxQixNQUFNLDRCQUE0QixHQUM5QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBa0IsSUFBQSw0QkFBbUIsRUFDcEQsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsRUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUMzQixDQUFDO1FBQ0YsSUFBSTtZQUNBLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUN6QixNQUFNLENBQUMsS0FBSyxDQUNSLGdDQUFnQyw0QkFBNEIsRUFBRSxFQUM5RCxZQUFZLENBQ2YsQ0FBQzthQUNMO1lBQ0QsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMxQztRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN2RDtJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO0lBQ2xELENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxnQkFBUSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWdCO1FBQzFCLE9BQU87YUFDRixTQUFTLENBQUMsSUFBSSxrQkFBTSxDQUFDLGVBQWUsRUFBRSxxQkFBcUIsQ0FBQzthQUN4RCxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7YUFDOUQsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQyxzQkFBc0IsRUFBRSw2QkFBNkIsQ0FBQzthQUM1RCxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FDeEQ7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLDhCQUE4QixFQUFFLG9DQUFvQyxDQUFDO2FBQzNFLG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUMvRDthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLENBQUM7YUFDakUsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQzFCLE9BQU8sQ0FDSixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtZQUN2Qyw4QkFBcUIsQ0FBQyxTQUFTLENBQ2xDO2FBQ0EsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsOEJBQXFCLENBQUMsQ0FBQyxDQUNyRDthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsb0NBQW9DLEVBQUUsNEJBQTRCLENBQUM7YUFDekUsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQjtZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM3RDthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsNkJBQTZCLEVBQUUsZ0RBQWdELENBQUM7YUFDdEYsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUN4QzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsMkJBQTJCLEVBQUUsNEVBQTRFLENBQUM7YUFDaEgsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQjtZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUMzRTthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDO2FBQ3hDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUM5QzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDO2FBQ3RDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsSUFBQSxzQkFBYyxHQUFFLENBQUMsQ0FDakM7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLDJCQUEyQixFQUFFLGdCQUFnQixDQUFDO2FBQ3BELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO2FBQ3ZDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUNqQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsNEJBQTRCLEVBQUUsY0FBYyxDQUFDO2FBQ25ELG1CQUFtQixDQUFDLElBQUksQ0FBQzthQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUI7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUN6QzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO2FBQ3ZDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMsZUFBUSxDQUFDLGVBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RFO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQyw0QkFBNEIsRUFBRSwyQkFBMkIsQ0FBQzthQUNoRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDbEM7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLDhCQUE4QixFQUFFLDRCQUE0QixDQUFDO2FBQ25FLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsOEJBQThCLEVBQUUsNEJBQTRCLENBQUM7YUFDbkUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQ2xDO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQywwQkFBMEIsRUFBRSx1QkFBdUIsQ0FBQzthQUMxRCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDbEM7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLDBCQUEwQixFQUFFLHlCQUF5QixDQUFDO2FBQzVELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsNEJBQTRCLEVBQUUsMEJBQTBCLENBQUM7YUFDL0QsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQ2xDO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQyw0QkFBNEIsRUFBRSwwQkFBMEIsQ0FBQzthQUMvRCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDbEM7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUFDLHdCQUF3QixFQUFFLHFCQUFxQixDQUFDO2FBQ3RELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUNsQzthQUNBLFNBQVMsQ0FDTixJQUFJLGtCQUFNLENBQUMsMEJBQTBCLEVBQUUsYUFBYSxDQUFDO2FBQ2hELG1CQUFtQixDQUFDLEtBQUssQ0FBQzthQUMxQixPQUFPLENBQUMscUJBQWMsQ0FBQyxxQkFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdDLE9BQU8sQ0FDSixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM5RCxDQUNSO2FBQ0EsU0FBUyxDQUNOLElBQUksa0JBQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxnQkFBZ0IsQ0FBQzthQUN6RCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDbEM7YUFDQSxTQUFTLENBQ04sSUFBSSxrQkFBTSxDQUNOLHNDQUFzQyxFQUN0QywwRkFBMEYsQ0FBQzthQUMxRixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FDbEMsQ0FBQztJQUNWLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQXFCO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLE1BQU0sWUFBWSxHQUFpQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM5RCxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDO0NBQ0o7QUFyYUQsc0RBcWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZEV4ZWN1dG9yIH0gZnJvbSAnLi4vQ29tbWFuZEV4ZWN1dG9yJztcbmltcG9ydCB7IGV4aXQgfSBmcm9tICcuLi8uLi9leGl0JztcbmltcG9ydCB7IFNwYW4sIFNwYW5LaW5kLCBTcGFuU3RhdHVzLCBTcGFuU3RhdHVzQ29kZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9TcGFuJztcbmltcG9ydCB7XG4gICAgZXh0cmFjdFNwYW5JZEZyb21UcmFjZVBhcmVudCxcbiAgICBleHRyYWN0VHJhY2VJZEZyb21UcmFjZVBhcmVudCxcbiAgICBmbGF0dGVuQXR0cmlidXRlcyxcbiAgICBnZW5lcmF0ZVNwYW5JZCxcbiAgICB2YWxpZGF0ZVNwYW5JZCxcbiAgICB2YWxpZGF0ZVRyYWNlSWQsXG4gICAgdmFsaWRhdGVUcmFjZVBhcmVudCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluL0F0dHJpYnV0ZSc7XG5pbXBvcnQgeyBTY29wZVNwYW5zIH0gZnJvbSAnLi4vLi4vZG9tYWluL1Njb3BlU3BhbnMnO1xuaW1wb3J0IHsgUmVzb3VyY2VTcGFucyB9IGZyb20gJy4uLy4uL2RvbWFpbi9SZXNvdXJjZVNwYW5zJztcbmltcG9ydCB7XG4gICAgT1RFTF9DTElfTkFNRSxcbiAgICBPVEVMX0NMSV9WRVJTSU9OLFxuICAgIFJFU09VUkNFX0FUVFJJQlVURVMsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUcmFjZVJlcXVlc3QgfSBmcm9tICcuLi8uLi9kb21haW4vVHJhY2VSZXF1ZXN0JztcbmltcG9ydCB7IGNyZWF0ZVRyYWNlRXhwb3J0ZXIsIEV4cG9ydGVyT1RMUFByb3RvY29scywgVHJhY2VFeHBvcnRlciB9IGZyb20gJy4uLy4uL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vLi4vbG9nZ2VyJztcbmltcG9ydCB7IENvbW1hbmRzIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24sIE9wdGlvblZhbHVlcyB9IGZyb20gJ2NvbW1hbmRlcic7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRDb21tYW5kRXhlY3V0b3IgaW1wbGVtZW50cyBDb21tYW5kRXhlY3V0b3Ige1xuICAgIHByaXZhdGUgdmVyYm9zZUVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBFbmRwb2ludDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGV4cG9ydGVyT1RMUFByb3RvY29sOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBleHBvcnRlck9UTFBIZWFkZXJzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByaXZhdGUgdHJhY2VQYXJlbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRyYWNlUGFyZW50UHJpbnQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB0cmFjZUlkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzcGFuSWQ6IHN0cmluZztcbiAgICBwcml2YXRlIHBhcmVudFNwYW5JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgc3Bhbk5hbWU6IHN0cmluZztcbiAgICBwcml2YXRlIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzcGFuS2luZDogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhblN0YXJ0VGltZU5hbm9zOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhcnRUaW1lTWljcm9zOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhcnRUaW1lTWlsbGlzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuU3RhcnRUaW1lU2VjczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhbkVuZFRpbWVOYW5vczogbnVtYmVyO1xuICAgIHByaXZhdGUgc3BhbkVuZFRpbWVNaWNyb3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5FbmRUaW1lTWlsbGlzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzcGFuRW5kVGltZVNlY3M6IG51bWJlcjtcbiAgICBwcml2YXRlIHNwYW5TdGF0dXNDb2RlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBzcGFuU3RhdHVzTWVzc2FnZTogc3RyaW5nO1xuICAgIHByaXZhdGUgc3BhbkF0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgICBwcml2YXRlIF9wYXJzZUtleVZhbHVlKGtleVZhbHVlUGFpcnM6IHN0cmluZ1tdKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgICAgICAgKGtleVZhbHVlUGFpcnMgfHwgW10pLm1hcCgocGFpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9ySWR4OiBudW1iZXIgPSBwYWlyLmluZGV4T2YoJz0nKVxuICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0b3JJZHggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBLZXktdmFsdWUgcGFpciBtdXN0IGJlIGluIFwia2V5PXZhbHVlXCIgZm9ybWF0OiAke3BhaXJ9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW3BhaXIuc3Vic3RyaW5nKDAsIHNlcGFyYXRvcklkeCksIHBhaXIuc3Vic3RyaW5nKHNlcGFyYXRvcklkeCArIDEpXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJ5VG9HZXRUcmFjZUlkRnJvbVRyYWNlUGFyZW50KG9wdGlvbnM6IE9wdGlvblZhbHVlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHRyYWNlUGFyZW50OiBzdHJpbmcgPSBvcHRpb25zLnRyYWNlUGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICBpZiAodHJhY2VQYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0VHJhY2VJZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlUb0dldFBhcmVudFNwYW5JZEZyb21UcmFjZVBhcmVudChvcHRpb25zOiBPcHRpb25WYWx1ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCB0cmFjZVBhcmVudDogc3RyaW5nID0gb3B0aW9ucy50cmFjZVBhcmVudCB8fCBwcm9jZXNzLmVudi5UUkFDRVBBUkVOVDtcbiAgICAgICAgaWYgKHRyYWNlUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmFjdFNwYW5JZEZyb21UcmFjZVBhcmVudCh0cmFjZVBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wYXJzZU9wdGlvbnMob3B0aW9uczogT3B0aW9uVmFsdWVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmVyYm9zZUVuYWJsZWQgPSBvcHRpb25zLnZlcmJvc2U7XG4gICAgICAgIGxvZ2dlci5zZXREZWJ1Z0VuYWJsZWQodGhpcy52ZXJib3NlRW5hYmxlZCk7XG5cbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBFbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQgPSBvcHRpb25zLnRyYWNlc0VuZHBvaW50O1xuICAgICAgICB0aGlzLmV4cG9ydGVyT1RMUFByb3RvY29sID0gb3B0aW9ucy5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzID0gdGhpcy5fcGFyc2VLZXlWYWx1ZShvcHRpb25zLmhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMudHJhY2VQYXJlbnQgPSBvcHRpb25zLnRyYWNlcGFyZW50IHx8IHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UO1xuICAgICAgICB0aGlzLnRyYWNlUGFyZW50UHJpbnQgPSBvcHRpb25zLnRyYWNlcGFyZW50UHJpbnQ7XG4gICAgICAgIHRoaXMudHJhY2VJZCA9IG9wdGlvbnMudHJhY2VJZCB8fCB0aGlzLl90cnlUb0dldFRyYWNlSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3BhbklkID0gb3B0aW9ucy5zcGFuSWQ7XG4gICAgICAgIHRoaXMucGFyZW50U3BhbklkID0gb3B0aW9ucy5wYXJlbnRTcGFuSWQgfHwgdGhpcy5fdHJ5VG9HZXRQYXJlbnRTcGFuSWRGcm9tVHJhY2VQYXJlbnQob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3Bhbk5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuc2VydmljZU5hbWUgPSBvcHRpb25zLnNlcnZpY2VOYW1lO1xuICAgICAgICB0aGlzLnNwYW5LaW5kID0gb3B0aW9ucy5raW5kO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVOYW5vcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTmFub3MpO1xuICAgICAgICB0aGlzLnNwYW5TdGFydFRpbWVNaWNyb3MgPSBwYXJzZUludChvcHRpb25zLnN0YXJ0VGltZU1pY3Jvcyk7XG4gICAgICAgIHRoaXMuc3BhblN0YXJ0VGltZU1pbGxpcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lTWlsbGlzKTtcbiAgICAgICAgdGhpcy5zcGFuU3RhcnRUaW1lU2VjcyA9IHBhcnNlSW50KG9wdGlvbnMuc3RhcnRUaW1lU2Vjcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVOYW5vcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU5hbm9zKTtcbiAgICAgICAgdGhpcy5zcGFuRW5kVGltZU1pY3JvcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZU1pY3Jvcyk7XG4gICAgICAgIHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMgPSBwYXJzZUludChvcHRpb25zLmVuZFRpbWVNaWxsaXMpO1xuICAgICAgICB0aGlzLnNwYW5FbmRUaW1lU2VjcyA9IHBhcnNlSW50KG9wdGlvbnMuZW5kVGltZVNlY3MpO1xuICAgICAgICB0aGlzLnNwYW5TdGF0dXNDb2RlID0gb3B0aW9ucy5zdGF0dXNDb2RlO1xuICAgICAgICB0aGlzLnNwYW5TdGF0dXNNZXNzYWdlID0gb3B0aW9ucy5zdGF0dXNNZXNzYWdlO1xuICAgICAgICB0aGlzLnNwYW5BdHRyaWJ1dGVzID0gdGhpcy5fcGFyc2VLZXlWYWx1ZShvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cG9ydGVyT1RMUEVuZHBvaW50ICYmICF0aGlzLmV4cG9ydGVyT1RMUFRyYWNlc0VuZHBvaW50KSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ09uZSBvZiB0aGUgT1RFTCBFeHBvcnRlciBPVExQIGVuZHBvaW50ICcgK1xuICAgICAgICAgICAgICAgICAgICAnb3IgT1RFTCBFeHBvcnRlciBPVExQIHRyYWNlcyBlbmRwb2ludCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50cmFjZVBhcmVudCAmJiAhdmFsaWRhdGVUcmFjZVBhcmVudCh0aGlzLnRyYWNlUGFyZW50KSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBJbnZhbGlkIHRyYWNlIHBhcmVudDogJHt0aGlzLnRyYWNlUGFyZW50fSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRyYWNlSWQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgVHJhY2UgaWQgaXMgbm90IHNwZWNpZmllZDogJHt0aGlzLnRyYWNlSWR9IWApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkYXRlVHJhY2VJZCh0aGlzLnRyYWNlSWQpKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoYEludmFsaWQgdHJhY2UgaWQ6ICR7dGhpcy50cmFjZUlkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVNwYW5JZCh0aGlzLnNwYW5JZCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBzcGFuIGlkOiAke3RoaXMuc3BhbklkfSFgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGFyZW50U3BhbklkICYmICF2YWxpZGF0ZVNwYW5JZCh0aGlzLnBhcmVudFNwYW5JZCkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgSW52YWxpZCBwYXJlbnQgc3BhbiBpZDogJHt0aGlzLnBhcmVudFNwYW5JZH0hYCk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVOYW5vcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVNaWNyb3MgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVNaWxsaXMgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5TdGFydFRpbWVTZWNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIHN0YXJ0IHRpbWUgbXVzdCBiZSBzcGVjaWZpZWQgaW4gb25lIG9mIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyAnICtcbiAgICAgICAgICAgICAgICAgICAgJyhuYW5vc2Vjb25kcywgbWljcm9zZWNvbmRzLCBtaWxsaXNlY29uZHMsIG9yIHNlY29uZHMpISdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBleGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lTmFub3MgJiZcbiAgICAgICAgICAgICF0aGlzLnNwYW5FbmRUaW1lTWljcm9zICYmXG4gICAgICAgICAgICAhdGhpcy5zcGFuRW5kVGltZU1pbGxpcyAmJlxuICAgICAgICAgICAgIXRoaXMuc3BhbkVuZFRpbWVTZWNzXG4gICAgICAgICkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICdTcGFuIGVuZCB0aW1lIG11c3QgYmUgc3BlY2lmaWVkIGluIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgJyArXG4gICAgICAgICAgICAgICAgICAgICcobmFub3NlY29uZHMsIG1pY3Jvc2Vjb25kcywgbWlsbGlzZWNvbmRzLCBvciBzZWNvbmRzKSEnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXhpdCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQVHJhY2VzRW5kcG9pbnQgfHxcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0ZXJPVExQRW5kcG9pbnQgKyAnL3YxL3RyYWNlcydcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvbHZlU3BhblN0YXJ0VGltZU5hbm9zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNwYW5TdGFydFRpbWVOYW5vcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhblN0YXJ0VGltZU5hbm9zO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhblN0YXJ0VGltZU1pY3Jvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhblN0YXJ0VGltZU1pY3JvcyAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lTWlsbGlzICogMTAwMDAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5TdGFydFRpbWVTZWNzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGFuU3RhcnRUaW1lU2VjcyAqIDEwMDAwMDAwMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNwYW4gc3RhcnQgdGltZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Jlc29sdmVTcGFuRW5kVGltZU5hbm9zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNwYW5FbmRUaW1lTmFub3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5FbmRUaW1lTmFub3M7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zcGFuRW5kVGltZU1pY3Jvcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVNaWNyb3MgKiAxMDAwO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3BhbkVuZFRpbWVNaWxsaXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNwYW5FbmRUaW1lTWlsbGlzICogMTAwMDAwMDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNwYW5FbmRUaW1lU2Vjcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BhbkVuZFRpbWVTZWNzICogMTAwMDAwMDAwMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc3BhbiBlbmQgdGltZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX25vcm1hbGl6ZUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaWQgJiYgaWQuc3RhcnRzV2l0aCgnMHgnKSkge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHJpbmcoJzB4Jy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVTcGFuKCk6IFNwYW4ge1xuICAgICAgICBjb25zdCB0cmFjZUlkOiBzdHJpbmcgPSB0aGlzLl9ub3JtYWxpemVJZCh0aGlzLnRyYWNlSWQpO1xuICAgICAgICBjb25zdCBzcGFuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuX25vcm1hbGl6ZUlkKHRoaXMuc3BhbklkKTtcbiAgICAgICAgY29uc3QgdHJhY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwYW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fbm9ybWFsaXplSWQodGhpcy5wYXJlbnRTcGFuSWQpO1xuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSB0aGlzLnNwYW5OYW1lO1xuICAgICAgICBjb25zdCBraW5kOiBTcGFuS2luZCA9IFNwYW5LaW5kW3RoaXMuc3BhbktpbmQgYXMga2V5b2YgdHlwZW9mIFNwYW5LaW5kXTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lVW5peE5hbm86IG51bWJlciA9IHRoaXMuX3Jlc29sdmVTcGFuU3RhcnRUaW1lTmFub3MoKTtcbiAgICAgICAgY29uc3QgZW5kVGltZVVuaXhOYW5vOiBudW1iZXIgPSB0aGlzLl9yZXNvbHZlU3BhbkVuZFRpbWVOYW5vcygpO1xuICAgICAgICBjb25zdCBzdGF0dXNDb2RlOiBTcGFuU3RhdHVzQ29kZSA9XG4gICAgICAgICAgICBTcGFuU3RhdHVzQ29kZVt0aGlzLnNwYW5TdGF0dXNDb2RlIGFzIGtleW9mIHR5cGVvZiBTcGFuU3RhdHVzQ29kZV07XG4gICAgICAgIGNvbnN0IHN0YXR1c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuc3BhblN0YXR1c01lc3NhZ2U7XG4gICAgICAgIGNvbnN0IHN0YXR1czogU3BhblN0YXR1cyA9IHtcbiAgICAgICAgICAgIGNvZGU6IHN0YXR1c0NvZGUgfHwgU3BhblN0YXR1c0NvZGUuVU5TRVQsXG4gICAgICAgICAgICBtZXNzYWdlOiBzdGF0dXNNZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSA9IGZsYXR0ZW5BdHRyaWJ1dGVzKHRoaXMuc3BhbkF0dHJpYnV0ZXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFjZUlkLFxuICAgICAgICAgICAgc3BhbklkLFxuICAgICAgICAgICAgdHJhY2VTdGF0ZSxcbiAgICAgICAgICAgIHBhcmVudFNwYW5JZCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgc3RhcnRUaW1lVW5peE5hbm8sXG4gICAgICAgICAgICBlbmRUaW1lVW5peE5hbm8sXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogMCxcbiAgICAgICAgfSBhcyBTcGFuO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVNjb3BlU3BhbnMoKTogU2NvcGVTcGFuc1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBPVEVMX0NMSV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiBPVEVMX0NMSV9WRVJTSU9OLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwYW5zOiBbdGhpcy5fY3JlYXRlU3BhbigpXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVzb3VyY2VTcGFucygpOiBSZXNvdXJjZVNwYW5zW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFJFU09VUkNFX0FUVFJJQlVURVMuU0VSVklDRV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiB0aGlzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBkcm9wcGVkQXR0cmlidXRlc0NvdW50OiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2NvcGVTcGFuczogdGhpcy5fY3JlYXRlU2NvcGVTcGFucygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVUcmFjZVJlcXVlc3QoKTogVHJhY2VSZXF1ZXN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc291cmNlU3BhbnM6IHRoaXMuX2NyZWF0ZVJlc291cmNlU3BhbnMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9leHBvcnRUcmFjZVJlcXVlc3QoXG4gICAgICAgIHRyYWNlUmVxdWVzdDogVHJhY2VSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkRXhwb3J0ZXJPVExQRW5kcG9pbnQgPVxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZUV4cG9ydGVyT1RMUEVuZHBvaW50KCk7XG4gICAgICAgIGNvbnN0IHRyYWNlRXhwb3J0ZXI6IFRyYWNlRXhwb3J0ZXIgPSBjcmVhdGVUcmFjZUV4cG9ydGVyKFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBQcm90b2NvbCxcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmVFeHBvcnRlck9UTFBFbmRwb2ludCgpLFxuICAgICAgICAgICAgdGhpcy5leHBvcnRlck9UTFBIZWFkZXJzXG4gICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgIGBFeHBvcnRpbmcgdHJhY2UgcmVxdWVzdCB0byA6ICR7cmVzb2x2ZWRFeHBvcnRlck9UTFBFbmRwb2ludH1gLFxuICAgICAgICAgICAgICAgICAgICB0cmFjZVJlcXVlc3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdHJhY2VFeHBvcnRlci5leHBvcnQodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRXhwb3J0ZWQgdHJhY2UgcmVxdWVzdCcpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZXhwb3J0IHRyYWNlIHJlcXVlc3QnLCBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVUcmFjZVBhcmVudCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAwLSR7dGhpcy50cmFjZUlkfS0ke3RoaXMuc3BhbklkfS0wMWA7XG4gICAgfVxuXG4gICAgY29tbWFuZE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENvbW1hbmRzLkVYUE9SVDtcbiAgICB9XG5cbiAgICBkZWZpbmVPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpIHtcbiAgICAgICAgY29tbWFuZFxuICAgICAgICAgICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctdiwgLS12ZXJib3NlJywgJ0VuYWJsZSB2ZXJib3NlIG1vZGUnKVxuICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1ZFUkJPU0UgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9DTElfVkVSQk9TRS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctZSwgLS1lbmRwb2ludCA8dXJsPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgZW5kcG9pbnQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdGUsIC0tdHJhY2VzLWVuZHBvaW50IDx1cmw+JywgJ09URUwgRXhwb3J0ZXIgT1RMUCB0cmFjZXMgZW5kcG9pbnQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXAsIC0tcHJvdG9jb2wgPHByb3RvY29sPicsICdPVEVMIEV4cG9ydGVyIE9UTFAgcHJvdG9jb2wnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfUFJPVE9DT0wgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4cG9ydGVyT1RMUFByb3RvY29scy5IVFRQX0pTT05cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuY2hvaWNlcyhPYmplY3QudmFsdWVzKEV4cG9ydGVyT1RMUFByb3RvY29scykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1oLCAtLWhlYWRlcnMgPGtleS12YWx1ZS1wYWlycy4uLj4nLCAnT1RFTCBFeHBvcnRlciBPVExQIGhlYWRlcnMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0hFQURFUlMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTLnNwbGl0KCcsJykpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy10cCwgLS10cmFjZXBhcmVudCA8aGVhZGVyPicsICdUcmFjZXBhcmVudCBoZWFkZXIgaW4gVzNDIHRyYWNlIGNvbnRleHQgZm9ybWF0JylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52LlRSQUNFUEFSRU5UKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctdHBwLCAtLXRyYWNlcGFyZW50LXByaW50JywgJ1ByaW50IHRyYWNlcGFyZW50IGhlYWRlciBpbiBXM0MgdHJhY2UgY29udGV4dCBmb3JtYXQgZm9yIHRoZSBleHBvcnRlZCBzcGFuJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KHByb2Nlc3MuZW52Lk9URUxfQ0xJX1RSQUNFUEFSRU5UX1BSSU5UICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0NMSV9UUkFDRVBBUkVOVF9QUklOVC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy10LCAtLXRyYWNlLWlkIDxpZD4nLCAnVHJhY2UgaWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfVFJBQ0VfSUQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zLCAtLXNwYW4taWQgPGlkPicsICdTcGFuIGlkJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KGdlbmVyYXRlU3BhbklkKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1wLCAtLXBhcmVudC1zcGFuLWlkIDxpZD4nLCAnUGFyZW50IHNwYW4gaWQnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnU3BhbiBuYW1lJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLXNuLCAtLXNlcnZpY2UtbmFtZSA8bmFtZT4nLCAnU2VydmljZSBuYW1lJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQocHJvY2Vzcy5lbnYuT1RFTF9DTElfU0VSVklDRV9OQU1FIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5PVEVMX1NFUlZJQ0VfTkFNRSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLWssIC0ta2luZCA8a2luZD4nLCAnU3BhbiBraW5kJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0KFNwYW5LaW5kW1NwYW5LaW5kLklOVEVSTkFMXSlcbiAgICAgICAgICAgICAgICAgICAgLmNob2ljZXMoT2JqZWN0LmtleXMoU3BhbktpbmQpLmZpbHRlcigobykgPT4gaXNOYU4oTnVtYmVyKG8pKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1uYW5vcyA8bmFub3M+JywgJ1N0YXJ0IHRpbWUgaW4gbmFub3NlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1zdGFydC10aW1lLW1pY3JvcyA8bWljcm9zPicsICdTdGFydCB0aW1lIGluIG1pY3Jvc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLXN0YXJ0LXRpbWUtbWlsbGlzIDxtaWxsaXM+JywgJ1N0YXJ0IHRpbWUgaW4gbWlsbGlzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tc3RhcnQtdGltZS1zZWNzIDxzZWNzPicsICdTdGFydCB0aW1lIGluIHNlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1uYW5vcyA8bmFub3M+JywgJ0VuZCB0aW1lIGluIG5hbm9zZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy0tZW5kLXRpbWUtbWljcm9zIDxtaWNyb3M+JywgJ0VuZCB0aW1lIGluIG1pY3Jvc2Vjb25kcycpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctLWVuZC10aW1lLW1pbGxpcyA8bWlsbGlzPicsICdFbmQgdGltZSBpbiBtaWxsaXNlY29uZHMnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbignLS1lbmQtdGltZS1zZWNzIDxzZWNzPicsICdFbmQgdGltZSBpbiBzZWNvbmRzJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgICAgICAgIG5ldyBPcHRpb24oJy1zYyAtLXN0YXR1cy1jb2RlIDxjb2RlPicsICdTdGF0dXMgY29kZScpXG4gICAgICAgICAgICAgICAgICAgIC5tYWtlT3B0aW9uTWFuZGF0b3J5KGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdChTcGFuU3RhdHVzQ29kZVtTcGFuU3RhdHVzQ29kZS5VTlNFVF0pXG4gICAgICAgICAgICAgICAgICAgIC5jaG9pY2VzKFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoU3BhblN0YXR1c0NvZGUpLmZpbHRlcigobykgPT4gaXNOYU4oTnVtYmVyKG8pKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICAgICAgICBuZXcgT3B0aW9uKCctc20gLS1zdGF0dXMtbWVzc2FnZSA8bWVzc2FnZT4nLCAnU3RhdHVzIG1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeShmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgJy1hIC0tYXR0cmlidXRlcyA8a2V5LXZhbHVlLXBhaXJzLi4uPicsXG4gICAgICAgICAgICAgICAgICAgICdTcGFuIGF0dHJpYnV0ZXMgYXMgc3BhY2Ugc2VwZXJhdGVkIGtleS12YWx1ZSBwYWlycyAoa2V5MT12YWx1ZTEga2V5Mj12YWx1ZTIga2V5Mz12YWx1ZTMpJylcbiAgICAgICAgICAgICAgICAgICAgLm1ha2VPcHRpb25NYW5kYXRvcnkoZmFsc2UpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGV4ZWN1dGUob3B0aW9uczogT3B0aW9uVmFsdWVzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3BhcnNlT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jaGVja09wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCB0cmFjZVJlcXVlc3Q6IFRyYWNlUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZVRyYWNlUmVxdWVzdCgpO1xuICAgICAgICBhd2FpdCB0aGlzLl9leHBvcnRUcmFjZVJlcXVlc3QodHJhY2VSZXF1ZXN0KTtcbiAgICAgICAgaWYgKHRoaXMudHJhY2VQYXJlbnRQcmludCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5fZ2VuZXJhdGVUcmFjZVBhcmVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
#! /usr/bin/env node
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("./constants");
const logger = __importStar(require("./logger"));
const exit_1 = require("./exit");
const command_1 = require("./command");

@@ -16,6 +41,12 @@ const commander_1 = require("commander");

command.action(async (options) => {
await commandExecutor.execute(options);
try {
await commandExecutor.execute(options);
}
catch (err) {
logger.error(`Error occurred while executing ${commandName} command`, err);
(0, exit_1.exit)(1);
}
});
}
commander_1.program.parse();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsMkNBQThEO0FBQzlELHVDQUE2RTtBQUU3RSx5Q0FBMkQ7QUFFM0QsbUJBQU87S0FDRixJQUFJLENBQUMseUJBQWEsQ0FBQztLQUNuQixXQUFXLENBQ1Isa0VBQWtFLENBQ3JFO0tBQ0EsT0FBTyxDQUFDLDRCQUFnQixDQUFDLENBQUM7QUFFL0IsS0FBSyxJQUFJLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN6RCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25CLEVBQUU7SUFDQyxNQUFNLGVBQWUsR0FBb0IsSUFBQSwrQkFBcUIsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUM1RSxNQUFNLE9BQU8sR0FBWSxtQkFBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQXFCLEVBQUUsRUFBRTtRQUMzQyxNQUFNLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUM7Q0FDTjtBQUVELG1CQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjISAvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBPVEVMX0NMSV9OQU1FLCBPVEVMX0NMSV9WRVJTSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29tbWFuZHMsIENvbW1hbmRFeGVjdXRvciwgY3JlYXRlQ29tbWFuZEV4ZWN1dG9yIH0gZnJvbSAnLi9jb21tYW5kJztcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uVmFsdWVzLCBwcm9ncmFtIH0gZnJvbSAnY29tbWFuZGVyJztcblxucHJvZ3JhbVxuICAgIC5uYW1lKE9URUxfQ0xJX05BTUUpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgICAnT1RFTCBDTEkgaXMgYSBjb21tYW5kLWxpbmUgdG9vbCBmb3Igc2VuZGluZyBPcGVuVGVsZW1ldHJ5IHRyYWNlcydcbiAgICApXG4gICAgLnZlcnNpb24oT1RFTF9DTElfVkVSU0lPTik7XG5cbmZvciAobGV0IGNvbW1hbmROYW1lIG9mIE9iamVjdC52YWx1ZXMoQ29tbWFuZHMpLmZpbHRlcigobykgPT5cbiAgICBpc05hTihOdW1iZXIobykpXG4pKSB7XG4gICAgY29uc3QgY29tbWFuZEV4ZWN1dG9yOiBDb21tYW5kRXhlY3V0b3IgPSBjcmVhdGVDb21tYW5kRXhlY3V0b3IoY29tbWFuZE5hbWUpO1xuICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29tbWFuZE5hbWUpO1xuICAgIGNvbW1hbmRFeGVjdXRvci5kZWZpbmVPcHRpb25zKGNvbW1hbmQpO1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBPcHRpb25WYWx1ZXMpID0+IHtcbiAgICAgICAgYXdhaXQgY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUob3B0aW9ucyk7XG4gICAgfSk7XG59XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwyQ0FBOEQ7QUFDOUQsaURBQW1DO0FBQ25DLGlDQUE4QjtBQUM5Qix1Q0FBNkU7QUFFN0UseUNBQTJEO0FBRTNELG1CQUFPO0tBQ0YsSUFBSSxDQUFDLHlCQUFhLENBQUM7S0FDbkIsV0FBVyxDQUNSLGtFQUFrRSxDQUNyRTtLQUNBLE9BQU8sQ0FBQyw0QkFBZ0IsQ0FBQyxDQUFDO0FBRS9CLEtBQUssSUFBSSxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNuQixFQUFFO0lBQ0MsTUFBTSxlQUFlLEdBQW9CLElBQUEsK0JBQXFCLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUUsTUFBTSxPQUFPLEdBQVksbUJBQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEQsZUFBZSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFxQixFQUFFLEVBQUU7UUFDM0MsSUFBSTtZQUNBLE1BQU0sZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQztRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FDUixrQ0FBa0MsV0FBVyxVQUFVLEVBQ3ZELEdBQUcsQ0FDTixDQUFDO1lBQ0YsSUFBQSxXQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUMsQ0FBQyxDQUFDO0NBQ047QUFFRCxtQkFBTyxDQUFDLEtBQUssRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEgL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgT1RFTF9DTElfTkFNRSwgT1RFTF9DTElfVkVSU0lPTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBleGl0IH0gZnJvbSAnLi9leGl0JztcbmltcG9ydCB7IENvbW1hbmRzLCBDb21tYW5kRXhlY3V0b3IsIGNyZWF0ZUNvbW1hbmRFeGVjdXRvciB9IGZyb20gJy4vY29tbWFuZCc7XG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvblZhbHVlcywgcHJvZ3JhbSB9IGZyb20gJ2NvbW1hbmRlcic7XG5cbnByb2dyYW1cbiAgICAubmFtZShPVEVMX0NMSV9OQU1FKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgICAgJ09URUwgQ0xJIGlzIGEgY29tbWFuZC1saW5lIHRvb2wgZm9yIHNlbmRpbmcgT3BlblRlbGVtZXRyeSB0cmFjZXMnXG4gICAgKVxuICAgIC52ZXJzaW9uKE9URUxfQ0xJX1ZFUlNJT04pO1xuXG5mb3IgKGxldCBjb21tYW5kTmFtZSBvZiBPYmplY3QudmFsdWVzKENvbW1hbmRzKS5maWx0ZXIoKG8pID0+XG4gICAgaXNOYU4oTnVtYmVyKG8pKVxuKSkge1xuICAgIGNvbnN0IGNvbW1hbmRFeGVjdXRvcjogQ29tbWFuZEV4ZWN1dG9yID0gY3JlYXRlQ29tbWFuZEV4ZWN1dG9yKGNvbW1hbmROYW1lKTtcbiAgICBjb25zdCBjb21tYW5kOiBDb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKGNvbW1hbmROYW1lKTtcbiAgICBjb21tYW5kRXhlY3V0b3IuZGVmaW5lT3B0aW9ucyhjb21tYW5kKTtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAob3B0aW9uczogT3B0aW9uVmFsdWVzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICBgRXJyb3Igb2NjdXJyZWQgd2hpbGUgZXhlY3V0aW5nICR7Y29tbWFuZE5hbWV9IGNvbW1hbmRgLFxuICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGV4aXQoMSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
{
"name": "otel-cli",
"version": "1.0.0",
"version": "1.0.1",
"description": "OTEL CLI is a command-line tool for sending OpenTelemetry traces.",

@@ -5,0 +5,0 @@ "author": "Serkan Ozal <serkanozal86@gmail.com> (https://github.com/serkan-ozal)",

+10
-10

@@ -162,3 +162,3 @@ # OTEL (OpenTelemetry) CLI

# Export span of the auth service build process
npm run start -- export \
otel-cli export \
--name build-auth-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \

@@ -184,3 +184,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java

# Export span of the payment service project build process
npm run start -- export \
otel-cli export \
--name build-payment-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \

@@ -214,3 +214,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node

# Export span of the auth service build process
npm run start -- export \
otel-cli export \
--name build-auth-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \

@@ -236,3 +236,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java

# Export span of the payment service project build process
npm run start -- export \
otel-cli export \
--name build-payment-service --start-time-nanos ${start_time} --end-time-nanos ${end_time} \

@@ -275,3 +275,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node

# Export span of the auth service project build process
npm run start -- export \
otel-cli export \
--name build-auth-service --parent-span-id ${root_span_id} --start-time-nanos ${start_time1} --end-time-nanos ${end_time1} \

@@ -297,3 +297,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java

# Export span of the payment service project build process
npm run start -- export \
otel-cli export \
--name build-payment-service --parent-span-id ${root_span_id} --start-time-millis ${start_time2} --end-time-millis ${end_time2} \

@@ -308,3 +308,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node

# Export span of the whole build process
npm run start -- export \
otel-cli export \
--name build-services --span-id ${root_span_id} --start-time-millis ${start_time0} --end-time-millis ${end_time0} \

@@ -346,3 +346,3 @@ --kind INTERNAL --status-code OK

# Export span of the auth service project build process
npm run start -- export \
otel-cli export \
--name build-auth-service --parent-span-id ${root_span_id} --start-time-nanos ${start_time1} --end-time-nanos ${end_time1} \

@@ -368,3 +368,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=auth-service buildTool=maven runtime=java

# Export span of the payment service project build process
npm run start -- export \
otel-cli export \
--name build-payment-service --parent-span-id ${root_span_id} --start-time-millis ${start_time2} --end-time-millis ${end_time2} \

@@ -379,3 +379,3 @@ --kind INTERNAL --status-code OK --attributes serviceName=payment-service buildTool=npm runtime=node

# Export span of the whole build process
npm run start -- export \
otel-cli export \
--name build-services --span-id ${root_span_id} --start-time-millis ${start_time0} --end-time-millis ${end_time0} \

@@ -382,0 +382,0 @@ --kind INTERNAL --status-code OK