@churchillliving/se-ui-toolkit 6.53.2 → 6.53.3

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.
@@ -810,7 +810,9 @@ export class GridComponent {
810
810
  this.onClickEvent(column, row);
811
811
  setTimeout(() => {
812
812
  var _a, _b, _c, _d;
813
- column.data.data = (_b = (_a = row[column.field + '_obj']) === null || _a === void 0 ? void 0 : _a.dialogData) !== null && _b !== void 0 ? _b : row[column.field + '_obj'];
813
+ if (column.data && column.data.data) {
814
+ column.data.data = (_b = (_a = row[column.field + '_obj']) === null || _a === void 0 ? void 0 : _a.dialogData) !== null && _b !== void 0 ? _b : row[column.field + '_obj'];
815
+ }
814
816
  if (column.component && column.data && this.rowClickData) {
815
817
  const keys = Object.keys(this.rowClickData);
816
818
  column.data.data = utilities.autoSetLookupData(column.data.data, this.rowClickData);
@@ -2193,4 +2195,4 @@ GridComponent.propDecorators = {
2193
2195
  onGridRowAdd: [{ type: Output }],
2194
2196
  beforeunloadHandler: [{ type: HostListener, args: ['window:beforeunload', ['$event'],] }]
2195
2197
  };
2196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFHWixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEdBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQVNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysa0JBQWtCLEVBRWxCLGNBQWMsRUFFZCxlQUFlLEdBRWhCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssU0FBUyxNQUFNLHFD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QUFNOzZCQUdOLE1BQU07cUNBR04sTUFBTTs0QkFHTixNQUFNO21DQUdOLE1BQU07c0NBR04sTUFBTTsyQkFLTixNQUFNOzBCQUlOLE1BQU07OEJBR04sTUFBTTswQkFHTixNQUFNO3VCQUdOLE1BQU07K0JBR04sTUFBTTsyQkFHTixLQUFLOzBCQUdMLEtBQUs7MEJBRUwsS0FBSzs0QkFHTCxNQUFNOzJCQUdOLE1BQU07a0NBNkJOLFlBQVksU0FBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPcHRpb25hbCxcclxuICBFbGVtZW50UmVmLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQge1xyXG4gIER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICBEaWFsb2dTZXJ2aWNlLFxyXG59IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgSUdyaWRDb2x1bW4sXHJcbiAgSUdyaWRTb3J0LFxyXG4gIElHcmlkU2VydmVyU2lkZUV2ZW50LFxyXG4gIElHcmlkUGFnaW5hdGlvbkV2ZW50LFxyXG4gIElHbG9iYWxGaWx0ZXIsXHJcbiAgSUdyaWRGaWx0ZXIsXHJcbiAgSUdyaWRDb2x1bW5BY3Rpb24sXHJcbiAgSUdyaWRSb3dBY3Rpb24sXHJcbiAgRUdyaWRTZWxlY3Rpb25UeXBlLFxyXG4gIEVHcmlkQ29sdW1uVHlwZSxcclxuICBFR3JpZFNvcnREaXJlY3Rpb24sXHJcbiAgSUdyaWREYXRhRXhwb3J0LFxyXG4gIEVHcmlkQWdncmVnYXRlLFxyXG4gIElMb29rdXBWYWx1ZSxcclxuICBFR3JpZEZvcm1hdFR5cGUsXHJcbiAgSUdyaWRGaWx0ZXJJbmZvLFxyXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcclxuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IElmcmFtZUNvbXBvbmVudCB9IGZyb20gJy4uL2lmcmFtZS9pZnJhbWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgV29ya1NoZWV0IH0gZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IEVGb3JtYXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBQYWdlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtbG9nZ2VyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZS1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkcmVuKCdncmlkUm93JykgZ3JpZFJvdzogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gIEBPdXRwdXQoKSBpbmxpbmVSb3dDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgc2V0IGFjdGl2ZVRlc3RNb2RlKHZhbDogYW55KSB7XHJcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXJ2ZXJGaWx0ZXJzOiBJR3JpZFNlcnZlclNpZGVFdmVudCA9IHt9O1xyXG4gIHJvd3NEYXRhOiBhbnlbXTtcclxuICByb3dzRGF0YUNvcHk6IGFueVtdID0gW107XHJcbiAgcm9sZXM6IHN0cmluZ1tdID0gW107XHJcbiAgaXNDb2x1bW5IaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xyXG4gIGNvbXBvbmVudFRhYmxlUmVmOiBhbnk7XHJcbiAgbG9va3VwT2JqZWN0OiBJTG9va3VwVmFsdWU7XHJcbiAgbG9va3VwRmlsdGVyT2JqOiBhbnk7XHJcbiAgbG9va3VwQmx1cjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2xvYmFsRmlsdGVyc0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FsZW5kZXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcclxuICBncmlkRmlsdGVyT2JqOiBJR3JpZEZpbHRlckluZm87XHJcbiAgZGVmYXVsdERhdGU6IGFueTtcclxuICBkcm9wRG93bkZpbHRlcjogYW55ID0ge307XHJcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNhdmVBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlZGl0QWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuY2VsQWxsUmVjb3JkczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5FZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNhdmVSZWNvcmRBcnJheTogYW55W10gPSBbXTtcclxuICBkaXNhYmxlZFNhdmVCdG46Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBlZGl0TW9kZUNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FsZW5kYXJGb3JtYXQ6IHN0cmluZyA9ICdtbS9kZC95JztcclxuXHJcbiAgLy8gYXBwbHkgY2hlY2tlZC91bkNoZWNrZWQgcHJvcCBmb3IgQ2hlY2tCb3ggb2YgdGhlIFRhYmxlXHJcbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgdW5DaGVja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGlkZUVkaXRBbGxSb3dzQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy9hcHBseSBBZGQvRGVsZXRlL0VkaXQgcHJvcCBmb3IgdGhlIGdyaWQgcGVybWlzc2lvblxyXG4gIGFkZFJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGVkaXRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gQXBwbHkgcHJvcCBzZXRBZ2dyZWdhdGVGb290ZXIgb24gRm9vdGVyIG9mIHRoZSBUYWJsZSBmb3IgYWdncmVnYXRlLlxyXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBIaWRlIEFnZ3JlZ2F0ZSBGb290ZXIgV2hlbiBBZ2dyZWdhdGUgbm90IEFwcGx5IG9uIFRhYmxlLlxyXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBNYWludGFpbnMgcHJldmlvdXMgc3RhdGUgb2Ygcm93cyBiZWluZyBlZGl0ZWRcclxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxyXG4gIGVkaXRpbmdSb3dLZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xyXG5cclxuICAvLyBTZWxlY3RzIGl0ZW1zIGluIHRoZSBncmlkIGJhc2VkIG9uIHBhc3NlZCBvbiBkYXRhXHJcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XHJcblxyXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTdG9yZXMgc2VsZWN0ZWQgY29sdW1uc1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXHJcbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBQcm9wIHRvIGhhbmRsZSBsb2FkZXIgb2YgZ3JpZFxyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGhhbmRsZSBzZXJ2ZXIgc2lkZSBldmVudCBieSBkZWZhdWx0IGl0IGlzIHRydWUgd2hlbiBpdCBmYWxzZSBzZXJ2ZXIgc2lkZSBldmVudCB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXHJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uV2lkdGg6IHN0cmluZyA9ICc4MHB4JztcclxuICBcclxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgYWRkIHJvdyBidXR0b24uXHJcbiAgQElucHV0KCkgaGlkZU9uUm93QWRkQnRuID0gZmFsc2U7XHJcblxyXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxyXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9QZGYgPSBmYWxzZTtcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cclxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvRXhjZWwgPSBmYWxzZTtcclxuICBcclxuICAvLyBCb29sZWFuIHByb3AgdG8gc2V0IHRoZSBhY3Rpb24gY29sdW1uIGFzIGZpcnN0IGNvbHVtbi5cclxuICBASW5wdXQoKSBzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIHRydWUsIGVuYWJsZXMgb3B0aW9ucyB0byBwZXJmb3JtIENSVUQgdXNpbmcgaW5saW5lIHJvdyBmdW5jdGlvbmFsaXR5XHJcbiAgQElucHV0KCkgdXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xyXG5cclxuICAvLyBBcnJheSBvZiByb3cgYWN0aW9uc1xyXG4gIEBJbnB1dCgpIHJvd0FjdGlvbnM6IElHcmlkUm93QWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gU2V0cyBzZWxlY3Rpb24gdHlwZSBpLmU6IHNpbmdsZS9tdWx0aXBsZSBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBFR3JpZFNlbGVjdGlvblR5cGUgPSBFR3JpZFNlbGVjdGlvblR5cGUuU0lOR0xFO1xyXG5cclxuICAvLyBVbmlxdWUga2V5IHJlcXVpcmVzIGZvciBidWlsdC1pbiByb3cgc2VsZWN0aW9uIG9mIHByaW1lTmcgZ3JpZFxyXG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXHJcbiAgQElucHV0KCkgY2xlYXJHcmlkRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXHJcbiAgQElucHV0KCkgc2VhcmNoR3JpZEZpbHRlciA9IHRydWU7XHJcblxyXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXHJcbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XHJcblxyXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXHJcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzY4MHB4JztcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxyXG4gIEBJbnB1dCgpIHdvcmRXcmFwOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJpbmcgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBoaWRlRmlsdGVyT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTZXRzIHBhZ2VuYXRpb24gZm9yIHRoZSB0YWJsZSBEYXRhLlxyXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcclxuXHJcbiAgLy8gc2V0IHRoZSBjaGFuZ2UgaW4gdGhlIHJvd0RhdGFcclxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxyXG4gICAqIENsZWFycyB0aGUgZWRpdGluZyBzdGFja1xyXG4gICAqIFNjcm9sbHMgdG8gc2VsZWN0ZWQgZWxlbWVudCBpZiBzZWxlY3Rpb24gZm91bmRcclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgcm93cyhkYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcclxuICAgICAgICB0aGlzLmRhdGFLZXkgPSAnaWQnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhbmluZyB0aGUgZWRpdGluZyBzdGFja1xyXG4gICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xyXG4gICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dzKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UmVmID0gdGhpcy5ncmlkUm93LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYgJiZcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudFxyXG4gICAgICAgICAgKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHt9LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXHJcbiAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcclxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcclxuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcclxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXHJcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xyXG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcclxuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcclxuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxyXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcclxuXHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXHJcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcclxuICAgIH1cclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxyXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcclxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpe1xyXG4gICAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgICAgbmV3IFNldChcclxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcclxuICAgICAgICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmlsdGVyOiBhbnkpID0+IGZpbHRlci5maWVsZClcclxuICAgICAgICAgIClcclxuICAgICAgICApLm1hcCgoZmllbGQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxyXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgaWYodGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLnBhZ2luYXRpb24peyBcclxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgaWYodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KXtcclxuICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpXHJcbiAgICAgICAgIH1cclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xyXG4gICAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXHJcbiAgICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXHJcbiAgQElucHV0KCkgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xyXG5cclxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXHJcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXHJcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xyXG5cclxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xyXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcclxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcclxuXHJcbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xyXG5cclxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcclxuICBASW5wdXQoKSBkZWZhdWx0Um93czogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XHJcblxyXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xyXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGhhbmRsZSByb3cgY2xpY2tcclxuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IENoZWNrQm94XHJcbiAgQE91dHB1dCgpIG9uUm93Q2hlY2tCb3g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBzb3J0IGNoYW5nZVxyXG4gIEBPdXRwdXQoKSBvblNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBmaWx0ZXIgY2hhbmdlXHJcbiAgQE91dHB1dCgpIG9uRmlsdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGludm9rZSB0aGUgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcclxuICBAT3V0cHV0KCkgb25NdWx0aVNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgZ3JpZCBhbmQgZ2xvYmFsRmlsdGVycyBjYWxsZWRcclxuICBAT3V0cHV0KCkgb25BcHBseUZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXHJcbiAgQE91dHB1dCgpIGlzSW5jbHVkZWRBbGxDb2x1bW5zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gQ2FsbHMgd2hlbmV2ZXIgYSBsYXp5IGV2ZW50IGlzIGRpc3BhdGNoZWRcclxuICBAT3V0cHV0KClcclxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cclxuICBAT3V0cHV0KClcclxuICBvblBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFBhZ2luYXRpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGVkaXQgcm93XHJcbiAgQE91dHB1dCgpIG9uUm93VXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBjYW5jZWwgYWxsIHJvd3NcclxuICBAT3V0cHV0KCkgb25DYW5jZWxBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBkZWxldGUgcm93XHJcbiAgQE91dHB1dCgpIG9uUm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCByb3dcclxuICBAT3V0cHV0KCkgb25Sb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gYWRkLCB1cGRhdGUgYW5kIGRlbGV0ZSByb3dcclxuICBAT3V0cHV0KCkgb25HcmlkUm93QWN0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gc2V0IHByb3BlcnR5IGFsbG93Q2FjaGluZyBmb3IgTG9jYWxTdG9yYWdlXHJcbiAgQElucHV0KCkgYWxsb3dDYWNoaW5nOiBib29sZWFuO1xyXG5cclxuICAvLyBzZXQgcHJvcGVydHkgc29mdENhY2hpbmcgZm9yIHNldHRpbmcgdGhlIHZhbHVlcyBvZiBncmlkRmlsdGVyXHJcbiAgQElucHV0KCkgc29mdENhY2hpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIEBJbnB1dCgpIGVkaXRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gRWRpdCB0aGUgcm93IG9uIEdyaWRcclxuICBAT3V0cHV0KCkgb25HcmlkUm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBhZGRpbmcgdGhlIG5ldyBSb3cgb24gR3JpZFxyXG4gIEBPdXRwdXQoKSBvbkdyaWRSb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGlzR3JpZEhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHVibGljIGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcGFnZUxvZ2dlclNlcnZpY2U6IFBhZ2VMb2dnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmXHJcbiAgKSB7fVxyXG5cclxuICBnZXQgc2VsZWN0ZWRDb2x1bW5zKCk6IElHcmlkQ29sdW1uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1ucztcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3RlZENvbHVtbnModmFsOiBJR3JpZENvbHVtbltdKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoY29sKSA9PiB2YWwuaW5jbHVkZXMoY29sKSk7XHJcbiAgfVxyXG5cclxuICAvLyBicm93c2VyIGNsb3NlIGV2ZW50XHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXHJcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDphbnkpIHtcclxuICAgIGlmKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCl7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFzc2lnbm1lbnQgb2Ygc2VsZWN0ZWQgY29sdW1ucyBvbiBwYWdlIGxvYWRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuZWRpdEFsbFJvd3Mpe1xyXG4gICAgICB0aGlzLmRpc2FibGVkU2F2ZUJ0biA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0TnVtZXJpY1ZhbHVlcygpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcclxuICBhcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpIHtcclxuICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xyXG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xyXG4gICAgICAgIC8vIGlmICghcGVybWlzc2lvbnMpIHBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucztcclxuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAocGVybWlzc2lvbnMgJiYgcGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbi5yb2xlcyAmJiBwZXJtaXNzaW9uLnJvbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcclxuICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIGxldCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgKGkpID0+IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZFxyXG4gICAgICAgICAgICAgICAgLy8gICApO1xyXG4gICAgICAgICAgICAgICAgLy8gICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXHJcbiAgICAgICAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgY29sdW1uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRvdGFsRmllbGRzKys7XHJcblxyXG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XHJcbiAgICAgICAgICBoaWRkZW5GaWVsZHMrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5pc0NvbHVtbkhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXHJcbiAgYXBwbHlHcmlkUGVybWlzc2lvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIGNoZWNrIGlmIGFueSBjb2x1bW4gaGFzIGFueSBwZXJtaXNzaW9uXHJcbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcclxuICAgICAgICAoeCkgPT4geD8ucGVybWlzc2lvbnMgJiYgeC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcclxuICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcclxuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcclxuICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmICFoYXNDb2x1bW5QZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLmlzR3JpZEhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCAmJiAhaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5lZGl0Um93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkFERFJPVyAmJiAhaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9uUm93QWRkLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5vblJvd0RlbGV0ZS5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuZGVsZXRlUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKTtcclxuICAgIH1cclxuICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcclxuICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XHJcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcclxuICAgIGlmIChoYXNDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XHJcblxyXG4gICAgLy8gYXBwbHkgdXNlciByb2xlIHBlcm1pc3Npb25zIG9uIGdyaWQgY29sdW1uc1xyXG4gICAgdGhpcy5hcHBseUNvbHVtbnNQZXJtaXNzaW9ucygpO1xyXG5cclxuICAgIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxyXG4gICAgdGhpcy5hcHBseUdyaWRQZXJtaXNzaW9ucygpO1xyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4pO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgaWYgKGhhc0NvbHVtbnMpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWVsZHModGhpcy5jb2x1bW5zKTtcclxuICAgICAgLy8gY2hlY2tpbmcgZmlsdGVyIGV4aXN0IG9yIG5vdFxyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLl9zZWxlY3RlZENvbHVtbnMuc29tZShcclxuICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZmlsdGVyID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuaGlkZUZpbHRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgY29sdW1uLnRpbWVPbmx5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSB8fFxyXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZmlsdGVyIHZhbHVlXHJcbiAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgY29sdW1uLnZhbHVlICYmIGNvbHVtbi5maWx0ZXJpbmcgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkZCBcImZsZXgtc2hyaW5rOiAwXCIgZm9yIGZsZXgtYmFzaXMgU3R5bGVcclxuICAgICAgICBpZiAoY29sdW1uLnN0eWxlICYmIGNvbHVtbi5zdHlsZS5pbmNsdWRlcygnZmxleC1iYXNpcycpKSB7XHJcbiAgICAgICAgICBsZXQgc3R5bGUgPSBjb2x1bW4uc3R5bGUgKyAnICFpbXBvcnRhbnQ7IGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQnO1xyXG4gICAgICAgICAgY29sdW1uLnN0eWxlID0gc3R5bGUuaW5jbHVkZXMoJzs7JylcclxuICAgICAgICAgICAgPyBzdHlsZS5yZXBsYWNlKCc7OycsICc7JylcclxuICAgICAgICAgICAgOiBzdHlsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBEaXNwbGF5VGV4dCB3aGVuIHZhbHVlIGlzIGluIGN1cmx5IGJyYWNrZXRzLlxyXG4gICAgICAgIHRoaXMuc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW4pO1xyXG5cclxuICAgICAgICAvL0FnZ3JlZ2F0ZSBzY2VuYXJpb1xyXG4gICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2VhcmNoRmlsdGVycztcclxuICAgICAgICBpZighdGhpcy5zb2Z0Q2FjaGluZyl7XHJcbiAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKSBhcyBhbnlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t1dGlsaXRpZXMuY3VycmVudFVybCgpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMuaGlkZUZpbHRlciAmJlxyXG4gICAgICAgICAgc2VhcmNoRmlsdGVycyAmJlxyXG4gICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzICYmXHJcbiAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC52YWx1ZSAmJiB4LmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcclxuICAgICAgICAgICAgICBpZihjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyl7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSBuZXcgRGF0ZSh0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh4LnZhbHVlLCAnTU0tZGQtWVknKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0geC52YWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxyXG4gICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aGF0IGNvbnRhaW5zIGNvbW1hIGludG8gYXJyYXlzXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpLmluY2x1ZGVzKCcsJylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXVxyXG4gICAgICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAgICAgPy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7IFtjb2x1bW4uZGlzcGxheUZpZWxkXTogdmFsdWUgfSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdykuZmluZChcclxuICAgICAgICAgICAgICAoeCkgPT4geCA9PT0gY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgLy8gY29udmVydCBzaW1wbGUgc3RyaW5nIGludG8gYXJyYXlcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd1trZXldKSAmJiByb3dba2V5XSkge1xyXG4gICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5kaXNwbGF5RmllbGRdOiByb3dba2V5XSB9XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3doZW4gd2UgYWRkIGEgbmV3IHJvdywgaXQgc2V0IHRoZSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHRoaXMubmV3R3JpZFJvdykuZmluZChcclxuICAgICAgICAgICAgKHgpID0+IHggPT09IGNvbHVtbi5maWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChrZXkgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3R3JpZFJvd1trZXldID0gY29sdW1uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBTZWFyY2hpbmcgc2NlbmFyaW9cclxuICAgICAgaWYgKGNoYW5nZS5yb3dzPy5jdXJyZW50VmFsdWUgJiYgY2hhbmdlLmNvbHVtbnM/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIC8vIENoZWNrcyBlaXRoZXIgY29sdW1uIHZhbHVlIGlzIGNoYW5nZXMgKGkuZS4sIGNvbHVtbiBoaWRkZW4gc2NlbmFyaW8pXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlLmNvbHVtbnMuY3VycmVudFZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PVxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5jb2x1bW5zKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKCh4LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgheC5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcclxuICAgICAgICAgICAgICAgIHgudmFsdWUgPSB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpXS52YWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF4LmhpZGRlbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcclxuICAgICAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNsYXNzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodGVkLXJvdycpO1xyXG4gICAgICAgIGlmIChjbGFzc0VsZW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2xhc3NFbGVtZW50WzBdLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLmVkaXRBbGxSb3dzICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwKXsgXHJcbiAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnbG9iYWxTZWFyY2hidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2xvYmFsU2VhcmNoYnRuJyk7XHJcbiAgICBpZiAoZ2xvYmFsU2VhcmNoYnRuKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoR3JpZEZpbHRlciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCl7XHJcbiAgICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cclxuICBzZXREaXNwbGF5VGV4dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcclxuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XHJcbiAgICAgICAgRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxyXG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5JRlJBTUVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXTtcclxuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGNvbHVtbi5kaXNwbGF5VGV4dC5pbmNsdWRlcygneycpKSB7XHJcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dFxyXG4gICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKTtcclxuICAgICAgICAgIGlmIChkaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xyXG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IHJvd1tkaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBmaWVsZCkge1xyXG4gICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIGNoYW5nZSByb3cga2V5IGFuZCB2YWx1ZSB3aGVuIHVzaW5nIHNldEdyaWRSb3dQcm9wVmFsdWUgZnVuY3Rpb25cclxuICBzZXRSb3dWYWx1ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpPy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJvd0RhdGFbcm93XSAmJlxyXG4gICAgICAgIHRoaXMudHlwZU9mKHJvd0RhdGFbcm93XSkgPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgcm93RGF0YVtyb3ddPy5hY3Rpb24/LmZpZWxkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmKHJvd0RhdGFbcm93XT8uZXh0cmFGaWVsZCl7XHJcbiAgICAgICAgICBkZWxldGUgcm93RGF0YVtyb3ddO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByb3dEYXRhW3Jvd10gPSByb3dEYXRhW3Jvd10/LnRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldE51bWVyaWNNaW5NeEZyYWN0aW9uKGNvbHVtbjogYW55KSB7XHJcbiAgICBsZXQgZGlnaXRJbmZvID0gJzInO1xyXG4gICAgaWYoY29sdW1uPy5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmICFjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbyl7XHJcbiAgICAgIGRpZ2l0SW5mbyA9ICcwJ1xyXG4gICAgfWVsc2UgaWYoY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbyl7XHJcbiAgICAgICAgZGlnaXRJbmZvID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mbztcclxuICAgIH1cclxuICAgIHJldHVybiBkaWdpdEluZm87XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgdGhlIGZvcm1hdCBvZiBjdXJyZW5jeSAmJiBudW1iZXIgJiYgZGVjaW1hbCAmJiBwZXJjZW50XHJcbiAgc2V0TnVtZXJpY0Zvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIHJvdyA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xyXG4gICAgbGV0IHZhbHVlOiBhbnkgPSByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA6IChyb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dCA9PT0gMCB8fCByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dCA9PT0gbnVsbCkgXHJcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpXT8udGV4dCA6IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV07XHJcbiAgICBpZiAodGhpcy50eXBlT2YodmFsdWUpID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gMCkge1xyXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgZm9ybWF0UGFyYW1zID0gY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zO1xyXG4gICAgbGV0IGRpZ2l0c0luZm8gPSBmb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCAmJiB2YWx1ZSkge1xyXG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQ/LnR5cGUpIHtcclxuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5DVVJSRU5DWTpcclxuICAgICAgICAgIHZhbHVlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFxyXG4gICAgICAgICAgICBmb3JtYXRQYXJhbXM/LmxvY2FsZSA/IGZvcm1hdFBhcmFtcy5sb2NhbGUgOiAnZW4tVVMnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdFBhcmFtcz8uY3VycmVuY3kgPyBmb3JtYXRQYXJhbXMuY3VycmVuY3kgOiAnVVNEJyxcclxuICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogJzInLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApPy5mb3JtYXQodmFsdWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuREVDSU1BTDpcclxuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6ICcyJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEVHcmlkRm9ybWF0VHlwZS5QRVJDRU5UOlxyXG4gICAgICAgIGlmKCFjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKXtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWUrJyUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy9DaGFuZ2UgZHJvcGRvd24gdmx1ZSBiYXNlZCBvbiBvcHRpb24gbGFiZWwgYW5kIG9wdGlvbnZhbHVlXHJcbiAgc2V0RHJvcGRvd25WYWx1ZShjb2x1bW46IGFueSwgc2VsZWN0ZWRSb3c/OiBhbnksIGNoYW5nZT86IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleSA9PT0gY29sdW1uLmZpZWxkKSkge1xyXG4gICAgICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgPSBjb2x1bW4ub3B0aW9uTGFiZWxcclxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25MYWJlbFxyXG4gICAgICAgICAgICAgIDogJ2xhYmVsJztcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlID0gY29sdW1uLm9wdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uVmFsdWVcclxuICAgICAgICAgICAgICA6ICd2YWx1ZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKFxyXG4gICAgICAgICAgICAocmVjb3JkOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBlZGl0ZWRSb3cgPSBzZWxlY3RlZFJvdyAmJiBPYmplY3Qua2V5cyhzZWxlY3RlZFJvdykubGVuZ3RoID4gMCA/IHNlbGVjdGVkUm93W3RoaXMuZGF0YUtleV0gPT09IHJvd1t0aGlzLmRhdGFLZXldIDogZmFsc2U7XHJcbiAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdGVkUm93KSB7XHJcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcclxuICAgICAgICAgIH1lbHNlIGlmKHZhbHVlICYmIGNoYW5nZSA9PT0gZmFsc2Upe1xyXG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXHJcbiAgY2hhbmdlQ2hlY2tib3hTdHJpbmdWYWx1ZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jb2x1bW5zICYmXHJcbiAgICAgIHRoaXMucm93c0RhdGEgJiZcclxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXHJcbiAgICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcclxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnMCcpKSB8fFxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnWScgfHxcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID1cclxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xyXG4gICAgICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd0RhdGFcclxuICAgKiBQYXNzZXMgZGF0YSBvZiBjbGlja2VkIHJvdyB0byBwYXJlbnRcclxuICAgKi9cclxuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93RGF0YTtcclxuICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29sdW1uRGF0YVxyXG4gICAqIFBhc3NlcyBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIHBhcmVudCBvbiBzb3J0IGNoYW5nZVxyXG4gICAqL1xyXG4gIGhhbmRsZVNvcnRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHNvcnREaXJlY3Rpb24gPSBudWxsO1xyXG4gICAgbGV0IHNvcnRGaWVsZDogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAoZXZlbnQubXVsdGlzb3J0bWV0YSAmJiBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyKSB7XHJcbiAgICAgIHNvcnREaXJlY3Rpb24gPVxyXG4gICAgICAgIGV2ZW50Lm11bHRpc29ydG1ldGFbMF0ub3JkZXIgPT0gMVxyXG4gICAgICAgICAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDXHJcbiAgICAgICAgICA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDO1xyXG4gICAgICBzb3J0RmllbGQgPSBldmVudC5tdWx0aXNvcnRtZXRhWzBdLmZpZWxkO1xyXG4gICAgfVxyXG4gICAgbGV0IHNvcnRzOiBJR3JpZFNvcnQgPSB7XHJcbiAgICAgIGZpZWxkOiBzb3J0RmllbGQsXHJcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiBhcyBFR3JpZFNvcnREaXJlY3Rpb24sXHJcbiAgICAgIHByaW9yaXR5OiAwLFxyXG4gICAgfTtcclxuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKiBQYXNzZXMgYXBwbGllZCBmaWx0ZXJzIHRvIHBhcmVudCBvbiBmaWx0ZXIgY2hhbmdlXHJcbiAgICovXHJcbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWV2ZW50LmZpbHRlcnNbZmlsdGVyLmZpZWxkXT8udmFsdWUpIHtcclxuICAgICAgICBmaWx0ZXIudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgOiBFdmVudFxyXG4gICAqIEBwYXJhbSBjb2x1bW5BY3Rpb24gOiBJR3JpZENvbHVtbkFjdGlvblxyXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcclxuICAgKiBTdG9wIHRoZSBjbGljayBldmVudCBwcm9wYWdhdGlvbiB0byBwYXJlbnRcclxuICAgKiBDYWxsYmFja3MgdGhlIHJvdyBkYXRhIHRvIHBhcmVudFxyXG4gICAqL1xyXG5cclxuICAvKipcclxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcclxuICAgKi9cclxuICBncmlkSUZyYW1lKGNvbHVtbjogYW55LCByb3dzOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XHJcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcclxuICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxyXG4gICAgICB3aWR0aDogJzgwJScsXHJcbiAgICAgIGhlaWdodDogJzgwJScsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB2YWx1ZTogcm93cyxcclxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcclxuICAgIGlmKGNvbXBvbmVudE5hbWUpe1xyXG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xyXG4gICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlcyAmJiBjb2x1bW4ub25DaGFuZ2UpIHtcclxuICAgICAgICBjb2x1bW4ub25DaGFuZ2UocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdSb3cocm93OiBhbnksIGFkZFJvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi5maWx0ZXIgJiZcclxuICAgICAgICBjb2x1bW4uY29tcG9uZW50ICYmXHJcbiAgICAgICAgY29sdW1uLmZpbHRlci50eXBlID09PSAnY2FsZW5kYXInXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmIChhZGRSb3cpIHtcclxuICAgICAgICAgIHRoaXMucm93c0RhdGFbMF1bY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ10gPSBFR3JpZENvbHVtblR5cGUuREFURTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xyXG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XHJcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcclxuICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcclxuICAgKi9cclxuICBvcGVuR3JpZERpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YSA/PyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXTtcclxuICAgICAgaWYgKGNvbHVtbi5jb21wb25lbnQgJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5yb3dDbGlja0RhdGEpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5yb3dDbGlja0RhdGEpO1xyXG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoXHJcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhLFxyXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIGNvbHVtbi5kYXRhKTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcclxuICAgICAgICBpZihjb21wb25lbnROYW1lKXtcclxuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhICYmIGNvbHVtbi5vblJldHVybikge1xyXG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZGF0YSwgdGhpcy5yb3dDbGlja0RhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmKGNvbHVtbi5vbkNoYW5nZSl7XHJcbiAgICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGJyb3dzZXJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2Upe1xyXG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTphbnkpe1xyXG4gICAgaWYoc2VsZWN0ZWRWYWx1ZSAmJiBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1Qpe1xyXG4gICAgICBpZihzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpe1xyXG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKT0+IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSB2YWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsKT8udG9TdHJpbmcoKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpKT8ubGFiZWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXHJcbiAgICovXHJcbiAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XHJcbiAgICBsZXQgdmFsdWU6YW55O1xyXG4gICAgaWYoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpe1xyXG4gICAgICBsZXQgbmV3VmFsdWU6YW55O1xyXG4gICAgICBpZih0eXBlb2Yocm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24pe1xyXG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKG5ld1ZhbHVlKXtcclxuICAgICAgICBpZihjb2x1bW4udGltZU9ubHkpe1xyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnNldFRpbWVGb3JtYXQobmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZm9ybWF0ID0gJyc7XHJcbiAgICAgICAgICBpZihjb2x1bW4uZm9ybWF0KXtcclxuICAgICAgICAgICAgaWYoY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURSl7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5JztcclxuICAgICAgICAgICAgfWVsc2UgaWYoY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSl7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiAnTU0vZGQveXknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcclxuICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGxcclxuICAgICAgPyAnJ1xyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxyXG4gICAgICA/IGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyA/IFxyXG4gICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dC50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSA/IFxyXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCAnaGg6bW0gYScpXHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcclxuICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH1cclxuICAgXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KXtcclxuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xyXG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cclxuICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXHJcbiAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBEZWxldGUgQ29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIGNsaWNrIG9uIGRlbGV0ZSBpY29uIGluIEFjdGlvbiBjb2x1bW5cclxuICAgKi9cclxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGNvbHVtbkFjdGlvbjogSUdyaWRDb2x1bW5BY3Rpb24sIHJvdzogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChjb2x1bW5BY3Rpb24udG9vbHRpcC50b0xvd2VyQ2FzZSgpID09PSAnZGVsZXRlJykge1xyXG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXHJcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcclxuICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXHJcbiAgICAgICAgICBrZXk6ICdoYW5kbGVjb2x1bW5BY3Rpb25zJyxcclxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgOiBMYXp5TG9hZEV2ZW50XHJcbiAgICogVHJpZ2dlcnMgZXZlcnl0aW1lIGEgc2VydmVyIHNpZGUgZmlsdGVyIGlzIHRyaWdnZXJcclxuICAgKi9cclxuICBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50OiBhbnkpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChldmVudC5maWx0ZXJzW3guZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LmZpbHRlcnNbeC5maWVsZF0udmFsdWUgPSB4LnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgIFxyXG4gICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hdXRvTG9hZERhdGE7XHJcbiAgICB0aGlzLnNlcnZlckZpbHRlcnMgPSB7XHJcbiAgICAgIGZpbHRlcnM6IHRoaXMubG9va3VwRmlsdGVyc1xyXG4gICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpXHJcbiAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnByZXBhcmVCYXNpY0ZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcclxuICAgICAgc29ydHM6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFNvcnRzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXHJcbiAgICAgIC4uLih0aGlzLnBhZ2luYXRpb24gJiYge1xyXG4gICAgICAgIHBhZ2U6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQpLFxyXG4gICAgICAgIHBhZ2VTaXplOiBldmVudC5yb3dzIHx8IDEwLFxyXG4gICAgICB9KSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcclxuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXHJcbiAgICApIHtcclxuICAgICAgaWYoIXRoaXMuc29mdENhY2hpbmcpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpLEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t1dGlsaXRpZXMuY3VycmVudFVybCgpXSA9IHRoaXMuc2VydmVyRmlsdGVycztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XHJcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9ICh0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycyB8fCBbXSkuY29uY2F0KFxyXG4gICAgICB0aGlzLmdsb2JhbERhdGFcclxuICAgICk7XHJcbiAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcclxuICAgIH0sIDk1MCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKiBQYXNzZXMgYXBwbGllZCBwYWdpbmF0aW9uIHRvIHBhcmVudCBvbiBwYWdlIGNoYW5nZVxyXG4gICAqL1xyXG4gIGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5vblJvd0NoZWNrQm94LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8vIHNldCB0aW1lIGZvcm1hdFxyXG4gIHNldFRpbWVGb3JtYXQoZGF0ZTogYW55KSB7XHJcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xyXG4gICAgaWYgKGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkge1xyXG4gICAgICB2YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGRhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcclxuICBvcGVuTGluayh1cmw6IGFueSkge1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcclxuICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF0sXHJcbiAgICAgICAgY29sdW1uLmZvcm1hdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsdWUgPSBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIFNldHMgdmFsdWVzIHRvIGVkaXRhYmxlIHJvd1xyXG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxyXG4gICAqIFJvdyBkYXRhS2V5IGlzIHByZXNlcnZlZCB0byBrZWVwIHRoZSByb3cgdW5pcXVlIGFuZCBpbiBlZGl0YWJsZSBzdGF0ZSBhcyBsb25nIGFzIG5vdCBzYXZlZFxyXG4gICAqL1xyXG5cclxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XHJcbiAgICBsZXQgc2VsZWN0ZWRSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2wsIHJvdywga2V5KTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRoZSBhdXRvQ29tcGxldGUgVmFsdWUgaW4gZWRpdCBtb2RlXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUubWFwKCh4OiBhbnkpID0+IHhbY29sLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XHJcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3VmFsdWVcclxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXHJcbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgPy5tYXAoKHg6IGFueSkgPT4gKHsgW2NvbC5kaXNwbGF5RmllbGRdOiB4IH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBsb29rdXAgY29udHJvbCBmaWVsZCBiYXNlZCBvbiBkaXNwbGF5IGZpZWxkLlxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2wuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSBrZXkpIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgdGV4dDogcm93W2NvbC5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sLmZpZWxkXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgICBsZXQgb3B0aW9uID0gY29sPy5kYXRhPy5maW5kKFxyXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWU/LmFjdGlvbiA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcclxuICAgICAgICAgIGlmIChyb3dbY29sLmZpZWxkXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZihyb3dba2V5XT8uYWN0aW9uICYmIE9iamVjdC5rZXlzKHJvd1trZXldPy5hY3Rpb24pPy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICByb3dba2V5XS50ZXh0ID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gY2hlY2sgdGhlIE1pbnV0ZXMgcGF0dGVyblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcclxuICAgICAgICAgICAgY29sLm1pbnV0ZXNJbnRlcnZhbCAmJlxyXG4gICAgICAgICAgICByb3dba2V5XVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSByb3dbY29sLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHsgLi4ucm93IH07XHJcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IHRydWU7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5vbkdyaWRSb3dFZGl0LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGRyb3Bkb3duIGZpbHRlciB2YWx1ZVxyXG4gICAqL1xyXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sLmRyb3BEb3duUHJvcCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhjb2wpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBrZXkpKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XHJcbiAgICAgICAgbGV0IG5ld0ZpbHRlcnM6IGFueSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAob2JqLmZpbHRlcnMgJiYgb2JqLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgb2JqLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleTogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlPy5pbmNsdWRlcygneycpICYmXHJcbiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hLZXkgPSBrZXk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaEtleTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcclxuICAgICAgICAgICAgICBuZXdGaWx0ZXIudmFsdWUgPSByb3dbZmlsdGVyS2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zZXREcm9wZG93bkRhdGEoXHJcbiAgICAgICAgICBjb2wsXHJcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxyXG4gICAgICAgICAgb2JqLnZhbHVlUHJvcCxcclxuICAgICAgICAgIG9iai5sYWJlbFByb3AsXHJcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxyXG4gICAgICAgICAgcm93XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbiA9IGNvbC5kYXRhLmZpbmQoXHJcbiAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG9wdGlvbikge1xyXG4gICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBQYXNzZXMgdGhlIGVkaXRlZCBvciBuZXdseSBjcmVhdGVkIGRhdGEgdG8gcGFyZW50XHJcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxyXG4gICAqL1xyXG4gIG9uUm93RWRpdFNhdmUoc2VsZWN0ZWRSb3c6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICctZGF0YSddO1xyXG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxyXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcclxuICAgICAgICB0aGlzLmxvb2t1cE9iamVjdFxyXG4gICAgICApIHtcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5sb29rdXBPYmplY3QudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnY2hhcicpIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnWScgOiAnTic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnMScgOiAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiggY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpe1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICdoaDptbSBhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpe1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxyXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBhcnI6IGFueSA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcclxuICAgICAgICAgICAgYXJyLnB1c2gocm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXJyLnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XHJcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XHJcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5sb29rdXBPYmplY3QgJiYgdGhpcy5sb29rdXBPYmplY3QuZmllbGQpIHtcclxuICAgICAgICByb3dbdGhpcy5sb29rdXBPYmplY3QuZmllbGRdID0gdGhpcy5sb29rdXBPYmplY3QudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSByb3dba2V5XTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBvYmogJiZcclxuICAgICAgICAgIChvYmoudHlwZSA9PT0gJ2xpbmsnIHx8XHJcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnaWZyYW1lJyB8fFxyXG4gICAgICAgICAgICBvYmoudHlwZSA9PT0gJ2RpYWxvZycpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmVsXHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2V0Um93VmFsdWUocm93KTtcclxuICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxyXG4gICAgICAgIGNvbHVtbi5maWVsZCAmJlxyXG4gICAgICAgIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcclxuICAgICAgICBuZXdSb3dbY29sdW1uLmZpZWxkXSA9IG5ld1Jvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcclxuICAgICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpICYmXHJcbiAgICAgICAgKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sdW1uLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0sXHJcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBkaWdpdHNJbmZvID0gJy4wMCc7XHJcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgICAgICAgIGNvbnN0IGZyYWNEaWdpdHMgPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcclxuICAgICAgICAgICAgICB6ZXJvID0gemVybyArICcwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICByb3cuaXNOZXcgJiZcclxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcclxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xyXG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcclxuICAgICAgaWYgKHJvdy5pc05ldykge1xyXG4gICAgICAgIGNvbnN0IHsgaXNOZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xyXG4gICAgICAgIGRlbGV0ZSBuZXdSb3dPYmpbdGhpcy5kYXRhS2V5XTtcclxuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG5ld1Jvd09iaik7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xyXG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdGhpcy5lZGl0QWxsUm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxyXG4gICAgaWYoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpPT4gIXZhbHVlKSl7XHJcbiAgICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgICAgIHRoaXMuaGlkZUVkaXRBbGxSb3dzQnRuID0gdHJ1ZTtcclxuICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAvLyBjb252ZXJ0IGRhdGUgaW50byB0aW1lXHJcbiAgICAgIGlmIChcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXHJcbiAgICAgICAgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpIHx8XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcclxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcclxuICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxyXG4gIGdyaWRWYWxpZGF0aW9uKGNvbHVtbnM6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KGNvbHVtbnMsIHJvdykpIHtcclxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXHJcbiAgICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uZXJyb3JNZXNzYWdlICYmICFyb3dbY29sdW1uLmZpZWxkXVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgJ1JlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZycsXHJcbiAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcignU29tZSBmaWVsZHMgYXJlIGludmFsaWQnLCAnSU5WQUxJRCBGSUVMRCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93IDogYW55XHJcbiAgICogQHBhcmFtIGluZGV4IDogbnVtYmVyXHJcbiAgICogQ2xlYXJzIG91dCB0aGUgZWRpdCByb3cgYW5kIHJlcGxhY2Ugd2l0aCByZWFkYWJsZSBvbmVcclxuICAgKi9cclxuICBvblJvd0VkaXRDYW5jZWwocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChyb3cuaXNOZXcpIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF0gPSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV07XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgIGlmKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKT0+ICF2YWx1ZSkpe1xyXG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xyXG4gICB9ICBcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIFNlbmRzIHRoZSByb3cgcGF5bG9hZCB0byBwYXJlbnQgZm9yIGRlbGV0aW9uXHJcbiAgICovXHJcblxyXG4gICAvKipcclxuICAgKnNldCB0aGUgZ3JpZERhdGEgb24gcm93IGFjdGlvbnMgZXZlbnRzXHJcbiAgICovXHJcbiAgIHJvd0FjdGlvbkV2ZW50cyhyb3dJbmZvLCBkZWxldGVSb3c6IGJvb2xlYW4gPSBmYWxzZSl7XHJcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBncmlkUm93c0RhdGE6IGFueVtdID0gWy4uLnRoaXMucm93c0RhdGFdO1xyXG4gICAgY29uc3QgaW5kZXggPSBncmlkUm93c0RhdGEuZmluZEluZGV4KChyb3dEYXRhKT0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcclxuICAgIGlmKGluZGV4ID4gLTEpe1xyXG4gICAgICBpZihkZWxldGVSb3cpeyBcclxuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLmdyaWRSb3dzRGF0YV07XHJcbiAgICAgICAgYWN0aW9uID0gJ2RlbGV0ZSc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYodGhpcy5hZGROZXdSb3dDaGVjayl7XHJcbiAgICAgICAgICBhY3Rpb24gPSAnaW5zZXJ0JztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGFjdGlvbiA9ICd1cGRhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgaWYodGhpcy5vbkdyaWRSb3dBY3Rpb25zLm9ic2VydmVycy5sZW5ndGggIT09IDApe1xyXG4gICAgICAgIHJvd0luZm9bJ3Jvd0FjdGlvbiddPSBhY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xyXG4gIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIERlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSByb3dcclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxyXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcclxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcclxuICAgICAga2V5OiAnaGFuZGxlSW5saW5lQ1JVRCcsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCB0aGUgZ3JpZCBkZWxldGVkIGRhdGEgXHJcbiAgICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMocm93LCB0cnVlKTtcclxuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgcmVqZWN0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxyXG4gICAqL1xyXG4gIGFsbG93RGlzYWJsZWQoY29sdW1uOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbiAmJlxyXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGRdLmFjdGlvbik/LmluY2x1ZGVzKCdkaXNhYmxlZCcpICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc2FibGVkID09PSB0cnVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzYWJsZWQgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSkge1xyXG4gICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXHJcbiAgICovXHJcbiAgc2V0QWdncmVnYXRlVGV4dChjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcclxuICAgICAgY29sdW1uLmFnZ3JlZ2F0ZS5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XHJcbiAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQ09VTlQpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIGNvdW50LCAnQ291bnQnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSB8fFxyXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBzdW0gPSBjb2xWYWx1ZXMucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLCAwKTtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XHJcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgc3VtLCAnU3VtJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdmVyYWdlID0gc3VtIC8gY29sVmFsdWVzLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChcclxuICAgICAgICAgICAgICAgICAgY29sLFxyXG4gICAgICAgICAgICAgICAgICBhdmVyYWdlLFxyXG4gICAgICAgICAgICAgICAgICAnQXZnJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXHJcbiAgICovXHJcbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xyXG4gICAgY29uc3QgaXNEZWNpbWFsRm9ybWF0OiBib29sZWFuID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xyXG4gICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbi5mb3JtYXQ/LmRpZ2l0c0luZm87XHJcbiAgICBjb25zdCBjYXB0aW9uOiBzdHJpbmcgPVxyXG4gICAgICBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XHJcblxyXG4gICAgY29uc3QgZGVjaW1hbFBvaW50ID0gaXNEZWNpbWFsRm9ybWF0XHJcbiAgICAgID8gdmFsdWU/LnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKVxyXG4gICAgICA6IHZhbHVlPy50b0ZpeGVkKDApO1xyXG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50XHJcbiAgICAgIC50b1N0cmluZygpXHJcbiAgICAgIC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpfSA8L2JyPmA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZXQgZGVjaW1hdCBhbmQgbnVtZXJpYyB2YWx1ZXNcclxuICAgKi9cclxuICBzZXROdW1lcmljVmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcclxuICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcclxuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChyb3dbY29sdW1uLmZpZWxkXSAvIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xyXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnKSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBjb2x1bW4gdmFsdWUgYmFzZWQgb24gY29sdW1uIGZpZWxkXHJcbiAgICovXHJcbiAgZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcclxuICAgIGxldCBhcnI6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xyXG4gICAgICBrZXlzLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0ga2V5KSB7XHJcbiAgICAgICAgICBhcnIucHVzaChyb3dba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFycjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogRXhwb3J0IHRvIFBERlxyXG4gICAqL1xyXG4gIGV4cG9ydFBkZigpIHtcclxuICAgIHZhciBleHBvcnREYXRhID0gdGhpcy5zZXRFeHBvcnREYXRhKFsuLi50aGlzLnJvd3NEYXRhXSwgdHJ1ZSk7XHJcbiAgICBsZXQgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jyk7XHJcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xyXG4gICAgZG9jLnNhdmUoJ0V4cG9ydC5wZGYnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICBTdWItZnVuY3Rpb24gdG8gc2V0IHJvd3MgZm9yIGV4cG9ydCB0byBQZGYsIGFuZCBFeGNlbFxyXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXHJcbiAgICogQGlzRXhjZWwgcGFyYW0gZm9yIGV4cG9ydCB0byBleGNlbCBpbmRpY2F0aW9uXHJcbiAgICovXHJcbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcclxuICAgIGNvbnN0IGhlYWRpbmdzOiBhbnkgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZCk7XHJcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xyXG4gICAgICAgIGlmICghaGVhZGluZ3MuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgIGRlbGV0ZSByb3dbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1BkZikge1xyXG4gICAgICAgICAgcm93W3Byb3BdID1cclxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcclxuICAgICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgICAgOiByb3dbcHJvcF0udG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogRXhwb3J0IHRvIEV4Y2VsXHJcbiAgICovXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgZXhwb3J0RGF0YTogYW55ID0gdGhpcy5leHBvcnREYXRhVG9FeGNlbCgpO1xyXG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xyXG4gICAgICBjb25zdCB3b3Jrc2hlZXQ6IFdvcmtTaGVldCA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcclxuXHJcbiAgICAgIGxldCByb3dJbmRleCA9IDA7XHJcbiAgICAgIGV4cG9ydERhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgY29sSW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWU6IHN0cmluZyA9IHJvd1tjb2wuaGVhZGVyXTtcclxuICAgICAgICAgIGlmIChjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbGlua1RleHQ6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzBdO1xyXG4gICAgICAgICAgICBsZXQgbGlua1VybDogc3RyaW5nID0gY2VsbFZhbHVlLnNwbGl0KCd8JylbMV07XHJcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICAgICAgICAgIGlmICghbGlua1VybC5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgICAgIGxpbmtVcmwgPSAnLycgKyBsaW5rVXJsO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGlua1VybCA9XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgK1xyXG4gICAgICAgICAgICAgICAgJy8vJyArXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xyXG4gICAgICAgICAgICAgICAgbGlua1VybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY2VsbEFkZHJlc3MgPSB4bHN4LnV0aWxzLmVuY29kZV9jZWxsKHtcclxuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcclxuICAgICAgICAgICAgICByOiByb3dJbmRleCArIDEsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgd29ya3NoZWV0W2NlbGxBZGRyZXNzXSA9IHtcclxuICAgICAgICAgICAgICBmOiBgPUhZUEVSTElOSyhcIiR7bGlua1VybH1cIiwgXCIke2xpbmtUZXh0fVwiKWAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29sSW5kZXgrKztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcm93SW5kZXgrKztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcclxuICAgICAgICBTaGVldHM6IHsgc2hlZXQxOiB3b3Jrc2hlZXQgfSxcclxuICAgICAgICBTaGVldE5hbWVzOiBbJ3NoZWV0MSddLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0geGxzeC53cml0ZSh3b3JrYm9vaywge1xyXG4gICAgICAgIGJvb2tUeXBlOiAneGxzeCcsXHJcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCAnRXhwb3J0Lnhsc3gnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RGF0YVRvRXhjZWwoKSB7XHJcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcclxuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xyXG4gICAgICAgICAgY29uc3QgbGlua09iaiA9IHJvd1tjb2x1bW4uZGlzcGxheVRleHQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xyXG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBhcnIucHVzaChvYmopO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXJyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXHJcbiAgICovXHJcbiAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpbXBvcnQoJ2ZpbGUtc2F2ZXInKS50aGVuKChGaWxlU2F2ZXIpID0+IHtcclxuICAgICAgbGV0IEVYQ0VMX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcclxuICAgICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IEVYQ0VMX1RZUEUgfSk7XHJcbiAgICAgIHNhdmVBcyhkYXRhLCBmaWxlTmFtZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqc2V0IGNvbmZpZyBkYXRhIG9mIGxvb2t1cCBjb250cm9sIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3c6IGFueSwgY29sdW1uOiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXS50ZXh0O1xyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xyXG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmZpZWxkICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcclxuICAgICAgbmV3Um93W2NvbHVtbi5maWVsZF0gPSBuZXdSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XHJcbiAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGRhdGEpIHtcclxuICAgICAgbGV0IG9iaiA9IHV0aWxpdGllcy5hdXRvU2V0TG9va3VwRGF0YShkYXRhLCByb3cpO1xyXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXHJcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxyXG4gICAgICBjb2x1bW46IGNvbHVtbixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIGxpbmsgb24gbG9va3VwQ29udHJvbCBjb250cm9sIGluIHJlYWQgb25seSBtb2RlIHdoZW4gZWRpdExpbmsgc2V0IHRydWVcclxuICAgKi9cclxuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XHJcbiAgICBpZiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlICYmIGNvbHVtbi5jb21wb25lbnQpIHtcclxuICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcocm93LCBjb2x1bW4sIGNvbHVtbi5kYXRhPy5kYXRhKTtcclxuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XHJcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBsb29rdXAgRGlhbG9nXHJcbiAgICovXHJcbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgY29sdW1uRGF0YSA9IGNvbHVtbi5jb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGEgPyAgY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGFcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIHtcclxuICAgICAgLi4uY29sdW1uRGF0YSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHNlbGVjdGlvbjogY29sdW1uLnNlbGVjdGlvbixcclxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcclxuICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlRmllbGQsXHJcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xyXG4gICAgaWYoY29tcG9uZW50TmFtZSl7XHJcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXHJcbiAgICovXHJcbiAgc2VsZWN0TG9va3VwRmllbGQoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xyXG4gICAgdGhpcy5sb29rdXBPYmplY3QgPSB7IHRleHQ6ICcnLCB2YWx1ZTogJycsIGZpZWxkOiAnJyB9O1xyXG4gICAgaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKFxyXG4gICAgICAgIHJvdyxcclxuICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YT8uZGF0YVxyXG4gICAgICApO1xyXG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50O1xyXG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxyXG4gICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcclxuICAgICAgICAgICAgICByZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLmxvb2t1cE9iamVjdCA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWVbJ2ZpZWxkJ10gPSBjb2x1bW4uZmllbGQ7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJlc1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAhPT0gb2JqLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgICAgICAgICBpZihjb2x1bW4ub25DaGFuZ2Upe1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoeyBlcnJvciB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RmlsdGVyTG9va3VwKGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBjYWxlbmRlciB2YWx1ZSBpcyBjaGFuZ2VkIG9yIG5vdFxyXG4gIGNhbGVuZGVyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXHJcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0nKSAhPT1cclxuICAgICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSwgJ2hoOm1tJylcclxuICAgICkge1xyXG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjb2x1bW4uc2hvd1RpbWUgJiZcclxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XHJcbiAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkIGhoOm1tJylcclxuICAgICkge1xyXG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cclxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkJylcclxuICAgICkge1xyXG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZih2YWx1ZUNoYW5nZSl7XHJcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICAgIGlmKGNvbHVtbi5vbkNoYW5nZSl7XHJcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShbY29sdW1uXSwgcm93KTtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcclxuICAgICAgdGhpcy5jYWxlbmRlckNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIH1cclxuICAgIGlmIChjb2x1bW4ub25Gb2N1c091dCkge1xyXG4gICAgICBjb2x1bW4ub25Gb2N1c091dChyb3cpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY29sdW1uLm9uUmV0dXJuICYmXHJcbiAgICAgIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUXHJcbiAgICApIHtcclxuICAgICAgY29sdW1uLm9uUmV0dXJuKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJGb2N1c091dChjb2w6IGFueSwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSkge1xyXG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xyXG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xyXG4gICAgLy9jaGFuZ2UgZmlsdGVyIGNhbGVuZGVyIGZvcm1hdFxyXG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLnZhbHVlKSB7XHJcbiAgICAgIG5ld0NvbHVtbi52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgIGNvbC52YWx1ZS50b1N0cmluZygpLnRyaW0oKSxcclxuICAgICAgICAneXl5eS1NTS1kZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9iaihuZXdDb2x1bW4pO1xyXG4gICAgICB9LFxyXG4gICAgICBuZXdDb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCA/IDI1MCA6IDBcclxuICAgICk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XHJcbiAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgIGZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiAnc3RhcnRzV2l0aCcsXHJcbiAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IgPyBjb2wub3BlcmF0b3IgOiAnYW5kJyxcclxuICAgICAgdGFibGVBbGlhczogY29sLnRhYmxlQWxpYXMgPyBjb2wudGFibGVBbGlhcyA6ICcnLFxyXG4gICAgICB2YWx1ZTogY29sLnZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnB1c2gob2JqKTtcclxuICB9XHJcblxyXG4gIGFwcGx5RW50ZXJFdmVudChmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XHJcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XHJcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xyXG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcclxuICAgICAgdGhpcy5kcm9wRG93bkZpbHRlci5maWx0ZXIodGhpcy5kcm9wRG93bkZpbHRlci5ldmVudC50YXJnZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmlsdGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrc3BhY2VFdmVudChldmVudDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgIChjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAxIHx8XHJcbiAgICAgICAgY29sdW1uLnZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9PT0gbnVsbClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBhcnIgPSBbLi4udGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXldO1xyXG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xyXG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSBhcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cclxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxyXG4gICAgICBjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXHJcbiAgICApIHtcclxuICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XHJcbiAgICAgIGlmKCF0aGlzLnNvZnRDYWNoaW5nKXtcclxuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3V0aWxpdGllcy5jdXJyZW50VXJsKCldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWFyY2hGaWx0ZXJzICYmIHNlYXJjaEZpbHRlcnMuZmlsdGVycykge1xyXG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICBpZighdGhpcy5zb2Z0Q2FjaGluZyl7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSxKU09OLnN0cmluZ2lmeShzZWFyY2hGaWx0ZXJzKSk7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSBzZWFyY2hGaWx0ZXJzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxyXG4gIG9uQ2xpY2tCdXR0b24oY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcclxuICB9XHJcblxyXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxyXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgdGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICFyb3dbY29sdW1uLmZpZWxkXSAmJlxyXG4gICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiZcclxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXHJcbiAgICAgIGNvbHVtbi5taW51dGVzSW50ZXJ2YWxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcclxuICBzaG93T3B0aW9uKGNvbHVtbiwgcm93KXtcclxuICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgaWYodHlwZW9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJzdHJpbmdcIiAmJiAhcm93W2NvbHVtbi5maWVsZF0uaW5jbHVkZXMoJywnKSl7XHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xyXG4gICAgIH0gZWxzZSBpZihyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnLCcpKXtcclxuICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0uc3BsaXQoJywnKTtcclxuICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpe1xyXG4gICAgaWYoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XHJcbiAgb25DaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxyXG4gICAgdGhpcy5kaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tCb3hDaGFuZ2VFdmVudChldmVudDphbnksY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KXtcclxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cclxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxyXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXHJcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXHJcbiAgICAgICAgKHJvd0luZm8pID0+XHJcbiAgICAgICAgICByb3dJbmZvPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxyXG4gICAgICAgIChyZWNvcmQ6IGFueSkgPT5cclxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xyXG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cclxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGNvbHVtbiAmJiByb3cpIHtcclxuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXHJcbiAgY2xlYXJncmlkRmlsdGVyc1ZhbHVlKCkge1xyXG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXHJcbiAgICApO1xyXG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcclxuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgY29sLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRBbGxSb3dzQXRPbmNlKCkge1xyXG4gICAgaWYodGhpcy5lZGl0Um93UGVybWlzc2lvbil7XHJcbiAgICBpZiAodGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdlZGl0Um93JykpIHtcclxuICAgICAgaWYodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKT0+IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiAoY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZSB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQpKSl7XHJcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFZGl0QWxsUm93c0J0biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUFsbFJvd3NBdE9uY2UoKSB7XHJcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcclxuICB9XHJcblxyXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xyXG4gIGNhbmNlbEFsbFJvd3NBdE9uY2UoKSB7XHJcbiAgICB0aGlzLnJvd3NEYXRhID0gWy4uLnRoaXMucm93c0RhdGFDb3B5XTtcclxuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKT0+e1xyXG4gICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpe1xyXG4gICAgICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdyk9PntcclxuICAgICAgICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF09IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzc0ZvckVkaXRBbGxSb3dzKGNsYXNzTmFtZTogc3RyaW5nID0gJycpIHtcclxuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdCBnZXRCdG5zOiBhbnkgPVxyXG4gICAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xyXG4gICAgICAgICAgICBjb25zdCByb3dTYXZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZWNvcmRzJC5wdXNoKHJvd1NhdmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQUFBQVwiKTtcclxuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2F2ZVJlY29yZEFycmF5KTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkgPSBbXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sMjApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XHJcbiAgICAgICAgICBpZihjbGFzc05hbWUgPT0gJ2NhbmNlbFJvdycpe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpdGVtLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VjY2VzcztcclxuICB9XHJcblxyXG4gIC8vRm9jdXNlZCBjYWxlbmRlciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxyXG4gIHNlbGVjdERhdGUoY29sdW1uOiBhbnkpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk/LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICAvL2FwcGx5IGZpbHRlciBvbiBncmlkIHdoZW4gc2VhcmNoIGJ0biBjbGlja2VkXHJcbiAgYXBwbHlHaXJkRmlsdGVyQnRuKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXHJcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcclxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZXZlbnQsXHJcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaW52b2tlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XHJcbiAgbXVsdGlDaGVja0JveE9uY2xpY2socm93SW5mbzogYW55KSB7XHJcbiAgICBpZiAocm93SW5mbykge1xyXG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XHJcbiAgICB0aGlzLmRyb3BEb3duRmlsdGVyID0geyBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50LCBjb2x1bW46IGNvbHVtbiB9O1xyXG4gICAgaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb29rdXBDbGVhclZhbHVlKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcclxuICAgIGlmIChyb3cpIHtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbHVtbi52YWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xyXG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcclxuICBjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcclxuICAgIGlmICh0aGlzLmVkaXRBbGxSZWNvcmQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiZcclxuICAgICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2hlY2tib3gnICYmIGNvbHVtbi5maWx0ZXJpbmcgIT0gZmFsc2VcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAgIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXHJcbiAgICBzZXRIZWFkZXJDaGVja0JveFZhbHVlKHZhbHVlOiBhbnkpe1xyXG4gICAgICB0aGlzLmlzSW5jbHVkZWRBbGxDb2x1bW5zLmVtaXQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgLy8gc2V0IGNhbGVuZGVyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxyXG4gIGNhbGVuZGVySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XHJcbiAgICAgIGlmKCB5ZWFyICYmIHllYXIubGVuZ3RoID09PSA0KXtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0PSAnbW0vZGQveXknO1xyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XHJcbiAgICAgIH0gZWxzZSBpZih5ZWFyICYmIHllYXIubGVuZ3RoKXtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuIl19
2198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFHWixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEdBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQVNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysa0JBQWtCLEVBRWxCLGNBQWMsRUFFZCxlQUFlLEdBRWhCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssU0FBUyxNQUFNLHFD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S0FBSzswQkFHTCxLQUFLOzRCQUVMLEtBQUs7a0NBR0wsS0FBSzt5QkFHTCxNQUFNOzRCQUdOLE1BQU07MkJBR04sTUFBTTs2QkFHTixNQUFNO3FDQUdOLE1BQU07NEJBR04sTUFBTTttQ0FHTixNQUFNO3NDQUdOLE1BQU07MkJBS04sTUFBTTswQkFJTixNQUFNOzhCQUdOLE1BQU07MEJBR04sTUFBTTt1QkFHTixNQUFNOytCQUdOLE1BQU07MkJBR04sS0FBSzswQkFHTCxLQUFLOzBCQUVMLEtBQUs7NEJBR0wsTUFBTTsyQkFHTixNQUFNO2tDQTZCTixZQUFZLFNBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkNoYW5nZXMsXHJcbiAgT3B0aW9uYWwsXHJcbiAgRWxlbWVudFJlZixcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHtcclxuICBEeW5hbWljRGlhbG9nUmVmLFxyXG4gIER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgRGlhbG9nU2VydmljZSxcclxufSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IGpzUERGIGZyb20gJ2pzcGRmJztcclxuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIElHcmlkQ29sdW1uLFxyXG4gIElHcmlkU29ydCxcclxuICBJR3JpZFNlcnZlclNpZGVFdmVudCxcclxuICBJR3JpZFBhZ2luYXRpb25FdmVudCxcclxuICBJR2xvYmFsRmlsdGVyLFxyXG4gIElHcmlkRmlsdGVyLFxyXG4gIElHcmlkQ29sdW1uQWN0aW9uLFxyXG4gIElHcmlkUm93QWN0aW9uLFxyXG4gIEVHcmlkU2VsZWN0aW9uVHlwZSxcclxuICBFR3JpZENvbHVtblR5cGUsXHJcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxyXG4gIElHcmlkRGF0YUV4cG9ydCxcclxuICBFR3JpZEFnZ3JlZ2F0ZSxcclxuICBJTG9va3VwVmFsdWUsXHJcbiAgRUdyaWRGb3JtYXRUeXBlLFxyXG4gIElHcmlkRmlsdGVySW5mbyxcclxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XHJcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBFRm9ybWF0VHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUGFnZUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLWxvZ2dlci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2UtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dyaWQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZHJlbignZ3JpZFJvdycpIGdyaWRSb3c6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAT3V0cHV0KCkgaW5saW5lUm93Q2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIHNldCBhY3RpdmVUZXN0TW9kZSh2YWw6IGFueSkge1xyXG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICB9XHJcbiAgc2VydmVyRmlsdGVyczogSUdyaWRTZXJ2ZXJTaWRlRXZlbnQgPSB7fTtcclxuICByb3dzRGF0YTogYW55W107XHJcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xyXG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGlzQ29sdW1uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcm93Q2xpY2tEYXRhOiBJR3JpZENvbHVtbjtcclxuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xyXG4gIGxvb2t1cE9iamVjdDogSUxvb2t1cFZhbHVlO1xyXG4gIGxvb2t1cEZpbHRlck9iajogYW55O1xyXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdsb2JhbEZpbHRlcnNBcnJheTogYW55W10gPSBbXTtcclxuICBjaGVja0FjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhbGVuZGVyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XHJcbiAgZ3JpZEZpbHRlck9iajogSUdyaWRGaWx0ZXJJbmZvO1xyXG4gIGRlZmF1bHREYXRlOiBhbnk7XHJcbiAgZHJvcERvd25GaWx0ZXI6IGFueSA9IHt9O1xyXG4gIGRyb3Bkb3duSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhbmNlbEFsbFJlY29yZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhZGROZXdSb3dDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzYXZlUmVjb3JkQXJyYXk6IGFueVtdID0gW107XHJcbiAgZGlzYWJsZWRTYXZlQnRuOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZWRpdE1vZGVDaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICBlZGl0TW9kZXVuQ2tlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSAnbW0vZGQveSc7XHJcblxyXG4gIC8vIGFwcGx5IGNoZWNrZWQvdW5DaGVja2VkIHByb3AgZm9yIENoZWNrQm94IG9mIHRoZSBUYWJsZVxyXG4gIGNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpZGVFZGl0QWxsUm93c0J0bjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cclxuICBhZGRSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBkZWxldGVSb3dQZXJtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIEFwcGx5IHByb3Agc2V0QWdncmVnYXRlRm9vdGVyIG9uIEZvb3RlciBvZiB0aGUgVGFibGUgZm9yIGFnZ3JlZ2F0ZS5cclxuICBzZXRBZ2dyZWdhdGVGb290ZXI6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgSGlkZSBBZ2dyZWdhdGUgRm9vdGVyIFdoZW4gQWdncmVnYXRlIG5vdCBBcHBseSBvbiBUYWJsZS5cclxuICBhZ2dyZWdhdGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gTWFpbnRhaW5zIHByZXZpb3VzIHN0YXRlIG9mIHJvd3MgYmVpbmcgZWRpdGVkXHJcbiAgZWRpdFJvd3NSZWNvcmRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG4gIC8vIE1haW50YWlucyByZWNvcmQgb2Ygcm93cyBiZWluZyBlZGl0ZWRcclxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICBAVmlld0NoaWxkKCdkdCcpIHRhYmxlOiBUYWJsZTtcclxuXHJcbiAgLy8gU2VsZWN0cyBpdGVtcyBpbiB0aGUgZ3JpZCBiYXNlZCBvbiBwYXNzZWQgb24gZGF0YVxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogYW55ID0gW107XHJcblxyXG4gIHByaXZhdGUgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xyXG5cclxuICBzb3J0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gU3RvcmVzIHNlbGVjdGVkIGNvbHVtbnNcclxuICBwcml2YXRlIF9zZWxlY3RlZENvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGhvcml6b250YWwgU2Nyb2xsIG9uIFRhYmxlLlxyXG4gIEBJbnB1dCgpIGhvcml6b250YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gUHJvcCB0byBoYW5kbGUgbG9hZGVyIG9mIGdyaWRcclxuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvL3RoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBoYW5kbGUgc2VydmVyIHNpZGUgZXZlbnQgYnkgZGVmYXVsdCBpdCBpcyB0cnVlIHdoZW4gaXQgZmFsc2Ugc2VydmVyIHNpZGUgZXZlbnQgd2lsbCBub3QgYmUgY2FsbGVkXHJcbiAgQElucHV0KCkgYXV0b0xvYWREYXRhOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGNoZWNrIHdoZXJlIHNlbGVjdGVkIGlzIGFsbG93ZWQgb3Igbm90LlxyXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gIC8vIFNldCBjb2x1bW4gd2lkdGggb2Ygc2VsZWN0ZWQgcm93LlxyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBzdHJpbmcgPSAnODBweCc7XHJcbiAgXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGhpZGUgdGhlIGFkZCByb3cgYnV0dG9uLlxyXG4gIEBJbnB1dCgpIGhpZGVPblJvd0FkZEJ0biA9IGZhbHNlO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIHBkZi5cclxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvUGRmID0gZmFsc2U7XHJcblxyXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gZXhjZWwuXHJcbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb0V4Y2VsID0gZmFsc2U7XHJcbiAgXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIHNldCB0aGUgYWN0aW9uIGNvbHVtbiBhcyBmaXJzdCBjb2x1bW4uXHJcbiAgQElucHV0KCkgc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiB0cnVlLCBlbmFibGVzIG9wdGlvbnMgdG8gcGVyZm9ybSBDUlVEIHVzaW5nIGlubGluZSByb3cgZnVuY3Rpb25hbGl0eVxyXG4gIEBJbnB1dCgpIHVzZUlubGluZUNSVUQgPSBmYWxzZTtcclxuXHJcbiAgLy8gQXJyYXkgb2Ygcm93IGFjdGlvbnNcclxuICBASW5wdXQoKSByb3dBY3Rpb25zOiBJR3JpZFJvd0FjdGlvbltdID0gW107XHJcblxyXG4gIC8vIFNldHMgc2VsZWN0aW9uIHR5cGUgaS5lOiBzaW5nbGUvbXVsdGlwbGUgc2VsZWN0aW9uXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogRUdyaWRTZWxlY3Rpb25UeXBlID0gRUdyaWRTZWxlY3Rpb25UeXBlLlNJTkdMRTtcclxuXHJcbiAgLy8gVW5pcXVlIGtleSByZXF1aXJlcyBmb3IgYnVpbHQtaW4gcm93IHNlbGVjdGlvbiBvZiBwcmltZU5nIGdyaWRcclxuICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgPSAnaWQnO1xyXG5cclxuICAvLyBGbGFnIGZvciBjbGVhciBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxyXG4gIEBJbnB1dCgpIGNsZWFyR3JpZEZpbHRlciA9IHRydWU7XHJcblxyXG4gIC8vIEZsYWcgZm9yIHNlYXJjaCBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxyXG4gIEBJbnB1dCgpIHNlYXJjaEdyaWRGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAvLyBGbGFnIGluIGNhc2UgdGFibGUgaXMgc2Nyb2xsYWJsZVxyXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xyXG5cclxuICAvLyBTZXRzIHNjcm9sbCBoZWlnaHQgZm9yIHRoZSB0YWJsZVxyXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICc2ODBweCc7XHJcblxyXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyB0byB3cmFwIG9yIHVuV3JhcCB0aGUgZ3JpZC5cclxuICBASW5wdXQoKSB3b3JkV3JhcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBuZXdHcmlkUm93OiBhbnkgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgZmlsdGVyaW5nID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgcm93SG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgaGlkZUZpbHRlck9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gU2V0cyBwYWdlbmF0aW9uIGZvciB0aGUgdGFibGUgRGF0YS5cclxuICBASW5wdXQoKSBzZXRQYWdpbmF0aW9uTGVuZ3RoOiBhbnlbXSA9IFs1LCAxMCwgMTUsIHsgc2hvd0FsbDogJ0FsbCcgfV07XHJcblxyXG4gIC8vIHNldCB0aGUgY2hhbmdlIGluIHRoZSByb3dEYXRhXHJcbiAgQE91dHB1dCgpIHJvd3NDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBTdG9wcyB0aGUgbG9hZGVyIGFuZCBzZXRzIHRoZSBkYXRhIHRvIGdyaWRcclxuICAgKiBDbGVhcnMgdGhlIGVkaXRpbmcgc3RhY2tcclxuICAgKiBTY3JvbGxzIHRvIHNlbGVjdGVkIGVsZW1lbnQgaWYgc2VsZWN0aW9uIGZvdW5kXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHJvd3MoZGF0YTogYW55W10pIHtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmICghdGhpcy5kYXRhS2V5KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhS2V5ID0gJ2lkJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKGRhdGEsIHRoaXMuZGF0YUtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvd3NEYXRhID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xlYW5pbmcgdGhlIGVkaXRpbmcgc3RhY2tcclxuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcclxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzID0ge307XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkUm93cykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxyXG4gICAgICAgICAgKHgpID0+IHgubmF0aXZlRWxlbWVudC5pZCA9PT0gdGhpcy5zZWxlY3RlZFJvd3NbdGhpcy5kYXRhS2V5XVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXHJcbiAgICAgICAgICAoXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnRcclxuICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxyXG4gICAgdGhpcy5jaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBHbG9iYWwgZmlsdGVyIHNlcnZlciByZXF1ZXN0XHJcbiAgQElucHV0KCkgc2V0IGdsb2JhbEZpbHRlckRhdGEoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKSB7XHJcbiAgICB0aGlzLmdsb2JhbERhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlXHJcbiAgICAgIC5wcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzKVxyXG4gICAgICA/LmZpbHRlcigoeCkgPT4geD8udmFsdWUgIT09IGZhbHNlKTtcclxuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XHJcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzXHJcbiAgICAgID8gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMuY29uY2F0KHRoaXMuZ2xvYmFsRGF0YSlcclxuICAgICAgOiB0aGlzLmdsb2JhbERhdGE7XHJcblxyXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhcHBseUZpbHRlcicpID09PSAnZmFsc2UnKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk/Lmxlbmd0aCA+IDBcclxuICAgICAgICA/IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmNvbmNhdChbLi4uc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNdKVxyXG4gICAgICAgIDogdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXk7XHJcbiAgICB9XHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICd0cnVlJykge1xyXG4gICAgICBnbG9iYWxGaWx0ZXJzLmZvckVhY2goKGdsb2JhbEZpbHRlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZvckVhY2goKGZpbHRlckFycmF5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGZpbHRlckFycmF5LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiZcclxuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlICYmXHJcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlICE9PSBnbG9iYWxGaWx0ZXIudmFsdWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS52YWx1ZSA9IGdsb2JhbEZpbHRlci52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmICFnbG9iYWxGaWx0ZXIudmFsdWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZmluZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5zcGxpY2UoZmluZEluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0aGlzLmF1dG9Mb2FkRGF0YTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhKXtcclxuICAgICAgICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmNvbmNhdChcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gQXJyYXkuZnJvbShcclxuICAgICAgICAgIG5ldyBTZXQoXHJcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXHJcbiAgICAgICAgICAgICAgLnJldmVyc2UoKVxyXG4gICAgICAgICAgICAgIC5tYXAoKGZpbHRlcjogYW55KSA9PiBmaWx0ZXIuZmllbGQpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS5tYXAoKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maWx0ZXIoXHJcbiAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgIG9iaj8udmFsdWUgJiYgb2JqLnZhbHVlPy50b1N0cmluZygpPy5sZW5ndGggPiAwICYmIG9iai5maWVsZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCB8fCB0aGlzLmF1dG9Mb2FkRGF0YSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgYXMgZmlyc3RcclxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlID0gMTtcclxuICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5wYWdpbmF0aW9uKXsgXHJcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlU2l6ZSA9IHRoaXMuZGVmYXVsdFJvd3M7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIGlmKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCl7XHJcbiAgICAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXBwbHlGaWx0ZXInKTtcclxuICAgICAgICAgIC8vIHNldHRpbmcgcGFnaW5hdGlvbiBwYWdlIG51bWJlciBVSVxyXG4gICAgICAgICAgdGhpcy50YWJsZS5fZmlyc3QgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIElucHV0IGRlY29yYXRvciB0byByZWNlaXZlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlclxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBbXTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgdG9nZ2xpbmcgb2YgY29sdW1uc1xyXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uVG9nZ2xlID0gZmFsc2U7XHJcblxyXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGlkZSBmaWx0ZXJpbmcgb2YgY29sdW1uc1xyXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXIgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgbG9va3VwIGZpbHRlcnNcclxuICBASW5wdXQoKSBsb29rdXBGaWx0ZXJzID0gZmFsc2U7XHJcblxyXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHBhZ2luYXRpb25cclxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gZmFsc2U7XHJcblxyXG4gIC8vIE9wdGlvbmFsIHByb3AgdG8gaGFuZGxlIHNob3cgQ3VycmVudFBhZ2UgUmVwb3J0XHJcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlUmVwb3J0ID0gZmFsc2U7XHJcblxyXG4gIC8vIERpc3BsYXlzIHRvdGFsIG51bWJlciBvZiByZWNvcmRzXHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcclxuXHJcbiAgQElucHV0KCkgc2hvd2NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBTZXRzIG51bWJlciBvZiByb3dzIHRvIGJlIHNob3duIHRoZSBncmlkXHJcbiAgQElucHV0KCkgZGVmYXVsdFJvd3M6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uQWN0aW9uczogSUdyaWRDb2x1bW5BY3Rpb25bXSA9IFtdO1xyXG5cclxuICAvLyBEZWNpZGVzIHRoZSBncmlkJ3MgYmVoYXZpb3IgZWl0aGVyIGZvciBjbGllbnQgc2lkZSBvciBzZXJ2ZXIgc2lkZSBldmVudHNcclxuICBASW5wdXQoKSB1c2VTZXJ2ZXJTaWRlRXZlbnRzID0gZmFsc2U7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCB0byBoYW5kbGUgcm93IGNsaWNrXHJcbiAgQE91dHB1dCgpIG9uUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxyXG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcclxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxyXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XHJcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXHJcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxyXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFNlcnZlclNpZGVFdmVudD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBwYWdpbmF0aW9uXHJcbiAgQE91dHB1dCgpXHJcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xyXG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXHJcbiAgQE91dHB1dCgpIG9uQ2FuY2VsQWxsUm93cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xyXG4gIEBPdXRwdXQoKSBvblJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XHJcbiAgQE91dHB1dCgpIG9uUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XHJcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0FjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxyXG4gIEBJbnB1dCgpIGFsbG93Q2FjaGluZzogYm9vbGVhbjtcclxuXHJcbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICBASW5wdXQoKSBlZGl0QWxsUm93czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIEVkaXQgdGhlIHJvdyBvbiBHcmlkXHJcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gYWRkaW5nIHRoZSBuZXcgUm93IG9uIEdyaWRcclxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZlxyXG4gICkge31cclxuXHJcbiAgZ2V0IHNlbGVjdGVkQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYnJvd3NlciBjbG9zZSBldmVudFxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbJyRldmVudCddKVxyXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6YW55KSB7XHJcbiAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmVkaXRBbGxSb3dzKXtcclxuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXHJcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgIGxldCB0b3RhbEZpZWxkczogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IGNvbHVtbi5wZXJtaXNzaW9ucztcclxuICAgICAgICAvLyBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnM7XHJcbiAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gICBsZXQgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICAgICAgIC8vICAgKTtcclxuICAgICAgICAgICAgICAgIC8vICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxyXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0b3RhbEZpZWxkcysrO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikge1xyXG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxyXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xyXG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxyXG4gICAgICBsZXQgaGFzQ29sdW1uUGVybWlzc2lvbnMgPSB0aGlzLmNvbHVtbnM/LnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXHJcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkRFTEVURSAmJiAhaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nICE9PSBmYWxzZSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5hbGxvd0NhY2hpbmcgPSB0aGlzLnBhZ2luYXRpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSk7XHJcbiAgICB9XHJcbiAgICAvLyBhZGQgZGVmYXVsdFJvdyBpbiBwYWdpbmF0aW9uIGFycmF5XHJcbiAgICBpZiAoIXRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC5pbmNsdWRlcyh0aGlzLmRlZmF1bHRSb3dzKSkge1xyXG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25MZW5ndGgudW5zaGlmdCh0aGlzLmRlZmF1bHRSb3dzKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc0NvbHVtbnM6IGJvb2xlYW4gPSB0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDA7XHJcbiAgICBpZiAoaGFzQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xyXG5cclxuICAgIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcclxuICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcclxuICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChoYXNDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXHJcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gdGhlIGRhdGVcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIGNvbHVtbi50aW1lT25seSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXHJcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcclxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGZpbHRlciB2YWx1ZVxyXG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi52YWx1ZSAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhZGQgXCJmbGV4LXNocmluazogMFwiIGZvciBmbGV4LWJhc2lzIFN0eWxlXHJcbiAgICAgICAgaWYgKGNvbHVtbi5zdHlsZSAmJiBjb2x1bW4uc3R5bGUuaW5jbHVkZXMoJ2ZsZXgtYmFzaXMnKSkge1xyXG4gICAgICAgICAgbGV0IHN0eWxlID0gY29sdW1uLnN0eWxlICsgJyAhaW1wb3J0YW50OyBmbGV4LXNocmluazogMCAhaW1wb3J0YW50JztcclxuICAgICAgICAgIGNvbHVtbi5zdHlsZSA9IHN0eWxlLmluY2x1ZGVzKCc7OycpXHJcbiAgICAgICAgICAgID8gc3R5bGUucmVwbGFjZSgnOzsnLCAnOycpXHJcbiAgICAgICAgICAgIDogc3R5bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cclxuICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcclxuXHJcbiAgICAgICAgLy9BZ2dyZWdhdGUgc2NlbmFyaW9cclxuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XHJcbiAgICAgICAgaWYoIXRoaXMuc29mdENhY2hpbmcpe1xyXG4gICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmhpZGVGaWx0ZXIgJiZcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMgJiZcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycyAmJlxyXG4gICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHgudmFsdWUgJiYgeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgaWYoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicpe1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0gbmV3IERhdGUodGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ01NLWRkLVlZJykgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHgudmFsdWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29udmVydGluZyBkaXNwbGF5RmllbGQgdG9Mb3dlcmNhc2VcclxuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xyXG4gICAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IEF1dG9Db21wbGV0ZSBEYXRhXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEgJiZcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnLCcpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZF06IHZhbHVlIH0pKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcclxuICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZGlzcGxheUZpZWxkXTogcm93W2tleV0gfV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy93aGVuIHdlIGFkZCBhIG5ldyByb3csIGl0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmZpbmQoXHJcbiAgICAgICAgICAgICh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dba2V5XSA9IGNvbHVtbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gU2VhcmNoaW5nIHNjZW5hcmlvXHJcbiAgICAgIGlmIChjaGFuZ2Uucm93cz8uY3VycmVudFZhbHVlICYmIGNoYW5nZS5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAvLyBDaGVja3MgZWl0aGVyIGNvbHVtbiB2YWx1ZSBpcyBjaGFuZ2VzIChpLmUuLCBjb2x1bW4gaGlkZGVuIHNjZW5hcmlvKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZSkudG9Mb3dlckNhc2UoKSAhPT1cclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXguaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKHgsIGkpID0+IHtcclxuICAgICAgICAgIGlmICgheC5oaWRkZW4pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XHJcbiAgICAgICAgICAgICAgeC52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjbGFzc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZC1yb3cnKTtcclxuICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCl7IFxyXG4gICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xyXG4gICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xyXG4gICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXHJcbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxyXG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcclxuICAgICAgICBFR3JpZENvbHVtblR5cGUuSUZSQU1FXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XHJcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBjb2x1bW4uZGlzcGxheVRleHQuaW5jbHVkZXMoJ3snKSkge1xyXG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcclxuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcclxuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBjaGFuZ2Ugcm93IGtleSBhbmQgdmFsdWUgd2hlbiB1c2luZyBzZXRHcmlkUm93UHJvcFZhbHVlIGZ1bmN0aW9uXHJcbiAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XHJcbiAgICBPYmplY3Qua2V5cyhyb3dEYXRhKT8uZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByb3dEYXRhW3Jvd10gJiZcclxuICAgICAgICB0aGlzLnR5cGVPZihyb3dEYXRhW3Jvd10pID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgIHJvd0RhdGFbcm93XT8uYWN0aW9uPy5maWVsZFxyXG4gICAgICApIHtcclxuICAgICAgICBpZihyb3dEYXRhW3Jvd10/LmV4dHJhRmllbGQpe1xyXG4gICAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93RGF0YVtyb3ddID0gcm93RGF0YVtyb3ddPy50ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW46IGFueSkge1xyXG4gICAgbGV0IGRpZ2l0SW5mbyA9ICcyJztcclxuICAgIGlmKGNvbHVtbj8uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pe1xyXG4gICAgICBkaWdpdEluZm8gPSAnMCdcclxuICAgIH1lbHNlIGlmKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pe1xyXG4gICAgICAgIGRpZ2l0SW5mbyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlnaXRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxyXG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcclxuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxyXG4gICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IG51bGwpIFxyXG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV0/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgIGxldCBkaWdpdHNJbmZvID0gZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0Py50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XHJcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcclxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxyXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRQYXJhbXM/LmN1cnJlbmN5ID8gZm9ybWF0UGFyYW1zLmN1cnJlbmN5IDogJ1VTRCcsXHJcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6ICcyJyxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcclxuICAgICAgICBpZighY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSl7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlKyclJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vQ2hhbmdlIGRyb3Bkb3duIHZsdWUgYmFzZWQgb24gb3B0aW9uIGxhYmVsIGFuZCBvcHRpb252YWx1ZVxyXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHNlbGVjdGVkUm93PzogYW55LCBjaGFuZ2U/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXkgPT09IGNvbHVtbi5maWVsZCkpIHtcclxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXHJcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uTGFiZWxcclxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZChcclxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHZhbHVlICYmIGVkaXRlZFJvdykge1xyXG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XHJcbiAgICAgICAgICB9ZWxzZSBpZih2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKXtcclxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxyXG4gIGNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxyXG4gICAgICB0aGlzLnJvd3NEYXRhICYmXHJcbiAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycpICYmXHJcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knIHx8XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdOJ1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9XHJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dEYXRhXHJcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XHJcbiAgICovXHJcbiAgaGFuZGxlUm93Q2xpY2socm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XHJcbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcclxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcclxuICAgKi9cclxuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcclxuICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKGV2ZW50Lm11bHRpc29ydG1ldGEgJiYgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlcikge1xyXG4gICAgICBzb3J0RGlyZWN0aW9uID1cclxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcclxuICAgICAgICAgID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQ1xyXG4gICAgICAgICAgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQztcclxuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcclxuICAgIH1cclxuICAgIGxldCBzb3J0czogSUdyaWRTb3J0ID0ge1xyXG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxyXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRUdyaWRTb3J0RGlyZWN0aW9uLFxyXG4gICAgICBwcmlvcml0eTogMCxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHNvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxyXG4gICAqL1xyXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFldmVudC5maWx0ZXJzW2ZpbHRlci5maWVsZF0/LnZhbHVlKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcclxuICAgKiBAcGFyYW0gY29sdW1uQWN0aW9uIDogSUdyaWRDb2x1bW5BY3Rpb25cclxuICAgKiBAcGFyYW0gcm93IDogYW55XHJcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XHJcbiAgICogQ2FsbGJhY2tzIHRoZSByb3cgZGF0YSB0byBwYXJlbnRcclxuICAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogaW52b2tlIG9uQ2xpY2sgZXZlbnQgJiBvcGVuIElmcmFtZSBpbiBncmlkXHJcbiAgICovXHJcbiAgZ3JpZElGcmFtZShjb2x1bW46IGFueSwgcm93czogYW55LCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xyXG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XHJcbiAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcclxuICAgICAgd2lkdGg6ICc4MCUnLFxyXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdmFsdWU6IHJvd3MsXHJcbiAgICAgICAgaUZyYW1lSWQ6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IGNvbHVtbi5maWVsZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XHJcbiAgICBpZihjb21wb25lbnROYW1lKXtcclxuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4uZmlsdGVyICYmXHJcbiAgICAgICAgY29sdW1uLmNvbXBvbmVudCAmJlxyXG4gICAgICAgIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoYWRkUm93KSB7XHJcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhWzBdW2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSA9IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xyXG4gICAgdGhpcy5kcm9wZG93bklucHV0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIERpYWxvZyBpbiBncmlkXHJcbiAgICovXHJcbiAgb3BlbkdyaWREaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcclxuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZihjb2x1bW4uZGF0YSAmJiBjb2x1bW4uZGF0YS5kYXRhKXtcclxuICAgICAgICBjb2x1bW4uZGF0YS5kYXRhID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEgPz8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi5jb21wb25lbnQgJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5yb3dDbGlja0RhdGEpIHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5yb3dDbGlja0RhdGEpO1xyXG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoXHJcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhLFxyXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIGNvbHVtbi5kYXRhKTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcclxuICAgICAgICBpZihjb21wb25lbnROYW1lKXtcclxuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhICYmIGNvbHVtbi5vblJldHVybikge1xyXG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZGF0YSwgdGhpcy5yb3dDbGlja0RhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmKGNvbHVtbi5vbkNoYW5nZSl7XHJcbiAgICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGJyb3dzZXJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2Upe1xyXG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTphbnkpe1xyXG4gICAgaWYoc2VsZWN0ZWRWYWx1ZSAmJiBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1Qpe1xyXG4gICAgICBpZihzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGVkVmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpe1xyXG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKT0+IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSB2YWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsKT8udG9TdHJpbmcoKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pPT4gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpID09PSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpKT8ubGFiZWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXHJcbiAgICovXHJcbiAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XHJcbiAgICBsZXQgdmFsdWU6YW55O1xyXG4gICAgaWYoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpe1xyXG4gICAgICBsZXQgbmV3VmFsdWU6YW55O1xyXG4gICAgICBpZih0eXBlb2Yocm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24pe1xyXG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXT8udGV4dFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKG5ld1ZhbHVlKXtcclxuICAgICAgICBpZihjb2x1bW4udGltZU9ubHkpe1xyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnNldFRpbWVGb3JtYXQobmV3VmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZm9ybWF0ID0gJyc7XHJcbiAgICAgICAgICBpZihjb2x1bW4uZm9ybWF0KXtcclxuICAgICAgICAgICAgaWYoY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURSl7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5JztcclxuICAgICAgICAgICAgfWVsc2UgaWYoY29sdW1uLmZvcm1hdCA9PT0gRUdyaWRGb3JtYXRUeXBlLlNIT1JUREFURSl7XHJcbiAgICAgICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ld1ZhbHVlPy50b1N0cmluZygpID09PSBcIkludmFsaWQgRGF0ZVwiID8gbnVsbCA6IG5ld1ZhbHVlLCBmb3JtYXQgPyBmb3JtYXQgOiAnTU0vZGQveXknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcclxuICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGxcclxuICAgICAgPyAnJ1xyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxyXG4gICAgICA/IGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyA/IFxyXG4gICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dC50b1N0cmluZygpLmluY2x1ZGVzKCdQTScpKSA/IFxyXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCAnaGg6bW0gYScpXHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcclxuICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH1cclxuICAgXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KXtcclxuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xyXG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cclxuICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXHJcbiAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBEZWxldGUgQ29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIGNsaWNrIG9uIGRlbGV0ZSBpY29uIGluIEFjdGlvbiBjb2x1bW5cclxuICAgKi9cclxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogRXZlbnQsIGNvbHVtbkFjdGlvbjogSUdyaWRDb2x1bW5BY3Rpb24sIHJvdzogYW55KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChjb2x1bW5BY3Rpb24udG9vbHRpcC50b0xvd2VyQ2FzZSgpID09PSAnZGVsZXRlJykge1xyXG4gICAgICBpZiAoY29sdW1uQWN0aW9uLmNvbmZpcm1EaWFsb2cgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXHJcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcclxuICAgICAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXHJcbiAgICAgICAgICBrZXk6ICdoYW5kbGVjb2x1bW5BY3Rpb25zJyxcclxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZWplY3Q6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2x1bW5BY3Rpb24ub25DbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgOiBMYXp5TG9hZEV2ZW50XHJcbiAgICogVHJpZ2dlcnMgZXZlcnl0aW1lIGEgc2VydmVyIHNpZGUgZmlsdGVyIGlzIHRyaWdnZXJcclxuICAgKi9cclxuICBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKGV2ZW50OiBhbnkpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChldmVudC5maWx0ZXJzW3guZmllbGRdKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LmZpbHRlcnNbeC5maWVsZF0udmFsdWUgPSB4LnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgIFxyXG4gICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hdXRvTG9hZERhdGE7XHJcbiAgICB0aGlzLnNlcnZlckZpbHRlcnMgPSB7XHJcbiAgICAgIGZpbHRlcnM6IHRoaXMubG9va3VwRmlsdGVyc1xyXG4gICAgICAgID8gdGhpcy5ncmlkU2VydmljZS5nZXRHcmlkRmlsdGVycyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpXHJcbiAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnByZXBhcmVCYXNpY0ZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSxcclxuICAgICAgc29ydHM6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFNvcnRzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXHJcbiAgICAgIC4uLih0aGlzLnBhZ2luYXRpb24gJiYge1xyXG4gICAgICAgIHBhZ2U6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQpLFxyXG4gICAgICAgIHBhZ2VTaXplOiBldmVudC5yb3dzIHx8IDEwLFxyXG4gICAgICB9KSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMgJiZcclxuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgKHRoaXMuYWxsb3dDYWNoaW5nIHx8IHRoaXMuc29mdENhY2hpbmcpXHJcbiAgICApIHtcclxuICAgICAgaWYoIXRoaXMuc29mdENhY2hpbmcpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpLEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t1dGlsaXRpZXMuY3VycmVudFVybCgpXSA9IHRoaXMuc2VydmVyRmlsdGVycztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlcnZlckZpbHRlclZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZXJ2ZXJGaWx0ZXJzKSk7XHJcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9ICh0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycyB8fCBbXSkuY29uY2F0KFxyXG4gICAgICB0aGlzLmdsb2JhbERhdGFcclxuICAgICk7XHJcbiAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoc2VydmVyRmlsdGVyVmFsdWVzKTtcclxuICAgIH0sIDk1MCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKiBQYXNzZXMgYXBwbGllZCBwYWdpbmF0aW9uIHRvIHBhcmVudCBvbiBwYWdlIGNoYW5nZVxyXG4gICAqL1xyXG4gIGhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5vblJvd0NoZWNrQm94LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8vIHNldCB0aW1lIGZvcm1hdFxyXG4gIHNldFRpbWVGb3JtYXQoZGF0ZTogYW55KSB7XHJcbiAgICBsZXQgdmFsdWU6IGFueSA9ICcnO1xyXG4gICAgaWYgKGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgZGF0ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkge1xyXG4gICAgICB2YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGRhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy9vcGVuIGh5cGVybGluayBpbiBlZGl0IGNhc2VcclxuICBvcGVuTGluayh1cmw6IGFueSkge1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcclxuICAgICAgbGluay5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF0sXHJcbiAgICAgICAgY29sdW1uLmZvcm1hdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsdWUgPSBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIFNldHMgdmFsdWVzIHRvIGVkaXRhYmxlIHJvd1xyXG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxyXG4gICAqIFJvdyBkYXRhS2V5IGlzIHByZXNlcnZlZCB0byBrZWVwIHRoZSByb3cgdW5pcXVlIGFuZCBpbiBlZGl0YWJsZSBzdGF0ZSBhcyBsb25nIGFzIG5vdCBzYXZlZFxyXG4gICAqL1xyXG5cclxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XHJcbiAgICBsZXQgc2VsZWN0ZWRSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2wsIHJvdywga2V5KTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRoZSBhdXRvQ29tcGxldGUgVmFsdWUgaW4gZWRpdCBtb2RlXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUubWFwKCh4OiBhbnkpID0+IHhbY29sLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XHJcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3VmFsdWVcclxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXHJcbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgPy5tYXAoKHg6IGFueSkgPT4gKHsgW2NvbC5kaXNwbGF5RmllbGRdOiB4IH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBsb29rdXAgY29udHJvbCBmaWVsZCBiYXNlZCBvbiBkaXNwbGF5IGZpZWxkLlxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2wuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSBrZXkpIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgdGV4dDogcm93W2NvbC5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sLmZpZWxkXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgICBsZXQgb3B0aW9uID0gY29sPy5kYXRhPy5maW5kKFxyXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWU/LmFjdGlvbiA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcclxuICAgICAgICAgIGlmIChyb3dbY29sLmZpZWxkXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZihyb3dba2V5XT8uYWN0aW9uICYmIE9iamVjdC5rZXlzKHJvd1trZXldPy5hY3Rpb24pPy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICByb3dba2V5XS50ZXh0ID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gY2hlY2sgdGhlIE1pbnV0ZXMgcGF0dGVyblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcclxuICAgICAgICAgICAgY29sLm1pbnV0ZXNJbnRlcnZhbCAmJlxyXG4gICAgICAgICAgICByb3dba2V5XVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSByb3dbY29sLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHsgLi4ucm93IH07XHJcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IHRydWU7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5vbkdyaWRSb3dFZGl0LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGRyb3Bkb3duIGZpbHRlciB2YWx1ZVxyXG4gICAqL1xyXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sLmRyb3BEb3duUHJvcCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhjb2wpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBrZXkpKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XHJcbiAgICAgICAgbGV0IG5ld0ZpbHRlcnM6IGFueSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAob2JqLmZpbHRlcnMgJiYgb2JqLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgb2JqLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBtYXRjaEtleTogc3RyaW5nID0gJyc7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlPy5pbmNsdWRlcygneycpICYmXHJcbiAgICAgICAgICAgICAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT1cclxuICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hLZXkgPSBrZXk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaEtleTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcclxuICAgICAgICAgICAgICBuZXdGaWx0ZXIudmFsdWUgPSByb3dbZmlsdGVyS2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zZXREcm9wZG93bkRhdGEoXHJcbiAgICAgICAgICBjb2wsXHJcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxyXG4gICAgICAgICAgb2JqLnZhbHVlUHJvcCxcclxuICAgICAgICAgIG9iai5sYWJlbFByb3AsXHJcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxyXG4gICAgICAgICAgcm93XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbiA9IGNvbC5kYXRhLmZpbmQoXHJcbiAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG9wdGlvbikge1xyXG4gICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBQYXNzZXMgdGhlIGVkaXRlZCBvciBuZXdseSBjcmVhdGVkIGRhdGEgdG8gcGFyZW50XHJcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxyXG4gICAqL1xyXG4gIG9uUm93RWRpdFNhdmUoc2VsZWN0ZWRSb3c6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICctZGF0YSddO1xyXG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxyXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcclxuICAgICAgICB0aGlzLmxvb2t1cE9iamVjdFxyXG4gICAgICApIHtcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5sb29rdXBPYmplY3QudmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnY2hhcicpIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnWScgOiAnTic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09IHRydWUgPyAnMScgOiAnMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiggY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpe1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICdoaDptbSBhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpe1xyXG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCAmJiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxyXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBhcnI6IGFueSA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcclxuICAgICAgICAgICAgYXJyLnB1c2gocm93W2NvbHVtbi5kaXNwbGF5RmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXJyLnRvU3RyaW5nKCk/LnJlcGxhY2VBbGwoJywnLCAnOycpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XHJcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XHJcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5sb29rdXBPYmplY3QgJiYgdGhpcy5sb29rdXBPYmplY3QuZmllbGQpIHtcclxuICAgICAgICByb3dbdGhpcy5sb29rdXBPYmplY3QuZmllbGRdID0gdGhpcy5sb29rdXBPYmplY3QudmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGtleS5pbmNsdWRlcygnX29iaicpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICByb3cgPSB7IC4uLnJvdywgW2tleS5zcGxpdCgnXycpWzBdXTogcm93W2tleV0uZGlzcGxheVRleHQgfTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSByb3dba2V5XTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBvYmogJiZcclxuICAgICAgICAgIChvYmoudHlwZSA9PT0gJ2xpbmsnIHx8XHJcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnaWZyYW1lJyB8fFxyXG4gICAgICAgICAgICBvYmoudHlwZSA9PT0gJ2RpYWxvZycpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmVsXHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2V0Um93VmFsdWUocm93KTtcclxuICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJlxyXG4gICAgICAgIGNvbHVtbi5maWVsZCAmJlxyXG4gICAgICAgIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcclxuICAgICAgICBuZXdSb3dbY29sdW1uLmZpZWxkXSA9IG5ld1Jvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcclxuICAgICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpICYmXHJcbiAgICAgICAgKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sdW1uLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0sXHJcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBkaWdpdHNJbmZvID0gJy4wMCc7XHJcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgICAgICAgIGNvbnN0IGZyYWNEaWdpdHMgPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcclxuICAgICAgICAgICAgICB6ZXJvID0gemVybyArICcwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICByb3cuaXNOZXcgJiZcclxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcclxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xyXG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcclxuICAgICAgaWYgKHJvdy5pc05ldykge1xyXG4gICAgICAgIGNvbnN0IHsgaXNOZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xyXG4gICAgICAgIGRlbGV0ZSBuZXdSb3dPYmpbdGhpcy5kYXRhS2V5XTtcclxuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheS5wdXNoKG5ld1Jvd09iaik7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLm9uUm93QWRkLmVtaXQobmV3Um93T2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xyXG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdGhpcy5lZGl0QWxsUm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxyXG4gICAgaWYoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpPT4gIXZhbHVlKSl7XHJcbiAgICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgICAgIHRoaXMuaGlkZUVkaXRBbGxSb3dzQnRuID0gdHJ1ZTtcclxuICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAvLyBjb252ZXJ0IGRhdGUgaW50byB0aW1lXHJcbiAgICAgIGlmIChcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXHJcbiAgICAgICAgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpIHx8XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcclxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcclxuICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxyXG4gIGdyaWRWYWxpZGF0aW9uKGNvbHVtbnM6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KGNvbHVtbnMsIHJvdykpIHtcclxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXHJcbiAgICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uZXJyb3JNZXNzYWdlICYmICFyb3dbY29sdW1uLmZpZWxkXVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgJ1JlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZycsXHJcbiAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcignU29tZSBmaWVsZHMgYXJlIGludmFsaWQnLCAnSU5WQUxJRCBGSUVMRCcpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93IDogYW55XHJcbiAgICogQHBhcmFtIGluZGV4IDogbnVtYmVyXHJcbiAgICogQ2xlYXJzIG91dCB0aGUgZWRpdCByb3cgYW5kIHJlcGxhY2Ugd2l0aCByZWFkYWJsZSBvbmVcclxuICAgKi9cclxuICBvblJvd0VkaXRDYW5jZWwocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChyb3cuaXNOZXcpIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF0gPSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV07XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgIGlmKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKT0+ICF2YWx1ZSkpe1xyXG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xyXG4gICB9ICBcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIFNlbmRzIHRoZSByb3cgcGF5bG9hZCB0byBwYXJlbnQgZm9yIGRlbGV0aW9uXHJcbiAgICovXHJcblxyXG4gICAvKipcclxuICAgKnNldCB0aGUgZ3JpZERhdGEgb24gcm93IGFjdGlvbnMgZXZlbnRzXHJcbiAgICovXHJcbiAgIHJvd0FjdGlvbkV2ZW50cyhyb3dJbmZvLCBkZWxldGVSb3c6IGJvb2xlYW4gPSBmYWxzZSl7XHJcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBncmlkUm93c0RhdGE6IGFueVtdID0gWy4uLnRoaXMucm93c0RhdGFdO1xyXG4gICAgY29uc3QgaW5kZXggPSBncmlkUm93c0RhdGEuZmluZEluZGV4KChyb3dEYXRhKT0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcclxuICAgIGlmKGluZGV4ID4gLTEpe1xyXG4gICAgICBpZihkZWxldGVSb3cpeyBcclxuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLmdyaWRSb3dzRGF0YV07XHJcbiAgICAgICAgYWN0aW9uID0gJ2RlbGV0ZSc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYodGhpcy5hZGROZXdSb3dDaGVjayl7XHJcbiAgICAgICAgICBhY3Rpb24gPSAnaW5zZXJ0JztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGFjdGlvbiA9ICd1cGRhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgaWYodGhpcy5vbkdyaWRSb3dBY3Rpb25zLm9ic2VydmVycy5sZW5ndGggIT09IDApe1xyXG4gICAgICAgIHJvd0luZm9bJ3Jvd0FjdGlvbiddPSBhY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xyXG4gIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIERlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSByb3dcclxuICAgKi9cclxuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxyXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcclxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcclxuICAgICAga2V5OiAnaGFuZGxlSW5saW5lQ1JVRCcsXHJcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCB0aGUgZ3JpZCBkZWxldGVkIGRhdGEgXHJcbiAgICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMocm93LCB0cnVlKTtcclxuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgcmVqZWN0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxyXG4gICAqL1xyXG4gIGFsbG93RGlzYWJsZWQoY29sdW1uOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbiAmJlxyXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGRdLmFjdGlvbik/LmluY2x1ZGVzKCdkaXNhYmxlZCcpICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc2FibGVkID09PSB0cnVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzYWJsZWQgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSkge1xyXG4gICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXHJcbiAgICovXHJcbiAgc2V0QWdncmVnYXRlVGV4dChjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcclxuICAgICAgY29sdW1uLmFnZ3JlZ2F0ZS5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XHJcbiAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQ09VTlQpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIGNvdW50LCAnQ291bnQnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSB8fFxyXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzOiBudW1iZXJbXSA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbik7XHJcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBzdW0gPSBjb2xWYWx1ZXMucmVkdWNlKChhY2MsIGN1cikgPT4gYWNjICsgY3VyLCAwKTtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XHJcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgc3VtLCAnU3VtJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdmVyYWdlID0gc3VtIC8gY29sVmFsdWVzLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChcclxuICAgICAgICAgICAgICAgICAgY29sLFxyXG4gICAgICAgICAgICAgICAgICBhdmVyYWdlLFxyXG4gICAgICAgICAgICAgICAgICAnQXZnJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXHJcbiAgICovXHJcbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xyXG4gICAgY29uc3QgaXNEZWNpbWFsRm9ybWF0OiBib29sZWFuID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xyXG4gICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbi5mb3JtYXQ/LmRpZ2l0c0luZm87XHJcbiAgICBjb25zdCBjYXB0aW9uOiBzdHJpbmcgPVxyXG4gICAgICBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XHJcblxyXG4gICAgY29uc3QgZGVjaW1hbFBvaW50ID0gaXNEZWNpbWFsRm9ybWF0XHJcbiAgICAgID8gdmFsdWU/LnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAyKVxyXG4gICAgICA6IHZhbHVlPy50b0ZpeGVkKDApO1xyXG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50XHJcbiAgICAgIC50b1N0cmluZygpXHJcbiAgICAgIC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpfSA8L2JyPmA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZXQgZGVjaW1hdCBhbmQgbnVtZXJpYyB2YWx1ZXNcclxuICAgKi9cclxuICBzZXROdW1lcmljVmFsdWVzKCkge1xyXG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcclxuICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcclxuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChyb3dbY29sdW1uLmZpZWxkXSAvIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xyXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnKSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KHJvd1tjb2x1bW4uZmllbGRdKS50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBjb2x1bW4gdmFsdWUgYmFzZWQgb24gY29sdW1uIGZpZWxkXHJcbiAgICovXHJcbiAgZ2V0Q29sdW1uVmFsdWVzKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcclxuICAgIGxldCBhcnI6IGFueSA9IFtdO1xyXG4gICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xyXG4gICAgICBrZXlzLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0ga2V5KSB7XHJcbiAgICAgICAgICBhcnIucHVzaChyb3dba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFycjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogRXhwb3J0IHRvIFBERlxyXG4gICAqL1xyXG4gIGV4cG9ydFBkZigpIHtcclxuICAgIHZhciBleHBvcnREYXRhID0gdGhpcy5zZXRFeHBvcnREYXRhKFsuLi50aGlzLnJvd3NEYXRhXSwgdHJ1ZSk7XHJcbiAgICBsZXQgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jyk7XHJcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xyXG4gICAgZG9jLnNhdmUoJ0V4cG9ydC5wZGYnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqICBTdWItZnVuY3Rpb24gdG8gc2V0IHJvd3MgZm9yIGV4cG9ydCB0byBQZGYsIGFuZCBFeGNlbFxyXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXHJcbiAgICogQGlzRXhjZWwgcGFyYW0gZm9yIGV4cG9ydCB0byBleGNlbCBpbmRpY2F0aW9uXHJcbiAgICovXHJcbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcclxuICAgIGNvbnN0IGhlYWRpbmdzOiBhbnkgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZCk7XHJcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xyXG4gICAgICAgIGlmICghaGVhZGluZ3MuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgIGRlbGV0ZSByb3dbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1BkZikge1xyXG4gICAgICAgICAgcm93W3Byb3BdID1cclxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcclxuICAgICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgICAgOiByb3dbcHJvcF0udG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogRXhwb3J0IHRvIEV4Y2VsXHJcbiAgICovXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgZXhwb3J0RGF0YTogYW55ID0gdGhpcy5leHBvcnREYXRhVG9FeGNlbCgpO1xyXG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xyXG4gICAgICBjb25zdCB3b3Jrc2hlZXQ6IFdvcmtTaGVldCA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldChleHBvcnREYXRhKTtcclxuXHJcbiAgICAgIGxldCByb3dJbmRleCA9IDA7XHJcbiAgICAgIGV4cG9ydERhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgY29sSW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWU6IHN0cmluZyA9IHJvd1tjb2wuaGVhZGVyXTtcclxuICAgICAgICAgIGlmIChjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbGlua1RleHQ6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzBdO1xyXG4gICAgICAgICAgICBsZXQgbGlua1VybDogc3RyaW5nID0gY2VsbFZhbHVlLnNwbGl0KCd8JylbMV07XHJcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xyXG4gICAgICAgICAgICAgIGlmICghbGlua1VybC5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgICAgICAgIGxpbmtVcmwgPSAnLycgKyBsaW5rVXJsO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGlua1VybCA9XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgK1xyXG4gICAgICAgICAgICAgICAgJy8vJyArXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xyXG4gICAgICAgICAgICAgICAgbGlua1VybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY2VsbEFkZHJlc3MgPSB4bHN4LnV0aWxzLmVuY29kZV9jZWxsKHtcclxuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcclxuICAgICAgICAgICAgICByOiByb3dJbmRleCArIDEsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgd29ya3NoZWV0W2NlbGxBZGRyZXNzXSA9IHtcclxuICAgICAgICAgICAgICBmOiBgPUhZUEVSTElOSyhcIiR7bGlua1VybH1cIiwgXCIke2xpbmtUZXh0fVwiKWAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29sSW5kZXgrKztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcm93SW5kZXgrKztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcclxuICAgICAgICBTaGVldHM6IHsgc2hlZXQxOiB3b3Jrc2hlZXQgfSxcclxuICAgICAgICBTaGVldE5hbWVzOiBbJ3NoZWV0MSddLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0geGxzeC53cml0ZSh3b3JrYm9vaywge1xyXG4gICAgICAgIGJvb2tUeXBlOiAneGxzeCcsXHJcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCAnRXhwb3J0Lnhsc3gnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RGF0YVRvRXhjZWwoKSB7XHJcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcclxuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEhlYWRlciA9IGNvbHVtbi5oZWFkZXI7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xyXG4gICAgICAgICAgY29uc3QgbGlua09iaiA9IHJvd1tjb2x1bW4uZGlzcGxheVRleHQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xyXG4gICAgICAgICAgb2JqW2dyaWRIZWFkZXJdID0gcm93W2NvbHVtbi5maWVsZF0gKyAnfCcgKyBsaW5rT2JqPy5oeXBlcmxpbms7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBhcnIucHVzaChvYmopO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYXJyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXHJcbiAgICovXHJcbiAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpbXBvcnQoJ2ZpbGUtc2F2ZXInKS50aGVuKChGaWxlU2F2ZXIpID0+IHtcclxuICAgICAgbGV0IEVYQ0VMX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcclxuICAgICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IEVYQ0VMX1RZUEUgfSk7XHJcbiAgICAgIHNhdmVBcyhkYXRhLCBmaWxlTmFtZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqc2V0IGNvbmZpZyBkYXRhIG9mIGxvb2t1cCBjb250cm9sIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3c6IGFueSwgY29sdW1uOiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXS50ZXh0O1xyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xyXG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmZpZWxkICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcclxuICAgICAgbmV3Um93W2NvbHVtbi5maWVsZF0gPSBuZXdSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XHJcbiAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGRhdGEpIHtcclxuICAgICAgbGV0IG9iaiA9IHV0aWxpdGllcy5hdXRvU2V0TG9va3VwRGF0YShkYXRhLCByb3cpO1xyXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10gPSBvYmo7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByb3dEYXRhOiByb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ10sXHJcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxyXG4gICAgICBjb2x1bW46IGNvbHVtbixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIGxpbmsgb24gbG9va3VwQ29udHJvbCBjb250cm9sIGluIHJlYWQgb25seSBtb2RlIHdoZW4gZWRpdExpbmsgc2V0IHRydWVcclxuICAgKi9cclxuICBvcGVuTG9va3VwSHlwZXJsaW5rKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XHJcbiAgICBpZiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlICYmIGNvbHVtbi5jb21wb25lbnQpIHtcclxuICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcocm93LCBjb2x1bW4sIGNvbHVtbi5kYXRhPy5kYXRhKTtcclxuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmopO1xyXG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XHJcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBsb29rdXAgRGlhbG9nXHJcbiAgICovXHJcbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgY29sdW1uRGF0YSA9IGNvbHVtbi5jb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGEgPyAgY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGFcclxuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIHtcclxuICAgICAgLi4uY29sdW1uRGF0YSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHNlbGVjdGlvbjogY29sdW1uLnNlbGVjdGlvbixcclxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcclxuICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlRmllbGQsXHJcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xyXG4gICAgaWYoY29tcG9uZW50TmFtZSl7XHJcbiAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLCBjb21wb25lbnROYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZWY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXHJcbiAgICovXHJcbiAgc2VsZWN0TG9va3VwRmllbGQoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xyXG4gICAgdGhpcy5sb29rdXBPYmplY3QgPSB7IHRleHQ6ICcnLCB2YWx1ZTogJycsIGZpZWxkOiAnJyB9O1xyXG4gICAgaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKFxyXG4gICAgICAgIHJvdyxcclxuICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YT8uZGF0YVxyXG4gICAgICApO1xyXG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50O1xyXG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxyXG4gICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcclxuICAgICAgICAgICAgICByZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLmxvb2t1cE9iamVjdCA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWVbJ2ZpZWxkJ10gPSBjb2x1bW4uZmllbGQ7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJlc1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAhPT0gb2JqLnNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgICAgICAgICBpZihjb2x1bW4ub25DaGFuZ2Upe1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoeyBlcnJvciB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RmlsdGVyTG9va3VwKGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBjYWxlbmRlciB2YWx1ZSBpcyBjaGFuZ2VkIG9yIG5vdFxyXG4gIGNhbGVuZGVyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXHJcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0nKSAhPT1cclxuICAgICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSwgJ2hoOm1tJylcclxuICAgICkge1xyXG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjb2x1bW4uc2hvd1RpbWUgJiZcclxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XHJcbiAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkIGhoOm1tJylcclxuICAgICkge1xyXG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cclxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkJylcclxuICAgICkge1xyXG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZih2YWx1ZUNoYW5nZSl7XHJcbiAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICAgIGlmKGNvbHVtbi5vbkNoYW5nZSl7XHJcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShbY29sdW1uXSwgcm93KTtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcclxuICAgICAgdGhpcy5jYWxlbmRlckNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIH1cclxuICAgIGlmIChjb2x1bW4ub25Gb2N1c091dCkge1xyXG4gICAgICBjb2x1bW4ub25Gb2N1c091dChyb3cpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY29sdW1uLm9uUmV0dXJuICYmXHJcbiAgICAgIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUXHJcbiAgICApIHtcclxuICAgICAgY29sdW1uLm9uUmV0dXJuKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJGb2N1c091dChjb2w6IGFueSwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSkge1xyXG4gICAgdGhpcy5ncmlkRmlsdGVyT2JqID0geyBjb2x1bW46IGNvbCwgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCB9O1xyXG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xyXG4gICAgLy9jaGFuZ2UgZmlsdGVyIGNhbGVuZGVyIGZvcm1hdFxyXG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSAnZGF0ZScgJiYgbmV3Q29sdW1uLnZhbHVlKSB7XHJcbiAgICAgIG5ld0NvbHVtbi52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgIGNvbC52YWx1ZS50b1N0cmluZygpLnRyaW0oKSxcclxuICAgICAgICAneXl5eS1NTS1kZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlck9iaihuZXdDb2x1bW4pO1xyXG4gICAgICB9LFxyXG4gICAgICBuZXdDb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCA/IDI1MCA6IDBcclxuICAgICk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyT2JqKGNvbDogYW55KSB7XHJcbiAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgIGZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgIG1hdGNoTW9kZTogY29sLm1hdGNoTW9kZSA/IGNvbC5tYXRjaE1vZGUgOiAnc3RhcnRzV2l0aCcsXHJcbiAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IgPyBjb2wub3BlcmF0b3IgOiAnYW5kJyxcclxuICAgICAgdGFibGVBbGlhczogY29sLnRhYmxlQWxpYXMgPyBjb2wudGFibGVBbGlhcyA6ICcnLFxyXG4gICAgICB2YWx1ZTogY29sLnZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnB1c2gob2JqKTtcclxuICB9XHJcblxyXG4gIGFwcGx5RW50ZXJFdmVudChmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XHJcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XHJcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xyXG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcclxuICAgICAgdGhpcy5kcm9wRG93bkZpbHRlci5maWx0ZXIodGhpcy5kcm9wRG93bkZpbHRlci5ldmVudC50YXJnZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmlsdGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrc3BhY2VFdmVudChldmVudDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgIChjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAxIHx8XHJcbiAgICAgICAgY29sdW1uLnZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9PT0gbnVsbClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBhcnIgPSBbLi4udGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXldO1xyXG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xyXG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSBhcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cclxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxyXG4gICAgICBjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXHJcbiAgICApIHtcclxuICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XHJcbiAgICAgIGlmKCF0aGlzLnNvZnRDYWNoaW5nKXtcclxuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3V0aWxpdGllcy5jdXJyZW50VXJsKCldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWFyY2hGaWx0ZXJzICYmIHNlYXJjaEZpbHRlcnMuZmlsdGVycykge1xyXG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICBpZighdGhpcy5zb2Z0Q2FjaGluZyl7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSxKU09OLnN0cmluZ2lmeShzZWFyY2hGaWx0ZXJzKSk7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSBzZWFyY2hGaWx0ZXJzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxyXG4gIG9uQ2xpY2tCdXR0b24oY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcclxuICB9XHJcblxyXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxyXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgdGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICFyb3dbY29sdW1uLmZpZWxkXSAmJlxyXG4gICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiZcclxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXHJcbiAgICAgIGNvbHVtbi5taW51dGVzSW50ZXJ2YWxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcclxuICBzaG93T3B0aW9uKGNvbHVtbiwgcm93KXtcclxuICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgaWYodHlwZW9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJzdHJpbmdcIiAmJiAhcm93W2NvbHVtbi5maWVsZF0uaW5jbHVkZXMoJywnKSl7XHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xyXG4gICAgIH0gZWxzZSBpZihyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnLCcpKXtcclxuICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0uc3BsaXQoJywnKTtcclxuICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpe1xyXG4gICAgaWYoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XHJcbiAgb25DaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxyXG4gICAgdGhpcy5kaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tCb3hDaGFuZ2VFdmVudChldmVudDphbnksY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KXtcclxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cclxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxyXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXHJcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXHJcbiAgICAgICAgKHJvd0luZm8pID0+XHJcbiAgICAgICAgICByb3dJbmZvPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxyXG4gICAgICAgIChyZWNvcmQ6IGFueSkgPT5cclxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xyXG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cclxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGNvbHVtbiAmJiByb3cpIHtcclxuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXHJcbiAgY2xlYXJncmlkRmlsdGVyc1ZhbHVlKCkge1xyXG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXHJcbiAgICApO1xyXG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcclxuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgY29sLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRBbGxSb3dzQXRPbmNlKCkge1xyXG4gICAgaWYodGhpcy5lZGl0Um93UGVybWlzc2lvbil7XHJcbiAgICBpZiAodGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdlZGl0Um93JykpIHtcclxuICAgICAgaWYodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKT0+IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiAoY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZSB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQpKSl7XHJcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFZGl0QWxsUm93c0J0biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUFsbFJvd3NBdE9uY2UoKSB7XHJcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcclxuICB9XHJcblxyXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xyXG4gIGNhbmNlbEFsbFJvd3NBdE9uY2UoKSB7XHJcbiAgICB0aGlzLnJvd3NEYXRhID0gWy4uLnRoaXMucm93c0RhdGFDb3B5XTtcclxuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKT0+e1xyXG4gICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpe1xyXG4gICAgICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdyk9PntcclxuICAgICAgICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF09IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzc0ZvckVkaXRBbGxSb3dzKGNsYXNzTmFtZTogc3RyaW5nID0gJycpIHtcclxuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdCBnZXRCdG5zOiBhbnkgPVxyXG4gICAgICB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcclxuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xyXG4gICAgICAgICAgICBjb25zdCByb3dTYXZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZWNvcmRzJC5wdXNoKHJvd1NhdmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQUFBQVwiKTtcclxuICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMuc2F2ZVJlY29yZEFycmF5KTtcclxuICAgICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkgPSBbXTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sMjApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zYXZlQWxsUmVjb3JkID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XHJcbiAgICAgICAgICBpZihjbGFzc05hbWUgPT0gJ2NhbmNlbFJvdycpe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpdGVtLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VjY2VzcztcclxuICB9XHJcblxyXG4gIC8vRm9jdXNlZCBjYWxlbmRlciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxyXG4gIHNlbGVjdERhdGUoY29sdW1uOiBhbnkpIHtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk/LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICAvL2FwcGx5IGZpbHRlciBvbiBncmlkIHdoZW4gc2VhcmNoIGJ0biBjbGlja2VkXHJcbiAgYXBwbHlHaXJkRmlsdGVyQnRuKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXHJcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcclxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZXZlbnQsXHJcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaW52b2tlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XHJcbiAgbXVsdGlDaGVja0JveE9uY2xpY2socm93SW5mbzogYW55KSB7XHJcbiAgICBpZiAocm93SW5mbykge1xyXG4gICAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XHJcbiAgICB0aGlzLmRyb3BEb3duRmlsdGVyID0geyBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50LCBjb2x1bW46IGNvbHVtbiB9O1xyXG4gICAgaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb29rdXBDbGVhclZhbHVlKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcclxuICAgIGlmIChyb3cpIHtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbHVtbi52YWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xyXG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGludm9rZSB3aGVuIGNsaWNrIGhlYWRlciBjaGVja2JveCBmaWx0ZXJcclxuICBjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcclxuICAgIGlmICh0aGlzLmVkaXRBbGxSZWNvcmQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiZcclxuICAgICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2hlY2tib3gnICYmIGNvbHVtbi5maWx0ZXJpbmcgIT0gZmFsc2VcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAgIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXHJcbiAgICBzZXRIZWFkZXJDaGVja0JveFZhbHVlKHZhbHVlOiBhbnkpe1xyXG4gICAgICB0aGlzLmlzSW5jbHVkZWRBbGxDb2x1bW5zLmVtaXQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgLy8gc2V0IGNhbGVuZGVyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxyXG4gIGNhbGVuZGVySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XHJcbiAgICAgIGlmKCB5ZWFyICYmIHllYXIubGVuZ3RoID09PSA0KXtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0PSAnbW0vZGQveXknO1xyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XHJcbiAgICAgIH0gZWxzZSBpZih5ZWFyICYmIHllYXIubGVuZ3RoKXtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuIl19