@churchillliving/se-ui-toolkit 6.54.245 → 6.54.246

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1701,7 +1701,7 @@ export class GridService {
1701
1701
  }
1702
1702
  }
1703
1703
  this.requestService.get(`/ImportConfig/ImportFile/${id}`, fileData).subscribe((data) => {
1704
- this.requestService.post(`/ImportConfig/GenerateImport?id=${id}`, {}).subscribe((data) => {
1704
+ this.requestService.post(`/ImportConfig/GenerateImport/${id}`, {}).subscribe((data) => {
1705
1705
  this.alertService.success('Generate File successfully');
1706
1706
  }, (error) => {
1707
1707
  this.alertService.apiError(error);
@@ -1738,4 +1738,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
1738
1738
  providedIn: 'root',
1739
1739
  }]
1740
1740
  }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.HyperlinkService }, { type: i3.DropdownService }, { type: i4.AlertService }, { type: i5.RequestService }, { type: i6.ActivatedRoute }, { type: i7.DialogService }]; } });
1741
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLDZCQUE2QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDOzs7Ozs7Ozs7QUFJakgsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFDUyxRQUFrQixFQUNqQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsS0FBcUIsRUFDdEIsYUFBNEI7UUFONUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFkN0Isa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLHFCQUFnQixHQUFZLElBQUks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Q0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUlDOztPQUVHO0lBRUgsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBa0I7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzFELFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFdBQW1CLEVBQUU7UUFDN0IsSUFBSSxTQUFTLEdBQVEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztpSUFyOURVLFdBQVc7cUlBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBJQXV0b0NvbXBsZXRlU2F2ZSwgSURyb3BEb3duUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRTb3J0LFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZENvbHVtbixcbiAgYWRkRmlsdGVyQ29sdW1uLFxuICBhZGRHbG9iYWxGaWx0ZXIsXG4gIElHcmlkQ29sdW1uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgSUdyaWRQcm9wLFxuICBJR3JpZFByb3BGaWx0ZXIsXG4gIElHcmlkUm93UHJvcCxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBJRGlhbG9nQ29sdW1uLFxuICBFR3JpZEZvcm1hdHRlcixcbiAgSUdyaWRVcGRhdGUsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG59IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4vaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzL2Rpc3QvZXhjZWxqcy5taW4uanMnXG5pbXBvcnQgeyBJbXBvcnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9nZW5lcmF0ZS1maWxlL2ltcG9ydC1kaWFsb2cvaW1wb3J0LWRpYWxvZy5jb21wb25lbnQnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBudW1iZXJPZkNhbGxzOiBudW1iZXIgPSAwO1xuICB1c2VyU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc29mdENhY2hpbmdGaWx0ZXJzOiBhbnkgPSB7fTtcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XG4gIHJvd1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29sdW1uRm9jdXNlZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZTogUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgYWZ0ZXIgcHJvcGVyIG1hcHBpbmdcbiAgICovXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzKTtcbiAgfVxuICBnZXROZXh0SWQoKTogc3RyaW5nIHtcbiAgICBcbiAgICByZXR1cm4gYHN0YXRpYy0ke3RoaXMuY291bnRlcisrfWA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogUmVjZWl2ZXMgZmlsdGVycyBhbmQgcmV0dXJucyBhcnJheSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGVzXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcbiAgICovXG4gIGhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVyczogSUdyaWRGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAubWFwKCh4LCBpLCBhcnIpID0+XG4gICAgICAgIGFyci5zb21lKFxuICAgICAgICAgICh5LCBpZHgpID0+XG4gICAgICAgICAgICB5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGkgIT09IGlkeFxuICAgICAgICApXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgIHZhbHVlOiBhcnJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHopID0+IHouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS52YWx1ZSlcbiAgICAgICAgICAgICAgICAuam9pbigpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogeFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoZiwgaSwgYXJyKSA9PiBhcnIuZmluZEluZGV4KCh4KSA9PiB4LnZhbHVlID09PSBmLnZhbHVlKSA9PT0gaSk7XG4gIH1cblxuICAvLyBQcmVwYXJlIGJhc2ljIGdyaWQgZmlsdGVyc1xuICBwcmVwYXJlQmFzaWNGaWx0ZXJzKFxuICAgIGV2ZW50OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZpbHRlcnMgaGFzIHZhbHVlcyB0aGVuIGNvbnZlcnRzIGdsb2JhbCBmaWx0ZXIgdmFsdWVzIHR5cGUgaW50byBJR3JpZEZpbHRlci5cbiAgICovXG4gIHByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGdsb2JhbERhdGE6IElHcmlkRmlsdGVyW10gPSBbXTtcblxuICAgIGdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcjogSUdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIGZpbHRlci52YWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnfCcpXG4gICAgICAgICkgeyAgICAgICAgIFxuXG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3IgZW5kIGRhdGVcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2x0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIHN0YXJ0IGRhdGVcbiAgICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2d0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnR5cGUgIT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxuICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICAgICAgPyAnaW4nXG4gICAgICAgICAgICAgICAgOiBmaWx0ZXIubWF0Y2hNb2RlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdsb2JhbERhdGE7XG4gIH1cblxuICBzZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXI6IGFueSwgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgaWYgKGlzU3RhcnREYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIuZnJvbUZpZWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci50b0ZpZWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmZpZWxkO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBnbG9iYWwgZmlsdGVyIHZhbHVlXG4gIHNldEdsb2JhbEZpbHRlclZhbHVlKFxuICAgIGZpbHRlcjogSUdsb2JhbEZpbHRlcixcbiAgICBpc1N0YXJ0RGF0ZTogYm9vbGVhbiA9IHRydWVcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBhbnlbXSkuam9pbignLCcpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyLnZhbHVlIGFzIERhdGUpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U6XG4gICAgICAgIGxldCBkYXRlVmFsdWVzOiBzdHJpbmdbXSA9IGZpbHRlci52YWx1ZVxuICAgICAgICAgID8gZmlsdGVyLnZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ3wnKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChkYXRlVmFsdWVzICYmIGRhdGVWYWx1ZXMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICBsZXQgZGF0ZVZhbHVlOiBEYXRlID0gaXNTdGFydERhdGVcbiAgICAgICAgICAgID8gbmV3IERhdGUoZGF0ZVZhbHVlc1swXSlcbiAgICAgICAgICAgIDogbmV3IERhdGUoZGF0ZVZhbHVlc1sxXSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g6XG4gICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICBjaGVja1ZhbGlkaXR5KGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udmFsaWRhdGlvbnMgJiYgIWl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgaXRlbS5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgaXRlbS5pc3ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgbWluTWF4VmFsaWREYXRlID0gdXRpbGl0aWVzLmNhbGVuZGFyTWluTWF4VmFsdWUoXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLFxuICAgICAgICAgICAgaVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBpdGVtLnZhbGlkYXRpb25zICYmIGl0ZW0uaGVhZGVyO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFzaW5nbGVDZWxsICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICFpdGVtLmhpZGRlbiAmJlxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYCR7dmFsaWR9IGlzIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYT1BUSU9OUyBcblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG9wdGlvbnM6bnVtYmVyPTE7XG4gICAgICAgICAgICB2YXIgdmFsdWU9cm93W2l0ZW0uZmllbGRdO1xuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB2YWx1ZS5sZW5ndGggLSAxOyB4KyspIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlW3hdID09ICc7Jykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9ibHVlO3JlZDtncmVlbiBtYXg9M1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIC8vIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICBvcHRpb25zIDw9IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBtYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBvcHRpb24ke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbj4xPydzJzonJ31gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnbWluaW11bSdcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNaW5pbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnZ3JlYXRlcidcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNYXhpbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEFUVEVSTiAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5OVU1FUklDICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmIHJvd1tpdGVtLmZpZWxkXS5tYXRjaCgvXigwfFsxLTldXFxkKikkLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEhPTkUgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHMreF0rJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXig/PS4qWzAtOV0pWy0oKTAtOVxcc10rJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5ERUNJTUFMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKShcXC5cXGQrKT8kLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8WzEtOV1cXGQqKShcXC5cXGQrKT8kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuRU1BSUwgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLm1hdGNoKC9eW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Miw2fSQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIHNldEVycm9yTWVzc2FnZShpdGVtOiBJR3JpZENvbHVtbiwgZXJyb3JNZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpdGVtLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcbiAgICBpdGVtLmlzdmFsaWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBzZXQgYmFzaWMgZmlsdGVyIHZhbHVlXG4gIHNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyOiBhbnkpOiBhbnkge1xuICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyAxIDogMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgc29ydCBhcnJheVxuICAgKi9cbiAgZ2V0R3JpZFNvcnRzKFxuICAgIHsgbXVsdGlTb3J0TWV0YSB9OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRTb3J0W10ge1xuICAgIHJldHVybiAobXVsdGlTb3J0TWV0YSB8fCBbXSkubWFwKCh7IGZpZWxkLCBvcmRlciB9LCBpKTogYW55ID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogb3JkZXIgPiAwID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQyA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDLFxuICAgICAgcHJpb3JpdHk6IGkgKyAxLFxuICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEhhbmRsZXMgZGVmYXVsdCBhbmQgbG9va3VwIGZpbHRlcnNcbiAgICovXG4gIG1hcEZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IElHcmlkRmlsdGVyW10gPSBbXTtcbiAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgKHZhbHVlIGFzIElHcmlkRmlsdGVyW10pLmZvckVhY2goXG4gICAgICAgICAgKHsgbWF0Y2hNb2RlLCBvcGVyYXRvciwgdmFsdWU6IGZpbHRlciB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFscycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldEZvcm1hdHRlZERhdGUodmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlLnZhbHVlIHx8IFtdKS5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBwYWdlIG51bWJlclxuICAgKi9cbiAgZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQ6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlzTmFOKGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cykgPyAxIDogZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzICsgMTtcbiAgfVxuXG4gIC8vIGdldCBmb3JtYXR0ZWQgZGF0ZVxuICBnZXRGb3JtYXR0ZWREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYCR7dmFsdWV9IFpgKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gICAvLyBjaGFuZ2Ugcm93IGtleSBhbmQgdmFsdWUgd2hlbiB1c2luZyBzZXRHcmlkUm93UHJvcFZhbHVlIGZ1bmN0aW9uXG4gICBzZXRSb3dWYWx1ZShyb3dEYXRhOiBhbnkpIHtcbiAgICBPYmplY3Qua2V5cyhyb3dEYXRhKT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBjb25zdCByb3dPYmogPSByb3crJ19vYmonO1xuICAgICAgaWYocm93ID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4gfHwgcm93ID09PSBFR3JpZFJvd0FjdGlvbi5FRElUQlROKXtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICByb3dEYXRhW3Jvd09ial0gJiZcbiAgICAgICAgdHlwZW9mKHJvd0RhdGFbcm93T2JqXSkgPT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93T2JqXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgcm93IGFjdGlvbnMgb2JqZWN0IGludG8gc2ltcGxlIHZhbHVlXG4gIHNldEdyaWRSb3dEYXRhKHJvd0RhdGEpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkocm93RGF0YSkpe1xuICAgICAgcm93RGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0RhdGEgPSB0aGlzLnNldFJvd1ZhbHVlKHJvd0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSByb3cgbGlzdFxuICBnZXRBbGxvd1NhdmVSb3dsaXN0KHJvd3NEYXRhOiBhbnlbXSA9IFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgcm93c0RhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocm93c0RhdGEpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdyk9PntcbiAgICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1ucyk7XG4gICAgICB9KVxuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCBvYmogPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgIGlmIChvYmo/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh4LmluY2x1ZGVzKCdfb2JqJykgJiYgdHlwZW9mIHJvd1t4XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcm93W3hdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgcm93W2ZpZWxkXTtcbiAgICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnMScgOiAnMCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5CT09MRUFOKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgfHwgdW5kZWZpbmUgcm93XG4gIGdldEFsbG93U2F2ZVJvdyhyb3dJbmZvOiB7fSA9IHt9LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgbGV0IHJvdyA9IHsgLi4ucm93SW5mbyB9O1xuICAgIHJvdyA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnMpO1xuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdylcbiAgICAgICAga2V5cy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIHJlbW92ZSBvYmosIGRhdGEgYW5kIHNlY29uZHR5cGUgZGF0YSBmcm9tIHJvd1xuICByZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSl7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmKGtleXM/Lmxlbmd0aCA+IDApe1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGlmKGtleSA9PT0gZmllbGQgKyAnLWRhdGEnIHx8IGtleSA9PT0gZmllbGQgKyAnX3NlY29uZFR5cGUnIHx8IGtleSA9PT0gZmllbGQgKyAnX29iaicpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcm93ID0gdGhpcy5yZW1vdmVFeHRyYU5ld1Jvd09iaihyb3csIGNvbHVtbnMpXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHJlbW92ZUV4dHJhTmV3Um93T2JqKHJvdywgY29sdW1uczogSUdyaWRDb2x1bW5bXSl7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgaWYoY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBrZXlzPy5sZW5ndGggPiAwKXtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBtYXRjaEtleSA9IGNvbHVtbnMuc29tZSgoY29sdW1uKT0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKVxuICAgICAgICBpZighbWF0Y2hLZXkpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDb2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgIDogJ2xhYmVsJztcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA6ICd2YWx1ZSc7XG4gICAgfSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghY29sdW1uSW5mby5maWx0ZXJpbmcgJiYgIWNvbHVtbkluZm8uZmlsdGVyKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uSW5mby5wYXJhbXMgJiYgIWNvbHVtbkluZm8uZGF0YSkge1xuICAgICAgICBjb2x1bW5JbmZvLmRhdGEgPSBjb2x1bW5JbmZvLnBhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGFsbG93VG9nZ2xlOiBjb2x1bW5JbmZvLmFsbG93VG9nZ2xlIHx8IGZhbHNlLFxuICAgICAgYWxsb3dTZWFyY2g6IGNvbHVtbkluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBhbGxvd0F1dG9Db21wbGV0ZVNhdmU6IGNvbHVtbkluZm8uYWxsb3dBdXRvQ29tcGxldGVTYXZlLFxuICAgICAgdW5pcXVlS2V5OiBjb2x1bW5JbmZvLnVuaXF1ZUtleSxcbiAgICAgIGZpZWxkOiBjb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHN0eWxlOiBjb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdHlwZTogY29sdW1uSW5mby50eXBlLFxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIGRhdGE6IGNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGZpbHRlclZhbHVlOmNvbHVtbkluZm8uZmlsdGVyVmFsdWUsXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBjb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHNob3c6IGNvbHVtbkluZm8uc2hvdyxcbiAgICAgIHNvcnRpbmc6IGNvbHVtbkluZm8uc29ydGluZyxcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXG4gICAgICBoeXBlcmxpbms6IGNvbHVtbkluZm8uaHlwZXJsaW5rLFxuICAgICAgdGFibGVBbGlhczogY29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcbiAgICAgIG1pbnV0ZXNJbnRlcnZhbDogY29sdW1uSW5mby5taW51dGVzSW50ZXJ2YWwsXG4gICAgICBwYXJhbXM6IGNvbHVtbkluZm8ucGFyYW1zLFxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxuICAgICAgZGlzcGxheVRleHQ6IGNvbHVtbkluZm8uZGlzcGxheVRleHQsXG4gICAgICB0YXJnZXQ6IGNvbHVtbkluZm8udGFyZ2V0LFxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgYWxsb3dFZGl0OiBjb2x1bW5JbmZvLmFsbG93RWRpdCxcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLFxuICAgICAgZWRpdExpbms6IGNvbHVtbkluZm8uZWRpdExpbmssXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxuICAgICAgY29tcG9uZW50OiBjb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIG9uQ2xpY2s6IGNvbHVtbkluZm8ub25DbGljayxcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxuICAgICAgb25Gb2N1c091dDogY29sdW1uSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25DaGFuZ2U6IGNvbHVtbkluZm8ub25DaGFuZ2UsXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxuICAgICAgZm9ybWF0dGVyOiBjb2x1bW5JbmZvLmZvcm1hdHRlcixcbiAgICAgIHBlcm1pc3Npb25zOiBjb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogY29sdW1uSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIGRyb3BEb3duUHJvcDogY29sdW1uSW5mby5kcm9wRG93blByb3AsXG4gICAgICBob3ZlckRhdGE6IGNvbHVtbkluZm8uaG92ZXJEYXRhLFxuICAgICAgc2hvd1RpbWU6IGNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogY29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uSW5mby5kaXNwbGF5RmllbGQsXG4gICAgICBpY29uOiBjb2x1bW5JbmZvLmljb24sXG4gICAgICBjb2xvcjogY29sdW1uSW5mby5jb2xvcixcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxuICAgICAgdmFsdWU6IGNvbHVtbkluZm8udmFsdWUsXG4gICAgICB2YWxpZGF0aW9uczogY29sdW1uSW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHRleHRUeXBlOmNvbHVtbkluZm8udGV4dFR5cGUsXG4gICAgICBjb2x1bW5XaWR0aDogY29sdW1uSW5mby5jb2x1bW5XaWR0aCxcbiAgICAgIG9wZW5Jbk5ld1RhYjogY29sdW1uSW5mby5vcGVuSW5OZXdUYWIsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBBZGRpbmcgUmVwb3J0IEJ1dHRvbiBGdW5jdGlvbiBmb3IgR3JpZFxuICBhZGRSZXBvcnRCdG4oY29sdW1uSW5mbzogSUdyaWRSZXBvcnRCdG4pIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuUkVQT1JUO1xuICAgIHJldHVybiBjb2x1bW5JbmZvO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBpbnB1dCBncmlkIGNvbHVtblxuICBhZGRJbnB1dENvbHVtbihcbiAgICBmaWx0ZXJDb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGZpbHRlckNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkTnVtZXJpY0NvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogY29sdW1uSW5mbz8uZmlsdGVyPy50eXBlID8gY29sdW1uSW5mby5maWx0ZXIudHlwZSA6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQztcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGNhbGVuZGFyIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ2FsZW5kYXJDb2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogY29sdW1uSW5mbz8uZmlsdGVyPy50eXBlID8gY29sdW1uSW5mby5maWx0ZXIudHlwZSA6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUixcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IGNvbHVtbkluZm8udHlwZSA/IGNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIHNldENvbmZpZ0RhdGEoY29uZmlnOiBhbnkpIHtcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0ge307XG4gICAgaWYgKGNvbmZpZz8uZGF0YSAmJiBPYmplY3Qua2V5cyhjb25maWc/LmRhdGEpPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25maWdEYXRhID0gY29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xuICAgICAgICBpZiAocGFyYW0gJiYgT2JqZWN0LmtleXMocGFyYW0pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uZmlnRGF0YVsnZGF0YSddID0gcGFyYW07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjb25maWdEYXRhO1xuICB9XG4gICAgIFxuXG4gIC8vIGFkZCBzaW1wbGUgYm9vbGVhbiBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZEJvb2xlYW5Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgKGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSxcbiAgICAgICAgKGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCxcbiAgICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAvLyBhZGQgTG9va1VwIGNvbHVtbiBmb3IgR3JpZFxuIGFkZExvb2tVcENvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQ7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbn1cblxuLy8gYWRkIGRpYWxvZyBjb2x1bW4gZm9yIEdyaWRcbiBhZGREaWFsb2dDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0c7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiB9XG5cbiAgLy8gYWRkIEJ1dHRvbiBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQnV0dG9uQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQUREX0JVVFRPTjtcbiAgICBpZiAoIWNvbHVtbkluZm8uZmllbGQpIHtcbiAgICAgIGNvbHVtbkluZm8uZmllbGQgPSBjb2x1bW5JbmZvLnZhbHVlID8gY29sdW1uSW5mby52YWx1ZSA6IGNvbHVtbkluZm8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgQXV0b0NvbXBsZXRlIGZvciBncmlkIGNvbHVtblxuICBhZGRBdXRvQ29tcGxldGUoY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gU2VhcmNoIEF1dG9Db21wbGV0ZSBEYXRhIGZvciBHcmlkXG4gIGdldEF1dG9Db21wbGV0ZURhdGEoXG4gICAgY29sdW1uPzogYW55LFxuICAgIHVuaXF1ZUtleT86IHN0cmluZyxcbiAgICBmaWx0ZXJzPzogYW55W10sXG4gICAgc2VhcmNoOiBzdHJpbmcgPSAnJ1xuICApOiBhbnkge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywgeyB1bmlxdWVLZXk6IHVuaXF1ZUtleSwgZmlsdGVycyB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0sKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2U6YW55PSB7fTtcbiAgICAgICAgcmVzcG9uc2VbJ3JlY29yZHMnXSA9IFtdO1xuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0pO1xuICB9XG4gYXN5bmMgYWRkQXV0b0NvbXBsZXRlVmFsdWUodW5pcXVlS2V5OiBJQXV0b0NvbXBsZXRlU2F2ZSwgdmFsdWU6YW55LCBjb2x1bW46YW55LCByb3c6YW55KSB7XG4gIGxldCBuZXdWYWx1ZSA9IHt9XG5cbiAgZm9yKHZhciBpID0wO2k8dW5pcXVlS2V5LnZhbHVlcy5sZW5ndGg7IGkrKyl7XG4gICAgaWYodW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKXx8dW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpe1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT12YWx1ZTtcbiAgICBcbiAgICB9ZWxzZXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dGhpcy5nZXRTb2Z0Q29kaW5nVmFsdWUodW5pcXVlS2V5LnZhbHVlc1tpXS52YWx1ZSwgcm93KVxuICAgIH0gXG4gIH1cblxuXG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvU2F2ZScsIHsgdW5pcXVlS2V5OnVuaXF1ZUtleS5uYW1lLCAgdmFsdWVzOiBuZXdWYWx1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAoe2Vycm9yfSk9PntcbiAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSk7XG4gIH1cbiAgZ2V0U29mdENvZGluZ1ZhbHVlKHZhbHVlLCByb3cpe1xuICAgIGxldCByZXR1cm5WYWx1ZTtcbiAgICBpZih2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykmJnZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSl7XG4gICAgICB2YWx1ZT12YWx1ZS5yZXBsYWNlKFwie1wiLFwiXCIpLnJlcGxhY2UoXCJ9XCIsXCJcIik7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuVmFsdWU9cm93W2tleV07XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm5WYWx1ZT12YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGRyb3Bkb3duIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkRHJvcGRvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTjtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOLFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIWRyb3BEb3duUHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IGRyb3BEb3duUHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG4gIC8vIGFkZCBNdWx0aVNlbGVjdERyb3BEb3duIGdyaWQgY29sdW1uXG4gIGFkZE11bHRpU2VsZWN0RHJvcERvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNULFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIW11bHRpU2VsZWN0UHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IG11bHRpU2VsZWN0UHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbzogYWRkQ29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbkluZm8uZmlsdGVyICYmIGNvbHVtbkluZm8uZmlsdGVyLnNob3dGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2V0RHJvcGRvd25EYXRhKFxuICAgIGNvbHVtbjogSUdyaWRDb2x1bW4sXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55W10sXG4gICAgcm93PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApOiBQcm9taXNlPGFueT4gfCBhbnkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gPSByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uLmRhdGEgPSByZXM7XG4gICAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgKGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnKSkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5kYXRhID0gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEZpbHRlckNvbHVtbihmaWx0ZXJDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBhbnkgPSB7XG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZmlsdGVyQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgfSxcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGZpbHRlckNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc3R5bGU6IGZpbHRlckNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBwZXJtaXNzaW9uczogZmlsdGVyQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBkYXRlIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgZmllbGQ6IGRhdGVDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICB0eXBlOiBkYXRlQ29sdW1uSW5mby50eXBlID8gZGF0ZUNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFLFxuICAgICAgZmlsdGVyaW5nOiBkYXRlQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXG4gICAgICBmb3JtYXQ6IGRhdGVDb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIHN0eWxlOiBkYXRlQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBkaXNhYmxlZDogZGF0ZUNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGRhdGVDb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIGNvbXBvbmVudDogZGF0ZUNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgc2hvd1RpbWU6IGRhdGVDb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgZGF0YTogZGF0ZUNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGhpZGRlbjogZGF0ZUNvbHVtbkluZm8uaGlkZGVuLFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIHNldExvb2tVcEZpbHRlcihjb2x1bW46IGFueSwgZGlhbG9nU2VydmljZTogYW55LCBnbG9iYWxGaWx0ZXJMb29rdXA6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xuICAgICAgbGV0IGRhdGFWYWx1ZTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhS2V5OiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGEgPSBjb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVtrZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcbiAgICAgICAgICAgIGRhdGFLZXkudW5zaGlmdChrZXkpO1xuICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50LFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICApO1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGFLZXkuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IHZhbHVlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInKT8uZm9jdXMoKTtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW4/Lmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChnbG9iYWxGaWx0ZXJMb29rdXApIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZVR3byA9IHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBIeXBlcmxpbmsgZmllbGQgYXMgYSBwYXJhbSBWYWx1ZVxuICBzZXRGaWVsZEFzTGlua1BhcmFtKGNvbHVtbnM6IGFueSwgZmllbGQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgZmllbGQgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpLmZvckVhY2goKHJlczogYW55KSA9PiB7XG4gICAgICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqLnBhcmFtcyk7XG4gICAgICAgICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9iai5wYXJhbXNba2V5XSAmJiBvYmoucGFyYW1zW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9iai5wYXJhbXNba2V5XVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgb2JqLnBhcmFtc1trZXldID0gcmVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFzQW55TGlua0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMuc29tZShcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICAgICh4LmxpbmtJZCAmJiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rcyhmZXRjaFJlc3BvbnNlOiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGxpbmtQYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICBsZXQgcmVjb3JkczogYW55ID0gW107XG4gICAgbGV0IGRhdGEgPVxuICAgICAgZmV0Y2hSZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0RGF0YUZpZWxkcyhmZXRjaFJlc3BvbnNlLnJlY29yZHMpXG4gICAgICAgIDogW107XG4gICAgbGV0IG5ld1JvdzogYW55O1xuXG4gICAgaWYoZGF0YT8ubGVuZ3RoID4gMCl7XG4gICAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXG4gICAgICAuYWRkSHlwZXJsaW5rcyhjb2x1bW5zLCBmZXRjaFJlc3BvbnNlPy5yZWNvcmRzKVxuICAgICAgLnRoZW4oKGxpbmtSZXNwb25zZXM6IGFueSkgPT4ge1xuICAgICAgICBkYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXRMaW5rSWQgPSBmZXRjaFJlc3BvbnNlPy5yZWNvcmRzWzBdW2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmxpbmtJZDtcbiAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgICAgICAgICBjb2wuZmllbGQgPSBjb2wuZmllbGQgPyBjb2wuZmllbGQgOiBjb2wuaGVhZGVyO1xuICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0ID0gY29sLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgJiYgcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXSA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICA6IGNvbC5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbkRhdGEgPSB7IC4uLmNvbD8uZGF0YSB9O1xuICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSAmJiBjb2x1bW5EYXRhLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpYWxvZ0RhdGEgPSB1dGlsaXRpZXMuZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgIHJvd1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpbmtSZXNwb25zZXMpICYmIGxpbmtSZXNwb25zZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlcy5mb3JFYWNoKChsaW5rUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpICYmXG4gICAgICAgICAgICAgICAgICBjb2wubGlua0lkICYmXG4gICAgICAgICAgICAgICAgICAoY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZCB8fFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5rSWQgPT09IGxpbmtSZXNwb25zZS5saW5rSWQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbUtleXM6IHN0cmluZ1tdID0gbGlua1BhcmFtcyAmJiBPYmplY3Qua2V5cyhsaW5rUGFyYW1zKT8ubGVuZ3RoID8gT2JqZWN0LmtleXMobGlua1BhcmFtcykgOiBjb2wucGFyYW1zID8gT2JqZWN0LmtleXMoY29sLnBhcmFtcykgOiBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbms6IGFueSA9IHV0aWxpdGllcy5zZXRIeXBlcmxpbmsoXG4gICAgICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlLnVybCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICAgICAgICAgICAgICBjb2wucGFyYW1zXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0ubGlua0lkID0gc2V0TGlua0lkOyBcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uaHlwZXJsaW5rID0gbGluaztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSlcbiAgICB9XG4gICAgXG4gIH1cblxuICAvL3NldCByb3dzIHRvIHJlc3BvbnNlLnJlY29yZHNcbiAgYXN5bmMgc2V0Um93RGF0YShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYocmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmICh0aGlzLmhhc0FueUxpbmtDb2x1bW4oY29sdW1ucykpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0SHlwZXJsaW5rcyhyZXNwb25zZSwgY29sdW1ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVjb3JkcztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgPSBbLi4ucmVzcG9uc2UucmVjb3JkcywgcmVzcG9uc2UucmVjb3JkcyAtIDFdO1xuICAgICAgcmV0dXJuICByZXNwb25zZS5yZWNvcmRzO1xuICAgICB9IFxuICB9XG4gICBcblxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkVXBkYXRlID0ge1xuICAgICAgZmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdyaWRVcGRhdGVJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdHlwZTogZ3JpZFVwZGF0ZUluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdyaWRVcGRhdGVJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ3JpZFVwZGF0ZUluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ3JpZFVwZGF0ZUluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdyaWRVcGRhdGVJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBncmlkVXBkYXRlSW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdyaWRVcGRhdGVJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBvbkZvY3VzT3V0OiBncmlkVXBkYXRlSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdyaWRVcGRhdGVJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBncmlkVXBkYXRlSW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdyaWRVcGRhdGVJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBncmlkVXBkYXRlSW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ3JpZFVwZGF0ZUluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ3JpZFVwZGF0ZUluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdyaWRVcGRhdGVJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ3JpZFVwZGF0ZUluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ3JpZFVwZGF0ZUluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdyaWRVcGRhdGVJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ3JpZFVwZGF0ZUluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBncmlkVXBkYXRlSW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ3JpZFVwZGF0ZUluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdyaWRVcGRhdGVJbmZvLmZvcm1hdCxcbiAgICAgIGludGVyZmFjZVR5cGU6ICdidWxrVXBkYXRlJ1xuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBpbnB1dCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlSW5wdXQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVEcm9wZG93bihcbiAgICBncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ3JpZFVwZGF0ZUluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0cywgXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQm9vbGVhbihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgbnVtZXJpYyBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTnVtZXJpYyhncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGNhbGVuZGFyIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVDYWxlbmRhcihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvL2FkZCBncmlkIHVwZGF0ZSBsb29rdXAgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUxvb2t1cChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpe1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUXG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKVxuICB9XG4gIFxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2x1bW46IGFkZEdsb2JhbEZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdsb2JhbEZpbHRlckluZm8uZGlzcGxheVRleHQsXG4gICAgICBkaXNwbGF5U3R5bGU6Z2xvYmFsRmlsdGVySW5mby5kaXNwbGF5U3R5bGUsXG4gICAgICB2YWxpZGF0aW9uczogZ2xvYmFsRmlsdGVySW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHR5cGU6IGdsb2JhbEZpbHRlckluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdsb2JhbEZpbHRlckluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdsb2JhbEZpbHRlckluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdsb2JhbEZpbHRlckluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdsb2JhbEZpbHRlckluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iYWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgIG9uQ2xpY2s6Z2xvYmFsRmlsdGVySW5mby5vbkNsaWNrLFxuICAgICAgb25Gb2N1c091dDogZ2xvYmFsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdsb2JhbEZpbHRlckluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JhbEZpbHRlckluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBnbG9iYWxGaWx0ZXJJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdsb2JhbEZpbHRlckluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JhbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBnbG9iYWxGaWx0ZXJJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdsb2JhbEZpbHRlckluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdsb2JhbEZpbHRlckluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ2xvYmFsRmlsdGVySW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ2xvYmFsRmlsdGVySW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ2xvYmFsRmlsdGVySW5mby5mb3JtYXQsXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcbiAgYWRkR2xvYmFsSW5wdXRGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbERyb3Bkb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuICAvL2FkZCBnbG9iYWwgcmFkaW8gYnV0dG9uIGZpbHRlclxuICBhZGRHbG9iYWxTZWxlY3RCdXR0b25GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNFTEVDVEJVVFRPTjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIGdsb2JhbCBNdWx0aVNlbGVjdCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsTXVsdGlTZWxlY3REcm9wRG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IG11bHRpU2VsZWN0UHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGEoXG4gICAgZmllbGRJbmZvOiBhbnksXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55LFxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdLCBcbiAgICBncmlkVXBkYXRlRmllbGQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcbiAgICAgIC5zZXREcm9wRG93bkxpc3QodW5pcXVlS2V5LCB2YWx1ZVByb3AsIGxhYmVsUHJvcCwgZmlsdGVycywgc29ydHMpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgZmllbGRJbmZvLmRhdGEgPSByZXM7XG4gICAgICAgIHJldHVybiBncmlkVXBkYXRlRmllbGQgPyB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChmaWVsZEluZm8pIDogdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZmllbGRJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGdyaWRVcGRhdGVGaWVsZCA/IHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGZpZWxkSW5mbykgOiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXG4gIGFkZEdsb2JhbEZpbHRlclNwYWNlRmllbGQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNQQUNFUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGJvb2xlYW4gZmlsdGVyXG4gIGFkZEdsb2JhbEJvb2xlYW5GaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsRGF0ZVJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIE51bWVyaWMgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY0lucHV0KGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIExvb2tVcCBGaWVsZCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxMb29rdXBGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAgLy9hZGQgY2FsZW5kYXIgZmlsdGVyIGZvciBnbG9iYWwgZmlsdGVyXG4gICBhZGRHbG9iYWxEYXRlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcil7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlPUdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBsZXQgZGF0YTogYW55ID0gW107XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh4ID8/IHt9KT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gT2JqZWN0LmtleXMoeCk/LnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFLZXkgJiZcbiAgICAgICAgICAgIGRhdGFLZXkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0Q29sdW1uRmllbGRzKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLm1hcCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXG4gIHNldExpbmtJZChcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgbGlua0lkOiBzdHJpbmcsXG4gICAgcmVjb3JkOiBhbnksXG4gICAgdXNlcnM6IGFueSxcbiAgICBwYXJhbXM6IGFueSA9IG51bGwsXG4gICAgY2hhbmdlTGluazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb2x1bW4ubGlua0lkID0gbGlua0lkO1xuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEh5cGVybGlua3MoeyByZWNvcmRzOiBbcmVjb3JkXSB9LCBjb2x1bW5zKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZUxpbmspIHtcbiAgICAgICAgZGVsZXRlIHJlc1swXVtmaWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgbGV0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChpOiBhbnkpID0+IGlbZmllbGQudG9Mb3dlckNhc2UoKV0gPT09IHJlY29yZFtmaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID1cbiAgICAgICAgICAgICAgcmVzWzBdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZ3JpZCBkYXRhIGFuZCBzZXQgc2VsZWN0ZWQgcm93IGJhc2VkIG9uIHNlbGVjdGlvbiB2YWx1ZVxuICBzZXREYXRhV2l0aFNlbGVjdGVkUm93KHJlY29yZHM6IGFueSwgY29uZmlnRGF0YTogYW55KSB7XG4gICAgaWYgKChjb25maWdEYXRhPy52YWx1ZVByb3AgfHwgY29uZmlnRGF0YT8ubGFiZWxQcm9wKSAmJiBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlY29yZCk/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnRGF0YS5sYWJlbFByb3AgPyBjb25maWdEYXRhLmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKSA6IGNvbmZpZ0RhdGEudmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZFtrZXldPy50b1N0cmluZygpID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uICE9IG51bGwgJiYgY29sdW1uLnRhYmxlQWxpYXMgJiYgY29sdW1uLnRhYmxlQWxpYXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc2V0R3JpZFByb3BWYWx1ZXMoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXG4gICAgZmlsdGVyPzogSUdyaWRQcm9wRmlsdGVyLFxuICAgIHJlY29yZHM/OiBhbnlbXVxuICApIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGlzTWF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmllbGQgJiYgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHgpW2ZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpXSA9PT1cbiAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcbiAgICAgICAgbGV0IGNvbDogYW55ID0ge307XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmICFpc01hdGNoZWQgJiYgIWZpbHRlcj8uZmllbGQpIHtcbiAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2hlZCkge1xuICAgICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXI/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sICYmIGNvbC5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ3JpZCByb3cgcHJvcFZhbHVlc1xuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgcHJvcHM6IElHcmlkUm93UHJvcFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW10pIHtcbiAgICBsZXQgc2V0TGlua0lkOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IGxpbmtJZFJlczogYW55O1xuICAgIHByb3BzPy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICBzZXRMaW5rSWQgPSBmYWxzZTtcbiAgICAgIGlmIChwcm9wLnByb3BOYW1lICYmIHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuTElOS0lEICYmIHByb3AucHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChPYmplY3Q/LmtleXMocm93KSkge1xuICAgICAgICAgIGxldCBtYXRjaGVkUm93T2JqZWN0S2V5ID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCk/LmVuZHNXaXRoKCdfb2JqJykgJiYgcm93W2tleV0/LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgaWYgKG1hdGNoZWRSb3dPYmplY3RLZXkpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaGVkT2JqZWN0ID0gcm93W21hdGNoZWRSb3dPYmplY3RLZXldO1xuICAgICAgICAgICAgbWF0Y2hlZE9iamVjdC5saW5rSWQgPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICAgIG1hdGNoZWRPYmplY3QuaHlwZXJsaW5rID0gJyc7XG4gICAgICAgICAgICByb3dbbWF0Y2hlZFJvd09iamVjdEtleV0gPSBtYXRjaGVkT2JqZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBtYXRjaGVkRmllbGROYW1lID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCkgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVkQ29sdW1uT2JqID0gY29sdW1ucy5maW5kKChrZXkpID0+IGtleS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hlZEZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnN0IHJvd09iaiA9IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgcm93W3Jvd09ial0gPSBtYXRjaGVkQ29sdW1uT2JqO1xuICAgICAgICAgICAgcm93W3Jvd09ial0ubGlua0lkID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgICByb3dbcm93T2JqXS5oeXBlcmxpbmsgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNldExpbmtJZCA9IHRydWU7XG4gICAgICAgIGxpbmtJZFJlcyA9IHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyb3ddIH0sIGNvbHVtbnMsIHByb3AucGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcC5wcm9wTmFtZSAmJiAhcHJvcC5sYWJlbCAmJiAocHJvcC5wcm9wVmFsdWUgfHwgcHJvcC5wcm9wVmFsdWUgPT09IGZhbHNlIHx8IHByb3AucHJvcFZhbHVlID09PSAnJykpIHtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgcm93KSB7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZU9iaiA9IGZpZWxkTmFtZT8uaW5jbHVkZXMoJ19vYmonKSA/IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA6IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICBmaWVsZE5hbWVPYmogPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXk6IGFueSkgPT4gKGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcm93T2JqKSAmJiAocm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSk7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lT2JqKSB7XG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IC4uLnJvd1tmaWVsZE5hbWVPYmpdLCB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGQgPSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkT2JqID0gcHJvcEZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IC4uLnJvd1twcm9wRmllbGRPYmpdLCB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcC5sYWJlbCkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVE5BTUUpIHtcbiAgICAgICAgICByb3dbcHJvcE5hbWVdID0geyAuLi5yb3dbcHJvcE5hbWVdLCByZXBvcnROYW1lOiBwcm9wPy5wcm9wVmFsdWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVFBBUkFNICYmIHByb3A/LnBhcmFtcykge1xuICAgICAgICAgIHJvd1twcm9wTmFtZV0gPSB7IC4uLnJvd1twcm9wTmFtZV0sIHJlcG9ydFBhcmFtOiBwcm9wLnBhcmFtcyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFzZXRMaW5rSWQpIHtcbiAgICAgIHJldHVybiByb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsaW5rSWRSZXM7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSByb3dBY3Rpb25zIGZyb20gdGhlIHJlY29yZHNcbiAgcmVtb3ZlUm93QWN0aW9ucyhyZWNvcmRzKSB7XG4gICAgaWYgKHJlY29yZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cucm93QWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1sncm93QWN0aW9uJ107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4vKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChNYWluLW1ldGhvZClcbiAgICovXG4gIGV4cG9ydEV4Y2VsKHJvd3NEYXRhLCBjb2x1bW5zLCByZXBvcnROYW1lOiBzdHJpbmcgPSBFR3JpZEV4Y2VsLkVYUE9SVCwgaXNHcmlkRXhjZWxEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChpc0dyaWRFeGNlbERhdGEpIHtcbiAgICAgIHRoaXMuc2V0RXhjZWxGb3JtYXR0ZWREYXRhKHJvd3NEYXRhLCBjb2x1bW5zLCByZXBvcnROYW1lKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldEV4Y2VsUmVwb3J0RGF0YShyb3dzRGF0YSwgY29sdW1ucywgcmVwb3J0TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgcmVwb3J0TmFtZSk6IHZvaWQge1xuICAgIGxldCBFWENFTF9UWVBFID1cbiAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogRVhDRUxfVFlQRSB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2V0RXhjZWxSZXBvcnREYXRhKHJvd3NEYXRhLCBjb2x1bW5zLCByZXBvcnROYW1lKSB7XG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQocm93c0RhdGEpO1xuICAgICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XG4gICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiBjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICAgIGxldCBsaW5rVXJsOiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVsxXTtcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgbGlua1VybCA9ICcvJyArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGlua1VybCA9XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcbiAgICAgICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xuICAgICAgICAgICAgICAgIGxpbmtVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IHhsc3gudXRpbHMuZW5jb2RlX2NlbGwoe1xuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XG4gICAgICAgICAgICAgIGY6IGA9SFlQRVJMSU5LKFwiJHtsaW5rVXJsfVwiLCBcIiR7bGlua1RleHR9XCIpYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgIH0pO1xuICAgICAgICByb3dJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXG4gICAgICAgIFNoZWV0TmFtZXM6IFsnc2hlZXQxJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcbiAgICAgICAgYm9va1R5cGU6ICd4bHN4JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIHJlcG9ydE5hbWUpO1xuICAgIH0pO1xuICB9XG5cbi8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzZXRFeGNlbEZvcm1hdHRlZERhdGEocm93c0RhdGEsIGNvbHVtbnMsIHJlcG9ydE5hbWUpIHtcbiAgICBjb25zdCBbZmlsdGVyZWRyb3dzRGF0YSwgZmlsdGVyZWRDb2x1bW5zXTogYW55ID0gdGhpcy5zZXRFeGNlbERhdGEocm93c0RhdGEsIGNvbHVtbnMpO1xuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ1NoZWV0MScpO1xuICAgIGNvbnN0IGJvbGRTdHlsZSA9IHsgYm9sZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGhlYWRlclJvdyA9IFtdO1xuICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBoZWFkZXJSb3cucHVzaChjb2wuaGVhZGVyKTtcbiAgICB9KTtcbiAgICB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlclJvdyk7XG4gICAgd29ya3NoZWV0LmdldFJvdygxKS5lYWNoQ2VsbCh7IGluY2x1ZGVFbXB0eTogdHJ1ZSB9LCAoY2VsbCkgPT4ge1xuICAgICAgY2VsbC5mb250ID0gYm9sZFN0eWxlO1xuICAgIH0pO1xuICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpbmRleCArIDEpLndpZHRoID0gMTU7XG4gICAgfSk7XG4gICAgZmlsdGVyZWRyb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IFtdO1xuICAgICAgZmlsdGVyZWRDb2x1bW5zPy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sPy5oZWFkZXI/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiYgY2VsbFZhbHVlICYmIGNlbGxWYWx1ZS5sZW5ndGggPiAwICYmIGNlbGxWYWx1ZS5pbmRleE9mKCd8JykgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW2xpbmtUZXh0LCBsaW5rVXJsXSA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpO1xuICAgICAgICAgIGxldCBmb3JtYXR0ZWRMaW5rVXJsID0gbGlua1VybDtcbiAgICAgICAgICBpZiAobGlua1VybCAmJiAhbGlua1VybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZExpbmtVcmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgKGxpbmtVcmwuc3RhcnRzV2l0aCgnLycpID8gJycgOiAnLycpICsgbGlua1VybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxpbmtUZXh0ICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgbmV3Um93LnB1c2goeyBmb3JtdWxhOiBgPUhZUEVSTElOSyhcIiR7Zm9ybWF0dGVkTGlua1VybH1cIiwgXCIke2xpbmtUZXh0fVwiKWAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Jvdy5wdXNoKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Um93LnB1c2goY2VsbFZhbHVlICE9PSBudWxsID8gY2VsbFZhbHVlIDogJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHdvcmtzaGVldC5hZGRSb3cobmV3Um93KTtcbiAgICB9KTtcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbigoZXhjZWxCdWZmZXIpID0+IHtcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCByZXBvcnROYW1lKTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBFeGNlbCBmaWxlOicsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2V0RXhjZWxEYXRhKHJvd3NEYXRhLCBjb2x1bW5zKSB7XG4gICAgY29uc3QgdmFsaWRSb3dzID0gW107XG4gICAgY29uc3QgdmFsaWRDb2x1bW5zID0gW107XG4gICAgY29uc3QgY29sdW1uSGVhZGVycyA9IGNvbHVtbnM/Lm1hcChjb2x1bW4gPT4gY29sdW1uPy5oZWFkZXI/LnRvTG93ZXJDYXNlKCkpO1xuICAgIHJvd3NEYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkUm93ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhyb3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbkhlYWRlcnM/LmluY2x1ZGVzKGtleT8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0RhdGVTdHJpbmcocm93W2tleV0pKSB7XG4gICAgICAgICAgICB2YWxpZFJvd1trZXk/LnRvTG93ZXJDYXNlKCldID0gdGhpcy5mb3JtYXREYXRlKHJvd1trZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWRSb3dba2V5Py50b0xvd2VyQ2FzZSgpXSA9IHJvd1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRSb3cpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhbGlkUm93cy5wdXNoKHZhbGlkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGNvbHVtbj8uaGVhZGVyPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbGlkUm93cy5zb21lKHJvdyA9PiBPYmplY3Qua2V5cyhyb3cpPy5pbmNsdWRlcyhoZWFkZXIpKSkge1xuICAgICAgICB2YWxpZENvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFt2YWxpZFJvd3MsIHZhbGlkQ29sdW1uc107XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgaXNEYXRlU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZHszfSk/Wj8kLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBmb3JtYXREYXRlKGRhdGVTdHJpbmcpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgY29uc3QgeWVhciA9IGRhdGU/LmdldEZ1bGxZZWFyKCk7XG4gICAgbGV0IG1vbnRoID0gKDEgKyBkYXRlPy5nZXRNb250aCgpKT8udG9TdHJpbmcoKT8ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBsZXQgZGF5ID0gZGF0ZT8uZ2V0RGF0ZSgpPy50b1N0cmluZygpPy5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XG4gIH1cbiAgXG4gIHNhdmVBc1RleHRGaWxlKHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgY29uc3QgZmllbGRzVG9EaXNwbGF5ID0gcm93c0luZm8ubGVuZ3RoID4gMCA/IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKSA6IFtdO1xuICAgICAgY29uc3QgaGVhZGVyUm93ID0gZmllbGRzVG9EaXNwbGF5Py5qb2luKCdcXHQnKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFJvd3MgPSByb3dzSW5mbz8ubWFwKChyb3cpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkc1RvRGlzcGxheT8ubWFwKChmaWVsZCkgPT4gcm93W2ZpZWxkXSk/LmpvaW4oJ1xcdCcpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCByb3dzRGF0YSA9IFtoZWFkZXJSb3csIC4uLmZvcm1hdHRlZFJvd3NdLmpvaW4oJ1xcbicpO1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtyb3dzRGF0YV0sIHsgdHlwZTogJ3RleHQnIH0pO1xuICAgIFxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICBzYXZlRGF0YUFzQ3N2KHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZykge1xuICAgIGlmICghcm93c0luZm8gfHwgIXJvd3NJbmZvLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFzQ3N2RmlsZShyb3dzSW5mbywgcmVwb3J0TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IHNlcGFyYXRvciA9ICcsJztcbiAgICBjb25zdCBjb2x1bW5zID0gT2JqZWN0LmtleXMocm93c0luZm9bMF0pO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSkuZmlsdGVyKGsgPT4ge1xuICAgICAgaWYgKGNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5pbmNsdWRlcyhrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPVxuICAgICAga2V5cy5qb2luKHNlcGFyYXRvcikgK1xuICAgICAgJ1xcbicgK1xuICAgICAgcm93c0luZm8ubWFwKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiBrZXlzLm1hcChrID0+IHtcbiAgICAgICAgICBsZXQgY2VsbCA9IHJvd1trXSA9PT0gbnVsbCB8fCByb3dba10gPT09IHVuZGVmaW5lZCA/ICcnIDogcm93W2tdO1xuICAgICAgICAgIGNlbGwgPSBjZWxsIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgPyBjZWxsLnRvTG9jYWxlU3RyaW5nKClcbiAgICAgICAgICAgIDogY2VsbC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcIlwiJyk7XG4gICAgICAgICAgaWYgKGNlbGwuc2VhcmNoKC8oXCJ8LHxcXG4pL2cpID49IDApIHtcbiAgICAgICAgICAgIGNlbGwgPSBgXCIke2NlbGx9XCJgO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgfSkuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgdGhpcy5zYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQsIHJlcG9ydE5hbWUpO1xuICB9XG4gIFxuICBnZW5lcmF0ZUltcG9ydEZpbGVFdmVudChkaWFsb2dEYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueX0pIHtcbiAgICBkaWFsb2dEYXRhID0ge3dpZHRoOiAnNTAlJywgc3R5bGVDbGFzczogJ2dlbmVyYXRlLWZpbGUtZGlhbG9nJywgLi4uZGlhbG9nRGF0YX07XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSW1wb3J0RGlhbG9nQ29tcG9uZW50LCBkaWFsb2dEYXRhKTtcbiAgfVxuXG5nZW5lcmF0ZVNlbGVjdGVkRmlsZShpZCwgZmlsZXMpe1xuICBsZXQgZmlsZURhdGEgPSBuZXcgRm9ybURhdGE7IFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZmlsZXNbaV0pIHtcbiAgICAgICAgZmlsZURhdGEuYXBwZW5kKGZpbGVzW2ldLm5hbWUsIGZpbGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIGFueT4oYC9JbXBvcnRDb25maWcvSW1wb3J0RmlsZS8ke2lkfWAsIGZpbGVEYXRhKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2UucG9zdDxhbnlbXSwgYW55PihgL0ltcG9ydENvbmZpZy9HZW5lcmF0ZUltcG9ydD9pZD0ke2lkfWAsIHt9KS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKCdHZW5lcmF0ZSBGaWxlIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgICB9LFxuICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICB9XG4gICk7XG59XG5cblxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gQ1NWIChzdWItbWV0aG9kKVxuICAgKi9cblxuICBzYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQ6IHN0cmluZywgcmVwb3J0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSArICcuY3N2Jyk7XG4gIH1cblxuICBhZGROZXdSb3coZ3JpZE5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IGFkZEJ1dHRvbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2xvYmFsLWFkZC1idG4nICsgZ3JpZE5hbWUpO1xuICAgIGlmIChhZGRCdXR0b24gJiYgYWRkQnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGFkZEJ1dHRvblswXT8uY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRDYWxscygpIHtcbiAgICB0aGlzLm51bWJlck9mQ2FsbHMrKztcbiAgfVxuXG4gIGdldE51bWJlck9mQ2FsbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZDYWxscztcbiAgfVxufSJdfQ==
1741
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLDZCQUE2QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDOzs7Ozs7Ozs7QUFJakgsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFDUyxRQUFrQixFQUNqQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsS0FBcUIsRUFDdEIsYUFBNEI7UUFONUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFkN0Isa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLHFCQUFnQixHQUFZLElBQUks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Q0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUlDOztPQUVHO0lBRUgsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBa0I7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzFELFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFdBQW1CLEVBQUU7UUFDN0IsSUFBSSxTQUFTLEdBQVEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztpSUFyOURVLFdBQVc7cUlBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBJQXV0b0NvbXBsZXRlU2F2ZSwgSURyb3BEb3duUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRTb3J0LFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZENvbHVtbixcbiAgYWRkRmlsdGVyQ29sdW1uLFxuICBhZGRHbG9iYWxGaWx0ZXIsXG4gIElHcmlkQ29sdW1uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgSUdyaWRQcm9wLFxuICBJR3JpZFByb3BGaWx0ZXIsXG4gIElHcmlkUm93UHJvcCxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBJRGlhbG9nQ29sdW1uLFxuICBFR3JpZEZvcm1hdHRlcixcbiAgSUdyaWRVcGRhdGUsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG59IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4vaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzL2Rpc3QvZXhjZWxqcy5taW4uanMnXG5pbXBvcnQgeyBJbXBvcnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9nZW5lcmF0ZS1maWxlL2ltcG9ydC1kaWFsb2cvaW1wb3J0LWRpYWxvZy5jb21wb25lbnQnO1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBudW1iZXJPZkNhbGxzOiBudW1iZXIgPSAwO1xuICB1c2VyU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc29mdENhY2hpbmdGaWx0ZXJzOiBhbnkgPSB7fTtcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XG4gIHJvd1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29sdW1uRm9jdXNlZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZTogUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgYWZ0ZXIgcHJvcGVyIG1hcHBpbmdcbiAgICovXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzKTtcbiAgfVxuICBnZXROZXh0SWQoKTogc3RyaW5nIHtcbiAgICBcbiAgICByZXR1cm4gYHN0YXRpYy0ke3RoaXMuY291bnRlcisrfWA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogUmVjZWl2ZXMgZmlsdGVycyBhbmQgcmV0dXJucyBhcnJheSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGVzXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcbiAgICovXG4gIGhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVyczogSUdyaWRGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAubWFwKCh4LCBpLCBhcnIpID0+XG4gICAgICAgIGFyci5zb21lKFxuICAgICAgICAgICh5LCBpZHgpID0+XG4gICAgICAgICAgICB5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGkgIT09IGlkeFxuICAgICAgICApXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgIHZhbHVlOiBhcnJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHopID0+IHouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS52YWx1ZSlcbiAgICAgICAgICAgICAgICAuam9pbigpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogeFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoZiwgaSwgYXJyKSA9PiBhcnIuZmluZEluZGV4KCh4KSA9PiB4LnZhbHVlID09PSBmLnZhbHVlKSA9PT0gaSk7XG4gIH1cblxuICAvLyBQcmVwYXJlIGJhc2ljIGdyaWQgZmlsdGVyc1xuICBwcmVwYXJlQmFzaWNGaWx0ZXJzKFxuICAgIGV2ZW50OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZpbHRlcnMgaGFzIHZhbHVlcyB0aGVuIGNvbnZlcnRzIGdsb2JhbCBmaWx0ZXIgdmFsdWVzIHR5cGUgaW50byBJR3JpZEZpbHRlci5cbiAgICovXG4gIHByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGdsb2JhbERhdGE6IElHcmlkRmlsdGVyW10gPSBbXTtcblxuICAgIGdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcjogSUdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIGZpbHRlci52YWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnfCcpXG4gICAgICAgICkgeyAgICAgICAgIFxuXG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3IgZW5kIGRhdGVcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2x0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIHN0YXJ0IGRhdGVcbiAgICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2d0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnR5cGUgIT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxuICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICAgICAgPyAnaW4nXG4gICAgICAgICAgICAgICAgOiBmaWx0ZXIubWF0Y2hNb2RlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdsb2JhbERhdGE7XG4gIH1cblxuICBzZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXI6IGFueSwgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgaWYgKGlzU3RhcnREYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIuZnJvbUZpZWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci50b0ZpZWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmZpZWxkO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBnbG9iYWwgZmlsdGVyIHZhbHVlXG4gIHNldEdsb2JhbEZpbHRlclZhbHVlKFxuICAgIGZpbHRlcjogSUdsb2JhbEZpbHRlcixcbiAgICBpc1N0YXJ0RGF0ZTogYm9vbGVhbiA9IHRydWVcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBhbnlbXSkuam9pbignLCcpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyLnZhbHVlIGFzIERhdGUpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U6XG4gICAgICAgIGxldCBkYXRlVmFsdWVzOiBzdHJpbmdbXSA9IGZpbHRlci52YWx1ZVxuICAgICAgICAgID8gZmlsdGVyLnZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ3wnKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChkYXRlVmFsdWVzICYmIGRhdGVWYWx1ZXMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICBsZXQgZGF0ZVZhbHVlOiBEYXRlID0gaXNTdGFydERhdGVcbiAgICAgICAgICAgID8gbmV3IERhdGUoZGF0ZVZhbHVlc1swXSlcbiAgICAgICAgICAgIDogbmV3IERhdGUoZGF0ZVZhbHVlc1sxXSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g6XG4gICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICBjaGVja1ZhbGlkaXR5KGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udmFsaWRhdGlvbnMgJiYgIWl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgaXRlbS5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgaXRlbS5pc3ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgbWluTWF4VmFsaWREYXRlID0gdXRpbGl0aWVzLmNhbGVuZGFyTWluTWF4VmFsdWUoXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLFxuICAgICAgICAgICAgaVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBpdGVtLnZhbGlkYXRpb25zICYmIGl0ZW0uaGVhZGVyO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFzaW5nbGVDZWxsICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICFpdGVtLmhpZGRlbiAmJlxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYCR7dmFsaWR9IGlzIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYT1BUSU9OUyBcblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG9wdGlvbnM6bnVtYmVyPTE7XG4gICAgICAgICAgICB2YXIgdmFsdWU9cm93W2l0ZW0uZmllbGRdO1xuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB2YWx1ZS5sZW5ndGggLSAxOyB4KyspIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlW3hdID09ICc7Jykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9ibHVlO3JlZDtncmVlbiBtYXg9M1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIC8vIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICBvcHRpb25zIDw9IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBtYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBvcHRpb24ke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbj4xPydzJzonJ31gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnbWluaW11bSdcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNaW5pbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnZ3JlYXRlcidcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNYXhpbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEFUVEVSTiAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5OVU1FUklDICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmIHJvd1tpdGVtLmZpZWxkXS5tYXRjaCgvXigwfFsxLTldXFxkKikkLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEhPTkUgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHMreF0rJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXig/PS4qWzAtOV0pWy0oKTAtOVxcc10rJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5ERUNJTUFMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKShcXC5cXGQrKT8kLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8WzEtOV1cXGQqKShcXC5cXGQrKT8kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuRU1BSUwgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLm1hdGNoKC9eW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Miw2fSQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIHNldEVycm9yTWVzc2FnZShpdGVtOiBJR3JpZENvbHVtbiwgZXJyb3JNZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpdGVtLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcbiAgICBpdGVtLmlzdmFsaWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBzZXQgYmFzaWMgZmlsdGVyIHZhbHVlXG4gIHNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyOiBhbnkpOiBhbnkge1xuICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyAxIDogMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgc29ydCBhcnJheVxuICAgKi9cbiAgZ2V0R3JpZFNvcnRzKFxuICAgIHsgbXVsdGlTb3J0TWV0YSB9OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRTb3J0W10ge1xuICAgIHJldHVybiAobXVsdGlTb3J0TWV0YSB8fCBbXSkubWFwKCh7IGZpZWxkLCBvcmRlciB9LCBpKTogYW55ID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogb3JkZXIgPiAwID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQyA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDLFxuICAgICAgcHJpb3JpdHk6IGkgKyAxLFxuICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEhhbmRsZXMgZGVmYXVsdCBhbmQgbG9va3VwIGZpbHRlcnNcbiAgICovXG4gIG1hcEZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IElHcmlkRmlsdGVyW10gPSBbXTtcbiAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgKHZhbHVlIGFzIElHcmlkRmlsdGVyW10pLmZvckVhY2goXG4gICAgICAgICAgKHsgbWF0Y2hNb2RlLCBvcGVyYXRvciwgdmFsdWU6IGZpbHRlciB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFscycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldEZvcm1hdHRlZERhdGUodmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlLnZhbHVlIHx8IFtdKS5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBwYWdlIG51bWJlclxuICAgKi9cbiAgZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQ6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlzTmFOKGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cykgPyAxIDogZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzICsgMTtcbiAgfVxuXG4gIC8vIGdldCBmb3JtYXR0ZWQgZGF0ZVxuICBnZXRGb3JtYXR0ZWREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYCR7dmFsdWV9IFpgKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gICAvLyBjaGFuZ2Ugcm93IGtleSBhbmQgdmFsdWUgd2hlbiB1c2luZyBzZXRHcmlkUm93UHJvcFZhbHVlIGZ1bmN0aW9uXG4gICBzZXRSb3dWYWx1ZShyb3dEYXRhOiBhbnkpIHtcbiAgICBPYmplY3Qua2V5cyhyb3dEYXRhKT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBjb25zdCByb3dPYmogPSByb3crJ19vYmonO1xuICAgICAgaWYocm93ID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4gfHwgcm93ID09PSBFR3JpZFJvd0FjdGlvbi5FRElUQlROKXtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICByb3dEYXRhW3Jvd09ial0gJiZcbiAgICAgICAgdHlwZW9mKHJvd0RhdGFbcm93T2JqXSkgPT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93T2JqXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgcm93IGFjdGlvbnMgb2JqZWN0IGludG8gc2ltcGxlIHZhbHVlXG4gIHNldEdyaWRSb3dEYXRhKHJvd0RhdGEpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkocm93RGF0YSkpe1xuICAgICAgcm93RGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0RhdGEgPSB0aGlzLnNldFJvd1ZhbHVlKHJvd0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSByb3cgbGlzdFxuICBnZXRBbGxvd1NhdmVSb3dsaXN0KHJvd3NEYXRhOiBhbnlbXSA9IFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgcm93c0RhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocm93c0RhdGEpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdyk9PntcbiAgICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1ucyk7XG4gICAgICB9KVxuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCBvYmogPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgIGlmIChvYmo/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh4LmluY2x1ZGVzKCdfb2JqJykgJiYgdHlwZW9mIHJvd1t4XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcm93W3hdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgcm93W2ZpZWxkXTtcbiAgICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnMScgOiAnMCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5CT09MRUFOKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgfHwgdW5kZWZpbmUgcm93XG4gIGdldEFsbG93U2F2ZVJvdyhyb3dJbmZvOiB7fSA9IHt9LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgbGV0IHJvdyA9IHsgLi4ucm93SW5mbyB9O1xuICAgIHJvdyA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnMpO1xuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdylcbiAgICAgICAga2V5cy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIHJlbW92ZSBvYmosIGRhdGEgYW5kIHNlY29uZHR5cGUgZGF0YSBmcm9tIHJvd1xuICByZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSl7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmKGtleXM/Lmxlbmd0aCA+IDApe1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGlmKGtleSA9PT0gZmllbGQgKyAnLWRhdGEnIHx8IGtleSA9PT0gZmllbGQgKyAnX3NlY29uZFR5cGUnIHx8IGtleSA9PT0gZmllbGQgKyAnX29iaicpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcm93ID0gdGhpcy5yZW1vdmVFeHRyYU5ld1Jvd09iaihyb3csIGNvbHVtbnMpXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHJlbW92ZUV4dHJhTmV3Um93T2JqKHJvdywgY29sdW1uczogSUdyaWRDb2x1bW5bXSl7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgaWYoY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBrZXlzPy5sZW5ndGggPiAwKXtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBtYXRjaEtleSA9IGNvbHVtbnMuc29tZSgoY29sdW1uKT0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKVxuICAgICAgICBpZighbWF0Y2hLZXkpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDb2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgIDogJ2xhYmVsJztcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA6ICd2YWx1ZSc7XG4gICAgfSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghY29sdW1uSW5mby5maWx0ZXJpbmcgJiYgIWNvbHVtbkluZm8uZmlsdGVyKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uSW5mby5wYXJhbXMgJiYgIWNvbHVtbkluZm8uZGF0YSkge1xuICAgICAgICBjb2x1bW5JbmZvLmRhdGEgPSBjb2x1bW5JbmZvLnBhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGFsbG93VG9nZ2xlOiBjb2x1bW5JbmZvLmFsbG93VG9nZ2xlIHx8IGZhbHNlLFxuICAgICAgYWxsb3dTZWFyY2g6IGNvbHVtbkluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBhbGxvd0F1dG9Db21wbGV0ZVNhdmU6IGNvbHVtbkluZm8uYWxsb3dBdXRvQ29tcGxldGVTYXZlLFxuICAgICAgdW5pcXVlS2V5OiBjb2x1bW5JbmZvLnVuaXF1ZUtleSxcbiAgICAgIGZpZWxkOiBjb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHN0eWxlOiBjb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdHlwZTogY29sdW1uSW5mby50eXBlLFxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIGRhdGE6IGNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGZpbHRlclZhbHVlOmNvbHVtbkluZm8uZmlsdGVyVmFsdWUsXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBjb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHNob3c6IGNvbHVtbkluZm8uc2hvdyxcbiAgICAgIHNvcnRpbmc6IGNvbHVtbkluZm8uc29ydGluZyxcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXG4gICAgICBoeXBlcmxpbms6IGNvbHVtbkluZm8uaHlwZXJsaW5rLFxuICAgICAgdGFibGVBbGlhczogY29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcbiAgICAgIG1pbnV0ZXNJbnRlcnZhbDogY29sdW1uSW5mby5taW51dGVzSW50ZXJ2YWwsXG4gICAgICBwYXJhbXM6IGNvbHVtbkluZm8ucGFyYW1zLFxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxuICAgICAgZGlzcGxheVRleHQ6IGNvbHVtbkluZm8uZGlzcGxheVRleHQsXG4gICAgICB0YXJnZXQ6IGNvbHVtbkluZm8udGFyZ2V0LFxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgYWxsb3dFZGl0OiBjb2x1bW5JbmZvLmFsbG93RWRpdCxcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLFxuICAgICAgZWRpdExpbms6IGNvbHVtbkluZm8uZWRpdExpbmssXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxuICAgICAgY29tcG9uZW50OiBjb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIG9uQ2xpY2s6IGNvbHVtbkluZm8ub25DbGljayxcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxuICAgICAgb25Gb2N1c091dDogY29sdW1uSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25DaGFuZ2U6IGNvbHVtbkluZm8ub25DaGFuZ2UsXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxuICAgICAgZm9ybWF0dGVyOiBjb2x1bW5JbmZvLmZvcm1hdHRlcixcbiAgICAgIHBlcm1pc3Npb25zOiBjb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogY29sdW1uSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIGRyb3BEb3duUHJvcDogY29sdW1uSW5mby5kcm9wRG93blByb3AsXG4gICAgICBob3ZlckRhdGE6IGNvbHVtbkluZm8uaG92ZXJEYXRhLFxuICAgICAgc2hvd1RpbWU6IGNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogY29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uSW5mby5kaXNwbGF5RmllbGQsXG4gICAgICBpY29uOiBjb2x1bW5JbmZvLmljb24sXG4gICAgICBjb2xvcjogY29sdW1uSW5mby5jb2xvcixcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxuICAgICAgdmFsdWU6IGNvbHVtbkluZm8udmFsdWUsXG4gICAgICB2YWxpZGF0aW9uczogY29sdW1uSW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHRleHRUeXBlOmNvbHVtbkluZm8udGV4dFR5cGUsXG4gICAgICBjb2x1bW5XaWR0aDogY29sdW1uSW5mby5jb2x1bW5XaWR0aCxcbiAgICAgIG9wZW5Jbk5ld1RhYjogY29sdW1uSW5mby5vcGVuSW5OZXdUYWIsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBBZGRpbmcgUmVwb3J0IEJ1dHRvbiBGdW5jdGlvbiBmb3IgR3JpZFxuICBhZGRSZXBvcnRCdG4oY29sdW1uSW5mbzogSUdyaWRSZXBvcnRCdG4pIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuUkVQT1JUO1xuICAgIHJldHVybiBjb2x1bW5JbmZvO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBpbnB1dCBncmlkIGNvbHVtblxuICBhZGRJbnB1dENvbHVtbihcbiAgICBmaWx0ZXJDb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGZpbHRlckNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkTnVtZXJpY0NvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogY29sdW1uSW5mbz8uZmlsdGVyPy50eXBlID8gY29sdW1uSW5mby5maWx0ZXIudHlwZSA6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQztcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGNhbGVuZGFyIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ2FsZW5kYXJDb2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogY29sdW1uSW5mbz8uZmlsdGVyPy50eXBlID8gY29sdW1uSW5mby5maWx0ZXIudHlwZSA6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUixcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IGNvbHVtbkluZm8udHlwZSA/IGNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIHNldENvbmZpZ0RhdGEoY29uZmlnOiBhbnkpIHtcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0ge307XG4gICAgaWYgKGNvbmZpZz8uZGF0YSAmJiBPYmplY3Qua2V5cyhjb25maWc/LmRhdGEpPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25maWdEYXRhID0gY29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xuICAgICAgICBpZiAocGFyYW0gJiYgT2JqZWN0LmtleXMocGFyYW0pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uZmlnRGF0YVsnZGF0YSddID0gcGFyYW07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjb25maWdEYXRhO1xuICB9XG4gICAgIFxuXG4gIC8vIGFkZCBzaW1wbGUgYm9vbGVhbiBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZEJvb2xlYW5Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgKGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSxcbiAgICAgICAgKGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCxcbiAgICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAvLyBhZGQgTG9va1VwIGNvbHVtbiBmb3IgR3JpZFxuIGFkZExvb2tVcENvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQ7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbn1cblxuLy8gYWRkIGRpYWxvZyBjb2x1bW4gZm9yIEdyaWRcbiBhZGREaWFsb2dDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0c7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiB9XG5cbiAgLy8gYWRkIEJ1dHRvbiBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQnV0dG9uQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQUREX0JVVFRPTjtcbiAgICBpZiAoIWNvbHVtbkluZm8uZmllbGQpIHtcbiAgICAgIGNvbHVtbkluZm8uZmllbGQgPSBjb2x1bW5JbmZvLnZhbHVlID8gY29sdW1uSW5mby52YWx1ZSA6IGNvbHVtbkluZm8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgQXV0b0NvbXBsZXRlIGZvciBncmlkIGNvbHVtblxuICBhZGRBdXRvQ29tcGxldGUoY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gU2VhcmNoIEF1dG9Db21wbGV0ZSBEYXRhIGZvciBHcmlkXG4gIGdldEF1dG9Db21wbGV0ZURhdGEoXG4gICAgY29sdW1uPzogYW55LFxuICAgIHVuaXF1ZUtleT86IHN0cmluZyxcbiAgICBmaWx0ZXJzPzogYW55W10sXG4gICAgc2VhcmNoOiBzdHJpbmcgPSAnJ1xuICApOiBhbnkge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywgeyB1bmlxdWVLZXk6IHVuaXF1ZUtleSwgZmlsdGVycyB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0sKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2U6YW55PSB7fTtcbiAgICAgICAgcmVzcG9uc2VbJ3JlY29yZHMnXSA9IFtdO1xuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0pO1xuICB9XG4gYXN5bmMgYWRkQXV0b0NvbXBsZXRlVmFsdWUodW5pcXVlS2V5OiBJQXV0b0NvbXBsZXRlU2F2ZSwgdmFsdWU6YW55LCBjb2x1bW46YW55LCByb3c6YW55KSB7XG4gIGxldCBuZXdWYWx1ZSA9IHt9XG5cbiAgZm9yKHZhciBpID0wO2k8dW5pcXVlS2V5LnZhbHVlcy5sZW5ndGg7IGkrKyl7XG4gICAgaWYodW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKXx8dW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpe1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT12YWx1ZTtcbiAgICBcbiAgICB9ZWxzZXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dGhpcy5nZXRTb2Z0Q29kaW5nVmFsdWUodW5pcXVlS2V5LnZhbHVlc1tpXS52YWx1ZSwgcm93KVxuICAgIH0gXG4gIH1cblxuXG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvU2F2ZScsIHsgdW5pcXVlS2V5OnVuaXF1ZUtleS5uYW1lLCAgdmFsdWVzOiBuZXdWYWx1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAoe2Vycm9yfSk9PntcbiAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSk7XG4gIH1cbiAgZ2V0U29mdENvZGluZ1ZhbHVlKHZhbHVlLCByb3cpe1xuICAgIGxldCByZXR1cm5WYWx1ZTtcbiAgICBpZih2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykmJnZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSl7XG4gICAgICB2YWx1ZT12YWx1ZS5yZXBsYWNlKFwie1wiLFwiXCIpLnJlcGxhY2UoXCJ9XCIsXCJcIik7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuVmFsdWU9cm93W2tleV07XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm5WYWx1ZT12YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGRyb3Bkb3duIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkRHJvcGRvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTjtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOLFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIWRyb3BEb3duUHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IGRyb3BEb3duUHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG4gIC8vIGFkZCBNdWx0aVNlbGVjdERyb3BEb3duIGdyaWQgY29sdW1uXG4gIGFkZE11bHRpU2VsZWN0RHJvcERvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNULFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIW11bHRpU2VsZWN0UHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IG11bHRpU2VsZWN0UHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbzogYWRkQ29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbkluZm8uZmlsdGVyICYmIGNvbHVtbkluZm8uZmlsdGVyLnNob3dGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2V0RHJvcGRvd25EYXRhKFxuICAgIGNvbHVtbjogSUdyaWRDb2x1bW4sXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55W10sXG4gICAgcm93PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApOiBQcm9taXNlPGFueT4gfCBhbnkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gPSByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uLmRhdGEgPSByZXM7XG4gICAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgKGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnKSkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5kYXRhID0gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEZpbHRlckNvbHVtbihmaWx0ZXJDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBhbnkgPSB7XG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZmlsdGVyQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgfSxcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGZpbHRlckNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc3R5bGU6IGZpbHRlckNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBwZXJtaXNzaW9uczogZmlsdGVyQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBkYXRlIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgZmllbGQ6IGRhdGVDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICB0eXBlOiBkYXRlQ29sdW1uSW5mby50eXBlID8gZGF0ZUNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFLFxuICAgICAgZmlsdGVyaW5nOiBkYXRlQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXG4gICAgICBmb3JtYXQ6IGRhdGVDb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIHN0eWxlOiBkYXRlQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBkaXNhYmxlZDogZGF0ZUNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGRhdGVDb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIGNvbXBvbmVudDogZGF0ZUNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgc2hvd1RpbWU6IGRhdGVDb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgZGF0YTogZGF0ZUNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGhpZGRlbjogZGF0ZUNvbHVtbkluZm8uaGlkZGVuLFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIHNldExvb2tVcEZpbHRlcihjb2x1bW46IGFueSwgZGlhbG9nU2VydmljZTogYW55LCBnbG9iYWxGaWx0ZXJMb29rdXA6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xuICAgICAgbGV0IGRhdGFWYWx1ZTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhS2V5OiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGEgPSBjb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVtrZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcbiAgICAgICAgICAgIGRhdGFLZXkudW5zaGlmdChrZXkpO1xuICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50LFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICApO1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGFLZXkuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IHZhbHVlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInKT8uZm9jdXMoKTtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW4/Lmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChnbG9iYWxGaWx0ZXJMb29rdXApIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZVR3byA9IHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBIeXBlcmxpbmsgZmllbGQgYXMgYSBwYXJhbSBWYWx1ZVxuICBzZXRGaWVsZEFzTGlua1BhcmFtKGNvbHVtbnM6IGFueSwgZmllbGQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgZmllbGQgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpLmZvckVhY2goKHJlczogYW55KSA9PiB7XG4gICAgICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqLnBhcmFtcyk7XG4gICAgICAgICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9iai5wYXJhbXNba2V5XSAmJiBvYmoucGFyYW1zW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9iai5wYXJhbXNba2V5XVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgb2JqLnBhcmFtc1trZXldID0gcmVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFzQW55TGlua0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMuc29tZShcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICAgICh4LmxpbmtJZCAmJiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rcyhmZXRjaFJlc3BvbnNlOiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGxpbmtQYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICBsZXQgcmVjb3JkczogYW55ID0gW107XG4gICAgbGV0IGRhdGEgPVxuICAgICAgZmV0Y2hSZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0RGF0YUZpZWxkcyhmZXRjaFJlc3BvbnNlLnJlY29yZHMpXG4gICAgICAgIDogW107XG4gICAgbGV0IG5ld1JvdzogYW55O1xuXG4gICAgaWYoZGF0YT8ubGVuZ3RoID4gMCl7XG4gICAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXG4gICAgICAuYWRkSHlwZXJsaW5rcyhjb2x1bW5zLCBmZXRjaFJlc3BvbnNlPy5yZWNvcmRzKVxuICAgICAgLnRoZW4oKGxpbmtSZXNwb25zZXM6IGFueSkgPT4ge1xuICAgICAgICBkYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXRMaW5rSWQgPSBmZXRjaFJlc3BvbnNlPy5yZWNvcmRzWzBdW2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmxpbmtJZDtcbiAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgICAgICAgICBjb2wuZmllbGQgPSBjb2wuZmllbGQgPyBjb2wuZmllbGQgOiBjb2wuaGVhZGVyO1xuICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0ID0gY29sLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgJiYgcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXSA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICA6IGNvbC5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbkRhdGEgPSB7IC4uLmNvbD8uZGF0YSB9O1xuICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSAmJiBjb2x1bW5EYXRhLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpYWxvZ0RhdGEgPSB1dGlsaXRpZXMuZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgIHJvd1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpbmtSZXNwb25zZXMpICYmIGxpbmtSZXNwb25zZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlcy5mb3JFYWNoKChsaW5rUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpICYmXG4gICAgICAgICAgICAgICAgICBjb2wubGlua0lkICYmXG4gICAgICAgICAgICAgICAgICAoY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZCB8fFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5rSWQgPT09IGxpbmtSZXNwb25zZS5saW5rSWQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbUtleXM6IHN0cmluZ1tdID0gbGlua1BhcmFtcyAmJiBPYmplY3Qua2V5cyhsaW5rUGFyYW1zKT8ubGVuZ3RoID8gT2JqZWN0LmtleXMobGlua1BhcmFtcykgOiBjb2wucGFyYW1zID8gT2JqZWN0LmtleXMoY29sLnBhcmFtcykgOiBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbms6IGFueSA9IHV0aWxpdGllcy5zZXRIeXBlcmxpbmsoXG4gICAgICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlLnVybCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICAgICAgICAgICAgICBjb2wucGFyYW1zXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0ubGlua0lkID0gc2V0TGlua0lkOyBcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uaHlwZXJsaW5rID0gbGluaztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSlcbiAgICB9XG4gICAgXG4gIH1cblxuICAvL3NldCByb3dzIHRvIHJlc3BvbnNlLnJlY29yZHNcbiAgYXN5bmMgc2V0Um93RGF0YShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYocmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmICh0aGlzLmhhc0FueUxpbmtDb2x1bW4oY29sdW1ucykpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0SHlwZXJsaW5rcyhyZXNwb25zZSwgY29sdW1ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVjb3JkcztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgPSBbLi4ucmVzcG9uc2UucmVjb3JkcywgcmVzcG9uc2UucmVjb3JkcyAtIDFdO1xuICAgICAgcmV0dXJuICByZXNwb25zZS5yZWNvcmRzO1xuICAgICB9IFxuICB9XG4gICBcblxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkVXBkYXRlID0ge1xuICAgICAgZmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdyaWRVcGRhdGVJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdHlwZTogZ3JpZFVwZGF0ZUluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdyaWRVcGRhdGVJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ3JpZFVwZGF0ZUluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ3JpZFVwZGF0ZUluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdyaWRVcGRhdGVJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBncmlkVXBkYXRlSW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdyaWRVcGRhdGVJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ3JpZFVwZGF0ZUluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBvbkZvY3VzT3V0OiBncmlkVXBkYXRlSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdyaWRVcGRhdGVJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBncmlkVXBkYXRlSW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdyaWRVcGRhdGVJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBncmlkVXBkYXRlSW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ3JpZFVwZGF0ZUluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ3JpZFVwZGF0ZUluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdyaWRVcGRhdGVJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ3JpZFVwZGF0ZUluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ3JpZFVwZGF0ZUluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdyaWRVcGRhdGVJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ3JpZFVwZGF0ZUluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBncmlkVXBkYXRlSW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ3JpZFVwZGF0ZUluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdyaWRVcGRhdGVJbmZvLmZvcm1hdCxcbiAgICAgIGludGVyZmFjZVR5cGU6ICdidWxrVXBkYXRlJ1xuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBpbnB1dCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlSW5wdXQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVEcm9wZG93bihcbiAgICBncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ3JpZFVwZGF0ZUluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0cywgXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQm9vbGVhbihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgbnVtZXJpYyBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTnVtZXJpYyhncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGNhbGVuZGFyIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVDYWxlbmRhcihncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvL2FkZCBncmlkIHVwZGF0ZSBsb29rdXAgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUxvb2t1cChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpe1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUXG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKVxuICB9XG4gIFxuICAvLyBhZGQgZ3JpZCBnbG9iYWwgZmlsdGVyIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBjb25zdCBjb2x1bW46IGFkZEdsb2JhbEZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZpZWxkLFxuICAgICAgZGlzcGxheVRleHQ6IGdsb2JhbEZpbHRlckluZm8uZGlzcGxheVRleHQsXG4gICAgICBkaXNwbGF5U3R5bGU6Z2xvYmFsRmlsdGVySW5mby5kaXNwbGF5U3R5bGUsXG4gICAgICB2YWxpZGF0aW9uczogZ2xvYmFsRmlsdGVySW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHR5cGU6IGdsb2JhbEZpbHRlckluZm8udHlwZSxcbiAgICAgIGRhdGE6IGdsb2JhbEZpbHRlckluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdsb2JhbEZpbHRlckluZm8udmFsdWVUd28sXG4gICAgICBtYXRjaE1vZGU6IGdsb2JhbEZpbHRlckluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdsb2JhbEZpbHRlckluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBnbG9iYWxGaWx0ZXJJbmZvLnRhYmxlQWxpYXMsXG4gICAgICBvcHRpb25MYWJlbDogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgIG9uQ2xpY2s6Z2xvYmFsRmlsdGVySW5mby5vbkNsaWNrLFxuICAgICAgb25Gb2N1c091dDogZ2xvYmFsRmlsdGVySW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25SZXR1cm46IGdsb2JhbEZpbHRlckluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdsb2JhbEZpbHRlckluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbHVtbixcbiAgICAgIGRheVJhbmdlOiBnbG9iYWxGaWx0ZXJJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdsb2JhbEZpbHRlckluZm8udG9GaWVsZCxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGdsb2JhbEZpbHRlckluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBnbG9iYWxGaWx0ZXJJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdsb2JhbEZpbHRlckluZm8uZGlzYWJsZWQsXG4gICAgICBoaWRkZW46IGdsb2JhbEZpbHRlckluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ2xvYmFsRmlsdGVySW5mby5wcmVmaXgsXG4gICAgICBjb2xvcjogZ2xvYmFsRmlsdGVySW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ2xvYmFsRmlsdGVySW5mby5mb3JtYXQsXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBpbnB1dCBmaWx0ZXJcbiAgYWRkR2xvYmFsSW5wdXRGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbERyb3Bkb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuICAvL2FkZCBnbG9iYWwgcmFkaW8gYnV0dG9uIGZpbHRlclxuICBhZGRHbG9iYWxTZWxlY3RCdXR0b25GaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmVsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNFTEVDVEJVVFRPTjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmVsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIGdsb2JhbCBNdWx0aVNlbGVjdCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsTXVsdGlTZWxlY3REcm9wRG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IG11bHRpU2VsZWN0UHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICBnZXREcm9wZG93bkRhdGEoXG4gICAgZmllbGRJbmZvOiBhbnksXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55LFxuICAgIHNvcnRzOiBJR3JpZFNvcnRbXSA9IFtdLCBcbiAgICBncmlkVXBkYXRlRmllbGQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcbiAgICAgIC5zZXREcm9wRG93bkxpc3QodW5pcXVlS2V5LCB2YWx1ZVByb3AsIGxhYmVsUHJvcCwgZmlsdGVycywgc29ydHMpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgZmllbGRJbmZvLmRhdGEgPSByZXM7XG4gICAgICAgIHJldHVybiBncmlkVXBkYXRlRmllbGQgPyB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChmaWVsZEluZm8pIDogdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZmllbGRJbmZvKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGdyaWRVcGRhdGVGaWVsZCA/IHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGZpZWxkSW5mbykgOiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8vIGFkZCBnbG9iYWwgZmlsdGVyIFNwYWNlIEZpZWxkXG4gIGFkZEdsb2JhbEZpbHRlclNwYWNlRmllbGQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLlNQQUNFUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGJvb2xlYW4gZmlsdGVyXG4gIGFkZEdsb2JhbEJvb2xlYW5GaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsRGF0ZVJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIE51bWVyaWMgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgLy8gYWRkIE51bWVyaWMgaW5wdXQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY0lucHV0KGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIExvb2tVcCBGaWVsZCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxMb29rdXBGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAgLy9hZGQgY2FsZW5kYXIgZmlsdGVyIGZvciBnbG9iYWwgZmlsdGVyXG4gICBhZGRHbG9iYWxEYXRlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcil7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlPUdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnksIGRhdGFLZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBsZXQgZGF0YTogYW55ID0gW107XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3BvbnNlLm1hcCgoeDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh4ID8/IHt9KT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gT2JqZWN0LmtleXMoeCk/LnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudC50b0xvd2VyQ2FzZSgpXTogeFtjdXJyZW50XSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFLZXkgJiZcbiAgICAgICAgICAgIGRhdGFLZXkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIU9iamVjdC5rZXlzKHJlc3VsdCk/LmluY2x1ZGVzKGRhdGFLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXN1bHRbZGF0YUtleV0gPSBpbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0Q29sdW1uRmllbGRzKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgbGV0IGNvbHVtbjogYW55ID0gW107XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLm1hcCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLnB1c2goeyAuLi5jb2wsIGZpZWxkOiBjb2w/LmZpZWxkPy50b0xvd2VyQ2FzZSgpIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoYW5nZSBsaW5rSWQgaW4gZWRpdCBtb2RlLCBpZiBjaGFuZ2VMaW5rIGlzIHRydWUgdGhlbiBpdCBjaGFuZ2UgdGhlIGVkaXRlZCByb3cgaHlwZXJsaW5rIHZhbHVlXG4gIHNldExpbmtJZChcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgbGlua0lkOiBzdHJpbmcsXG4gICAgcmVjb3JkOiBhbnksXG4gICAgdXNlcnM6IGFueSxcbiAgICBwYXJhbXM6IGFueSA9IG51bGwsXG4gICAgY2hhbmdlTGluazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb2x1bW4ubGlua0lkID0gbGlua0lkO1xuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5wYXJhbXMgPSBwYXJhbXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEh5cGVybGlua3MoeyByZWNvcmRzOiBbcmVjb3JkXSB9LCBjb2x1bW5zKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZUxpbmspIHtcbiAgICAgICAgZGVsZXRlIHJlc1swXVtmaWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgbGV0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChpOiBhbnkpID0+IGlbZmllbGQudG9Mb3dlckNhc2UoKV0gPT09IHJlY29yZFtmaWVsZC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHVzZXJzW2luZGV4XVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID1cbiAgICAgICAgICAgICAgcmVzWzBdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbms7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZ3JpZCBkYXRhIGFuZCBzZXQgc2VsZWN0ZWQgcm93IGJhc2VkIG9uIHNlbGVjdGlvbiB2YWx1ZVxuICBzZXREYXRhV2l0aFNlbGVjdGVkUm93KHJlY29yZHM6IGFueSwgY29uZmlnRGF0YTogYW55KSB7XG4gICAgaWYgKChjb25maWdEYXRhPy52YWx1ZVByb3AgfHwgY29uZmlnRGF0YT8ubGFiZWxQcm9wKSAmJiBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlY29yZCk/LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gY29uZmlnRGF0YS5sYWJlbFByb3AgPyBjb25maWdEYXRhLmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKSA6IGNvbmZpZ0RhdGEudmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNvbmZpZ0RhdGEuZGF0YS52YWx1ZSAmJlxuICAgICAgICAgICAgICByZWNvcmRba2V5XSA9PT0gY29uZmlnRGF0YS5kYXRhLnZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZFtrZXldPy50b1N0cmluZygpID09PSBjb25maWdEYXRhLmRhdGEuc2VsZWN0aW9uPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4gIHNldFRhYmxlQWxpYXMoZmllbGQ6IHN0cmluZywgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKFxuICAgICAgICAoeDogYW55KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29sdW1uICE9IG51bGwgJiYgY29sdW1uLnRhYmxlQWxpYXMgJiYgY29sdW1uLnRhYmxlQWxpYXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gY29sdW1uLnRhYmxlQWxpYXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgc2V0R3JpZFByb3BWYWx1ZXMoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBwcm9wczogSUdyaWRQcm9wW10sXG4gICAgZmlsdGVyPzogSUdyaWRQcm9wRmlsdGVyLFxuICAgIHJlY29yZHM/OiBhbnlbXVxuICApIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMgJiYgcHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGlzTWF0Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgaWYgKGZpbHRlciAmJiBmaWx0ZXIuZmllbGQgJiYgcmVjb3JkcyAmJiByZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaXNNYXRjaGVkID0gcmVjb3Jkcy5zb21lKFxuICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHgpW2ZpbHRlci5maWVsZC50b0xvd2VyQ2FzZSgpXSA9PT1cbiAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMubWFwKChwcm9wOiBJR3JpZFByb3ApID0+IHtcbiAgICAgICAgbGV0IGNvbDogYW55ID0ge307XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmICFpc01hdGNoZWQgJiYgIWZpbHRlcj8uZmllbGQpIHtcbiAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTWF0Y2hlZCkge1xuICAgICAgICAgIGlmIChwcm9wLmZpZWxkKSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2wgPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXI/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sICYmIGNvbC5oYXNPd25Qcm9wZXJ0eShwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgY29sW3Byb3AubmFtZV0gPSBwcm9wLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ3JpZCByb3cgcHJvcFZhbHVlc1xuICBzZXRHcmlkUm93UHJvcFZhbHVlKHJvdzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgcHJvcHM6IElHcmlkUm93UHJvcFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW10pIHtcbiAgICBsZXQgc2V0TGlua0lkOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IGxpbmtJZFJlczogYW55O1xuICAgIHByb3BzPy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICBzZXRMaW5rSWQgPSBmYWxzZTtcbiAgICAgIGlmIChwcm9wLnByb3BOYW1lICYmIHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuTElOS0lEICYmIHByb3AucHJvcFZhbHVlKSB7XG4gICAgICAgIGlmIChPYmplY3Q/LmtleXMocm93KSkge1xuICAgICAgICAgIGxldCBtYXRjaGVkUm93T2JqZWN0S2V5ID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCk/LmVuZHNXaXRoKCdfb2JqJykgJiYgcm93W2tleV0/LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgaWYgKG1hdGNoZWRSb3dPYmplY3RLZXkpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaGVkT2JqZWN0ID0gcm93W21hdGNoZWRSb3dPYmplY3RLZXldO1xuICAgICAgICAgICAgbWF0Y2hlZE9iamVjdC5saW5rSWQgPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICAgIG1hdGNoZWRPYmplY3QuaHlwZXJsaW5rID0gJyc7XG4gICAgICAgICAgICByb3dbbWF0Y2hlZFJvd09iamVjdEtleV0gPSBtYXRjaGVkT2JqZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBtYXRjaGVkRmllbGROYW1lID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCkgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVkQ29sdW1uT2JqID0gY29sdW1ucy5maW5kKChrZXkpID0+IGtleS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2hlZEZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgIGNvbnN0IHJvd09iaiA9IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgcm93W3Jvd09ial0gPSBtYXRjaGVkQ29sdW1uT2JqO1xuICAgICAgICAgICAgcm93W3Jvd09ial0ubGlua0lkID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgICByb3dbcm93T2JqXS5oeXBlcmxpbmsgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHNldExpbmtJZCA9IHRydWU7XG4gICAgICAgIGxpbmtJZFJlcyA9IHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyb3ddIH0sIGNvbHVtbnMsIHByb3AucGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcC5wcm9wTmFtZSAmJiAhcHJvcC5sYWJlbCAmJiAocHJvcC5wcm9wVmFsdWUgfHwgcHJvcC5wcm9wVmFsdWUgPT09IGZhbHNlIHx8IHByb3AucHJvcFZhbHVlID09PSAnJykpIHtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgcm93KSB7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZU9iaiA9IGZpZWxkTmFtZT8uaW5jbHVkZXMoJ19vYmonKSA/IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA6IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICBmaWVsZE5hbWVPYmogPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXk6IGFueSkgPT4gKGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcm93T2JqKSAmJiAocm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSk7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lT2JqKSB7XG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IC4uLnJvd1tmaWVsZE5hbWVPYmpdLCB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGQgPSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkT2JqID0gcHJvcEZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IC4uLnJvd1twcm9wRmllbGRPYmpdLCB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcC5sYWJlbCkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVE5BTUUpIHtcbiAgICAgICAgICByb3dbcHJvcE5hbWVdID0geyAuLi5yb3dbcHJvcE5hbWVdLCByZXBvcnROYW1lOiBwcm9wPy5wcm9wVmFsdWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVFBBUkFNICYmIHByb3A/LnBhcmFtcykge1xuICAgICAgICAgIHJvd1twcm9wTmFtZV0gPSB7IC4uLnJvd1twcm9wTmFtZV0sIHJlcG9ydFBhcmFtOiBwcm9wLnBhcmFtcyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFzZXRMaW5rSWQpIHtcbiAgICAgIHJldHVybiByb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsaW5rSWRSZXM7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSByb3dBY3Rpb25zIGZyb20gdGhlIHJlY29yZHNcbiAgcmVtb3ZlUm93QWN0aW9ucyhyZWNvcmRzKSB7XG4gICAgaWYgKHJlY29yZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cucm93QWN0aW9uKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1sncm93QWN0aW9uJ107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkcztcbiAgfVxuXG4vKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChNYWluLW1ldGhvZClcbiAgICovXG4gIGV4cG9ydEV4Y2VsKHJvd3NEYXRhLCBjb2x1bW5zLCByZXBvcnROYW1lOiBzdHJpbmcgPSBFR3JpZEV4Y2VsLkVYUE9SVCwgaXNHcmlkRXhjZWxEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChpc0dyaWRFeGNlbERhdGEpIHtcbiAgICAgIHRoaXMuc2V0RXhjZWxGb3JtYXR0ZWREYXRhKHJvd3NEYXRhLCBjb2x1bW5zLCByZXBvcnROYW1lKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldEV4Y2VsUmVwb3J0RGF0YShyb3dzRGF0YSwgY29sdW1ucywgcmVwb3J0TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgcmVwb3J0TmFtZSk6IHZvaWQge1xuICAgIGxldCBFWENFTF9UWVBFID1cbiAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogRVhDRUxfVFlQRSB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2V0RXhjZWxSZXBvcnREYXRhKHJvd3NEYXRhLCBjb2x1bW5zLCByZXBvcnROYW1lKSB7XG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQocm93c0RhdGEpO1xuICAgICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XG4gICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiBjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICAgIGxldCBsaW5rVXJsOiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVsxXTtcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgbGlua1VybCA9ICcvJyArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGlua1VybCA9XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcbiAgICAgICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xuICAgICAgICAgICAgICAgIGxpbmtVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IHhsc3gudXRpbHMuZW5jb2RlX2NlbGwoe1xuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XG4gICAgICAgICAgICAgIGY6IGA9SFlQRVJMSU5LKFwiJHtsaW5rVXJsfVwiLCBcIiR7bGlua1RleHR9XCIpYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgIH0pO1xuICAgICAgICByb3dJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXG4gICAgICAgIFNoZWV0TmFtZXM6IFsnc2hlZXQxJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcbiAgICAgICAgYm9va1R5cGU6ICd4bHN4JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIHJlcG9ydE5hbWUpO1xuICAgIH0pO1xuICB9XG5cbi8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzZXRFeGNlbEZvcm1hdHRlZERhdGEocm93c0RhdGEsIGNvbHVtbnMsIHJlcG9ydE5hbWUpIHtcbiAgICBjb25zdCBbZmlsdGVyZWRyb3dzRGF0YSwgZmlsdGVyZWRDb2x1bW5zXTogYW55ID0gdGhpcy5zZXRFeGNlbERhdGEocm93c0RhdGEsIGNvbHVtbnMpO1xuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ1NoZWV0MScpO1xuICAgIGNvbnN0IGJvbGRTdHlsZSA9IHsgYm9sZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGhlYWRlclJvdyA9IFtdO1xuICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBoZWFkZXJSb3cucHVzaChjb2wuaGVhZGVyKTtcbiAgICB9KTtcbiAgICB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlclJvdyk7XG4gICAgd29ya3NoZWV0LmdldFJvdygxKS5lYWNoQ2VsbCh7IGluY2x1ZGVFbXB0eTogdHJ1ZSB9LCAoY2VsbCkgPT4ge1xuICAgICAgY2VsbC5mb250ID0gYm9sZFN0eWxlO1xuICAgIH0pO1xuICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpbmRleCArIDEpLndpZHRoID0gMTU7XG4gICAgfSk7XG4gICAgZmlsdGVyZWRyb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IFtdO1xuICAgICAgZmlsdGVyZWRDb2x1bW5zPy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sPy5oZWFkZXI/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiYgY2VsbFZhbHVlICYmIGNlbGxWYWx1ZS5sZW5ndGggPiAwICYmIGNlbGxWYWx1ZS5pbmRleE9mKCd8JykgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW2xpbmtUZXh0LCBsaW5rVXJsXSA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpO1xuICAgICAgICAgIGxldCBmb3JtYXR0ZWRMaW5rVXJsID0gbGlua1VybDtcbiAgICAgICAgICBpZiAobGlua1VybCAmJiAhbGlua1VybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZExpbmtVcmwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgKGxpbmtVcmwuc3RhcnRzV2l0aCgnLycpID8gJycgOiAnLycpICsgbGlua1VybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxpbmtUZXh0ICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgbmV3Um93LnB1c2goeyBmb3JtdWxhOiBgPUhZUEVSTElOSyhcIiR7Zm9ybWF0dGVkTGlua1VybH1cIiwgXCIke2xpbmtUZXh0fVwiKWAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Jvdy5wdXNoKCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Um93LnB1c2goY2VsbFZhbHVlICE9PSBudWxsID8gY2VsbFZhbHVlIDogJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHdvcmtzaGVldC5hZGRSb3cobmV3Um93KTtcbiAgICB9KTtcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbigoZXhjZWxCdWZmZXIpID0+IHtcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCByZXBvcnROYW1lKTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBFeGNlbCBmaWxlOicsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2V0RXhjZWxEYXRhKHJvd3NEYXRhLCBjb2x1bW5zKSB7XG4gICAgY29uc3QgdmFsaWRSb3dzID0gW107XG4gICAgY29uc3QgdmFsaWRDb2x1bW5zID0gW107XG4gICAgY29uc3QgY29sdW1uSGVhZGVycyA9IGNvbHVtbnM/Lm1hcChjb2x1bW4gPT4gY29sdW1uPy5oZWFkZXI/LnRvTG93ZXJDYXNlKCkpO1xuICAgIHJvd3NEYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkUm93ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhyb3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbkhlYWRlcnM/LmluY2x1ZGVzKGtleT8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0RhdGVTdHJpbmcocm93W2tleV0pKSB7XG4gICAgICAgICAgICB2YWxpZFJvd1trZXk/LnRvTG93ZXJDYXNlKCldID0gdGhpcy5mb3JtYXREYXRlKHJvd1trZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWRSb3dba2V5Py50b0xvd2VyQ2FzZSgpXSA9IHJvd1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRSb3cpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhbGlkUm93cy5wdXNoKHZhbGlkUm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGNvbHVtbj8uaGVhZGVyPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbGlkUm93cy5zb21lKHJvdyA9PiBPYmplY3Qua2V5cyhyb3cpPy5pbmNsdWRlcyhoZWFkZXIpKSkge1xuICAgICAgICB2YWxpZENvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFt2YWxpZFJvd3MsIHZhbGlkQ29sdW1uc107XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgaXNEYXRlU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZHszfSk/Wj8kLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBmb3JtYXREYXRlKGRhdGVTdHJpbmcpIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgY29uc3QgeWVhciA9IGRhdGU/LmdldEZ1bGxZZWFyKCk7XG4gICAgbGV0IG1vbnRoID0gKDEgKyBkYXRlPy5nZXRNb250aCgpKT8udG9TdHJpbmcoKT8ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBsZXQgZGF5ID0gZGF0ZT8uZ2V0RGF0ZSgpPy50b1N0cmluZygpPy5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XG4gIH1cbiAgXG4gIHNhdmVBc1RleHRGaWxlKHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgY29uc3QgZmllbGRzVG9EaXNwbGF5ID0gcm93c0luZm8ubGVuZ3RoID4gMCA/IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKSA6IFtdO1xuICAgICAgY29uc3QgaGVhZGVyUm93ID0gZmllbGRzVG9EaXNwbGF5Py5qb2luKCdcXHQnKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFJvd3MgPSByb3dzSW5mbz8ubWFwKChyb3cpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkc1RvRGlzcGxheT8ubWFwKChmaWVsZCkgPT4gcm93W2ZpZWxkXSk/LmpvaW4oJ1xcdCcpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCByb3dzRGF0YSA9IFtoZWFkZXJSb3csIC4uLmZvcm1hdHRlZFJvd3NdLmpvaW4oJ1xcbicpO1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtyb3dzRGF0YV0sIHsgdHlwZTogJ3RleHQnIH0pO1xuICAgIFxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICBzYXZlRGF0YUFzQ3N2KHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZykge1xuICAgIGlmICghcm93c0luZm8gfHwgIXJvd3NJbmZvLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2F2ZUFzQ3N2RmlsZShyb3dzSW5mbywgcmVwb3J0TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IHNlcGFyYXRvciA9ICcsJztcbiAgICBjb25zdCBjb2x1bW5zID0gT2JqZWN0LmtleXMocm93c0luZm9bMF0pO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSkuZmlsdGVyKGsgPT4ge1xuICAgICAgaWYgKGNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5pbmNsdWRlcyhrKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPVxuICAgICAga2V5cy5qb2luKHNlcGFyYXRvcikgK1xuICAgICAgJ1xcbicgK1xuICAgICAgcm93c0luZm8ubWFwKHJvdyA9PiB7XG4gICAgICAgIHJldHVybiBrZXlzLm1hcChrID0+IHtcbiAgICAgICAgICBsZXQgY2VsbCA9IHJvd1trXSA9PT0gbnVsbCB8fCByb3dba10gPT09IHVuZGVmaW5lZCA/ICcnIDogcm93W2tdO1xuICAgICAgICAgIGNlbGwgPSBjZWxsIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgPyBjZWxsLnRvTG9jYWxlU3RyaW5nKClcbiAgICAgICAgICAgIDogY2VsbC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcIlwiJyk7XG4gICAgICAgICAgaWYgKGNlbGwuc2VhcmNoKC8oXCJ8LHxcXG4pL2cpID49IDApIHtcbiAgICAgICAgICAgIGNlbGwgPSBgXCIke2NlbGx9XCJgO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgfSkuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgdGhpcy5zYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQsIHJlcG9ydE5hbWUpO1xuICB9XG4gIFxuICBnZW5lcmF0ZUltcG9ydEZpbGVFdmVudChkaWFsb2dEYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueX0pIHtcbiAgICBkaWFsb2dEYXRhID0ge3dpZHRoOiAnNTAlJywgc3R5bGVDbGFzczogJ2dlbmVyYXRlLWZpbGUtZGlhbG9nJywgLi4uZGlhbG9nRGF0YX07XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSW1wb3J0RGlhbG9nQ29tcG9uZW50LCBkaWFsb2dEYXRhKTtcbiAgfVxuXG5nZW5lcmF0ZVNlbGVjdGVkRmlsZShpZCwgZmlsZXMpe1xuICBsZXQgZmlsZURhdGEgPSBuZXcgRm9ybURhdGE7IFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZmlsZXNbaV0pIHtcbiAgICAgICAgZmlsZURhdGEuYXBwZW5kKGZpbGVzW2ldLm5hbWUsIGZpbGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIGFueT4oYC9JbXBvcnRDb25maWcvSW1wb3J0RmlsZS8ke2lkfWAsIGZpbGVEYXRhKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2UucG9zdDxhbnlbXSwgYW55PihgL0ltcG9ydENvbmZpZy9HZW5lcmF0ZUltcG9ydC8ke2lkfWAsIHt9KS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKCdHZW5lcmF0ZSBGaWxlIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgICB9LFxuICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICB9XG4gICk7XG59XG5cblxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gQ1NWIChzdWItbWV0aG9kKVxuICAgKi9cblxuICBzYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQ6IHN0cmluZywgcmVwb3J0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSArICcuY3N2Jyk7XG4gIH1cblxuICBhZGROZXdSb3coZ3JpZE5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IGFkZEJ1dHRvbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2xvYmFsLWFkZC1idG4nICsgZ3JpZE5hbWUpO1xuICAgIGlmIChhZGRCdXR0b24gJiYgYWRkQnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGFkZEJ1dHRvblswXT8uY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRDYWxscygpIHtcbiAgICB0aGlzLm51bWJlck9mQ2FsbHMrKztcbiAgfVxuXG4gIGdldE51bWJlck9mQ2FsbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZDYWxscztcbiAgfVxufSJdfQ==