ng-firebase-table-kxp 1.0.14 → 1.1.0

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.
@@ -1104,12 +1104,9 @@ export class TableService {
1104
1104
  }
1105
1105
  }
1106
1106
  TableService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableService, deps: [{ token: i1.AngularFirestore, optional: true }, { token: i2.MatDialog, optional: true }, { token: i3.ToastrService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
1107
- TableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableService, providedIn: 'root' });
1107
+ TableService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableService });
1108
1108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableService, decorators: [{
1109
- type: Injectable,
1110
- args: [{
1111
- providedIn: 'root',
1112
- }]
1109
+ type: Injectable
1113
1110
  }], ctorParameters: function () { return [{ type: i1.AngularFirestore, decorators: [{
1114
1111
  type: Optional
1115
1112
  }] }, { type: i2.MatDialog, decorators: [{
@@ -1117,4 +1114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1117
1114
  }] }, { type: i3.ToastrService, decorators: [{
1118
1115
  type: Optional
1119
1116
  }] }]; } });
1120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZpcmViYXNlLXRhYmxlLWt4cC9zcmMvbGliL3NlcnZpY2VzL3RhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNckQsT0FBTyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7QUFnQmpDLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQ3NCLE1BQXdCLEVBQ3hCLE1BQWlCLEVBQ2pCLE1BQXFCO1FBRnJCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQXdnQ3BDLGNBQVMsR0FBRztZQUNqQixJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMxQyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMxQyxHQUFHLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFXLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN2QyxHQUFHLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFXLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN2QyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN6QyxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN6QyxF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Q0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRSxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUUzQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNyQixNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQ2xCLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFO29CQUMxRCxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU87aUJBQ3pCLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFDZixHQUFHLFlBQVk7b0JBQ2YsS0FBSyxFQUFFLENBQUM7b0JBQ1IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRTtpQkFDM0QsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUFDLE9BQU8sYUFBYSxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDOzswR0E3OENVLFlBQVk7OEdBQVosWUFBWSxjQUZYLE1BQU07NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5ndWxhckZpcmVzdG9yZSxcbiAgQ29sbGVjdGlvblJlZmVyZW5jZSxcbiAgUXVlcnlEb2N1bWVudFNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdC9hcHAnO1xuaW1wb3J0IHsgQXJyYW5nZSwgQ29uZGl0aW9uLCBQYWdpbmF0aW9uIH0gZnJvbSAnLi4vdHlwZXMvVGFibGUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUmVzdWx0IHtcbiAgaXRlbXM6IGFueVtdO1xuICBmaWx0ZXJMZW5ndGg6IG51bWJlciB8IG51bGw7XG4gIGZpcnN0RG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+IHwgbnVsbDtcbiAgbGFzdERvYzogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IG51bGw7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBoYXNQcmV2aW91c1BhZ2U/OiBib29sZWFuO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4PzogbnVtYmVyO1xuICB0b3RhbFBhZ2VzPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ0ZpcmU6IEFuZ3VsYXJGaXJlc3RvcmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgZ2V0SXRlbXMoY29sbGVjdGlvbjogQ29sbGVjdGlvblJlZmVyZW5jZTx1bmtub3duPik6IFByb21pc2U8YW55W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlTbmFwc2hvdCA9IGF3YWl0IGNvbGxlY3Rpb24uZ2V0KCk7XG4gICAgICByZXR1cm4gcXVlcnlTbmFwc2hvdC5kb2NzLm1hcChcbiAgICAgICAgKGRvYzogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPikgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLihkb2MuZGF0YSgpIGFzIGFueSksIGlkOiBkb2MuaWQgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdDb2xsZWN0aW9uIG7Do28gZW5jb250cmFkYTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUXVlcnkocGFyYW1zOiBQYWdpbmF0aW9uKTogUHJvbWlzZTxQYWdpbmF0aW9uUmVzdWx0PiB7XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJGbikge1xuICAgICAgLy8gTMOzZ2ljYSBjb20gZmlsdHJvIG5vIGNsaWVudGUgKGZpbHRlckZuKVxuICAgICAgY29uc3QgQkFUQ0hfRkVUQ0hfU0laRSA9IHBhcmFtcy5iYXRjaFNpemU7XG4gICAgICBjb25zdCBHT0FMX1NJWkUgPSBwYXJhbXMuYmF0Y2hTaXplICsgMTtcblxuICAgICAgaWYgKHBhcmFtcy5uYXZpZ2F0aW9uID09PSAnZm9yd2FyZCcgfHwgcGFyYW1zLm5hdmlnYXRpb24gPT09ICdyZWxvYWQnKSB7XG4gICAgICAgIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcgJiYgcGFyYW1zLmRvYykge1xuICAgICAgICAgIHBhcmFtcy5kb2MubGFzdERvYyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFzdERvY0N1cnNvcjogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IG51bGwgPVxuICAgICAgICAgIHBhcmFtcy5kb2MgPyBwYXJhbXMuZG9jLmxhc3REb2MgOiBudWxsO1xuICAgICAgICBsZXQgcGFnZVJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGxldCBhbGxGZXRjaGVkRG9jczogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPltdID1cbiAgICAgICAgICBbXTtcbiAgICAgICAgbGV0IGhhc01vcmVEb2NzSW5EYiA9IHRydWU7XG5cbiAgICAgICAgd2hpbGUgKHBhZ2VSZXN1bHRzLmxlbmd0aCA8IEdPQUxfU0laRSAmJiBoYXNNb3JlRG9jc0luRGIpIHtcbiAgICAgICAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oXG4gICAgICAgICAgICBwYXJhbXMuY29sbGVjdGlvblxuICAgICAgICAgICkucmVmO1xuICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5hcHBseUZpbHRlcnMocXVlcnksIHBhcmFtcy5hcnJhbmdlLCBwYXJhbXMuY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICBpZiAobGFzdERvY0N1cnNvcikge1xuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5zdGFydEFmdGVyKGxhc3REb2NDdXJzb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KEJBVENIX0ZFVENIX1NJWkUpO1xuXG4gICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBxdWVyeS5nZXQoKTtcblxuICAgICAgICAgIGlmIChzbmFwc2hvdC5lbXB0eSkge1xuICAgICAgICAgICAgaGFzTW9yZURvY3NJbkRiID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXN0RG9jQ3Vyc29yID0gc25hcHNob3QuZG9jc1tzbmFwc2hvdC5kb2NzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGFsbEZldGNoZWREb2NzLnB1c2goLi4uc25hcHNob3QuZG9jcyk7XG5cbiAgICAgICAgICBjb25zdCBiYXRjaFVzZXJzID0gc25hcHNob3QuZG9jc1xuICAgICAgICAgICAgLm1hcCgoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICBpZDogZG9jLmlkLFxuICAgICAgICAgICAgICAuLi4oZG9jLmRhdGEoKSBhcyBhbnkpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHBhcmFtcy5maWx0ZXJGbik7XG5cbiAgICAgICAgICBwYWdlUmVzdWx0cy5wdXNoKC4uLmJhdGNoVXNlcnMpO1xuXG4gICAgICAgICAgaWYgKHNuYXBzaG90LnNpemUgPCBCQVRDSF9GRVRDSF9TSVpFKSB7XG4gICAgICAgICAgICBoYXNNb3JlRG9jc0luRGIgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYXNOZXh0UGFnZSA9IHBhZ2VSZXN1bHRzLmxlbmd0aCA+IHBhcmFtcy5iYXRjaFNpemU7XG4gICAgICAgIGNvbnN0IGZpbmFsSXRlbXMgPSBwYWdlUmVzdWx0cy5zbGljZSgwLCBwYXJhbXMuYmF0Y2hTaXplKTtcblxuICAgICAgICBjb25zdCBmaXJzdERvY09mUGFnZSA9XG4gICAgICAgICAgYWxsRmV0Y2hlZERvY3MuZmluZChcbiAgICAgICAgICAgIChkb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4pID0+XG4gICAgICAgICAgICAgIGRvYy5pZCA9PT0gZmluYWxJdGVtc1swXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGxhc3REb2NPZlBhZ2UgPVxuICAgICAgICAgIGFsbEZldGNoZWREb2NzLmZpbmQoXG4gICAgICAgICAgICAoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PlxuICAgICAgICAgICAgICBkb2MuaWQgPT09IGZpbmFsSXRlbXNbZmluYWxJdGVtcy5sZW5ndGggLSAxXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtczogZmluYWxJdGVtcyxcbiAgICAgICAgICBmaWx0ZXJMZW5ndGg6IG51bGwsXG4gICAgICAgICAgZmlyc3REb2M6IGZpcnN0RG9jT2ZQYWdlLFxuICAgICAgICAgIGxhc3REb2M6IGxhc3REb2NPZlBhZ2UsXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IGhhc05leHRQYWdlLFxuICAgICAgICAgIGhhc1ByZXZpb3VzUGFnZTpcbiAgICAgICAgICAgICEhKHBhcmFtcy5kb2MgJiYgcGFyYW1zLmRvYy5sYXN0RG9jKSAmJlxuICAgICAgICAgICAgcGFyYW1zLm5hdmlnYXRpb24gIT09ICdyZWxvYWQnLFxuICAgICAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEzDs2dpY2EgcGFyYSB0csOhcyAoYmFja3dhcmQpXG4gICAgICBlbHNlIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ2JhY2t3YXJkJykge1xuICAgICAgICBpZiAoIXBhcmFtcy5kb2MgfHwgIXBhcmFtcy5kb2MuZmlyc3REb2MpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgZmlsdGVyTGVuZ3RoOiBudWxsLFxuICAgICAgICAgICAgZmlyc3REb2M6IG51bGwsXG4gICAgICAgICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IHRydWUsXG4gICAgICAgICAgICBoYXNQcmV2aW91c1BhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFnZVJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGxldCBhbGxGZXRjaGVkRG9jczogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPltdID1cbiAgICAgICAgICBbXTtcbiAgICAgICAgbGV0IGhhc01vcmVEb2NzSW5EYiA9IHRydWU7XG5cbiAgICAgICAgbGV0IGJvdW5kYXJ5RG9jID0gcGFyYW1zLmRvYy5maXJzdERvYztcblxuICAgICAgICB3aGlsZSAocGFnZVJlc3VsdHMubGVuZ3RoIDwgR09BTF9TSVpFICYmIGhhc01vcmVEb2NzSW5EYikge1xuICAgICAgICAgIGxldCBxdWVyeTogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5PHVua25vd24+ID0gdGhpcy5uZ0ZpcmUuY29sbGVjdGlvbihcbiAgICAgICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uXG4gICAgICAgICAgKS5yZWY7XG5cbiAgICAgICAgICBxdWVyeSA9IHRoaXMuYXBwbHlGaWx0ZXJzKHF1ZXJ5LCBwYXJhbXMuYXJyYW5nZSwgcGFyYW1zLmNvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgcXVlcnkgPSBxdWVyeS5lbmRCZWZvcmUoYm91bmRhcnlEb2MpO1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXRUb0xhc3QoQkFUQ0hfRkVUQ0hfU0laRSk7XG5cbiAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHF1ZXJ5LmdldCgpO1xuXG4gICAgICAgICAgaWYgKHNuYXBzaG90LmVtcHR5KSB7XG4gICAgICAgICAgICBoYXNNb3JlRG9jc0luRGIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJvdW5kYXJ5RG9jID0gc25hcHNob3QuZG9jc1swXSBhcyBhbnk7XG5cbiAgICAgICAgICBhbGxGZXRjaGVkRG9jcyA9IFsuLi5zbmFwc2hvdC5kb2NzLCAuLi5hbGxGZXRjaGVkRG9jc107XG5cbiAgICAgICAgICBjb25zdCBiYXRjaFVzZXJzID0gc25hcHNob3QuZG9jc1xuICAgICAgICAgICAgLm1hcCgoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICBpZDogZG9jLmlkLFxuICAgICAgICAgICAgICAuLi4oZG9jLmRhdGEoKSBhcyBhbnkpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHBhcmFtcy5maWx0ZXJGbik7XG5cbiAgICAgICAgICBwYWdlUmVzdWx0cyA9IFsuLi5iYXRjaFVzZXJzLCAuLi5wYWdlUmVzdWx0c107XG5cbiAgICAgICAgICBpZiAoc25hcHNob3Quc2l6ZSA8IEJBVENIX0ZFVENIX1NJWkUpIHtcbiAgICAgICAgICAgIGhhc01vcmVEb2NzSW5EYiA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbmFsSXRlbXMgPSBwYWdlUmVzdWx0cy5zbGljZSgwLCBwYXJhbXMuYmF0Y2hTaXplKTtcblxuICAgICAgICBjb25zdCBmaXJzdERvY09mUGFnZSA9XG4gICAgICAgICAgYWxsRmV0Y2hlZERvY3MuZmluZChcbiAgICAgICAgICAgIChkb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4pID0+XG4gICAgICAgICAgICAgIGRvYy5pZCA9PT0gZmluYWxJdGVtc1swXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGxhc3REb2NPZlBhZ2UgPVxuICAgICAgICAgIGFsbEZldGNoZWREb2NzLmZpbmQoXG4gICAgICAgICAgICAoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PlxuICAgICAgICAgICAgICBkb2MuaWQgPT09IGZpbmFsSXRlbXNbZmluYWxJdGVtcy5sZW5ndGggLSAxXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtczogZmluYWxJdGVtcyxcbiAgICAgICAgICBmaWx0ZXJMZW5ndGg6IG51bGwsXG4gICAgICAgICAgZmlyc3REb2M6IGZpcnN0RG9jT2ZQYWdlLFxuICAgICAgICAgIGxhc3REb2M6IGxhc3REb2NPZlBhZ2UsXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IHRydWUsXG4gICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XG4gICAgICBsZXQgZG9jczogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPltdID0gW107XG4gICAgICBsZXQgaGFzTmV4dFBhZ2UgPSBmYWxzZTtcbiAgICAgIGxldCBmaWx0ZXJMZW5ndGg6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuXG4gICAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uXG4gICAgICApLnJlZjtcblxuICAgICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICAgIHBhcmFtcy5jb25kaXRpb25zLmZvckVhY2goKGM6IENvbmRpdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnIT0nKSB7XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkoYy5maXJlc3RvcmVQcm9wZXJ0eSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcXVlcnkgPSB0aGlzLmFwcGx5RmlsdGVycyhxdWVyeSwgcGFyYW1zLmFycmFuZ2UsIHBhcmFtcy5jb25kaXRpb25zKTtcblxuICAgICAgaWYgKHBhcmFtcy5uYXZpZ2F0aW9uID09PSAncmVsb2FkJykge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KHBhcmFtcy5iYXRjaFNpemUgKyAxKTtcbiAgICAgICAgaWYgKHBhcmFtcy5kb2MgJiYgcGFyYW1zLmRvYy5maXJzdERvYykge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RhcnRBdChwYXJhbXMuZG9jLmZpcnN0RG9jKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ2ZvcndhcmQnKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQocGFyYW1zLmJhdGNoU2l6ZSArIDEpO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZG9jICYmIHBhcmFtcy5kb2MubGFzdERvYykge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RhcnRBZnRlcihwYXJhbXMuZG9jLmxhc3REb2MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBiYWNrd2FyZFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0VG9MYXN0KHBhcmFtcy5iYXRjaFNpemUgKyAxKTtcbiAgICAgICAgaWYgKHBhcmFtcy5kb2MgJiYgcGFyYW1zLmRvYy5maXJzdERvYykge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5kQmVmb3JlKHBhcmFtcy5kb2MuZmlyc3REb2MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGl0ZW1Db2wgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgICAgIGl0ZW1Db2wuZG9jcy5mb3JFYWNoKFxuICAgICAgICAoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PlxuICAgICAgICAgIGRvY3MucHVzaChkb2MpXG4gICAgICApO1xuICAgICAgY29uc3QgaXRlbVByb21pc2VzID0gZG9jcy5tYXAoXG4gICAgICAgIGFzeW5jIChpdGVtOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbURhdGEgPSBpdGVtLmRhdGEoKSBhcyBhbnk7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IGlkOiBpdGVtLmlkLCAuLi5pdGVtRGF0YSB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgbGV0IGxhc3REb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCBudWxsID1cbiAgICAgICAgZG9jc1tkb2NzLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgICBsZXQgZmlyc3REb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCBudWxsID1cbiAgICAgICAgZG9jc1swXTtcblxuICAgICAgaWYgKFxuICAgICAgICAoaXRlbXMubGVuZ3RoID4gcGFyYW1zLmJhdGNoU2l6ZSAmJiBwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ2ZvcndhcmQnKSB8fFxuICAgICAgICAocGFyYW1zLm5hdmlnYXRpb24gPT09ICdyZWxvYWQnICYmIGl0ZW1zLmxlbmd0aCA+IHBhcmFtcy5iYXRjaFNpemUpXG4gICAgICApIHtcbiAgICAgICAgbGFzdERvYyA9IGRvY3NbZG9jcy5sZW5ndGggLSAyXSB8fCBudWxsO1xuICAgICAgICBpdGVtcy5wb3AoKTtcbiAgICAgICAgaGFzTmV4dFBhZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHBhcmFtcy5iYXRjaFNpemUgJiYgcGFyYW1zLm5hdmlnYXRpb24gPT09ICdiYWNrd2FyZCcpIHtcbiAgICAgICAgZmlyc3REb2MgPSBkb2NzWzFdO1xuICAgICAgICBpdGVtcy5zaGlmdCgpO1xuICAgICAgICBoYXNOZXh0UGFnZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGl0ZW1Qcm9taXNlcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtcyxcbiAgICAgICAgZmlsdGVyTGVuZ3RoLFxuICAgICAgICBsYXN0RG9jLFxuICAgICAgICBmaXJzdERvYyxcbiAgICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgcGFyYSBnYXJhbnRpciBxdWUgc2VtcHJlIHJldG9ybmFtb3MgYWxnb1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogW10sXG4gICAgICBmaWx0ZXJMZW5ndGg6IG51bGwsXG4gICAgICBmaXJzdERvYzogbnVsbCxcbiAgICAgIGxhc3REb2M6IG51bGwsXG4gICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4OiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycyhcbiAgICBxdWVyeTogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5PHVua25vd24+LFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWRcbiAgKTogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5PHVua25vd24+IHtcbiAgICBpZiAoY29uZGl0aW9ucykge1xuICAgICAgY29uZGl0aW9ucy5tYXAoKGNvbmQ6IENvbmRpdGlvbikgPT4ge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKFxuICAgICAgICAgIGNvbmQuZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgY29uZC5vcGVyYXRvcixcbiAgICAgICAgICBjb25kLmRhc2hQcm9wZXJ0eVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGhhc0ZpbHRlclNwZWNpZmljT3JkZXJCeSA9IGZhbHNlO1xuICAgIGxldCBhcHBsaWVkT3JkZXJCeUZpZWxkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGVxdWFsc0ZpbHRlcnMgPSBhcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGY6IGFueSkgPT4gZi5hcnJhbmdlID09PSAnZXF1YWxzJyAmJiBmLmZpbHRlclxuICAgICk7XG4gICAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gYXJyYW5nZS5maWx0ZXJzLmZpbHRlcihcbiAgICAgIChmOiBhbnkpID0+IGYuYXJyYW5nZSAhPT0gJ2VxdWFscydcbiAgICApO1xuXG4gICAgY29uc3QgZXF1YWxzR3JvdXBlZEJ5UHJvcGVydHkgPSBlcXVhbHNGaWx0ZXJzLnJlZHVjZShcbiAgICAgIChhY2M6IGFueSwgY3VycmVudDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBjdXJyZW50LmZpbHRlci5wcm9wZXJ0eTtcbiAgICAgICAgaWYgKCFhY2NbcHJvcF0pIHtcbiAgICAgICAgICBhY2NbcHJvcF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBhY2NbcHJvcF0ucHVzaChjdXJyZW50LmZpbHRlci5maWx0ZXJpbmcpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBlcXVhbHNHcm91cGVkQnlQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gZXF1YWxzR3JvdXBlZEJ5UHJvcGVydHlbcHJvcF07XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcm9wLCAnaW4nLCB2YWx1ZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG90aGVyRmlsdGVycy5mb3JFYWNoKChmaWx0ZXJJdGVtOiBhbnkpID0+IHtcbiAgICAgIC8vIEFwbGljYXIgZmlsdHJhZ2VtIHBvciBidXNjYVxuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlcj8uZmlsdGVyaW5nICYmXG4gICAgICAgIGZpbHRlckl0ZW0uZmlsdGVyPy5wcm9wZXJ0eSAhPT0gJycgJiZcbiAgICAgICAgZmlsdGVySXRlbS5hcnJhbmdlID09PSAnZmlsdGVyJ1xuICAgICAgKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAud2hlcmUoXG4gICAgICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlci5wcm9wZXJ0eSxcbiAgICAgICAgICAgICc+PScsXG4gICAgICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlci5maWx0ZXJpbmcudHJpbSgpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICApXG4gICAgICAgICAgLndoZXJlKFxuICAgICAgICAgICAgZmlsdGVySXRlbS5maWx0ZXIucHJvcGVydHksXG4gICAgICAgICAgICAnPD0nLFxuICAgICAgICAgICAgZmlsdGVySXRlbS5maWx0ZXIuZmlsdGVyaW5nLnRyaW0oKS50b1VwcGVyQ2FzZSgpICsgJ1xcdWY4ZmYnXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKCFoYXNGaWx0ZXJTcGVjaWZpY09yZGVyQnkpIHtcbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkoZmlsdGVySXRlbS5maWx0ZXIucHJvcGVydHkpO1xuICAgICAgICAgIGhhc0ZpbHRlclNwZWNpZmljT3JkZXJCeSA9IHRydWU7XG4gICAgICAgICAgYXBwbGllZE9yZGVyQnlGaWVsZCA9IGZpbHRlckl0ZW0uZmlsdGVyLnByb3BlcnR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFwbGljYXIgZmlsdHJvIGRvIHRpcG8gXCJmaWx0ZXJCeURhdGVcIlxuICAgICAgaWYgKGZpbHRlckl0ZW0uZGF0ZUZpbHRlciAmJiBmaWx0ZXJJdGVtLmFycmFuZ2UgPT09ICdmaWx0ZXJCeURhdGUnKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAud2hlcmUoYXJyYW5nZS5zb3J0QnkuZmllbGQsICc+PScsIGZpbHRlckl0ZW0uZGF0ZUZpbHRlci5pbml0aWFsKVxuICAgICAgICAgIC53aGVyZShhcnJhbmdlLnNvcnRCeS5maWVsZCwgJzw9JywgZmlsdGVySXRlbS5kYXRlRmlsdGVyLmZpbmFsKTtcbiAgICAgICAgaWYgKCFoYXNGaWx0ZXJTcGVjaWZpY09yZGVyQnkpIHtcbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkoYXJyYW5nZS5zb3J0QnkuZmllbGQpO1xuICAgICAgICAgIGhhc0ZpbHRlclNwZWNpZmljT3JkZXJCeSA9IHRydWU7XG4gICAgICAgICAgYXBwbGllZE9yZGVyQnlGaWVsZCA9IGFycmFuZ2Uuc29ydEJ5LmZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcGxpY2FyIHNvcnRCeVxuICAgIGlmIChhcnJhbmdlLnNvcnRCeSAmJiBhcnJhbmdlLnNvcnRCeS5maWVsZCAmJiBhcnJhbmdlLnNvcnRCeS5vcmRlcikge1xuICAgICAgaWYgKGFwcGxpZWRPcmRlckJ5RmllbGQgIT09IGFycmFuZ2Uuc29ydEJ5LmZpZWxkKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkub3JkZXJCeShhcnJhbmdlLnNvcnRCeS5maWVsZCwgYXJyYW5nZS5zb3J0Qnkub3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBwcml2YXRlIGdldElkRmlsdGVyKHBhcmFtczogUGFnaW5hdGlvbik6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghcGFyYW1zLmFycmFuZ2U/LmZpbHRlcnMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaWRGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAoZjogYW55KSA9PlxuICAgICAgICBmLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmXG4gICAgICAgIGYuZmlsdGVyPy5wcm9wZXJ0eSA9PT0gJ2lkJyAmJlxuICAgICAgICBmLmZpbHRlcj8uZmlsdGVyaW5nXG4gICAgKTtcblxuICAgIHJldHVybiBpZEZpbHRlcj8uZmlsdGVyPy5maWx0ZXJpbmc/LnRyaW0oKSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREb2N1bWVudEJ5SWQoXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnkgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sbGVjdGlvbikuZG9jKGRvY0lkKTtcbiAgICAgIGNvbnN0IGRvY1NuYXBzaG90ID0gYXdhaXQgZG9jUmVmLmdldCgpLnRvUHJvbWlzZSgpO1xuXG4gICAgICBpZiAoZG9jU25hcHNob3QgJiYgZG9jU25hcHNob3QuZXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IGRvY1NuYXBzaG90LmlkLFxuICAgICAgICAgIC4uLihkb2NTbmFwc2hvdC5kYXRhKCkgYXMgYW55KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Vycm8gYW8gYnVzY2FyIGRvY3VtZW50byBwb3IgSUQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWFyY2hCeUlkUGFydGlhbChcbiAgICBwYXJhbXM6IFBhZ2luYXRpb24sXG4gICAgc2VhcmNoVGVybTogc3RyaW5nXG4gICk6IFByb21pc2U8UGFnaW5hdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGV4YWN0TWF0Y2ggPSBhd2FpdCB0aGlzLmdldERvY3VtZW50QnlJZChcbiAgICAgIHBhcmFtcy5jb2xsZWN0aW9uLFxuICAgICAgc2VhcmNoVGVybVxuICAgICk7XG5cbiAgICBpZiAoZXhhY3RNYXRjaCkge1xuICAgICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMub3BlcmF0b3JzO1xuICAgICAgICBjb25zdCBwYXNzZXNDb25kaXRpb25zID0gcGFyYW1zLmNvbmRpdGlvbnMuZXZlcnkoKGNvbmQpID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRvckZuID0gb3BlcmF0b3JzW2NvbmQub3BlcmF0b3IgYXMga2V5b2YgdHlwZW9mIG9wZXJhdG9yc107XG4gICAgICAgICAgcmV0dXJuIG9wZXJhdG9yRm5cbiAgICAgICAgICAgID8gb3BlcmF0b3JGbihleGFjdE1hdGNoW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLCBjb25kLmRhc2hQcm9wZXJ0eSlcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcGFzc2VzQ29uZGl0aW9ucykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICBmaWx0ZXJMZW5ndGg6IDAsXG4gICAgICAgICAgICBmaXJzdERvYzogbnVsbCxcbiAgICAgICAgICAgIGxhc3REb2M6IG51bGwsXG4gICAgICAgICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICAgICAgICBoYXNQcmV2aW91c1BhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZpbHRlckZuICYmICFwYXJhbXMuZmlsdGVyRm4oZXhhY3RNYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgZmlsdGVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGZpcnN0RG9jOiBudWxsLFxuICAgICAgICAgIGxhc3REb2M6IG51bGwsXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IGZhbHNlLFxuICAgICAgICAgIGhhc1ByZXZpb3VzUGFnZTogZmFsc2UsXG4gICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogMCxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiAwLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogW2V4YWN0TWF0Y2hdLFxuICAgICAgICBmaWx0ZXJMZW5ndGg6IDEsXG4gICAgICAgIGZpcnN0RG9jOiBudWxsLFxuICAgICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICAgIGhhc1ByZXZpb3VzUGFnZTogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IDAsXG4gICAgICAgIHRvdGFsUGFnZXM6IDEsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFRlcm1Mb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRJZEZpbHRlciA9IHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGFycmFuZ2U6IHtcbiAgICAgICAgLi4ucGFyYW1zLmFycmFuZ2UsXG4gICAgICAgIGZpbHRlcnM6IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAgIChmOiBhbnkpID0+ICEoZi5hcnJhbmdlID09PSAnZmlsdGVyJyAmJiBmLmZpbHRlcj8ucHJvcGVydHkgPT09ICdpZCcpXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oXG4gICAgICBwYXJhbXMuY29sbGVjdGlvblxuICAgICkucmVmO1xuXG4gICAgLy8gQXBsaWNhciBjb25kaXRpb25zXG4gICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICBwYXJhbXMuY29uZGl0aW9ucy5mb3JFYWNoKChjb25kKSA9PiB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoXG4gICAgICAgICAgY29uZC5maXJlc3RvcmVQcm9wZXJ0eSxcbiAgICAgICAgICBjb25kLm9wZXJhdG9yLFxuICAgICAgICAgIGNvbmQuZGFzaFByb3BlcnR5XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBcGxpY2FyIHNvcnRCeVxuICAgIGlmIChwYXJhbXMuYXJyYW5nZT8uc29ydEJ5Py5maWVsZCAmJiBwYXJhbXMuYXJyYW5nZT8uc29ydEJ5Py5vcmRlcikge1xuICAgICAgcXVlcnkgPSBxdWVyeS5vcmRlckJ5KFxuICAgICAgICBwYXJhbXMuYXJyYW5nZS5zb3J0QnkuZmllbGQsXG4gICAgICAgIHBhcmFtcy5hcnJhbmdlLnNvcnRCeS5vcmRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHF1ZXJ5LmdldCgpO1xuICAgIGxldCBpdGVtcyA9IHNuYXBzaG90LmRvY3NcbiAgICAgIC5tYXAoKGRvYykgPT4gKHtcbiAgICAgICAgaWQ6IGRvYy5pZCxcbiAgICAgICAgLi4uKGRvYy5kYXRhKCkgYXMgYW55KSxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm1Mb3dlcikpO1xuXG4gICAgLy8gU2VwYXJhciBlcXVhbHMgZmlsdGVycyBlIG91dHJvcyBmaWx0cm9zXG4gICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IHBhcmFtc1dpdGhvdXRJZEZpbHRlci5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGY6IGFueSkgPT4gZi5hcnJhbmdlID09PSAnZXF1YWxzJyAmJiBmLmZpbHRlclxuICAgICk7XG4gICAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gcGFyYW1zV2l0aG91dElkRmlsdGVyLmFycmFuZ2UuZmlsdGVycy5maWx0ZXIoXG4gICAgICAoZjogYW55KSA9PlxuICAgICAgICBmLmFycmFuZ2UgIT09ICdlcXVhbHMnICYmXG4gICAgICAgIChmLmFycmFuZ2UgIT09ICdmaWx0ZXInIHx8IGYuZmlsdGVyPy5wcm9wZXJ0eSAhPT0gJ2lkJylcbiAgICApO1xuXG4gICAgLy8gQXBsaWNhciBlcXVhbHMgZmlsdGVycyBjb20gbMOzZ2ljYSBPUiBkZW50cm8gZGUgY2FkYSBwcm9wcmllZGFkZVxuICAgIGlmIChlcXVhbHNGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFncnVwYXIgcG9yIHByb3ByaWVkYWRlIHBhcmEgYXBsaWNhciBPUlxuICAgICAgY29uc3QgZ3JvdXBlZEJ5UHJvcGVydHkgPSBlcXVhbHNGaWx0ZXJzLnJlZHVjZSgoYWNjOiBhbnksIGY6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wID0gZi5maWx0ZXIucHJvcGVydHk7XG4gICAgICAgIGlmICghYWNjW3Byb3BdKSB7XG4gICAgICAgICAgYWNjW3Byb3BdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYWNjW3Byb3BdLnB1c2goZi5maWx0ZXIuZmlsdGVyaW5nKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcblxuICAgICAgLy8gRmlsdHJhcjogaXRlbSBkZXZlIHRlciBwZWxvIG1lbm9zIHVtIHZhbG9yIGRlIENBREEgcHJvcHJpZWRhZGVcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdyb3VwZWRCeVByb3BlcnR5KS5ldmVyeSgoW3Byb3AsIHZhbHVlc10pID0+IHtcbiAgICAgICAgICByZXR1cm4gKHZhbHVlcyBhcyBhbnlbXSkuaW5jbHVkZXMoaXRlbVtwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBsaWNhciBvdXRyb3MgZmlsdHJvc1xuICAgIG90aGVyRmlsdGVycy5mb3JFYWNoKChmaWx0ZXJJdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZmlsdGVySXRlbS5hcnJhbmdlID09PSAnZmlsdGVyJyAmJlxuICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlcj8uZmlsdGVyaW5nICYmXG4gICAgICAgIGZpbHRlckl0ZW0uZmlsdGVyPy5wcm9wZXJ0eVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gU3RyaW5nKGZpbHRlckl0ZW0uZmlsdGVyLmZpbHRlcmluZylcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSBTdHJpbmcoXG4gICAgICAgICAgICBpdGVtW2ZpbHRlckl0ZW0uZmlsdGVyLnByb3BlcnR5XVxuICAgICAgICAgICkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gaXRlbVZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcGxpY2FyIGZpbHRlckZuIHNlIGV4aXN0aXJcbiAgICBpZiAocGFyYW1zLmZpbHRlckZuKSB7XG4gICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihwYXJhbXMuZmlsdGVyRm4pO1xuICAgIH1cblxuICAgIC8vIFBhZ2luYcOnw6NvXG4gICAgY29uc3QgcGFnZVNpemUgPSBwYXJhbXMuYmF0Y2hTaXplO1xuICAgIGxldCBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcblxuICAgIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2FyIG8gw61uZGljZSBwYXNzYWRvIHBlbG8gY29tcG9uZW50ZSBzZW0gaW5jcmVtZW50YXIvZGVjcmVtZW50YXJcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBwYXJhbXMuY2xpZW50UGFnZUluZGV4IHx8IDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IGN1cnJlbnRDbGllbnRQYWdlSW5kZXggKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICBjb25zdCBwYWdpbmF0ZWRJdGVtcyA9IGl0ZW1zLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwoaXRlbXMubGVuZ3RoIC8gcGFnZVNpemUpO1xuICAgIGNvbnN0IGhhc05leHRQYWdlID0gY3VycmVudENsaWVudFBhZ2VJbmRleCA8IHRvdGFsUGFnZXMgLSAxO1xuICAgIGNvbnN0IGhhc1ByZXZpb3VzUGFnZSA9IGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPiAwO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBwYWdpbmF0ZWRJdGVtcyxcbiAgICAgIGZpbHRlckxlbmd0aDogaXRlbXMubGVuZ3RoLFxuICAgICAgZmlyc3REb2M6IG51bGwsXG4gICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2aW91c1BhZ2UsXG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4LFxuICAgICAgdG90YWxQYWdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRVc2VDbGllbnRTaWRlRmFsbGJhY2socGFyYW1zOiBQYWdpbmF0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQ29uZGl0aW9ucyA9IHBhcmFtcy5jb25kaXRpb25zICYmIHBhcmFtcy5jb25kaXRpb25zLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzQXJyYW5nZUZpbHRlcnMgPVxuICAgICAgcGFyYW1zLmFycmFuZ2U/LmZpbHRlcnMgJiYgcGFyYW1zLmFycmFuZ2UuZmlsdGVycy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGhhc1NvcnRCeSA9IHBhcmFtcy5hcnJhbmdlPy5zb3J0Qnk/LmZpZWxkO1xuXG4gICAgaWYgKHBhcmFtcy5maWx0ZXJGbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChoYXNBcnJhbmdlRmlsdGVycykge1xuICAgICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAoZjogYW55KSA9PiBmLmFycmFuZ2UgPT09ICdlcXVhbHMnICYmIGYuZmlsdGVyXG4gICAgICApO1xuXG4gICAgICBpZiAoZXF1YWxzRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNTZXQgPSBuZXcgU2V0KFxuICAgICAgICAgIGVxdWFsc0ZpbHRlcnMubWFwKChmOiBhbnkpID0+IGYuZmlsdGVyLnByb3BlcnR5KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzU2V0LnNpemUgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzQ29uZGl0aW9ucyAmJiBoYXNBcnJhbmdlRmlsdGVycyAmJiBoYXNTb3J0QnkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChoYXNDb25kaXRpb25zICYmIGhhc0FycmFuZ2VGaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQXJyYW5nZUZpbHRlcnMgJiYgcGFyYW1zLmFycmFuZ2UuZmlsdGVycy5sZW5ndGggPiAxICYmIGhhc1NvcnRCeSkge1xuICAgICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAoZjogYW55KSA9PiBmLmFycmFuZ2UgPT09ICdlcXVhbHMnICYmIGYuZmlsdGVyXG4gICAgICApO1xuXG4gICAgICBpZiAoZXF1YWxzRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNTZXQgPSBuZXcgU2V0KFxuICAgICAgICAgIGVxdWFsc0ZpbHRlcnMubWFwKChmOiBhbnkpID0+IGYuZmlsdGVyLnByb3BlcnR5KVxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcGVydGllc1NldC5zaXplID09PSAxICYmXG4gICAgICAgICAgZXF1YWxzRmlsdGVycy5sZW5ndGggPT09IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRQYWdpbmF0ZWQocGFyYW1zOiBQYWdpbmF0aW9uKTogUHJvbWlzZTxQYWdpbmF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgaWRGaWx0ZXJWYWx1ZSA9IHRoaXMuZ2V0SWRGaWx0ZXIocGFyYW1zKTtcbiAgICBpZiAoaWRGaWx0ZXJWYWx1ZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZWFyY2hCeUlkUGFydGlhbChwYXJhbXMsIGlkRmlsdGVyVmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3RhciBwcmV2ZW50aXZhbWVudGUgc2UgZGV2ZSB1c2FyIGZhbGxiYWNrXG4gICAgaWYgKHRoaXMuc2hvdWxkVXNlQ2xpZW50U2lkZUZhbGxiYWNrKHBhcmFtcykpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJhY2tNaXNzaW5nSW5kZXhQcmV2ZW50aXZlKFxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbixcbiAgICAgICAgcGFyYW1zLmFycmFuZ2UsXG4gICAgICAgIHBhcmFtcy5jb25kaXRpb25zXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDbGllbnRTaWRlUXVlcnkocGFyYW1zKTtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5OKIFtUQUJMRV0gUmVzdWx0YWRvcyBwYWdpbmFkb3MgdmlhIGZhbGxiYWNrIGNsaWVudC1zaWRlOicsIHtcbiAgICAgICAgdG90YWxJdGVtczogcmVzdWx0LmZpbHRlckxlbmd0aCxcbiAgICAgICAgcmV0dXJuZWRJdGVtczogcmVzdWx0Lml0ZW1zLmxlbmd0aCxcbiAgICAgICAgaGFzTmV4dFBhZ2U6IHJlc3VsdC5oYXNOZXh0UGFnZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IChyZXN1bHQuY3VycmVudENsaWVudFBhZ2VJbmRleCB8fCAwKSArIDEsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJ5KHBhcmFtcyk7XG4gICAgICBjb25zb2xlLmxvZygn8J+TiiBbVEFCTEVdIFJlc3VsdGFkb3MgcGFnaW5hZG9zIHZpYSBGaXJlc3RvcmU6Jywge1xuICAgICAgICB0b3RhbEl0ZW1zOiByZXN1bHQuZmlsdGVyTGVuZ3RoIHx8ICdOL0EnLFxuICAgICAgICByZXR1cm5lZEl0ZW1zOiByZXN1bHQuaXRlbXMubGVuZ3RoLFxuICAgICAgICBoYXNOZXh0UGFnZTogcmVzdWx0Lmhhc05leHRQYWdlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSAnZmFpbGVkLXByZWNvbmRpdGlvbicpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50cmFja01pc3NpbmdJbmRleChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMuY29sbGVjdGlvbixcbiAgICAgICAgICBwYXJhbXMuYXJyYW5nZSxcbiAgICAgICAgICBwYXJhbXMuY29uZGl0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNsaWVudFNpZGVRdWVyeShwYXJhbXMpO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAn8J+TiiBbVEFCTEVdIFJlc3VsdGFkb3MgcGFnaW5hZG9zIHZpYSBmYWxsYmFjayAoZXJybyBkZSBpbmRleCk6JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiByZXN1bHQuZmlsdGVyTGVuZ3RoLFxuICAgICAgICAgICAgcmV0dXJuZWRJdGVtczogcmVzdWx0Lml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgIGhhc05leHRQYWdlOiByZXN1bHQuaGFzTmV4dFBhZ2UsXG4gICAgICAgICAgICBjdXJyZW50UGFnZTogKHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4IHx8IDApICsgMSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09ICdpbnZhbGlkLWFyZ3VtZW50Jykge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYWNrTWlzc2luZ0luZGV4KFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uLFxuICAgICAgICAgIHBhcmFtcy5hcnJhbmdlLFxuICAgICAgICAgIHBhcmFtcy5jb25kaXRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQ2xpZW50U2lkZVF1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICfwn5OKIFtUQUJMRV0gUmVzdWx0YWRvcyBwYWdpbmFkb3MgdmlhIGZhbGxiYWNrIChhcmd1bWVudG8gaW52w6FsaWRvKTonLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHJlc3VsdC5maWx0ZXJMZW5ndGgsXG4gICAgICAgICAgICByZXR1cm5lZEl0ZW1zOiByZXN1bHQuaXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IHJlc3VsdC5oYXNOZXh0UGFnZSxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggfHwgMCkgKyAxLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVDbGllbnRTaWRlUXVlcnkocGFyYW1zOiBQYWdpbmF0aW9uKTogUHJvbWlzZTxQYWdpbmF0aW9uUmVzdWx0PiB7XG4gICAgLy8gT3RpbWl6YXIgdXNhbmRvIHBlbG8gbWVub3MgdW1hIGNsw6F1c3VsYSAud2hlcmUoKSBxdWFuZG8gcG9zc8OtdmVsXG4gICAgbGV0IHF1ZXJ5OiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnk8dW5rbm93bj4gPSB0aGlzLm5nRmlyZS5jb2xsZWN0aW9uKFxuICAgICAgcGFyYW1zLmNvbGxlY3Rpb25cbiAgICApLnJlZjtcblxuICAgIGxldCBhcHBsaWVkQ29uZGl0aW9uOiBDb25kaXRpb24gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaGFzQXBwbGllZFdoZXJlQ2xhdXNlID0gZmFsc2U7XG5cbiAgICAvLyBQcmltZWlybywgdGVudGEgYXBsaWNhciBjb25kacOnw7VlcyBzaW1wbGVzXG4gICAgaWYgKHBhcmFtcy5jb25kaXRpb25zICYmIHBhcmFtcy5jb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNpbXBsZUNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb25zLmZpbmQoKGNvbmQ6IENvbmRpdGlvbikgPT5cbiAgICAgICAgWyc9PScsICc+JywgJzwnLCAnPj0nLCAnPD0nLCAnaW4nLCAnYXJyYXktY29udGFpbnMnXS5pbmNsdWRlcyhcbiAgICAgICAgICBjb25kLm9wZXJhdG9yXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGlmIChzaW1wbGVDb25kaXRpb24pIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShcbiAgICAgICAgICBzaW1wbGVDb25kaXRpb24uZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgc2ltcGxlQ29uZGl0aW9uLm9wZXJhdG9yLFxuICAgICAgICAgIHNpbXBsZUNvbmRpdGlvbi5kYXNoUHJvcGVydHlcbiAgICAgICAgKTtcbiAgICAgICAgYXBwbGllZENvbmRpdGlvbiA9IHNpbXBsZUNvbmRpdGlvbjtcbiAgICAgICAgaGFzQXBwbGllZFdoZXJlQ2xhdXNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZSBuw6NvIGjDoSBjb25kacOnw7VlcyBkaXNwb27DrXZlaXMsIHRlbnRhIGFwbGljYXIgZmlsdHJvcyBkbyBhcnJhbmdlXG4gICAgbGV0IGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXI6IGFueSA9IG51bGw7XG4gICAgaWYgKCFoYXNBcHBsaWVkV2hlcmVDbGF1c2UgJiYgcGFyYW1zLmFycmFuZ2U/LmZpbHRlcnMpIHtcbiAgICAgIC8vIEFncnVwYXIgZXF1YWxzIGZpbHRlcnMgcG9yIHByb3ByaWVkYWRlXG4gICAgICBjb25zdCBlcXVhbHNGaWx0ZXJzID0gcGFyYW1zLmFycmFuZ2UuZmlsdGVycy5maWx0ZXIoXG4gICAgICAgIChmOiBhbnkpID0+IGYuYXJyYW5nZSA9PT0gJ2VxdWFscycgJiYgZi5maWx0ZXJcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVxdWFsc0dyb3VwZWRCeVByb3BlcnR5ID0gZXF1YWxzRmlsdGVycy5yZWR1Y2UoXG4gICAgICAgIChhY2M6IGFueSwgY3VycmVudDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcCA9IGN1cnJlbnQuZmlsdGVyLnByb3BlcnR5O1xuICAgICAgICAgIGlmICghYWNjW3Byb3BdKSB7XG4gICAgICAgICAgICBhY2NbcHJvcF0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjW3Byb3BdLnB1c2goY3VycmVudC5maWx0ZXIuZmlsdGVyaW5nKTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcblxuICAgICAgLy8gU2UgaMOhIGFwZW5hcyBVTUEgcHJvcHJpZWRhZGUgY29tIG3Dumx0aXBsb3MgdmFsb3JlcywgYXBsaWNhciBubyBGaXJlc3RvcmUgY29tICdpbidcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlcXVhbHNHcm91cGVkQnlQcm9wZXJ0eSk7XG4gICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDEgJiYgZXF1YWxzRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0aWVzWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBlcXVhbHNHcm91cGVkQnlQcm9wZXJ0eVtwcm9wXTtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcm9wLCAnaW4nLCB2YWx1ZXMpO1xuICAgICAgICBoYXNBcHBsaWVkV2hlcmVDbGF1c2UgPSB0cnVlO1xuICAgICAgICAvLyBNYXJjYXIgVE9ET1Mgb3MgZXF1YWxzIGZpbHRlcnMgZGVzc2EgcHJvcHJpZWRhZGUgY29tbyBhcGxpY2Fkb3NcbiAgICAgICAgYXBwbGllZEZpcmVzdG9yZUZpbHRlciA9ICdhbGwtZXF1YWxzJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3Qgb3RoZXJGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgKGY6IGFueSkgPT5cbiAgICAgICAgICAgIChmLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmXG4gICAgICAgICAgICAgIGYuZmlsdGVyPy5maWx0ZXJpbmcgJiZcbiAgICAgICAgICAgICAgZi5maWx0ZXI/LnByb3BlcnR5KSB8fFxuICAgICAgICAgICAgKGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgICAgICAgZi5kYXRlRmlsdGVyPy5pbml0aWFsICYmXG4gICAgICAgICAgICAgIGYuZGF0ZUZpbHRlcj8uZmluYWwpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG90aGVyRmlsdGVyKSB7XG4gICAgICAgICAgaWYgKG90aGVyRmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmIG90aGVyRmlsdGVyLmZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBvdGhlckZpbHRlci5maWx0ZXIuZmlsdGVyaW5nXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgIC53aGVyZShvdGhlckZpbHRlci5maWx0ZXIucHJvcGVydHksICc+PScsIGZpbHRlclZhbHVlKVxuICAgICAgICAgICAgICAud2hlcmUob3RoZXJGaWx0ZXIuZmlsdGVyLnByb3BlcnR5LCAnPD0nLCBmaWx0ZXJWYWx1ZSArICdcXHVmOGZmJyk7XG4gICAgICAgICAgICBoYXNBcHBsaWVkV2hlcmVDbGF1c2UgPSB0cnVlO1xuICAgICAgICAgICAgYXBwbGllZEZpcmVzdG9yZUZpbHRlciA9IG90aGVyRmlsdGVyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBvdGhlckZpbHRlci5hcnJhbmdlID09PSAnZmlsdGVyQnlEYXRlJyAmJlxuICAgICAgICAgICAgb3RoZXJGaWx0ZXIuZGF0ZUZpbHRlciAmJlxuICAgICAgICAgICAgcGFyYW1zLmFycmFuZ2Uuc29ydEJ5Py5maWVsZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAud2hlcmUoXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFycmFuZ2Uuc29ydEJ5LmZpZWxkLFxuICAgICAgICAgICAgICAgICc+PScsXG4gICAgICAgICAgICAgICAgb3RoZXJGaWx0ZXIuZGF0ZUZpbHRlci5pbml0aWFsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLndoZXJlKFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hcnJhbmdlLnNvcnRCeS5maWVsZCxcbiAgICAgICAgICAgICAgICAnPD0nLFxuICAgICAgICAgICAgICAgIG90aGVyRmlsdGVyLmRhdGVGaWx0ZXIuZmluYWxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhhc0FwcGxpZWRXaGVyZUNsYXVzZSA9IHRydWU7XG4gICAgICAgICAgICBhcHBsaWVkRmlyZXN0b3JlRmlsdGVyID0gb3RoZXJGaWx0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRG9jc1NuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgbGV0IGl0ZW1zID0gYWxsRG9jc1NuYXBzaG90LmRvY3MubWFwKFxuICAgICAgKGRvYzogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPikgPT4gKHtcbiAgICAgICAgaWQ6IGRvYy5pZCxcbiAgICAgICAgLi4uKGRvYy5kYXRhKCkgYXMgYW55KSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEFwbGljYXIgY29uZGnDp8O1ZXMgcmVzdGFudGVzXG4gICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICBjb25zdCByZW1haW5pbmdDb25kaXRpb25zID0gcGFyYW1zLmNvbmRpdGlvbnMuZmlsdGVyKFxuICAgICAgICAoY29uZDogQ29uZGl0aW9uKSA9PiBjb25kICE9PSBhcHBsaWVkQ29uZGl0aW9uXG4gICAgICApO1xuICAgICAgaWYgKHJlbWFpbmluZ0NvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycztcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW1haW5pbmdDb25kaXRpb25zLmV2ZXJ5KChjb25kOiBDb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRm4gPVxuICAgICAgICAgICAgICBvcGVyYXRvcnNbY29uZC5vcGVyYXRvciBhcyBrZXlvZiB0eXBlb2Ygb3BlcmF0b3JzXTtcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRvckZuXG4gICAgICAgICAgICAgID8gb3BlcmF0b3JGbihpdGVtW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLCBjb25kLmRhc2hQcm9wZXJ0eSlcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBmaWx0ZXJzLCBzb3J0QnkgfSA9IHBhcmFtcy5hcnJhbmdlO1xuXG4gICAgLy8gVHJhY2sgd2hpY2ggZmlsdGVyIHdhcyBhbHJlYWR5IGFwcGxpZWQgaW4gRmlyZXN0b3JlIHRvIGF2b2lkIGRvdWJsZSBmaWx0ZXJpbmdcbiAgICBpZiAoaGFzQXBwbGllZFdoZXJlQ2xhdXNlICYmICFhcHBsaWVkQ29uZGl0aW9uICYmIHBhcmFtcy5hcnJhbmdlPy5maWx0ZXJzKSB7XG4gICAgICBjb25zdCBlcXVhbHNGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgIChmOiBhbnkpID0+IGYuYXJyYW5nZSA9PT0gJ2VxdWFscycgJiYgZi5maWx0ZXI/LmZpbHRlcmluZ1xuICAgICAgKTtcbiAgICAgIGlmIChlcXVhbHNGaWx0ZXIpIHtcbiAgICAgICAgYXBwbGllZEZpcmVzdG9yZUZpbHRlciA9IGVxdWFsc0ZpbHRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgKGY6IGFueSkgPT5cbiAgICAgICAgICAgIChmLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmXG4gICAgICAgICAgICAgIGYuZmlsdGVyPy5maWx0ZXJpbmcgJiZcbiAgICAgICAgICAgICAgZi5maWx0ZXI/LnByb3BlcnR5KSB8fFxuICAgICAgICAgICAgKGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgICAgICAgZi5kYXRlRmlsdGVyPy5pbml0aWFsICYmXG4gICAgICAgICAgICAgIGYuZGF0ZUZpbHRlcj8uZmluYWwpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmOiBhbnkpID0+IGYuYXJyYW5nZSA9PT0gJ2VxdWFscycpO1xuICAgIGNvbnN0IG90aGVyRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmOiBhbnkpID0+IGYuYXJyYW5nZSAhPT0gJ2VxdWFscycpO1xuXG4gICAgLy8gQXBsaWNhciBlcXVhbHMgZmlsdGVycyBubyBjbGllbnQtc2lkZSBhcGVuYXMgc2UgbsOjbyBmb3JhbSBhcGxpY2Fkb3Mgbm8gRmlyZXN0b3JlXG4gICAgaWYgKGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXIgIT09ICdhbGwtZXF1YWxzJyAmJiBlcXVhbHNGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFncnVwYXIgcG9yIHByb3ByaWVkYWRlIHBhcmEgYXBsaWNhciBPUiBkZW50cm8gZGUgY2FkYSBwcm9wcmllZGFkZVxuICAgICAgY29uc3QgZ3JvdXBlZEJ5UHJvcGVydHkgPSBlcXVhbHNGaWx0ZXJzLnJlZHVjZSgoYWNjOiBhbnksIGY6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wID0gZi5maWx0ZXIucHJvcGVydHk7XG4gICAgICAgIGlmICghYWNjW3Byb3BdKSB7XG4gICAgICAgICAgYWNjW3Byb3BdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYWNjW3Byb3BdLnB1c2goZi5maWx0ZXIuZmlsdGVyaW5nKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcblxuICAgICAgLy8gRmlsdHJhcjogaXRlbSBkZXZlIHRlciBwZWxvIG1lbm9zIHVtIHZhbG9yIGRlIENBREEgcHJvcHJpZWRhZGVcbiAgICAgIC8vIChBTkQgZW50cmUgcHJvcHJpZWRhZGVzLCBPUiBkZW50cm8gZGUgY2FkYSBwcm9wcmllZGFkZSlcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdyb3VwZWRCeVByb3BlcnR5KS5ldmVyeSgoW3Byb3AsIHZhbHVlc10pID0+IHtcbiAgICAgICAgICByZXR1cm4gKHZhbHVlcyBhcyBhbnlbXSkuaW5jbHVkZXMoaXRlbVtwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3RoZXJGaWx0ZXJzLmZvckVhY2goKGZpbHRlckl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXIgPT09IGZpbHRlckl0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlckl0ZW0uYXJyYW5nZSA9PT0gJ2ZpbHRlcicgJiZcbiAgICAgICAgZmlsdGVySXRlbS5maWx0ZXI/LmZpbHRlcmluZyAmJlxuICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlcj8ucHJvcGVydHlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IFN0cmluZyhmaWx0ZXJJdGVtLmZpbHRlci5maWx0ZXJpbmcpXG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gU3RyaW5nKFxuICAgICAgICAgICAgaXRlbVtmaWx0ZXJJdGVtLmZpbHRlci5wcm9wZXJ0eV1cbiAgICAgICAgICApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlckl0ZW0uYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgZmlsdGVySXRlbS5kYXRlRmlsdGVyPy5pbml0aWFsICYmXG4gICAgICAgIGZpbHRlckl0ZW0uZGF0ZUZpbHRlcj8uZmluYWwgJiZcbiAgICAgICAgc29ydEJ5LmZpZWxkXG4gICAgICApIHtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gaXRlbVtzb3J0QnkuZmllbGRdO1xuXG4gICAgICAgICAgICBpZiAoIWZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaXRlbURhdGU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUudG9EYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGl0ZW1EYXRlID0gZmllbGRWYWx1ZS50b0RhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgaXRlbURhdGUgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgaXRlbURhdGUgPSBuZXcgRGF0ZShmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgaWYgKGlzTmFOKGl0ZW1EYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIGl0ZW1EYXRlID0gbmV3IERhdGUoZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGl0ZW1EYXRlID49IGZpbHRlckl0ZW0uZGF0ZUZpbHRlci5pbml0aWFsICYmXG4gICAgICAgICAgICAgIGl0ZW1EYXRlIDw9IGZpbHRlckl0ZW0uZGF0ZUZpbHRlci5maW5hbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAnRXJybyBhbyBwcm9jZXNzYXIgZmlsdHJvIGRlIGRhdGEgcGFyYSBvIGl0ZW06JyxcbiAgICAgICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFwbGljYXIgZmlsdGVyRm4gc2UgZXhpc3RpclxuICAgIGlmIChwYXJhbXMuZmlsdGVyRm4pIHtcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKHBhcmFtcy5maWx0ZXJGbik7XG4gICAgfVxuXG4gICAgaWYgKHNvcnRCeSAmJiBzb3J0QnkuZmllbGQgJiYgc29ydEJ5Lm9yZGVyKSB7XG4gICAgICBpdGVtcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB2YWxBID0gYVtzb3J0QnkuZmllbGRdO1xuICAgICAgICBjb25zdCB2YWxCID0gYltzb3J0QnkuZmllbGRdO1xuXG4gICAgICAgIGlmICh2YWxBIDwgdmFsQikge1xuICAgICAgICAgIHJldHVybiBzb3J0Qnkub3JkZXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxBID4gdmFsQikge1xuICAgICAgICAgIHJldHVybiBzb3J0Qnkub3JkZXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW1wbGVtZW50YcOnw6NvIGFkZXF1YWRhIGRhIHBhZ2luYcOnw6NvXG4gICAgbGV0IGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuXG4gICAgLy8gRGV0ZXJtaW5hciBhIHDDoWdpbmEgYXR1YWwgYmFzZWFkYSBuYSBuYXZlZ2HDp8Ojb1xuICAgIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcGFyYW1zLmNsaWVudFBhZ2VJbmRleCB8fCAwO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VTaXplID0gcGFyYW1zLmJhdGNoU2l6ZTtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gY3VycmVudENsaWVudFBhZ2VJbmRleCAqIHBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2luYXRlZEl0ZW1zID0gaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChpdGVtcy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgY29uc3QgaGFzTmV4dFBhZ2UgPSBjdXJyZW50Q2xpZW50UGFnZUluZGV4IDwgdG90YWxQYWdlcyAtIDE7XG4gICAgY29uc3QgaGFzUHJldmlvdXNQYWdlID0gY3VycmVudENsaWVudFBhZ2VJbmRleCA+IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHBhZ2luYXRlZEl0ZW1zLFxuICAgICAgZmlsdGVyTGVuZ3RoOiBpdGVtcy5sZW5ndGgsXG4gICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgZmlyc3REb2M6IG51bGwsXG4gICAgICBoYXNOZXh0UGFnZTogaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2aW91c1BhZ2U6IGhhc1ByZXZpb3VzUGFnZSxcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IGN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXG4gICAgICB0b3RhbFBhZ2VzOiB0b3RhbFBhZ2VzLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRJdGVtc0RhdGEoXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9XG4gICAgICAgIHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sbGVjdGlvbikucmVmO1xuXG4gICAgICBxdWVyeSA9IHRoaXMuYXBwbHlGaWx0ZXJzKHF1ZXJ5LCBhcnJhbmdlLCBjb25kaXRpb25zKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHNuYXBzaG90LmRvY3MubWFwKFxuICAgICAgICAgIGFzeW5jIChkb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkb2MuZGF0YSgpIGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZG9jLmlkO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVyYXRvcnMgPSB7XG4gICAgJz09JzogKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiBhID09PSBiLFxuICAgICchPSc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSAhPT0gYixcbiAgICAnPic6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSA+IGIsXG4gICAgJzwnOiAoYTogYW55LCBiOiBhbnkpOiBib29sZWFuID0+IGEgPCBiLFxuICAgICc+PSc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSA+PSBiLFxuICAgICc8PSc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSA8PSBiLFxuICAgIGluOiAoYTogYW55LCBiOiBhbnkpOiBib29sZWFuID0+IEFycmF5LmlzQXJyYXkoYikgJiYgYi5pbmNsdWRlcyhhKSxcbiAgICAnbm90LWluJzogKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiBBcnJheS5pc0FycmF5KGIpICYmICFiLmluY2x1ZGVzKGEpLFxuICAgICdhcnJheS1jb250YWlucyc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT5cbiAgICAgIEFycmF5LmlzQXJyYXkoYSkgJiYgYS5pbmNsdWRlcyhiKSxcbiAgICAnYXJyYXktY29udGFpbnMtYW55JzogKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PlxuICAgICAgQXJyYXkuaXNBcnJheShhKSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShiKSAmJlxuICAgICAgYi5zb21lKChpdGVtOiBhbnkpID0+IGEuaW5jbHVkZXMoaXRlbSkpLFxuICAgIGluY2x1ZGVzOiAoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4gYS5pbmNsdWRlcyhiKSwgLy8gUGFyYSBzdHJpbmdzIG91IGFycmF5c1xuICB9O1xuXG4gIGFzeW5jIGRlbGV0ZUluZGV4KGlkOiBzdHJpbmcsIGNvbDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5uZ0ZpcmUuZmlyZXN0b3JlLmJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sKS5kb2MoaWQpO1xuICAgICAgY29uc3QgZG9jU25hcHNob3QgPSAoYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIGRvY1JlZi5nZXQoKVxuICAgICAgKSkgYXMgZmlyZWJhc2UuZmlyZXN0b3JlLkRvY3VtZW50U25hcHNob3Q8dW5rbm93bj47XG4gICAgICBjb25zdCBkb2MgPSBkb2NTbmFwc2hvdC5kYXRhKCkgYXMgYW55O1xuICAgICAgYmF0Y2guZGVsZXRlKGRvY1JlZi5yZWYpO1xuICAgICAgaWYgKGRvYyAmJiB0eXBlb2YgZG9jLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBhd2FpdCB0aGlzLnJlaW5kZXgoZG9jLmluZGV4LCBjb2wsIGJhdGNoKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuXG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdJdGVtIGV4Y2x1w61kbyBjb20gc3VjZXNzbyEnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBhbnk7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIGRlbGV0YXIgaXRlbTonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcignRXJybyBhbyBkZWxldGFyIGl0ZW0uJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVpbmRleChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNvbDogc3RyaW5nLFxuICAgIGJhdGNoOiBmaXJlYmFzZS5maXJlc3RvcmUuV3JpdGVCYXRjaFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc25hcHNob3QgPSAoYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sKS5nZXQoKVxuICAgICAgKSkgYXMgZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5U25hcHNob3Q8dW5rbm93bj47XG4gICAgICBjb25zdCBkb2NzID0gc25hcHNob3QuZG9jcztcbiAgICAgIGZvciAobGV0IGRvYyBvZiBkb2NzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkb2MuZGF0YSgpIGFzIGFueTtcbiAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEuaW5kZXggPT09ICdudW1iZXInICYmIGRhdGEuaW5kZXggPiBpbmRleCkge1xuICAgICAgICAgIGRhdGEuaW5kZXgtLTtcbiAgICAgICAgICBjb25zdCBkb2NSZWYgPSB0aGlzLm5nRmlyZS5jb2xsZWN0aW9uKGNvbCkuZG9jKGRvYy5pZCkucmVmO1xuICAgICAgICAgIGJhdGNoLnVwZGF0ZShkb2NSZWYsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gcmVpbmRleGFyOicsIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGF0ZUZvcm1hdFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGVTdHIgPSBjb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJuID0gL14oXFxkezEsMn0pXFwvKFxcZHsxLDJ9KVxcLyhcXGR7NH0pJC87XG5cbiAgICAgIGlmICghZGF0ZVBhdHRlcm4udGVzdChkYXRlU3RyKSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkRm9ybWF0OiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnRzID0gZGF0ZVN0ci5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgZGF5ID0gcGFydHNbMF0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcGFydHNbMV0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHllYXIgPSBwYXJ0c1syXTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcblxuICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChub3JtYWxpemVkRGF0ZSwgJ0REL01NL1lZWVknLCB0cnVlKTtcblxuICAgICAgaWYgKCFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkRGF0ZTogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlSW5kZXgoaW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZywgY29sOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLm5nRmlyZS5jb2xsZWN0aW9uKGNvbCkuZG9jKGlkKS51cGRhdGUoeyBpbmRleCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWkgbyBsaW5rIGRlIGNyaWHDp8OjbyBkZSDDrW5kaWNlIGRhIG1lbnNhZ2VtIGRlIGVycm8gZG8gRmlyZXN0b3JlXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RJbmRleExpbmsoZXJyb3I6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghZXJyb3IgfHwgIWVycm9yLm1lc3NhZ2UpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbGlua01hdGNoID0gZXJyb3IubWVzc2FnZS5tYXRjaChcbiAgICAgIC8oaHR0cHM6XFwvXFwvY29uc29sZVxcLmZpcmViYXNlXFwuZ29vZ2xlXFwuY29tXFwvW15cXHNdKykvXG4gICAgKTtcbiAgICByZXR1cm4gbGlua01hdGNoID8gbGlua01hdGNoWzFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYXN0cmVpYSDDrW5kaWNlcyBhdXNlbnRlcyBhbyB1c2FyIGZhbGxiYWNrIHByZXZlbnRpdm9cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdHJhY2tNaXNzaW5nSW5kZXhQcmV2ZW50aXZlKFxuICAgIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgICBhcnJhbmdlOiBBcnJhbmdlLFxuICAgIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVNpZ25hdHVyZSA9IHRoaXMuZ2VuZXJhdGVRdWVyeVNpZ25hdHVyZShcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgYXJyYW5nZSxcbiAgICAgICAgY29uZGl0aW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGRvY0lkID0gYCR7Y29sbGVjdGlvbn1fJHtxdWVyeVNpZ25hdHVyZX1gO1xuXG4gICAgICBjb25zdCBpbmRleExpbmsgPSB0aGlzLmdlbmVyYXRlSW5kZXhMaW5rKGNvbGxlY3Rpb24sIGFycmFuZ2UsIGNvbmRpdGlvbnMpO1xuXG4gICAgICBjb25zdCBpbmRleEluc3RydWN0aW9ucyA9IHRoaXMuZ2VuZXJhdGVJbmRleEluc3RydWN0aW9ucyhcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgYXJyYW5nZSxcbiAgICAgICAgY29uZGl0aW9uc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhY2tpbmdEYXRhOiBhbnkgPSB7XG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGluZGV4TGluayxcbiAgICAgICAgaW5kZXhJbnN0cnVjdGlvbnMsXG4gICAgICAgIGFycmFuZ2U6IHtcbiAgICAgICAgICBzb3J0Qnk6IGFycmFuZ2Uuc29ydEJ5LFxuICAgICAgICAgIGZpbHRlcnM6XG4gICAgICAgICAgICBhcnJhbmdlLmZpbHRlcnM/Lm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBhcnJhbmdlOiBmLmFycmFuZ2UsXG4gICAgICAgICAgICAgIHByb3BlcnR5OiBmLmZpbHRlcj8ucHJvcGVydHkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgZGF0ZUZpZWxkOlxuICAgICAgICAgICAgICAgIGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgPyBhcnJhbmdlLnNvcnRCeT8uZmllbGQgOiBudWxsLFxuICAgICAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB9LFxuICAgICAgICBjb25kaXRpb25zOlxuICAgICAgICAgIGNvbmRpdGlvbnM/Lm1hcCgoYzogQ29uZGl0aW9uKSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IGMuZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIGVycm9yTWVzc2FnZTogYEZhbGxiYWNrIHByZXZlbnRpdm8gdXNhZG8gcGFyYSBhIGNvbGxlY3Rpb24gJHtjb2xsZWN0aW9ufS4gQSBxdWVyeSBleGlnaXJpYSDDrW5kaWNlIGNvbXBvc3RvLmAsXG4gICAgICAgIHVwZGF0ZWRBdDogZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICB9O1xuXG4gICAgICBjb25zb2xlLmxvZygn8J+ThCBbSU5ERVggTElOS10gRGFkb3MgcXVlIHNlcsOjbyBzYWx2b3Mgbm8gZG9jdW1lbnRvOicsIHtcbiAgICAgICAgZG9jSWQsXG4gICAgICAgIGNvbGxlY3Rpb246IHRyYWNraW5nRGF0YS5jb2xsZWN0aW9uLFxuICAgICAgICBpbmRleExpbms6IHRyYWNraW5nRGF0YS5pbmRleExpbmssXG4gICAgICAgIGFycmFuZ2U6IHRyYWNraW5nRGF0YS5hcnJhbmdlLFxuICAgICAgICBjb25kaXRpb25zOiB0cmFja2luZ0RhdGEuY29uZGl0aW9ucyxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiB0cmFja2luZ0RhdGEuZXJyb3JNZXNzYWdlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oJ21pc3NpbmdJbmRleGVzJykuZG9jKGRvY0lkKTtcbiAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKS50b1Byb21pc2UoKTtcblxuICAgICAgaWYgKGRvYyAmJiBkb2MuZXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IGRvY1JlZi51cGRhdGUoe1xuICAgICAgICAgIGNvdW50OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5pbmNyZW1lbnQoMSksXG4gICAgICAgICAgdXBkYXRlZEF0OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgICBsYXN0RXJyb3I6IHRyYWNraW5nRGF0YS5lcnJvck1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZG9jUmVmLnNldCh7XG4gICAgICAgICAgLi4udHJhY2tpbmdEYXRhLFxuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNyZWF0ZWRBdDogZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHRyYWNraW5nRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFsaGEgYW8gcmFzdHJlYXIgZmFsbGJhY2sgcHJldmVudGl2bzonLCB0cmFja2luZ0Vycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VyYSB1bWEgYXNzaW5hdHVyYSDDum5pY2EgcGFyYSB1bWEgcXVlcnlcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVRdWVyeVNpZ25hdHVyZShcbiAgICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gICAgYXJyYW5nZTogQXJyYW5nZSxcbiAgICBjb25kaXRpb25zOiBDb25kaXRpb25bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHtcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBzb3J0Qnk6IGFycmFuZ2Uuc29ydEJ5LFxuICAgICAgZmlsdGVyczpcbiAgICAgICAgYXJyYW5nZS5maWx0ZXJzPy5tYXAoKGY6IGFueSkgPT4gKHtcbiAgICAgICAgICBhcnJhbmdlOiBmLmFycmFuZ2UsXG4gICAgICAgICAgcHJvcGVydHk6IGYuZmlsdGVyPy5wcm9wZXJ0eSB8fCBudWxsLFxuICAgICAgICB9KSkgfHwgW10sXG4gICAgICBjb25kaXRpb25zOlxuICAgICAgICBjb25kaXRpb25zPy5tYXAoKGM6IENvbmRpdGlvbikgPT4gKHtcbiAgICAgICAgICBwcm9wZXJ0eTogYy5maXJlc3RvcmVQcm9wZXJ0eSxcbiAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgIH07XG5cbiAgICByZXR1cm4gYnRvYShKU09OLnN0cmluZ2lmeShzaWduYXR1cmUpKVxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnJylcbiAgICAgIC5zdWJzdHJpbmcoMCwgMjApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlcmEgaW5zdHJ1w6fDtWVzIGNsYXJhcyBwYXJhIGNyaWFyIG8gw61uZGljZSBtYW51YWxtZW50ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUluZGV4SW5zdHJ1Y3Rpb25zKFxuICAgIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgICBhcnJhbmdlOiBBcnJhbmdlLFxuICAgIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICk6IGFueSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBhbnkgPSB7XG4gICAgICBzdW1tYXJ5OiAnJyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG4gICAgICBmaWVsZHM6IFtdIGFzIGFueVtdLFxuICAgICAgcXVlcnlFeGFtcGxlOiAnJyxcbiAgICAgIHN0ZXBCeVN0ZXA6IFtdIGFzIHN0cmluZ1tdLFxuICAgICAgbm90ZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZHM6IGFueVtdID0gW107XG5cbiAgICBpZiAoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZGl0aW9uOiBDb25kaXRpb24pID0+IHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5maXJlc3RvcmVQcm9wZXJ0eSkge1xuICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBjb25kaXRpb24uZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgICBvcmRlcjogJ0FzY2VuZGluZycsXG4gICAgICAgICAgICB0eXBlOiAnV0hFUkUgY2xhdXNlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEZpbHRyYXIgcG9yICR7Y29uZGl0aW9uLmZpcmVzdG9yZVByb3BlcnR5fSB1c2FuZG8gb3BlcmFkb3IgJHtjb25kaXRpb24ub3BlcmF0b3J9YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFycmFuZ2UuZmlsdGVycyAmJiBhcnJhbmdlLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgYXJyYW5nZS5maWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuZmlsdGVyPy5wcm9wZXJ0eSkge1xuICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBmaWx0ZXIuZmlsdGVyLnByb3BlcnR5LFxuICAgICAgICAgICAgb3JkZXI6ICdBc2NlbmRpbmcnLFxuICAgICAgICAgICAgdHlwZTogJ1dIRVJFIGNsYXVzZSAoZmlsdGVyKScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXInID8gJ0NPTlRBSU5TJyA6ICdSQU5HRScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEZpbHRyYXIgcG9yICR7ZmlsdGVyLmZpbHRlci5wcm9wZXJ0eX0gdXNhbmRvIGZpbHRybyAke2ZpbHRlci5hcnJhbmdlfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhcnJhbmdlLnNvcnRCeT8uZmllbGQpIHtcbiAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgZmllbGQ6IGFycmFuZ2Uuc29ydEJ5LmZpZWxkLFxuICAgICAgICBvcmRlcjogYXJyYW5nZS5zb3J0Qnkub3JkZXIgPT09ICdkZXNjJyA/ICdEZXNjZW5kaW5nJyA6ICdBc2NlbmRpbmcnLFxuICAgICAgICB0eXBlOiAnT1JERVIgQlkgY2xhdXNlJyxcbiAgICAgICAgb3BlcmF0b3I6ICdOL0EnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYE9yZGVuYXIgcmVzdWx0YWRvcyBwb3IgJHthcnJhbmdlLnNvcnRCeS5maWVsZH0gZW0gb3JkZW0gJHthcnJhbmdlLnNvcnRCeS5vcmRlcn1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zdHJ1Y3Rpb25zLmZpZWxkcyA9IGZpZWxkcztcblxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBmaWVsZHMubWFwKChmOiBhbnkpID0+IGYuZmllbGQpLmpvaW4oJyArICcpO1xuICAgIGluc3RydWN0aW9ucy5zdW1tYXJ5ID0gYENyaWFyIMOtbmRpY2UgY29tcG9zdG8gcGFyYSAke2NvbGxlY3Rpb259OiAke2ZpZWxkTmFtZXN9YDtcblxuICAgIGxldCBxdWVyeUV4YW1wbGUgPSBgZGIuY29sbGVjdGlvbignJHtjb2xsZWN0aW9ufScpYDtcblxuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZS5pbmNsdWRlcygnV0hFUkUnKSkge1xuICAgICAgICBpZiAoZmllbGQub3BlcmF0b3IgPT09ICc9PScpIHtcbiAgICAgICAgICBxdWVyeUV4YW1wbGUgKz0gYFxcbiAgLndoZXJlKCcke2ZpZWxkLmZpZWxkfScsICc9PScsICd2YWx1ZScpYDtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5vcGVyYXRvciA9PT0gJ0NPTlRBSU5TJykge1xuICAgICAgICAgIHF1ZXJ5RXhhbXBsZSArPSBgXFxuICAud2hlcmUoJyR7ZmllbGQuZmllbGR9JywgJz49JywgJ3NlYXJjaFRleHQnKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlcnlFeGFtcGxlICs9IGBcXG4gIC53aGVyZSgnJHtmaWVsZC5maWVsZH0nLCAnJHtmaWVsZC5vcGVyYXRvcn0nLCAndmFsdWUnKWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9yZGVyQnlGaWVsZCA9IGZpZWxkcy5maW5kKChmOiBhbnkpID0+IGYudHlwZS5pbmNsdWRlcygnT1JERVIgQlknKSk7XG4gICAgaWYgKG9yZGVyQnlGaWVsZCkge1xuICAgICAgcXVlcnlFeGFtcGxlICs9IGBcXG4gIC5vcmRlckJ5KCcke1xuICAgICAgICBvcmRlckJ5RmllbGQuZmllbGRcbiAgICAgIH0nLCAnJHtvcmRlckJ5RmllbGQub3JkZXIudG9Mb3dlckNhc2UoKX0nKWA7XG4gICAgfVxuXG4gICAgaW5zdHJ1Y3Rpb25zLnF1ZXJ5RXhhbXBsZSA9IHF1ZXJ5RXhhbXBsZTtcblxuICAgIGluc3RydWN0aW9ucy5zdGVwQnlTdGVwID0gW1xuICAgICAgJzEuIElyIHBhcmEgRmlyZWJhc2UgQ29uc29sZSDihpIgRmlyZXN0b3JlIOKGkiBJbmRleGVzJyxcbiAgICAgICcyLiBDbGljYXIgZW0gXCJDcmVhdGUgSW5kZXhcIicsXG4gICAgICBgMy4gRGVmaW5pciBDb2xsZWN0aW9uIElEOiAke2NvbGxlY3Rpb259YCxcbiAgICAgICc0LiBDb25maWd1cmFyIGNhbXBvcyBuZXN0YSBPUkRFTSBFWEFUQTonLFxuICAgICAgLi4uZmllbGRzLm1hcChcbiAgICAgICAgKGZpZWxkOiBhbnksIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgYCAgICR7aW5kZXggKyAxfS4gQ2FtcG86ICR7ZmllbGQuZmllbGR9LCBPcmRlcjogJHtcbiAgICAgICAgICAgIGZpZWxkLm9yZGVyXG4gICAgICAgICAgfSwgQXJyYXk6IE5vYFxuICAgICAgKSxcbiAgICAgICc1LiBEZWZpbmlyIFF1ZXJ5IHNjb3BlczogQ29sbGVjdGlvbicsXG4gICAgICAnNi4gQ2xpY2FyIGVtIFwiQ3JlYXRlXCIgZSBhZ3VhcmRhciBjb25jbHVzw6NvJyxcbiAgICBdO1xuXG4gICAgaW5zdHJ1Y3Rpb25zLm5vdGVzID0gW1xuICAgICAgJ+KaoO+4jyBBIG9yZGVtIGRvcyBjYW1wb3Mgw6kgQ1LDjVRJQ0EgLSBkZXZlIGNvcnJlc3BvbmRlciBleGF0YW1lbnRlIMOgIG9yZGVtIGRhIHF1ZXJ5JyxcbiAgICAgICfimqDvuI8gQXMgY2zDoXVzdWxhcyBXSEVSRSBkZXZlbSB2aXIgQU5URVMgZG8gY2FtcG8gT1JERVIgQlknLFxuICAgICAgJ+KaoO+4jyBFc3RlIMOtbmRpY2Ugc8OzIGZ1bmNpb25hcsOhIHBhcmEgcXVlcmllcyBjb20gZXN0YSBjb21iaW5hw6fDo28gRVhBVEEgZGUgY2FtcG9zJyxcbiAgICAgICfimqDvuI8gQSBjcmlhw6fDo28gZG8gw61uZGljZSBwb2RlIGxldmFyIHbDoXJpb3MgbWludXRvcycsXG4gICAgXTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2VyYSB1bSBsaW5rIGRlIMOtbmRpY2UgYmFzZWFkbyBuYSBlc3RydXR1cmEgZGEgcXVlcnlcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVJbmRleExpbmsoXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluZGV4RmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBpZiAoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uZGl0aW9ucy5mb3JFYWNoKChjb25kaXRpb246IENvbmRpdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChjb25kaXRpb24uZmlyZXN0b3JlUHJvcGVydHkpIHtcbiAgICAgICAgICAgIGluZGV4RmllbGRzLnB1c2goY29uZGl0aW9uLmZpcmVzdG9yZVByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJyYW5nZS5maWx0ZXJzICYmIGFycmFuZ2UuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFycmFuZ2UuZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXIuZmlsdGVyPy5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgaW5kZXhGaWVsZHMucHVzaChmaWx0ZXIuZmlsdGVyLnByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJyYW5nZS5zb3J0Qnk/LmZpZWxkKSB7XG4gICAgICAgIGluZGV4RmllbGRzLnB1c2goYXJyYW5nZS5zb3J0QnkuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXhGaWVsZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBPYnRlciBvIHByb2plY3RJZCBkaW5hbWljYW1lbnRlIGRvIEZpcmViYXNlXG4gICAgICAgIGNvbnN0IHByb2plY3RJZCA9ICh0aGlzLm5nRmlyZT8uZmlyZXN0b3JlPy5hcHA/Lm9wdGlvbnMgYXMgYW55KVxuICAgICAgICAgID8ucHJvamVjdElkO1xuXG4gICAgICAgIGlmICghcHJvamVjdElkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgbyBwcm9qZWN0SWQgZG8gRmlyZWJhc2UnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBgaHR0cHM6Ly9jb25zb2xlLmZpcmViYXNlLmdvb2dsZS5jb20vcHJvamVjdC8ke3Byb2plY3RJZH0vZmlyZXN0b3JlL2luZGV4ZXNgO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGNyZWF0ZV9jb21wb3NpdGU6IGBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbn0mZmllbGRzPSR7aW5kZXhGaWVsZHMuam9pbihcbiAgICAgICAgICAgICcsJ1xuICAgICAgICAgICl9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmluYWxMaW5rID0gYCR7YmFzZVVybH0/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgICAgIHJldHVybiBmaW5hbExpbms7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhbGhhIGFvIGdlcmFyIGxpbmsgZGUgw61uZGljZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyYWNrTWlzc2luZ0luZGV4KFxuICAgIGVycm9yOiBhbnksXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluZGV4TGluayA9IHRoaXMuZXh0cmFjdEluZGV4TGluayhlcnJvcik7XG4gICAgICBpZiAoIWluZGV4TGluaykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaW5rSGFzaCA9IGJ0b2EoaW5kZXhMaW5rKVxuICAgICAgICAucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKVxuICAgICAgICAuc3Vic3RyaW5nKDAsIDIwKTtcbiAgICAgIGNvbnN0IGRvY0lkID0gYCR7Y29sbGVjdGlvbn1fJHtsaW5rSGFzaH1gO1xuXG4gICAgICBjb25zdCBpbmRleEluc3RydWN0aW9ucyA9IHRoaXMuZ2VuZXJhdGVJbmRleEluc3RydWN0aW9ucyhcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgYXJyYW5nZSxcbiAgICAgICAgY29uZGl0aW9uc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhY2tpbmdEYXRhOiBhbnkgPSB7XG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGluZGV4TGluayxcbiAgICAgICAgaW5kZXhJbnN0cnVjdGlvbnMsXG4gICAgICAgIGFycmFuZ2U6IHtcbiAgICAgICAgICBzb3J0Qnk6IGFycmFuZ2Uuc29ydEJ5LFxuICAgICAgICAgIGZpbHRlcnM6XG4gICAgICAgICAgICBhcnJhbmdlLmZpbHRlcnM/Lm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBhcnJhbmdlOiBmLmFycmFuZ2UsXG4gICAgICAgICAgICAgIHByb3BlcnR5OiBmLmZpbHRlcj8ucHJvcGVydHkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgZGF0ZUZpZWxkOlxuICAgICAgICAgICAgICAgIGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgPyBhcnJhbmdlLnNvcnRCeT8uZmllbGQgOiBudWxsLFxuICAgICAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB9LFxuICAgICAgICBjb25kaXRpb25zOlxuICAgICAgICAgIGNvbmRpdGlvbnM/Lm1hcCgoYzogQ29uZGl0aW9uKSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IGMuZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgdXBkYXRlZEF0OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oJ21pc3NpbmdJbmRleGVzJykuZG9jKGRvY0lkKTtcbiAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKS50b1Byb21pc2UoKTtcblxuICAgICAgaWYgKGRvYyAmJiBkb2MuZXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IGRvY1JlZi51cGRhdGUoe1xuICAgICAgICAgIGNvdW50OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5pbmNyZW1lbnQoMSksXG4gICAgICAgICAgdXBkYXRlZEF0OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgICBsYXN0RXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZG9jUmVmLnNldCh7XG4gICAgICAgICAgLi4udHJhY2tpbmdEYXRhLFxuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNyZWF0ZWRBdDogZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHRyYWNraW5nRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFsaGEgYW8gcmFzdHJlYXIgw61uZGljZSBhdXNlbnRlOicsIHRyYWNraW5nRXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
1117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZpcmViYXNlLXRhYmxlLWt4cC9zcmMvbGliL3NlcnZpY2VzL3RhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNckQsT0FBTyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7QUFjakMsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFDc0IsTUFBd0IsRUFDeEIsTUFBaUIsRUFDakIsTUFBcUI7UUFGckIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBd2dDcEMsY0FBUyxHQUFHO1lBQ2pCLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFDLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzFDLEdBQUcsRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLEdBQUcsRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksRUFBRSxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pDLEVB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QUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25FLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRTNDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQztvQkFDbEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUU7b0JBQzFELFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTztpQkFDekIsQ0FBQyxDQUFDO2FBQ0o7aUJBQU07Z0JBQ0wsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDO29CQUNmLEdBQUcsWUFBWTtvQkFDZixLQUFLLEVBQUUsQ0FBQztvQkFDUixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFO2lCQUMzRCxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQUMsT0FBTyxhQUFhLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7OzBHQTc4Q1UsWUFBWTs4R0FBWixZQUFZOzRGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQUdOLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5ndWxhckZpcmVzdG9yZSxcbiAgQ29sbGVjdGlvblJlZmVyZW5jZSxcbiAgUXVlcnlEb2N1bWVudFNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdC9hcHAnO1xuaW1wb3J0IHsgQXJyYW5nZSwgQ29uZGl0aW9uLCBQYWdpbmF0aW9uIH0gZnJvbSAnLi4vdHlwZXMvVGFibGUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmludGVyZmFjZSBQYWdpbmF0aW9uUmVzdWx0IHtcbiAgaXRlbXM6IGFueVtdO1xuICBmaWx0ZXJMZW5ndGg6IG51bWJlciB8IG51bGw7XG4gIGZpcnN0RG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+IHwgbnVsbDtcbiAgbGFzdERvYzogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IG51bGw7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBoYXNQcmV2aW91c1BhZ2U/OiBib29sZWFuO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4PzogbnVtYmVyO1xuICB0b3RhbFBhZ2VzPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGVTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ0ZpcmU6IEFuZ3VsYXJGaXJlc3RvcmUsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgZ2V0SXRlbXMoY29sbGVjdGlvbjogQ29sbGVjdGlvblJlZmVyZW5jZTx1bmtub3duPik6IFByb21pc2U8YW55W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlTbmFwc2hvdCA9IGF3YWl0IGNvbGxlY3Rpb24uZ2V0KCk7XG4gICAgICByZXR1cm4gcXVlcnlTbmFwc2hvdC5kb2NzLm1hcChcbiAgICAgICAgKGRvYzogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPikgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLihkb2MuZGF0YSgpIGFzIGFueSksIGlkOiBkb2MuaWQgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdDb2xsZWN0aW9uIG7Do28gZW5jb250cmFkYTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUXVlcnkocGFyYW1zOiBQYWdpbmF0aW9uKTogUHJvbWlzZTxQYWdpbmF0aW9uUmVzdWx0PiB7XG4gICAgaWYgKHBhcmFtcy5maWx0ZXJGbikge1xuICAgICAgLy8gTMOzZ2ljYSBjb20gZmlsdHJvIG5vIGNsaWVudGUgKGZpbHRlckZuKVxuICAgICAgY29uc3QgQkFUQ0hfRkVUQ0hfU0laRSA9IHBhcmFtcy5iYXRjaFNpemU7XG4gICAgICBjb25zdCBHT0FMX1NJWkUgPSBwYXJhbXMuYmF0Y2hTaXplICsgMTtcblxuICAgICAgaWYgKHBhcmFtcy5uYXZpZ2F0aW9uID09PSAnZm9yd2FyZCcgfHwgcGFyYW1zLm5hdmlnYXRpb24gPT09ICdyZWxvYWQnKSB7XG4gICAgICAgIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcgJiYgcGFyYW1zLmRvYykge1xuICAgICAgICAgIHBhcmFtcy5kb2MubGFzdERvYyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFzdERvY0N1cnNvcjogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IG51bGwgPVxuICAgICAgICAgIHBhcmFtcy5kb2MgPyBwYXJhbXMuZG9jLmxhc3REb2MgOiBudWxsO1xuICAgICAgICBsZXQgcGFnZVJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGxldCBhbGxGZXRjaGVkRG9jczogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPltdID1cbiAgICAgICAgICBbXTtcbiAgICAgICAgbGV0IGhhc01vcmVEb2NzSW5EYiA9IHRydWU7XG5cbiAgICAgICAgd2hpbGUgKHBhZ2VSZXN1bHRzLmxlbmd0aCA8IEdPQUxfU0laRSAmJiBoYXNNb3JlRG9jc0luRGIpIHtcbiAgICAgICAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oXG4gICAgICAgICAgICBwYXJhbXMuY29sbGVjdGlvblxuICAgICAgICAgICkucmVmO1xuICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5hcHBseUZpbHRlcnMocXVlcnksIHBhcmFtcy5hcnJhbmdlLCBwYXJhbXMuY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICBpZiAobGFzdERvY0N1cnNvcikge1xuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5zdGFydEFmdGVyKGxhc3REb2NDdXJzb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KEJBVENIX0ZFVENIX1NJWkUpO1xuXG4gICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBxdWVyeS5nZXQoKTtcblxuICAgICAgICAgIGlmIChzbmFwc2hvdC5lbXB0eSkge1xuICAgICAgICAgICAgaGFzTW9yZURvY3NJbkRiID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsYXN0RG9jQ3Vyc29yID0gc25hcHNob3QuZG9jc1tzbmFwc2hvdC5kb2NzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGFsbEZldGNoZWREb2NzLnB1c2goLi4uc25hcHNob3QuZG9jcyk7XG5cbiAgICAgICAgICBjb25zdCBiYXRjaFVzZXJzID0gc25hcHNob3QuZG9jc1xuICAgICAgICAgICAgLm1hcCgoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICBpZDogZG9jLmlkLFxuICAgICAgICAgICAgICAuLi4oZG9jLmRhdGEoKSBhcyBhbnkpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHBhcmFtcy5maWx0ZXJGbik7XG5cbiAgICAgICAgICBwYWdlUmVzdWx0cy5wdXNoKC4uLmJhdGNoVXNlcnMpO1xuXG4gICAgICAgICAgaWYgKHNuYXBzaG90LnNpemUgPCBCQVRDSF9GRVRDSF9TSVpFKSB7XG4gICAgICAgICAgICBoYXNNb3JlRG9jc0luRGIgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYXNOZXh0UGFnZSA9IHBhZ2VSZXN1bHRzLmxlbmd0aCA+IHBhcmFtcy5iYXRjaFNpemU7XG4gICAgICAgIGNvbnN0IGZpbmFsSXRlbXMgPSBwYWdlUmVzdWx0cy5zbGljZSgwLCBwYXJhbXMuYmF0Y2hTaXplKTtcblxuICAgICAgICBjb25zdCBmaXJzdERvY09mUGFnZSA9XG4gICAgICAgICAgYWxsRmV0Y2hlZERvY3MuZmluZChcbiAgICAgICAgICAgIChkb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4pID0+XG4gICAgICAgICAgICAgIGRvYy5pZCA9PT0gZmluYWxJdGVtc1swXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGxhc3REb2NPZlBhZ2UgPVxuICAgICAgICAgIGFsbEZldGNoZWREb2NzLmZpbmQoXG4gICAgICAgICAgICAoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PlxuICAgICAgICAgICAgICBkb2MuaWQgPT09IGZpbmFsSXRlbXNbZmluYWxJdGVtcy5sZW5ndGggLSAxXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtczogZmluYWxJdGVtcyxcbiAgICAgICAgICBmaWx0ZXJMZW5ndGg6IG51bGwsXG4gICAgICAgICAgZmlyc3REb2M6IGZpcnN0RG9jT2ZQYWdlLFxuICAgICAgICAgIGxhc3REb2M6IGxhc3REb2NPZlBhZ2UsXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IGhhc05leHRQYWdlLFxuICAgICAgICAgIGhhc1ByZXZpb3VzUGFnZTpcbiAgICAgICAgICAgICEhKHBhcmFtcy5kb2MgJiYgcGFyYW1zLmRvYy5sYXN0RG9jKSAmJlxuICAgICAgICAgICAgcGFyYW1zLm5hdmlnYXRpb24gIT09ICdyZWxvYWQnLFxuICAgICAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEzDs2dpY2EgcGFyYSB0csOhcyAoYmFja3dhcmQpXG4gICAgICBlbHNlIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ2JhY2t3YXJkJykge1xuICAgICAgICBpZiAoIXBhcmFtcy5kb2MgfHwgIXBhcmFtcy5kb2MuZmlyc3REb2MpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgZmlsdGVyTGVuZ3RoOiBudWxsLFxuICAgICAgICAgICAgZmlyc3REb2M6IG51bGwsXG4gICAgICAgICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IHRydWUsXG4gICAgICAgICAgICBoYXNQcmV2aW91c1BhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFnZVJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGxldCBhbGxGZXRjaGVkRG9jczogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPltdID1cbiAgICAgICAgICBbXTtcbiAgICAgICAgbGV0IGhhc01vcmVEb2NzSW5EYiA9IHRydWU7XG5cbiAgICAgICAgbGV0IGJvdW5kYXJ5RG9jID0gcGFyYW1zLmRvYy5maXJzdERvYztcblxuICAgICAgICB3aGlsZSAocGFnZVJlc3VsdHMubGVuZ3RoIDwgR09BTF9TSVpFICYmIGhhc01vcmVEb2NzSW5EYikge1xuICAgICAgICAgIGxldCBxdWVyeTogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5PHVua25vd24+ID0gdGhpcy5uZ0ZpcmUuY29sbGVjdGlvbihcbiAgICAgICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uXG4gICAgICAgICAgKS5yZWY7XG5cbiAgICAgICAgICBxdWVyeSA9IHRoaXMuYXBwbHlGaWx0ZXJzKHF1ZXJ5LCBwYXJhbXMuYXJyYW5nZSwgcGFyYW1zLmNvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgcXVlcnkgPSBxdWVyeS5lbmRCZWZvcmUoYm91bmRhcnlEb2MpO1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXRUb0xhc3QoQkFUQ0hfRkVUQ0hfU0laRSk7XG5cbiAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHF1ZXJ5LmdldCgpO1xuXG4gICAgICAgICAgaWYgKHNuYXBzaG90LmVtcHR5KSB7XG4gICAgICAgICAgICBoYXNNb3JlRG9jc0luRGIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJvdW5kYXJ5RG9jID0gc25hcHNob3QuZG9jc1swXSBhcyBhbnk7XG5cbiAgICAgICAgICBhbGxGZXRjaGVkRG9jcyA9IFsuLi5zbmFwc2hvdC5kb2NzLCAuLi5hbGxGZXRjaGVkRG9jc107XG5cbiAgICAgICAgICBjb25zdCBiYXRjaFVzZXJzID0gc25hcHNob3QuZG9jc1xuICAgICAgICAgICAgLm1hcCgoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICBpZDogZG9jLmlkLFxuICAgICAgICAgICAgICAuLi4oZG9jLmRhdGEoKSBhcyBhbnkpLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHBhcmFtcy5maWx0ZXJGbik7XG5cbiAgICAgICAgICBwYWdlUmVzdWx0cyA9IFsuLi5iYXRjaFVzZXJzLCAuLi5wYWdlUmVzdWx0c107XG5cbiAgICAgICAgICBpZiAoc25hcHNob3Quc2l6ZSA8IEJBVENIX0ZFVENIX1NJWkUpIHtcbiAgICAgICAgICAgIGhhc01vcmVEb2NzSW5EYiA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbmFsSXRlbXMgPSBwYWdlUmVzdWx0cy5zbGljZSgwLCBwYXJhbXMuYmF0Y2hTaXplKTtcblxuICAgICAgICBjb25zdCBmaXJzdERvY09mUGFnZSA9XG4gICAgICAgICAgYWxsRmV0Y2hlZERvY3MuZmluZChcbiAgICAgICAgICAgIChkb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4pID0+XG4gICAgICAgICAgICAgIGRvYy5pZCA9PT0gZmluYWxJdGVtc1swXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGxhc3REb2NPZlBhZ2UgPVxuICAgICAgICAgIGFsbEZldGNoZWREb2NzLmZpbmQoXG4gICAgICAgICAgICAoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PlxuICAgICAgICAgICAgICBkb2MuaWQgPT09IGZpbmFsSXRlbXNbZmluYWxJdGVtcy5sZW5ndGggLSAxXT8uaWRcbiAgICAgICAgICApIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtczogZmluYWxJdGVtcyxcbiAgICAgICAgICBmaWx0ZXJMZW5ndGg6IG51bGwsXG4gICAgICAgICAgZmlyc3REb2M6IGZpcnN0RG9jT2ZQYWdlLFxuICAgICAgICAgIGxhc3REb2M6IGxhc3REb2NPZlBhZ2UsXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IHRydWUsXG4gICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XG4gICAgICBsZXQgZG9jczogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPltdID0gW107XG4gICAgICBsZXQgaGFzTmV4dFBhZ2UgPSBmYWxzZTtcbiAgICAgIGxldCBmaWx0ZXJMZW5ndGg6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuXG4gICAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uXG4gICAgICApLnJlZjtcblxuICAgICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICAgIHBhcmFtcy5jb25kaXRpb25zLmZvckVhY2goKGM6IENvbmRpdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnIT0nKSB7XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkoYy5maXJlc3RvcmVQcm9wZXJ0eSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcXVlcnkgPSB0aGlzLmFwcGx5RmlsdGVycyhxdWVyeSwgcGFyYW1zLmFycmFuZ2UsIHBhcmFtcy5jb25kaXRpb25zKTtcblxuICAgICAgaWYgKHBhcmFtcy5uYXZpZ2F0aW9uID09PSAncmVsb2FkJykge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0KHBhcmFtcy5iYXRjaFNpemUgKyAxKTtcbiAgICAgICAgaWYgKHBhcmFtcy5kb2MgJiYgcGFyYW1zLmRvYy5maXJzdERvYykge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RhcnRBdChwYXJhbXMuZG9jLmZpcnN0RG9jKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ2ZvcndhcmQnKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkubGltaXQocGFyYW1zLmJhdGNoU2l6ZSArIDEpO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZG9jICYmIHBhcmFtcy5kb2MubGFzdERvYykge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RhcnRBZnRlcihwYXJhbXMuZG9jLmxhc3REb2MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBiYWNrd2FyZFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LmxpbWl0VG9MYXN0KHBhcmFtcy5iYXRjaFNpemUgKyAxKTtcbiAgICAgICAgaWYgKHBhcmFtcy5kb2MgJiYgcGFyYW1zLmRvYy5maXJzdERvYykge1xuICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5kQmVmb3JlKHBhcmFtcy5kb2MuZmlyc3REb2MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGl0ZW1Db2wgPSBhd2FpdCBxdWVyeS5nZXQoKTtcbiAgICAgIGl0ZW1Db2wuZG9jcy5mb3JFYWNoKFxuICAgICAgICAoZG9jOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PlxuICAgICAgICAgIGRvY3MucHVzaChkb2MpXG4gICAgICApO1xuICAgICAgY29uc3QgaXRlbVByb21pc2VzID0gZG9jcy5tYXAoXG4gICAgICAgIGFzeW5jIChpdGVtOiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnlEb2N1bWVudFNuYXBzaG90PHVua25vd24+KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbURhdGEgPSBpdGVtLmRhdGEoKSBhcyBhbnk7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IGlkOiBpdGVtLmlkLCAuLi5pdGVtRGF0YSB9KTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgbGV0IGxhc3REb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCBudWxsID1cbiAgICAgICAgZG9jc1tkb2NzLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgICBsZXQgZmlyc3REb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCBudWxsID1cbiAgICAgICAgZG9jc1swXTtcblxuICAgICAgaWYgKFxuICAgICAgICAoaXRlbXMubGVuZ3RoID4gcGFyYW1zLmJhdGNoU2l6ZSAmJiBwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ2ZvcndhcmQnKSB8fFxuICAgICAgICAocGFyYW1zLm5hdmlnYXRpb24gPT09ICdyZWxvYWQnICYmIGl0ZW1zLmxlbmd0aCA+IHBhcmFtcy5iYXRjaFNpemUpXG4gICAgICApIHtcbiAgICAgICAgbGFzdERvYyA9IGRvY3NbZG9jcy5sZW5ndGggLSAyXSB8fCBudWxsO1xuICAgICAgICBpdGVtcy5wb3AoKTtcbiAgICAgICAgaGFzTmV4dFBhZ2UgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IHBhcmFtcy5iYXRjaFNpemUgJiYgcGFyYW1zLm5hdmlnYXRpb24gPT09ICdiYWNrd2FyZCcpIHtcbiAgICAgICAgZmlyc3REb2MgPSBkb2NzWzFdO1xuICAgICAgICBpdGVtcy5zaGlmdCgpO1xuICAgICAgICBoYXNOZXh0UGFnZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGl0ZW1Qcm9taXNlcyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtcyxcbiAgICAgICAgZmlsdGVyTGVuZ3RoLFxuICAgICAgICBsYXN0RG9jLFxuICAgICAgICBmaXJzdERvYyxcbiAgICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgcGFyYSBnYXJhbnRpciBxdWUgc2VtcHJlIHJldG9ybmFtb3MgYWxnb1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogW10sXG4gICAgICBmaWx0ZXJMZW5ndGg6IG51bGwsXG4gICAgICBmaXJzdERvYzogbnVsbCxcbiAgICAgIGxhc3REb2M6IG51bGwsXG4gICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4OiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycyhcbiAgICBxdWVyeTogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5PHVua25vd24+LFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWRcbiAgKTogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5PHVua25vd24+IHtcbiAgICBpZiAoY29uZGl0aW9ucykge1xuICAgICAgY29uZGl0aW9ucy5tYXAoKGNvbmQ6IENvbmRpdGlvbikgPT4ge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LndoZXJlKFxuICAgICAgICAgIGNvbmQuZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgY29uZC5vcGVyYXRvcixcbiAgICAgICAgICBjb25kLmRhc2hQcm9wZXJ0eVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGhhc0ZpbHRlclNwZWNpZmljT3JkZXJCeSA9IGZhbHNlO1xuICAgIGxldCBhcHBsaWVkT3JkZXJCeUZpZWxkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IGVxdWFsc0ZpbHRlcnMgPSBhcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGY6IGFueSkgPT4gZi5hcnJhbmdlID09PSAnZXF1YWxzJyAmJiBmLmZpbHRlclxuICAgICk7XG4gICAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gYXJyYW5nZS5maWx0ZXJzLmZpbHRlcihcbiAgICAgIChmOiBhbnkpID0+IGYuYXJyYW5nZSAhPT0gJ2VxdWFscydcbiAgICApO1xuXG4gICAgY29uc3QgZXF1YWxzR3JvdXBlZEJ5UHJvcGVydHkgPSBlcXVhbHNGaWx0ZXJzLnJlZHVjZShcbiAgICAgIChhY2M6IGFueSwgY3VycmVudDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBjdXJyZW50LmZpbHRlci5wcm9wZXJ0eTtcbiAgICAgICAgaWYgKCFhY2NbcHJvcF0pIHtcbiAgICAgICAgICBhY2NbcHJvcF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBhY2NbcHJvcF0ucHVzaChjdXJyZW50LmZpbHRlci5maWx0ZXJpbmcpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBlcXVhbHNHcm91cGVkQnlQcm9wZXJ0eSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gZXF1YWxzR3JvdXBlZEJ5UHJvcGVydHlbcHJvcF07XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcm9wLCAnaW4nLCB2YWx1ZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG90aGVyRmlsdGVycy5mb3JFYWNoKChmaWx0ZXJJdGVtOiBhbnkpID0+IHtcbiAgICAgIC8vIEFwbGljYXIgZmlsdHJhZ2VtIHBvciBidXNjYVxuICAgICAgaWYgKFxuICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlcj8uZmlsdGVyaW5nICYmXG4gICAgICAgIGZpbHRlckl0ZW0uZmlsdGVyPy5wcm9wZXJ0eSAhPT0gJycgJiZcbiAgICAgICAgZmlsdGVySXRlbS5hcnJhbmdlID09PSAnZmlsdGVyJ1xuICAgICAgKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAud2hlcmUoXG4gICAgICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlci5wcm9wZXJ0eSxcbiAgICAgICAgICAgICc+PScsXG4gICAgICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlci5maWx0ZXJpbmcudHJpbSgpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICApXG4gICAgICAgICAgLndoZXJlKFxuICAgICAgICAgICAgZmlsdGVySXRlbS5maWx0ZXIucHJvcGVydHksXG4gICAgICAgICAgICAnPD0nLFxuICAgICAgICAgICAgZmlsdGVySXRlbS5maWx0ZXIuZmlsdGVyaW5nLnRyaW0oKS50b1VwcGVyQ2FzZSgpICsgJ1xcdWY4ZmYnXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKCFoYXNGaWx0ZXJTcGVjaWZpY09yZGVyQnkpIHtcbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkoZmlsdGVySXRlbS5maWx0ZXIucHJvcGVydHkpO1xuICAgICAgICAgIGhhc0ZpbHRlclNwZWNpZmljT3JkZXJCeSA9IHRydWU7XG4gICAgICAgICAgYXBwbGllZE9yZGVyQnlGaWVsZCA9IGZpbHRlckl0ZW0uZmlsdGVyLnByb3BlcnR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFwbGljYXIgZmlsdHJvIGRvIHRpcG8gXCJmaWx0ZXJCeURhdGVcIlxuICAgICAgaWYgKGZpbHRlckl0ZW0uZGF0ZUZpbHRlciAmJiBmaWx0ZXJJdGVtLmFycmFuZ2UgPT09ICdmaWx0ZXJCeURhdGUnKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAud2hlcmUoYXJyYW5nZS5zb3J0QnkuZmllbGQsICc+PScsIGZpbHRlckl0ZW0uZGF0ZUZpbHRlci5pbml0aWFsKVxuICAgICAgICAgIC53aGVyZShhcnJhbmdlLnNvcnRCeS5maWVsZCwgJzw9JywgZmlsdGVySXRlbS5kYXRlRmlsdGVyLmZpbmFsKTtcbiAgICAgICAgaWYgKCFoYXNGaWx0ZXJTcGVjaWZpY09yZGVyQnkpIHtcbiAgICAgICAgICBxdWVyeSA9IHF1ZXJ5Lm9yZGVyQnkoYXJyYW5nZS5zb3J0QnkuZmllbGQpO1xuICAgICAgICAgIGhhc0ZpbHRlclNwZWNpZmljT3JkZXJCeSA9IHRydWU7XG4gICAgICAgICAgYXBwbGllZE9yZGVyQnlGaWVsZCA9IGFycmFuZ2Uuc29ydEJ5LmZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcGxpY2FyIHNvcnRCeVxuICAgIGlmIChhcnJhbmdlLnNvcnRCeSAmJiBhcnJhbmdlLnNvcnRCeS5maWVsZCAmJiBhcnJhbmdlLnNvcnRCeS5vcmRlcikge1xuICAgICAgaWYgKGFwcGxpZWRPcmRlckJ5RmllbGQgIT09IGFycmFuZ2Uuc29ydEJ5LmZpZWxkKSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkub3JkZXJCeShhcnJhbmdlLnNvcnRCeS5maWVsZCwgYXJyYW5nZS5zb3J0Qnkub3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBwcml2YXRlIGdldElkRmlsdGVyKHBhcmFtczogUGFnaW5hdGlvbik6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghcGFyYW1zLmFycmFuZ2U/LmZpbHRlcnMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaWRGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAoZjogYW55KSA9PlxuICAgICAgICBmLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmXG4gICAgICAgIGYuZmlsdGVyPy5wcm9wZXJ0eSA9PT0gJ2lkJyAmJlxuICAgICAgICBmLmZpbHRlcj8uZmlsdGVyaW5nXG4gICAgKTtcblxuICAgIHJldHVybiBpZEZpbHRlcj8uZmlsdGVyPy5maWx0ZXJpbmc/LnRyaW0oKSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREb2N1bWVudEJ5SWQoXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxhbnkgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sbGVjdGlvbikuZG9jKGRvY0lkKTtcbiAgICAgIGNvbnN0IGRvY1NuYXBzaG90ID0gYXdhaXQgZG9jUmVmLmdldCgpLnRvUHJvbWlzZSgpO1xuXG4gICAgICBpZiAoZG9jU25hcHNob3QgJiYgZG9jU25hcHNob3QuZXhpc3RzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IGRvY1NuYXBzaG90LmlkLFxuICAgICAgICAgIC4uLihkb2NTbmFwc2hvdC5kYXRhKCkgYXMgYW55KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Vycm8gYW8gYnVzY2FyIGRvY3VtZW50byBwb3IgSUQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZWFyY2hCeUlkUGFydGlhbChcbiAgICBwYXJhbXM6IFBhZ2luYXRpb24sXG4gICAgc2VhcmNoVGVybTogc3RyaW5nXG4gICk6IFByb21pc2U8UGFnaW5hdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGV4YWN0TWF0Y2ggPSBhd2FpdCB0aGlzLmdldERvY3VtZW50QnlJZChcbiAgICAgIHBhcmFtcy5jb2xsZWN0aW9uLFxuICAgICAgc2VhcmNoVGVybVxuICAgICk7XG5cbiAgICBpZiAoZXhhY3RNYXRjaCkge1xuICAgICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMub3BlcmF0b3JzO1xuICAgICAgICBjb25zdCBwYXNzZXNDb25kaXRpb25zID0gcGFyYW1zLmNvbmRpdGlvbnMuZXZlcnkoKGNvbmQpID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRvckZuID0gb3BlcmF0b3JzW2NvbmQub3BlcmF0b3IgYXMga2V5b2YgdHlwZW9mIG9wZXJhdG9yc107XG4gICAgICAgICAgcmV0dXJuIG9wZXJhdG9yRm5cbiAgICAgICAgICAgID8gb3BlcmF0b3JGbihleGFjdE1hdGNoW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLCBjb25kLmRhc2hQcm9wZXJ0eSlcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcGFzc2VzQ29uZGl0aW9ucykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICBmaWx0ZXJMZW5ndGg6IDAsXG4gICAgICAgICAgICBmaXJzdERvYzogbnVsbCxcbiAgICAgICAgICAgIGxhc3REb2M6IG51bGwsXG4gICAgICAgICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICAgICAgICBoYXNQcmV2aW91c1BhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IDAsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLmZpbHRlckZuICYmICFwYXJhbXMuZmlsdGVyRm4oZXhhY3RNYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgZmlsdGVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGZpcnN0RG9jOiBudWxsLFxuICAgICAgICAgIGxhc3REb2M6IG51bGwsXG4gICAgICAgICAgaGFzTmV4dFBhZ2U6IGZhbHNlLFxuICAgICAgICAgIGhhc1ByZXZpb3VzUGFnZTogZmFsc2UsXG4gICAgICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogMCxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiAwLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpdGVtczogW2V4YWN0TWF0Y2hdLFxuICAgICAgICBmaWx0ZXJMZW5ndGg6IDEsXG4gICAgICAgIGZpcnN0RG9jOiBudWxsLFxuICAgICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgICBoYXNOZXh0UGFnZTogZmFsc2UsXG4gICAgICAgIGhhc1ByZXZpb3VzUGFnZTogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IDAsXG4gICAgICAgIHRvdGFsUGFnZXM6IDEsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFRlcm1Mb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHBhcmFtc1dpdGhvdXRJZEZpbHRlciA9IHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGFycmFuZ2U6IHtcbiAgICAgICAgLi4ucGFyYW1zLmFycmFuZ2UsXG4gICAgICAgIGZpbHRlcnM6IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAgIChmOiBhbnkpID0+ICEoZi5hcnJhbmdlID09PSAnZmlsdGVyJyAmJiBmLmZpbHRlcj8ucHJvcGVydHkgPT09ICdpZCcpXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oXG4gICAgICBwYXJhbXMuY29sbGVjdGlvblxuICAgICkucmVmO1xuXG4gICAgLy8gQXBsaWNhciBjb25kaXRpb25zXG4gICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICBwYXJhbXMuY29uZGl0aW9ucy5mb3JFYWNoKChjb25kKSA9PiB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUoXG4gICAgICAgICAgY29uZC5maXJlc3RvcmVQcm9wZXJ0eSxcbiAgICAgICAgICBjb25kLm9wZXJhdG9yLFxuICAgICAgICAgIGNvbmQuZGFzaFByb3BlcnR5XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBcGxpY2FyIHNvcnRCeVxuICAgIGlmIChwYXJhbXMuYXJyYW5nZT8uc29ydEJ5Py5maWVsZCAmJiBwYXJhbXMuYXJyYW5nZT8uc29ydEJ5Py5vcmRlcikge1xuICAgICAgcXVlcnkgPSBxdWVyeS5vcmRlckJ5KFxuICAgICAgICBwYXJhbXMuYXJyYW5nZS5zb3J0QnkuZmllbGQsXG4gICAgICAgIHBhcmFtcy5hcnJhbmdlLnNvcnRCeS5vcmRlclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHF1ZXJ5LmdldCgpO1xuICAgIGxldCBpdGVtcyA9IHNuYXBzaG90LmRvY3NcbiAgICAgIC5tYXAoKGRvYykgPT4gKHtcbiAgICAgICAgaWQ6IGRvYy5pZCxcbiAgICAgICAgLi4uKGRvYy5kYXRhKCkgYXMgYW55KSxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm1Mb3dlcikpO1xuXG4gICAgLy8gU2VwYXJhciBlcXVhbHMgZmlsdGVycyBlIG91dHJvcyBmaWx0cm9zXG4gICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IHBhcmFtc1dpdGhvdXRJZEZpbHRlci5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgKGY6IGFueSkgPT4gZi5hcnJhbmdlID09PSAnZXF1YWxzJyAmJiBmLmZpbHRlclxuICAgICk7XG4gICAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gcGFyYW1zV2l0aG91dElkRmlsdGVyLmFycmFuZ2UuZmlsdGVycy5maWx0ZXIoXG4gICAgICAoZjogYW55KSA9PlxuICAgICAgICBmLmFycmFuZ2UgIT09ICdlcXVhbHMnICYmXG4gICAgICAgIChmLmFycmFuZ2UgIT09ICdmaWx0ZXInIHx8IGYuZmlsdGVyPy5wcm9wZXJ0eSAhPT0gJ2lkJylcbiAgICApO1xuXG4gICAgLy8gQXBsaWNhciBlcXVhbHMgZmlsdGVycyBjb20gbMOzZ2ljYSBPUiBkZW50cm8gZGUgY2FkYSBwcm9wcmllZGFkZVxuICAgIGlmIChlcXVhbHNGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFncnVwYXIgcG9yIHByb3ByaWVkYWRlIHBhcmEgYXBsaWNhciBPUlxuICAgICAgY29uc3QgZ3JvdXBlZEJ5UHJvcGVydHkgPSBlcXVhbHNGaWx0ZXJzLnJlZHVjZSgoYWNjOiBhbnksIGY6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wID0gZi5maWx0ZXIucHJvcGVydHk7XG4gICAgICAgIGlmICghYWNjW3Byb3BdKSB7XG4gICAgICAgICAgYWNjW3Byb3BdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYWNjW3Byb3BdLnB1c2goZi5maWx0ZXIuZmlsdGVyaW5nKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcblxuICAgICAgLy8gRmlsdHJhcjogaXRlbSBkZXZlIHRlciBwZWxvIG1lbm9zIHVtIHZhbG9yIGRlIENBREEgcHJvcHJpZWRhZGVcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdyb3VwZWRCeVByb3BlcnR5KS5ldmVyeSgoW3Byb3AsIHZhbHVlc10pID0+IHtcbiAgICAgICAgICByZXR1cm4gKHZhbHVlcyBhcyBhbnlbXSkuaW5jbHVkZXMoaXRlbVtwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBsaWNhciBvdXRyb3MgZmlsdHJvc1xuICAgIG90aGVyRmlsdGVycy5mb3JFYWNoKChmaWx0ZXJJdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZmlsdGVySXRlbS5hcnJhbmdlID09PSAnZmlsdGVyJyAmJlxuICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlcj8uZmlsdGVyaW5nICYmXG4gICAgICAgIGZpbHRlckl0ZW0uZmlsdGVyPy5wcm9wZXJ0eVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gU3RyaW5nKGZpbHRlckl0ZW0uZmlsdGVyLmZpbHRlcmluZylcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSBTdHJpbmcoXG4gICAgICAgICAgICBpdGVtW2ZpbHRlckl0ZW0uZmlsdGVyLnByb3BlcnR5XVxuICAgICAgICAgICkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gaXRlbVZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcGxpY2FyIGZpbHRlckZuIHNlIGV4aXN0aXJcbiAgICBpZiAocGFyYW1zLmZpbHRlckZuKSB7XG4gICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihwYXJhbXMuZmlsdGVyRm4pO1xuICAgIH1cblxuICAgIC8vIFBhZ2luYcOnw6NvXG4gICAgY29uc3QgcGFnZVNpemUgPSBwYXJhbXMuYmF0Y2hTaXplO1xuICAgIGxldCBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcblxuICAgIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2FyIG8gw61uZGljZSBwYXNzYWRvIHBlbG8gY29tcG9uZW50ZSBzZW0gaW5jcmVtZW50YXIvZGVjcmVtZW50YXJcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBwYXJhbXMuY2xpZW50UGFnZUluZGV4IHx8IDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IGN1cnJlbnRDbGllbnRQYWdlSW5kZXggKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICBjb25zdCBwYWdpbmF0ZWRJdGVtcyA9IGl0ZW1zLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblxuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwoaXRlbXMubGVuZ3RoIC8gcGFnZVNpemUpO1xuICAgIGNvbnN0IGhhc05leHRQYWdlID0gY3VycmVudENsaWVudFBhZ2VJbmRleCA8IHRvdGFsUGFnZXMgLSAxO1xuICAgIGNvbnN0IGhhc1ByZXZpb3VzUGFnZSA9IGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPiAwO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBwYWdpbmF0ZWRJdGVtcyxcbiAgICAgIGZpbHRlckxlbmd0aDogaXRlbXMubGVuZ3RoLFxuICAgICAgZmlyc3REb2M6IG51bGwsXG4gICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2aW91c1BhZ2UsXG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4LFxuICAgICAgdG90YWxQYWdlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRVc2VDbGllbnRTaWRlRmFsbGJhY2socGFyYW1zOiBQYWdpbmF0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQ29uZGl0aW9ucyA9IHBhcmFtcy5jb25kaXRpb25zICYmIHBhcmFtcy5jb25kaXRpb25zLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzQXJyYW5nZUZpbHRlcnMgPVxuICAgICAgcGFyYW1zLmFycmFuZ2U/LmZpbHRlcnMgJiYgcGFyYW1zLmFycmFuZ2UuZmlsdGVycy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGhhc1NvcnRCeSA9IHBhcmFtcy5hcnJhbmdlPy5zb3J0Qnk/LmZpZWxkO1xuXG4gICAgaWYgKHBhcmFtcy5maWx0ZXJGbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChoYXNBcnJhbmdlRmlsdGVycykge1xuICAgICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAoZjogYW55KSA9PiBmLmFycmFuZ2UgPT09ICdlcXVhbHMnICYmIGYuZmlsdGVyXG4gICAgICApO1xuXG4gICAgICBpZiAoZXF1YWxzRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNTZXQgPSBuZXcgU2V0KFxuICAgICAgICAgIGVxdWFsc0ZpbHRlcnMubWFwKChmOiBhbnkpID0+IGYuZmlsdGVyLnByb3BlcnR5KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzU2V0LnNpemUgPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzQ29uZGl0aW9ucyAmJiBoYXNBcnJhbmdlRmlsdGVycyAmJiBoYXNTb3J0QnkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChoYXNDb25kaXRpb25zICYmIGhhc0FycmFuZ2VGaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzQXJyYW5nZUZpbHRlcnMgJiYgcGFyYW1zLmFycmFuZ2UuZmlsdGVycy5sZW5ndGggPiAxICYmIGhhc1NvcnRCeSkge1xuICAgICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAoZjogYW55KSA9PiBmLmFycmFuZ2UgPT09ICdlcXVhbHMnICYmIGYuZmlsdGVyXG4gICAgICApO1xuXG4gICAgICBpZiAoZXF1YWxzRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNTZXQgPSBuZXcgU2V0KFxuICAgICAgICAgIGVxdWFsc0ZpbHRlcnMubWFwKChmOiBhbnkpID0+IGYuZmlsdGVyLnByb3BlcnR5KVxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcGVydGllc1NldC5zaXplID09PSAxICYmXG4gICAgICAgICAgZXF1YWxzRmlsdGVycy5sZW5ndGggPT09IHBhcmFtcy5hcnJhbmdlLmZpbHRlcnMubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBnZXRQYWdpbmF0ZWQocGFyYW1zOiBQYWdpbmF0aW9uKTogUHJvbWlzZTxQYWdpbmF0aW9uUmVzdWx0PiB7XG4gICAgY29uc3QgaWRGaWx0ZXJWYWx1ZSA9IHRoaXMuZ2V0SWRGaWx0ZXIocGFyYW1zKTtcbiAgICBpZiAoaWRGaWx0ZXJWYWx1ZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zZWFyY2hCeUlkUGFydGlhbChwYXJhbXMsIGlkRmlsdGVyVmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3RhciBwcmV2ZW50aXZhbWVudGUgc2UgZGV2ZSB1c2FyIGZhbGxiYWNrXG4gICAgaWYgKHRoaXMuc2hvdWxkVXNlQ2xpZW50U2lkZUZhbGxiYWNrKHBhcmFtcykpIHtcbiAgICAgIGF3YWl0IHRoaXMudHJhY2tNaXNzaW5nSW5kZXhQcmV2ZW50aXZlKFxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbixcbiAgICAgICAgcGFyYW1zLmFycmFuZ2UsXG4gICAgICAgIHBhcmFtcy5jb25kaXRpb25zXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDbGllbnRTaWRlUXVlcnkocGFyYW1zKTtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5OKIFtUQUJMRV0gUmVzdWx0YWRvcyBwYWdpbmFkb3MgdmlhIGZhbGxiYWNrIGNsaWVudC1zaWRlOicsIHtcbiAgICAgICAgdG90YWxJdGVtczogcmVzdWx0LmZpbHRlckxlbmd0aCxcbiAgICAgICAgcmV0dXJuZWRJdGVtczogcmVzdWx0Lml0ZW1zLmxlbmd0aCxcbiAgICAgICAgaGFzTmV4dFBhZ2U6IHJlc3VsdC5oYXNOZXh0UGFnZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IChyZXN1bHQuY3VycmVudENsaWVudFBhZ2VJbmRleCB8fCAwKSArIDEsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJ5KHBhcmFtcyk7XG4gICAgICBjb25zb2xlLmxvZygn8J+TiiBbVEFCTEVdIFJlc3VsdGFkb3MgcGFnaW5hZG9zIHZpYSBGaXJlc3RvcmU6Jywge1xuICAgICAgICB0b3RhbEl0ZW1zOiByZXN1bHQuZmlsdGVyTGVuZ3RoIHx8ICdOL0EnLFxuICAgICAgICByZXR1cm5lZEl0ZW1zOiByZXN1bHQuaXRlbXMubGVuZ3RoLFxuICAgICAgICBoYXNOZXh0UGFnZTogcmVzdWx0Lmhhc05leHRQYWdlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvciAmJiBlcnJvci5jb2RlID09PSAnZmFpbGVkLXByZWNvbmRpdGlvbicpIHtcbiAgICAgICAgYXdhaXQgdGhpcy50cmFja01pc3NpbmdJbmRleChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMuY29sbGVjdGlvbixcbiAgICAgICAgICBwYXJhbXMuYXJyYW5nZSxcbiAgICAgICAgICBwYXJhbXMuY29uZGl0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNsaWVudFNpZGVRdWVyeShwYXJhbXMpO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAn8J+TiiBbVEFCTEVdIFJlc3VsdGFkb3MgcGFnaW5hZG9zIHZpYSBmYWxsYmFjayAoZXJybyBkZSBpbmRleCk6JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0b3RhbEl0ZW1zOiByZXN1bHQuZmlsdGVyTGVuZ3RoLFxuICAgICAgICAgICAgcmV0dXJuZWRJdGVtczogcmVzdWx0Lml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgIGhhc05leHRQYWdlOiByZXN1bHQuaGFzTmV4dFBhZ2UsXG4gICAgICAgICAgICBjdXJyZW50UGFnZTogKHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4IHx8IDApICsgMSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yLmNvZGUgPT09ICdpbnZhbGlkLWFyZ3VtZW50Jykge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYWNrTWlzc2luZ0luZGV4KFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uLFxuICAgICAgICAgIHBhcmFtcy5hcnJhbmdlLFxuICAgICAgICAgIHBhcmFtcy5jb25kaXRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQ2xpZW50U2lkZVF1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICfwn5OKIFtUQUJMRV0gUmVzdWx0YWRvcyBwYWdpbmFkb3MgdmlhIGZhbGxiYWNrIChhcmd1bWVudG8gaW52w6FsaWRvKTonLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHJlc3VsdC5maWx0ZXJMZW5ndGgsXG4gICAgICAgICAgICByZXR1cm5lZEl0ZW1zOiByZXN1bHQuaXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IHJlc3VsdC5oYXNOZXh0UGFnZSxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggfHwgMCkgKyAxLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVDbGllbnRTaWRlUXVlcnkocGFyYW1zOiBQYWdpbmF0aW9uKTogUHJvbWlzZTxQYWdpbmF0aW9uUmVzdWx0PiB7XG4gICAgLy8gT3RpbWl6YXIgdXNhbmRvIHBlbG8gbWVub3MgdW1hIGNsw6F1c3VsYSAud2hlcmUoKSBxdWFuZG8gcG9zc8OtdmVsXG4gICAgbGV0IHF1ZXJ5OiBmaXJlYmFzZS5maXJlc3RvcmUuUXVlcnk8dW5rbm93bj4gPSB0aGlzLm5nRmlyZS5jb2xsZWN0aW9uKFxuICAgICAgcGFyYW1zLmNvbGxlY3Rpb25cbiAgICApLnJlZjtcblxuICAgIGxldCBhcHBsaWVkQ29uZGl0aW9uOiBDb25kaXRpb24gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaGFzQXBwbGllZFdoZXJlQ2xhdXNlID0gZmFsc2U7XG5cbiAgICAvLyBQcmltZWlybywgdGVudGEgYXBsaWNhciBjb25kacOnw7VlcyBzaW1wbGVzXG4gICAgaWYgKHBhcmFtcy5jb25kaXRpb25zICYmIHBhcmFtcy5jb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNpbXBsZUNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb25zLmZpbmQoKGNvbmQ6IENvbmRpdGlvbikgPT5cbiAgICAgICAgWyc9PScsICc+JywgJzwnLCAnPj0nLCAnPD0nLCAnaW4nLCAnYXJyYXktY29udGFpbnMnXS5pbmNsdWRlcyhcbiAgICAgICAgICBjb25kLm9wZXJhdG9yXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGlmIChzaW1wbGVDb25kaXRpb24pIHtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShcbiAgICAgICAgICBzaW1wbGVDb25kaXRpb24uZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgc2ltcGxlQ29uZGl0aW9uLm9wZXJhdG9yLFxuICAgICAgICAgIHNpbXBsZUNvbmRpdGlvbi5kYXNoUHJvcGVydHlcbiAgICAgICAgKTtcbiAgICAgICAgYXBwbGllZENvbmRpdGlvbiA9IHNpbXBsZUNvbmRpdGlvbjtcbiAgICAgICAgaGFzQXBwbGllZFdoZXJlQ2xhdXNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZSBuw6NvIGjDoSBjb25kacOnw7VlcyBkaXNwb27DrXZlaXMsIHRlbnRhIGFwbGljYXIgZmlsdHJvcyBkbyBhcnJhbmdlXG4gICAgbGV0IGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXI6IGFueSA9IG51bGw7XG4gICAgaWYgKCFoYXNBcHBsaWVkV2hlcmVDbGF1c2UgJiYgcGFyYW1zLmFycmFuZ2U/LmZpbHRlcnMpIHtcbiAgICAgIC8vIEFncnVwYXIgZXF1YWxzIGZpbHRlcnMgcG9yIHByb3ByaWVkYWRlXG4gICAgICBjb25zdCBlcXVhbHNGaWx0ZXJzID0gcGFyYW1zLmFycmFuZ2UuZmlsdGVycy5maWx0ZXIoXG4gICAgICAgIChmOiBhbnkpID0+IGYuYXJyYW5nZSA9PT0gJ2VxdWFscycgJiYgZi5maWx0ZXJcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVxdWFsc0dyb3VwZWRCeVByb3BlcnR5ID0gZXF1YWxzRmlsdGVycy5yZWR1Y2UoXG4gICAgICAgIChhY2M6IGFueSwgY3VycmVudDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcCA9IGN1cnJlbnQuZmlsdGVyLnByb3BlcnR5O1xuICAgICAgICAgIGlmICghYWNjW3Byb3BdKSB7XG4gICAgICAgICAgICBhY2NbcHJvcF0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjW3Byb3BdLnB1c2goY3VycmVudC5maWx0ZXIuZmlsdGVyaW5nKTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fVxuICAgICAgKTtcblxuICAgICAgLy8gU2UgaMOhIGFwZW5hcyBVTUEgcHJvcHJpZWRhZGUgY29tIG3Dumx0aXBsb3MgdmFsb3JlcywgYXBsaWNhciBubyBGaXJlc3RvcmUgY29tICdpbidcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhlcXVhbHNHcm91cGVkQnlQcm9wZXJ0eSk7XG4gICAgICBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDEgJiYgZXF1YWxzRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0aWVzWzBdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBlcXVhbHNHcm91cGVkQnlQcm9wZXJ0eVtwcm9wXTtcbiAgICAgICAgcXVlcnkgPSBxdWVyeS53aGVyZShwcm9wLCAnaW4nLCB2YWx1ZXMpO1xuICAgICAgICBoYXNBcHBsaWVkV2hlcmVDbGF1c2UgPSB0cnVlO1xuICAgICAgICAvLyBNYXJjYXIgVE9ET1Mgb3MgZXF1YWxzIGZpbHRlcnMgZGVzc2EgcHJvcHJpZWRhZGUgY29tbyBhcGxpY2Fkb3NcbiAgICAgICAgYXBwbGllZEZpcmVzdG9yZUZpbHRlciA9ICdhbGwtZXF1YWxzJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3Qgb3RoZXJGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgKGY6IGFueSkgPT5cbiAgICAgICAgICAgIChmLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmXG4gICAgICAgICAgICAgIGYuZmlsdGVyPy5maWx0ZXJpbmcgJiZcbiAgICAgICAgICAgICAgZi5maWx0ZXI/LnByb3BlcnR5KSB8fFxuICAgICAgICAgICAgKGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgICAgICAgZi5kYXRlRmlsdGVyPy5pbml0aWFsICYmXG4gICAgICAgICAgICAgIGYuZGF0ZUZpbHRlcj8uZmluYWwpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG90aGVyRmlsdGVyKSB7XG4gICAgICAgICAgaWYgKG90aGVyRmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmIG90aGVyRmlsdGVyLmZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBvdGhlckZpbHRlci5maWx0ZXIuZmlsdGVyaW5nXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgIC53aGVyZShvdGhlckZpbHRlci5maWx0ZXIucHJvcGVydHksICc+PScsIGZpbHRlclZhbHVlKVxuICAgICAgICAgICAgICAud2hlcmUob3RoZXJGaWx0ZXIuZmlsdGVyLnByb3BlcnR5LCAnPD0nLCBmaWx0ZXJWYWx1ZSArICdcXHVmOGZmJyk7XG4gICAgICAgICAgICBoYXNBcHBsaWVkV2hlcmVDbGF1c2UgPSB0cnVlO1xuICAgICAgICAgICAgYXBwbGllZEZpcmVzdG9yZUZpbHRlciA9IG90aGVyRmlsdGVyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBvdGhlckZpbHRlci5hcnJhbmdlID09PSAnZmlsdGVyQnlEYXRlJyAmJlxuICAgICAgICAgICAgb3RoZXJGaWx0ZXIuZGF0ZUZpbHRlciAmJlxuICAgICAgICAgICAgcGFyYW1zLmFycmFuZ2Uuc29ydEJ5Py5maWVsZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAud2hlcmUoXG4gICAgICAgICAgICAgICAgcGFyYW1zLmFycmFuZ2Uuc29ydEJ5LmZpZWxkLFxuICAgICAgICAgICAgICAgICc+PScsXG4gICAgICAgICAgICAgICAgb3RoZXJGaWx0ZXIuZGF0ZUZpbHRlci5pbml0aWFsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLndoZXJlKFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hcnJhbmdlLnNvcnRCeS5maWVsZCxcbiAgICAgICAgICAgICAgICAnPD0nLFxuICAgICAgICAgICAgICAgIG90aGVyRmlsdGVyLmRhdGVGaWx0ZXIuZmluYWxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhhc0FwcGxpZWRXaGVyZUNsYXVzZSA9IHRydWU7XG4gICAgICAgICAgICBhcHBsaWVkRmlyZXN0b3JlRmlsdGVyID0gb3RoZXJGaWx0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWxsRG9jc1NuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgbGV0IGl0ZW1zID0gYWxsRG9jc1NuYXBzaG90LmRvY3MubWFwKFxuICAgICAgKGRvYzogZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPikgPT4gKHtcbiAgICAgICAgaWQ6IGRvYy5pZCxcbiAgICAgICAgLi4uKGRvYy5kYXRhKCkgYXMgYW55KSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEFwbGljYXIgY29uZGnDp8O1ZXMgcmVzdGFudGVzXG4gICAgaWYgKHBhcmFtcy5jb25kaXRpb25zKSB7XG4gICAgICBjb25zdCByZW1haW5pbmdDb25kaXRpb25zID0gcGFyYW1zLmNvbmRpdGlvbnMuZmlsdGVyKFxuICAgICAgICAoY29uZDogQ29uZGl0aW9uKSA9PiBjb25kICE9PSBhcHBsaWVkQ29uZGl0aW9uXG4gICAgICApO1xuICAgICAgaWYgKHJlbWFpbmluZ0NvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycztcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW1haW5pbmdDb25kaXRpb25zLmV2ZXJ5KChjb25kOiBDb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRm4gPVxuICAgICAgICAgICAgICBvcGVyYXRvcnNbY29uZC5vcGVyYXRvciBhcyBrZXlvZiB0eXBlb2Ygb3BlcmF0b3JzXTtcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRvckZuXG4gICAgICAgICAgICAgID8gb3BlcmF0b3JGbihpdGVtW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLCBjb25kLmRhc2hQcm9wZXJ0eSlcbiAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBmaWx0ZXJzLCBzb3J0QnkgfSA9IHBhcmFtcy5hcnJhbmdlO1xuXG4gICAgLy8gVHJhY2sgd2hpY2ggZmlsdGVyIHdhcyBhbHJlYWR5IGFwcGxpZWQgaW4gRmlyZXN0b3JlIHRvIGF2b2lkIGRvdWJsZSBmaWx0ZXJpbmdcbiAgICBpZiAoaGFzQXBwbGllZFdoZXJlQ2xhdXNlICYmICFhcHBsaWVkQ29uZGl0aW9uICYmIHBhcmFtcy5hcnJhbmdlPy5maWx0ZXJzKSB7XG4gICAgICBjb25zdCBlcXVhbHNGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgIChmOiBhbnkpID0+IGYuYXJyYW5nZSA9PT0gJ2VxdWFscycgJiYgZi5maWx0ZXI/LmZpbHRlcmluZ1xuICAgICAgKTtcbiAgICAgIGlmIChlcXVhbHNGaWx0ZXIpIHtcbiAgICAgICAgYXBwbGllZEZpcmVzdG9yZUZpbHRlciA9IGVxdWFsc0ZpbHRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXIgPSBwYXJhbXMuYXJyYW5nZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgKGY6IGFueSkgPT5cbiAgICAgICAgICAgIChmLmFycmFuZ2UgPT09ICdmaWx0ZXInICYmXG4gICAgICAgICAgICAgIGYuZmlsdGVyPy5maWx0ZXJpbmcgJiZcbiAgICAgICAgICAgICAgZi5maWx0ZXI/LnByb3BlcnR5KSB8fFxuICAgICAgICAgICAgKGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgICAgICAgZi5kYXRlRmlsdGVyPy5pbml0aWFsICYmXG4gICAgICAgICAgICAgIGYuZGF0ZUZpbHRlcj8uZmluYWwpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXF1YWxzRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmOiBhbnkpID0+IGYuYXJyYW5nZSA9PT0gJ2VxdWFscycpO1xuICAgIGNvbnN0IG90aGVyRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmOiBhbnkpID0+IGYuYXJyYW5nZSAhPT0gJ2VxdWFscycpO1xuXG4gICAgLy8gQXBsaWNhciBlcXVhbHMgZmlsdGVycyBubyBjbGllbnQtc2lkZSBhcGVuYXMgc2UgbsOjbyBmb3JhbSBhcGxpY2Fkb3Mgbm8gRmlyZXN0b3JlXG4gICAgaWYgKGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXIgIT09ICdhbGwtZXF1YWxzJyAmJiBlcXVhbHNGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFncnVwYXIgcG9yIHByb3ByaWVkYWRlIHBhcmEgYXBsaWNhciBPUiBkZW50cm8gZGUgY2FkYSBwcm9wcmllZGFkZVxuICAgICAgY29uc3QgZ3JvdXBlZEJ5UHJvcGVydHkgPSBlcXVhbHNGaWx0ZXJzLnJlZHVjZSgoYWNjOiBhbnksIGY6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wID0gZi5maWx0ZXIucHJvcGVydHk7XG4gICAgICAgIGlmICghYWNjW3Byb3BdKSB7XG4gICAgICAgICAgYWNjW3Byb3BdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYWNjW3Byb3BdLnB1c2goZi5maWx0ZXIuZmlsdGVyaW5nKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcblxuICAgICAgLy8gRmlsdHJhcjogaXRlbSBkZXZlIHRlciBwZWxvIG1lbm9zIHVtIHZhbG9yIGRlIENBREEgcHJvcHJpZWRhZGVcbiAgICAgIC8vIChBTkQgZW50cmUgcHJvcHJpZWRhZGVzLCBPUiBkZW50cm8gZGUgY2FkYSBwcm9wcmllZGFkZSlcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdyb3VwZWRCeVByb3BlcnR5KS5ldmVyeSgoW3Byb3AsIHZhbHVlc10pID0+IHtcbiAgICAgICAgICByZXR1cm4gKHZhbHVlcyBhcyBhbnlbXSkuaW5jbHVkZXMoaXRlbVtwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3RoZXJGaWx0ZXJzLmZvckVhY2goKGZpbHRlckl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKGFwcGxpZWRGaXJlc3RvcmVGaWx0ZXIgPT09IGZpbHRlckl0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlckl0ZW0uYXJyYW5nZSA9PT0gJ2ZpbHRlcicgJiZcbiAgICAgICAgZmlsdGVySXRlbS5maWx0ZXI/LmZpbHRlcmluZyAmJlxuICAgICAgICBmaWx0ZXJJdGVtLmZpbHRlcj8ucHJvcGVydHlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IFN0cmluZyhmaWx0ZXJJdGVtLmZpbHRlci5maWx0ZXJpbmcpXG4gICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gU3RyaW5nKFxuICAgICAgICAgICAgaXRlbVtmaWx0ZXJJdGVtLmZpbHRlci5wcm9wZXJ0eV1cbiAgICAgICAgICApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbHRlckl0ZW0uYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgZmlsdGVySXRlbS5kYXRlRmlsdGVyPy5pbml0aWFsICYmXG4gICAgICAgIGZpbHRlckl0ZW0uZGF0ZUZpbHRlcj8uZmluYWwgJiZcbiAgICAgICAgc29ydEJ5LmZpZWxkXG4gICAgICApIHtcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gaXRlbVtzb3J0QnkuZmllbGRdO1xuXG4gICAgICAgICAgICBpZiAoIWZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaXRlbURhdGU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUudG9EYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGl0ZW1EYXRlID0gZmllbGRWYWx1ZS50b0RhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgaXRlbURhdGUgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgaXRlbURhdGUgPSBuZXcgRGF0ZShmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgaWYgKGlzTmFOKGl0ZW1EYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIGl0ZW1EYXRlID0gbmV3IERhdGUoZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGl0ZW1EYXRlID49IGZpbHRlckl0ZW0uZGF0ZUZpbHRlci5pbml0aWFsICYmXG4gICAgICAgICAgICAgIGl0ZW1EYXRlIDw9IGZpbHRlckl0ZW0uZGF0ZUZpbHRlci5maW5hbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAnRXJybyBhbyBwcm9jZXNzYXIgZmlsdHJvIGRlIGRhdGEgcGFyYSBvIGl0ZW06JyxcbiAgICAgICAgICAgICAgaXRlbS5pZCxcbiAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFwbGljYXIgZmlsdGVyRm4gc2UgZXhpc3RpclxuICAgIGlmIChwYXJhbXMuZmlsdGVyRm4pIHtcbiAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKHBhcmFtcy5maWx0ZXJGbik7XG4gICAgfVxuXG4gICAgaWYgKHNvcnRCeSAmJiBzb3J0QnkuZmllbGQgJiYgc29ydEJ5Lm9yZGVyKSB7XG4gICAgICBpdGVtcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB2YWxBID0gYVtzb3J0QnkuZmllbGRdO1xuICAgICAgICBjb25zdCB2YWxCID0gYltzb3J0QnkuZmllbGRdO1xuXG4gICAgICAgIGlmICh2YWxBIDwgdmFsQikge1xuICAgICAgICAgIHJldHVybiBzb3J0Qnkub3JkZXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxBID4gdmFsQikge1xuICAgICAgICAgIHJldHVybiBzb3J0Qnkub3JkZXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW1wbGVtZW50YcOnw6NvIGFkZXF1YWRhIGRhIHBhZ2luYcOnw6NvXG4gICAgbGV0IGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuXG4gICAgLy8gRGV0ZXJtaW5hciBhIHDDoWdpbmEgYXR1YWwgYmFzZWFkYSBuYSBuYXZlZ2HDp8Ojb1xuICAgIGlmIChwYXJhbXMubmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcGFyYW1zLmNsaWVudFBhZ2VJbmRleCB8fCAwO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VTaXplID0gcGFyYW1zLmJhdGNoU2l6ZTtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gY3VycmVudENsaWVudFBhZ2VJbmRleCAqIHBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2luYXRlZEl0ZW1zID0gaXRlbXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChpdGVtcy5sZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgY29uc3QgaGFzTmV4dFBhZ2UgPSBjdXJyZW50Q2xpZW50UGFnZUluZGV4IDwgdG90YWxQYWdlcyAtIDE7XG4gICAgY29uc3QgaGFzUHJldmlvdXNQYWdlID0gY3VycmVudENsaWVudFBhZ2VJbmRleCA+IDA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHBhZ2luYXRlZEl0ZW1zLFxuICAgICAgZmlsdGVyTGVuZ3RoOiBpdGVtcy5sZW5ndGgsXG4gICAgICBsYXN0RG9jOiBudWxsLFxuICAgICAgZmlyc3REb2M6IG51bGwsXG4gICAgICBoYXNOZXh0UGFnZTogaGFzTmV4dFBhZ2UsXG4gICAgICBoYXNQcmV2aW91c1BhZ2U6IGhhc1ByZXZpb3VzUGFnZSxcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IGN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXG4gICAgICB0b3RhbFBhZ2VzOiB0b3RhbFBhZ2VzLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRJdGVtc0RhdGEoXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnk6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeTx1bmtub3duPiA9XG4gICAgICAgIHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sbGVjdGlvbikucmVmO1xuXG4gICAgICBxdWVyeSA9IHRoaXMuYXBwbHlGaWx0ZXJzKHF1ZXJ5LCBhcnJhbmdlLCBjb25kaXRpb25zKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgcXVlcnkuZ2V0KCk7XG4gICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHNuYXBzaG90LmRvY3MubWFwKFxuICAgICAgICAgIGFzeW5jIChkb2M6IGZpcmViYXNlLmZpcmVzdG9yZS5RdWVyeURvY3VtZW50U25hcHNob3Q8dW5rbm93bj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkb2MuZGF0YSgpIGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZG9jLmlkO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVyYXRvcnMgPSB7XG4gICAgJz09JzogKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiBhID09PSBiLFxuICAgICchPSc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSAhPT0gYixcbiAgICAnPic6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSA+IGIsXG4gICAgJzwnOiAoYTogYW55LCBiOiBhbnkpOiBib29sZWFuID0+IGEgPCBiLFxuICAgICc+PSc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSA+PSBiLFxuICAgICc8PSc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4gYSA8PSBiLFxuICAgIGluOiAoYTogYW55LCBiOiBhbnkpOiBib29sZWFuID0+IEFycmF5LmlzQXJyYXkoYikgJiYgYi5pbmNsdWRlcyhhKSxcbiAgICAnbm90LWluJzogKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiBBcnJheS5pc0FycmF5KGIpICYmICFiLmluY2x1ZGVzKGEpLFxuICAgICdhcnJheS1jb250YWlucyc6IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT5cbiAgICAgIEFycmF5LmlzQXJyYXkoYSkgJiYgYS5pbmNsdWRlcyhiKSxcbiAgICAnYXJyYXktY29udGFpbnMtYW55JzogKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PlxuICAgICAgQXJyYXkuaXNBcnJheShhKSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShiKSAmJlxuICAgICAgYi5zb21lKChpdGVtOiBhbnkpID0+IGEuaW5jbHVkZXMoaXRlbSkpLFxuICAgIGluY2x1ZGVzOiAoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4gYS5pbmNsdWRlcyhiKSwgLy8gUGFyYSBzdHJpbmdzIG91IGFycmF5c1xuICB9O1xuXG4gIGFzeW5jIGRlbGV0ZUluZGV4KGlkOiBzdHJpbmcsIGNvbDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5uZ0ZpcmUuZmlyZXN0b3JlLmJhdGNoKCk7XG5cbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sKS5kb2MoaWQpO1xuICAgICAgY29uc3QgZG9jU25hcHNob3QgPSAoYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIGRvY1JlZi5nZXQoKVxuICAgICAgKSkgYXMgZmlyZWJhc2UuZmlyZXN0b3JlLkRvY3VtZW50U25hcHNob3Q8dW5rbm93bj47XG4gICAgICBjb25zdCBkb2MgPSBkb2NTbmFwc2hvdC5kYXRhKCkgYXMgYW55O1xuICAgICAgYmF0Y2guZGVsZXRlKGRvY1JlZi5yZWYpO1xuICAgICAgaWYgKGRvYyAmJiB0eXBlb2YgZG9jLmluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBhd2FpdCB0aGlzLnJlaW5kZXgoZG9jLmluZGV4LCBjb2wsIGJhdGNoKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuXG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdJdGVtIGV4Y2x1w61kbyBjb20gc3VjZXNzbyEnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBhbnk7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIGRlbGV0YXIgaXRlbTonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcignRXJybyBhbyBkZWxldGFyIGl0ZW0uJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVpbmRleChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNvbDogc3RyaW5nLFxuICAgIGJhdGNoOiBmaXJlYmFzZS5maXJlc3RvcmUuV3JpdGVCYXRjaFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc25hcHNob3QgPSAoYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oY29sKS5nZXQoKVxuICAgICAgKSkgYXMgZmlyZWJhc2UuZmlyZXN0b3JlLlF1ZXJ5U25hcHNob3Q8dW5rbm93bj47XG4gICAgICBjb25zdCBkb2NzID0gc25hcHNob3QuZG9jcztcbiAgICAgIGZvciAobGV0IGRvYyBvZiBkb2NzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBkb2MuZGF0YSgpIGFzIGFueTtcbiAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEuaW5kZXggPT09ICdudW1iZXInICYmIGRhdGEuaW5kZXggPiBpbmRleCkge1xuICAgICAgICAgIGRhdGEuaW5kZXgtLTtcbiAgICAgICAgICBjb25zdCBkb2NSZWYgPSB0aGlzLm5nRmlyZS5jb2xsZWN0aW9uKGNvbCkuZG9jKGRvYy5pZCkucmVmO1xuICAgICAgICAgIGJhdGNoLnVwZGF0ZShkb2NSZWYsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gcmVpbmRleGFyOicsIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGF0ZUZvcm1hdFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGVTdHIgPSBjb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJuID0gL14oXFxkezEsMn0pXFwvKFxcZHsxLDJ9KVxcLyhcXGR7NH0pJC87XG5cbiAgICAgIGlmICghZGF0ZVBhdHRlcm4udGVzdChkYXRlU3RyKSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkRm9ybWF0OiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnRzID0gZGF0ZVN0ci5zcGxpdCgnLycpO1xuICAgICAgY29uc3QgZGF5ID0gcGFydHNbMF0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gcGFydHNbMV0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHllYXIgPSBwYXJ0c1syXTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcblxuICAgICAgY29uc3QgZGF0ZSA9IG1vbWVudChub3JtYWxpemVkRGF0ZSwgJ0REL01NL1lZWVknLCB0cnVlKTtcblxuICAgICAgaWYgKCFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkRGF0ZTogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlSW5kZXgoaW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZywgY29sOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLm5nRmlyZS5jb2xsZWN0aW9uKGNvbCkuZG9jKGlkKS51cGRhdGUoeyBpbmRleCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWkgbyBsaW5rIGRlIGNyaWHDp8OjbyBkZSDDrW5kaWNlIGRhIG1lbnNhZ2VtIGRlIGVycm8gZG8gRmlyZXN0b3JlXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RJbmRleExpbmsoZXJyb3I6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghZXJyb3IgfHwgIWVycm9yLm1lc3NhZ2UpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbGlua01hdGNoID0gZXJyb3IubWVzc2FnZS5tYXRjaChcbiAgICAgIC8oaHR0cHM6XFwvXFwvY29uc29sZVxcLmZpcmViYXNlXFwuZ29vZ2xlXFwuY29tXFwvW15cXHNdKykvXG4gICAgKTtcbiAgICByZXR1cm4gbGlua01hdGNoID8gbGlua01hdGNoWzFdIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYXN0cmVpYSDDrW5kaWNlcyBhdXNlbnRlcyBhbyB1c2FyIGZhbGxiYWNrIHByZXZlbnRpdm9cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdHJhY2tNaXNzaW5nSW5kZXhQcmV2ZW50aXZlKFxuICAgIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgICBhcnJhbmdlOiBBcnJhbmdlLFxuICAgIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVNpZ25hdHVyZSA9IHRoaXMuZ2VuZXJhdGVRdWVyeVNpZ25hdHVyZShcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgYXJyYW5nZSxcbiAgICAgICAgY29uZGl0aW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGRvY0lkID0gYCR7Y29sbGVjdGlvbn1fJHtxdWVyeVNpZ25hdHVyZX1gO1xuXG4gICAgICBjb25zdCBpbmRleExpbmsgPSB0aGlzLmdlbmVyYXRlSW5kZXhMaW5rKGNvbGxlY3Rpb24sIGFycmFuZ2UsIGNvbmRpdGlvbnMpO1xuXG4gICAgICBjb25zdCBpbmRleEluc3RydWN0aW9ucyA9IHRoaXMuZ2VuZXJhdGVJbmRleEluc3RydWN0aW9ucyhcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgYXJyYW5nZSxcbiAgICAgICAgY29uZGl0aW9uc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhY2tpbmdEYXRhOiBhbnkgPSB7XG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGluZGV4TGluayxcbiAgICAgICAgaW5kZXhJbnN0cnVjdGlvbnMsXG4gICAgICAgIGFycmFuZ2U6IHtcbiAgICAgICAgICBzb3J0Qnk6IGFycmFuZ2Uuc29ydEJ5LFxuICAgICAgICAgIGZpbHRlcnM6XG4gICAgICAgICAgICBhcnJhbmdlLmZpbHRlcnM/Lm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBhcnJhbmdlOiBmLmFycmFuZ2UsXG4gICAgICAgICAgICAgIHByb3BlcnR5OiBmLmZpbHRlcj8ucHJvcGVydHkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgZGF0ZUZpZWxkOlxuICAgICAgICAgICAgICAgIGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgPyBhcnJhbmdlLnNvcnRCeT8uZmllbGQgOiBudWxsLFxuICAgICAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB9LFxuICAgICAgICBjb25kaXRpb25zOlxuICAgICAgICAgIGNvbmRpdGlvbnM/Lm1hcCgoYzogQ29uZGl0aW9uKSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IGMuZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIGVycm9yTWVzc2FnZTogYEZhbGxiYWNrIHByZXZlbnRpdm8gdXNhZG8gcGFyYSBhIGNvbGxlY3Rpb24gJHtjb2xsZWN0aW9ufS4gQSBxdWVyeSBleGlnaXJpYSDDrW5kaWNlIGNvbXBvc3RvLmAsXG4gICAgICAgIHVwZGF0ZWRBdDogZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICB9O1xuXG4gICAgICBjb25zb2xlLmxvZygn8J+ThCBbSU5ERVggTElOS10gRGFkb3MgcXVlIHNlcsOjbyBzYWx2b3Mgbm8gZG9jdW1lbnRvOicsIHtcbiAgICAgICAgZG9jSWQsXG4gICAgICAgIGNvbGxlY3Rpb246IHRyYWNraW5nRGF0YS5jb2xsZWN0aW9uLFxuICAgICAgICBpbmRleExpbms6IHRyYWNraW5nRGF0YS5pbmRleExpbmssXG4gICAgICAgIGFycmFuZ2U6IHRyYWNraW5nRGF0YS5hcnJhbmdlLFxuICAgICAgICBjb25kaXRpb25zOiB0cmFja2luZ0RhdGEuY29uZGl0aW9ucyxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiB0cmFja2luZ0RhdGEuZXJyb3JNZXNzYWdlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oJ21pc3NpbmdJbmRleGVzJykuZG9jKGRvY0lkKTtcbiAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKS50b1Byb21pc2UoKTtcblxuICAgICAgaWYgKGRvYyAmJiBkb2MuZXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IGRvY1JlZi51cGRhdGUoe1xuICAgICAgICAgIGNvdW50OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5pbmNyZW1lbnQoMSksXG4gICAgICAgICAgdXBkYXRlZEF0OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgICBsYXN0RXJyb3I6IHRyYWNraW5nRGF0YS5lcnJvck1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZG9jUmVmLnNldCh7XG4gICAgICAgICAgLi4udHJhY2tpbmdEYXRhLFxuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNyZWF0ZWRBdDogZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHRyYWNraW5nRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFsaGEgYW8gcmFzdHJlYXIgZmFsbGJhY2sgcHJldmVudGl2bzonLCB0cmFja2luZ0Vycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VyYSB1bWEgYXNzaW5hdHVyYSDDum5pY2EgcGFyYSB1bWEgcXVlcnlcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVRdWVyeVNpZ25hdHVyZShcbiAgICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gICAgYXJyYW5nZTogQXJyYW5nZSxcbiAgICBjb25kaXRpb25zOiBDb25kaXRpb25bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHtcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBzb3J0Qnk6IGFycmFuZ2Uuc29ydEJ5LFxuICAgICAgZmlsdGVyczpcbiAgICAgICAgYXJyYW5nZS5maWx0ZXJzPy5tYXAoKGY6IGFueSkgPT4gKHtcbiAgICAgICAgICBhcnJhbmdlOiBmLmFycmFuZ2UsXG4gICAgICAgICAgcHJvcGVydHk6IGYuZmlsdGVyPy5wcm9wZXJ0eSB8fCBudWxsLFxuICAgICAgICB9KSkgfHwgW10sXG4gICAgICBjb25kaXRpb25zOlxuICAgICAgICBjb25kaXRpb25zPy5tYXAoKGM6IENvbmRpdGlvbikgPT4gKHtcbiAgICAgICAgICBwcm9wZXJ0eTogYy5maXJlc3RvcmVQcm9wZXJ0eSxcbiAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgIH07XG5cbiAgICByZXR1cm4gYnRvYShKU09OLnN0cmluZ2lmeShzaWduYXR1cmUpKVxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCAnJylcbiAgICAgIC5zdWJzdHJpbmcoMCwgMjApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlcmEgaW5zdHJ1w6fDtWVzIGNsYXJhcyBwYXJhIGNyaWFyIG8gw61uZGljZSBtYW51YWxtZW50ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUluZGV4SW5zdHJ1Y3Rpb25zKFxuICAgIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgICBhcnJhbmdlOiBBcnJhbmdlLFxuICAgIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICk6IGFueSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBhbnkgPSB7XG4gICAgICBzdW1tYXJ5OiAnJyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG4gICAgICBmaWVsZHM6IFtdIGFzIGFueVtdLFxuICAgICAgcXVlcnlFeGFtcGxlOiAnJyxcbiAgICAgIHN0ZXBCeVN0ZXA6IFtdIGFzIHN0cmluZ1tdLFxuICAgICAgbm90ZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZHM6IGFueVtdID0gW107XG5cbiAgICBpZiAoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZGl0aW9uOiBDb25kaXRpb24pID0+IHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5maXJlc3RvcmVQcm9wZXJ0eSkge1xuICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBjb25kaXRpb24uZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgICBvcmRlcjogJ0FzY2VuZGluZycsXG4gICAgICAgICAgICB0eXBlOiAnV0hFUkUgY2xhdXNlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEZpbHRyYXIgcG9yICR7Y29uZGl0aW9uLmZpcmVzdG9yZVByb3BlcnR5fSB1c2FuZG8gb3BlcmFkb3IgJHtjb25kaXRpb24ub3BlcmF0b3J9YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGFycmFuZ2UuZmlsdGVycyAmJiBhcnJhbmdlLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgYXJyYW5nZS5maWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuZmlsdGVyPy5wcm9wZXJ0eSkge1xuICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBmaWx0ZXIuZmlsdGVyLnByb3BlcnR5LFxuICAgICAgICAgICAgb3JkZXI6ICdBc2NlbmRpbmcnLFxuICAgICAgICAgICAgdHlwZTogJ1dIRVJFIGNsYXVzZSAoZmlsdGVyKScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXInID8gJ0NPTlRBSU5TJyA6ICdSQU5HRScsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYEZpbHRyYXIgcG9yICR7ZmlsdGVyLmZpbHRlci5wcm9wZXJ0eX0gdXNhbmRvIGZpbHRybyAke2ZpbHRlci5hcnJhbmdlfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChhcnJhbmdlLnNvcnRCeT8uZmllbGQpIHtcbiAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgZmllbGQ6IGFycmFuZ2Uuc29ydEJ5LmZpZWxkLFxuICAgICAgICBvcmRlcjogYXJyYW5nZS5zb3J0Qnkub3JkZXIgPT09ICdkZXNjJyA/ICdEZXNjZW5kaW5nJyA6ICdBc2NlbmRpbmcnLFxuICAgICAgICB0eXBlOiAnT1JERVIgQlkgY2xhdXNlJyxcbiAgICAgICAgb3BlcmF0b3I6ICdOL0EnLFxuICAgICAgICBkZXNjcmlwdGlvbjogYE9yZGVuYXIgcmVzdWx0YWRvcyBwb3IgJHthcnJhbmdlLnNvcnRCeS5maWVsZH0gZW0gb3JkZW0gJHthcnJhbmdlLnNvcnRCeS5vcmRlcn1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zdHJ1Y3Rpb25zLmZpZWxkcyA9IGZpZWxkcztcblxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBmaWVsZHMubWFwKChmOiBhbnkpID0+IGYuZmllbGQpLmpvaW4oJyArICcpO1xuICAgIGluc3RydWN0aW9ucy5zdW1tYXJ5ID0gYENyaWFyIMOtbmRpY2UgY29tcG9zdG8gcGFyYSAke2NvbGxlY3Rpb259OiAke2ZpZWxkTmFtZXN9YDtcblxuICAgIGxldCBxdWVyeUV4YW1wbGUgPSBgZGIuY29sbGVjdGlvbignJHtjb2xsZWN0aW9ufScpYDtcblxuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZS5pbmNsdWRlcygnV0hFUkUnKSkge1xuICAgICAgICBpZiAoZmllbGQub3BlcmF0b3IgPT09ICc9PScpIHtcbiAgICAgICAgICBxdWVyeUV4YW1wbGUgKz0gYFxcbiAgLndoZXJlKCcke2ZpZWxkLmZpZWxkfScsICc9PScsICd2YWx1ZScpYDtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5vcGVyYXRvciA9PT0gJ0NPTlRBSU5TJykge1xuICAgICAgICAgIHF1ZXJ5RXhhbXBsZSArPSBgXFxuICAud2hlcmUoJyR7ZmllbGQuZmllbGR9JywgJz49JywgJ3NlYXJjaFRleHQnKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlcnlFeGFtcGxlICs9IGBcXG4gIC53aGVyZSgnJHtmaWVsZC5maWVsZH0nLCAnJHtmaWVsZC5vcGVyYXRvcn0nLCAndmFsdWUnKWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9yZGVyQnlGaWVsZCA9IGZpZWxkcy5maW5kKChmOiBhbnkpID0+IGYudHlwZS5pbmNsdWRlcygnT1JERVIgQlknKSk7XG4gICAgaWYgKG9yZGVyQnlGaWVsZCkge1xuICAgICAgcXVlcnlFeGFtcGxlICs9IGBcXG4gIC5vcmRlckJ5KCcke1xuICAgICAgICBvcmRlckJ5RmllbGQuZmllbGRcbiAgICAgIH0nLCAnJHtvcmRlckJ5RmllbGQub3JkZXIudG9Mb3dlckNhc2UoKX0nKWA7XG4gICAgfVxuXG4gICAgaW5zdHJ1Y3Rpb25zLnF1ZXJ5RXhhbXBsZSA9IHF1ZXJ5RXhhbXBsZTtcblxuICAgIGluc3RydWN0aW9ucy5zdGVwQnlTdGVwID0gW1xuICAgICAgJzEuIElyIHBhcmEgRmlyZWJhc2UgQ29uc29sZSDihpIgRmlyZXN0b3JlIOKGkiBJbmRleGVzJyxcbiAgICAgICcyLiBDbGljYXIgZW0gXCJDcmVhdGUgSW5kZXhcIicsXG4gICAgICBgMy4gRGVmaW5pciBDb2xsZWN0aW9uIElEOiAke2NvbGxlY3Rpb259YCxcbiAgICAgICc0LiBDb25maWd1cmFyIGNhbXBvcyBuZXN0YSBPUkRFTSBFWEFUQTonLFxuICAgICAgLi4uZmllbGRzLm1hcChcbiAgICAgICAgKGZpZWxkOiBhbnksIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgYCAgICR7aW5kZXggKyAxfS4gQ2FtcG86ICR7ZmllbGQuZmllbGR9LCBPcmRlcjogJHtcbiAgICAgICAgICAgIGZpZWxkLm9yZGVyXG4gICAgICAgICAgfSwgQXJyYXk6IE5vYFxuICAgICAgKSxcbiAgICAgICc1LiBEZWZpbmlyIFF1ZXJ5IHNjb3BlczogQ29sbGVjdGlvbicsXG4gICAgICAnNi4gQ2xpY2FyIGVtIFwiQ3JlYXRlXCIgZSBhZ3VhcmRhciBjb25jbHVzw6NvJyxcbiAgICBdO1xuXG4gICAgaW5zdHJ1Y3Rpb25zLm5vdGVzID0gW1xuICAgICAgJ+KaoO+4jyBBIG9yZGVtIGRvcyBjYW1wb3Mgw6kgQ1LDjVRJQ0EgLSBkZXZlIGNvcnJlc3BvbmRlciBleGF0YW1lbnRlIMOgIG9yZGVtIGRhIHF1ZXJ5JyxcbiAgICAgICfimqDvuI8gQXMgY2zDoXVzdWxhcyBXSEVSRSBkZXZlbSB2aXIgQU5URVMgZG8gY2FtcG8gT1JERVIgQlknLFxuICAgICAgJ+KaoO+4jyBFc3RlIMOtbmRpY2Ugc8OzIGZ1bmNpb25hcsOhIHBhcmEgcXVlcmllcyBjb20gZXN0YSBjb21iaW5hw6fDo28gRVhBVEEgZGUgY2FtcG9zJyxcbiAgICAgICfimqDvuI8gQSBjcmlhw6fDo28gZG8gw61uZGljZSBwb2RlIGxldmFyIHbDoXJpb3MgbWludXRvcycsXG4gICAgXTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2VyYSB1bSBsaW5rIGRlIMOtbmRpY2UgYmFzZWFkbyBuYSBlc3RydXR1cmEgZGEgcXVlcnlcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVJbmRleExpbmsoXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluZGV4RmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBpZiAoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uZGl0aW9ucy5mb3JFYWNoKChjb25kaXRpb246IENvbmRpdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChjb25kaXRpb24uZmlyZXN0b3JlUHJvcGVydHkpIHtcbiAgICAgICAgICAgIGluZGV4RmllbGRzLnB1c2goY29uZGl0aW9uLmZpcmVzdG9yZVByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJyYW5nZS5maWx0ZXJzICYmIGFycmFuZ2UuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFycmFuZ2UuZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXIuZmlsdGVyPy5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgaW5kZXhGaWVsZHMucHVzaChmaWx0ZXIuZmlsdGVyLnByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJyYW5nZS5zb3J0Qnk/LmZpZWxkKSB7XG4gICAgICAgIGluZGV4RmllbGRzLnB1c2goYXJyYW5nZS5zb3J0QnkuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXhGaWVsZHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBPYnRlciBvIHByb2plY3RJZCBkaW5hbWljYW1lbnRlIGRvIEZpcmViYXNlXG4gICAgICAgIGNvbnN0IHByb2plY3RJZCA9ICh0aGlzLm5nRmlyZT8uZmlyZXN0b3JlPy5hcHA/Lm9wdGlvbnMgYXMgYW55KVxuICAgICAgICAgID8ucHJvamVjdElkO1xuXG4gICAgICAgIGlmICghcHJvamVjdElkKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdOw6NvIGZvaSBwb3Nzw612ZWwgb2J0ZXIgbyBwcm9qZWN0SWQgZG8gRmlyZWJhc2UnKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBgaHR0cHM6Ly9jb25zb2xlLmZpcmViYXNlLmdvb2dsZS5jb20vcHJvamVjdC8ke3Byb2plY3RJZH0vZmlyZXN0b3JlL2luZGV4ZXNgO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGNyZWF0ZV9jb21wb3NpdGU6IGBjb2xsZWN0aW9uPSR7Y29sbGVjdGlvbn0mZmllbGRzPSR7aW5kZXhGaWVsZHMuam9pbihcbiAgICAgICAgICAgICcsJ1xuICAgICAgICAgICl9YCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmluYWxMaW5rID0gYCR7YmFzZVVybH0/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgICAgIHJldHVybiBmaW5hbExpbms7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhbGhhIGFvIGdlcmFyIGxpbmsgZGUgw61uZGljZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyYWNrTWlzc2luZ0luZGV4KFxuICAgIGVycm9yOiBhbnksXG4gICAgY29sbGVjdGlvbjogc3RyaW5nLFxuICAgIGFycmFuZ2U6IEFycmFuZ2UsXG4gICAgY29uZGl0aW9uczogQ29uZGl0aW9uW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluZGV4TGluayA9IHRoaXMuZXh0cmFjdEluZGV4TGluayhlcnJvcik7XG4gICAgICBpZiAoIWluZGV4TGluaykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaW5rSGFzaCA9IGJ0b2EoaW5kZXhMaW5rKVxuICAgICAgICAucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKVxuICAgICAgICAuc3Vic3RyaW5nKDAsIDIwKTtcbiAgICAgIGNvbnN0IGRvY0lkID0gYCR7Y29sbGVjdGlvbn1fJHtsaW5rSGFzaH1gO1xuXG4gICAgICBjb25zdCBpbmRleEluc3RydWN0aW9ucyA9IHRoaXMuZ2VuZXJhdGVJbmRleEluc3RydWN0aW9ucyhcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgYXJyYW5nZSxcbiAgICAgICAgY29uZGl0aW9uc1xuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJhY2tpbmdEYXRhOiBhbnkgPSB7XG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGluZGV4TGluayxcbiAgICAgICAgaW5kZXhJbnN0cnVjdGlvbnMsXG4gICAgICAgIGFycmFuZ2U6IHtcbiAgICAgICAgICBzb3J0Qnk6IGFycmFuZ2Uuc29ydEJ5LFxuICAgICAgICAgIGZpbHRlcnM6XG4gICAgICAgICAgICBhcnJhbmdlLmZpbHRlcnM/Lm1hcCgoZjogYW55KSA9PiAoe1xuICAgICAgICAgICAgICBhcnJhbmdlOiBmLmFycmFuZ2UsXG4gICAgICAgICAgICAgIHByb3BlcnR5OiBmLmZpbHRlcj8ucHJvcGVydHkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgZGF0ZUZpZWxkOlxuICAgICAgICAgICAgICAgIGYuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgPyBhcnJhbmdlLnNvcnRCeT8uZmllbGQgOiBudWxsLFxuICAgICAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB9LFxuICAgICAgICBjb25kaXRpb25zOlxuICAgICAgICAgIGNvbmRpdGlvbnM/Lm1hcCgoYzogQ29uZGl0aW9uKSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IGMuZmlyZXN0b3JlUHJvcGVydHksXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgdXBkYXRlZEF0OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMubmdGaXJlLmNvbGxlY3Rpb24oJ21pc3NpbmdJbmRleGVzJykuZG9jKGRvY0lkKTtcbiAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IGRvY1JlZi5nZXQoKS50b1Byb21pc2UoKTtcblxuICAgICAgaWYgKGRvYyAmJiBkb2MuZXhpc3RzKSB7XG4gICAgICAgIGF3YWl0IGRvY1JlZi51cGRhdGUoe1xuICAgICAgICAgIGNvdW50OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5pbmNyZW1lbnQoMSksXG4gICAgICAgICAgdXBkYXRlZEF0OiBmaXJlYmFzZS5maXJlc3RvcmUuRmllbGRWYWx1ZS5zZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgICBsYXN0RXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZG9jUmVmLnNldCh7XG4gICAgICAgICAgLi4udHJhY2tpbmdEYXRhLFxuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIGNyZWF0ZWRBdDogZmlyZWJhc2UuZmlyZXN0b3JlLkZpZWxkVmFsdWUuc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHRyYWNraW5nRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFsaGEgYW8gcmFzdHJlYXIgw61uZGljZSBhdXNlbnRlOicsIHRyYWNraW5nRXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi90eXBlcy9UYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb2xsZWN0aW9uUmVmZXJlbmNlLFxuICAgIERvY3VtZW50UmVmZXJlbmNlLFxuICAgIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xuaW1wb3J0IHtQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBmaXJlYmFzZSBmcm9tICdmaXJlYmFzZS9jb21wYXQnO1xuaW1wb3J0IFdoZXJlRmlsdGVyT3AgPSBmaXJlYmFzZS5maXJlc3RvcmUuV2hlcmVGaWx0ZXJPcDtcbmltcG9ydCB7T3JkZXJCeURpcmVjdGlvbn0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZURhdGEge1xuICAgIGRpc3BsYXllZENvbHVtbnM6IENvbHVtbltdO1xuICAgIGZpbHRlcmFibGVPcHRpb25zPzogRmlsdGVyYWJsZU9wdGlvbltdO1xuICAgIGNvbGxlY3Rpb25SZWY6IENvbGxlY3Rpb25SZWZlcmVuY2U8dW5rbm93bj47XG4gICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0b3RhbFJlZj86IHtyZWY6IERvY3VtZW50UmVmZXJlbmNlPHVua25vd24+OyBmaWVsZDogc3RyaW5nfVtdO1xuICAgIGRvd25sb2FkOiBib29sZWFuO1xuICAgIHBhZ2luYXRpb246IGJvb2xlYW47XG4gICAgaXNOb3RDbGlja2FibGU/OiBib29sZWFuO1xuICAgIHVybD86IHN0cmluZztcbiAgICBzb3J0Qnk/OiB7ZmllbGQ6IHN0cmluZzsgb3JkZXI6IE9yZGVyQnlEaXJlY3Rpb259O1xuICAgIGNvbmRpdGlvbnM/OiB7XG4gICAgICAgIG9wZXJhdG9yOiBXaGVyZUZpbHRlck9wO1xuICAgICAgICBmaXJlc3RvcmVQcm9wZXJ0eTogc3RyaW5nO1xuICAgICAgICBkYXNoUHJvcGVydHk6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH1bXTtcbiAgICBmaWx0ZXJGbj86IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG4gICAgY29sb3I/OiB7Ymc6IHN0cmluZzsgdGV4dDogc3RyaW5nfTtcbiAgICBhY3Rpb25CdXR0b24/OiB7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIHJvdXRlckxpbms6IHN0cmluZztcbiAgICAgICAgaWNvbj86IHN0cmluZztcbiAgICAgICAgY29sb3JDbGFzcz86IHN0cmluZztcbiAgICAgICAgbWV0aG9kPzogKHJvdzogYW55LCBldmVudD86IGFueSkgPT4gYW55O1xuICAgICAgICBjb25kaXRpb24/OiAocm93PzogYW55KSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgdGFicz86IFRhYjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWIge1xuICAgIG1ldGhvZDogKHRhYjogYW55LCBldmVudD86IGFueSkgPT4gYW55O1xuICAgIHRhYnNEYXRhOiBUYWJEYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFiRGF0YSB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb3VudGVyPzogbnVtYmVyO1xuICAgIGNvdW50ZXJDbGFzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgY2hhckxpbWl0PzogbnVtYmVyO1xuICAgIHBpcGU/OiBQaXBlVHJhbnNmb3JtO1xuICAgIGljb25DbGFzcz86IHtcbiAgICAgICAgdGV4dD86IHN0cmluZztcbiAgICAgICAgY2xhc3M/OiBzdHJpbmc7XG4gICAgICAgIGNvbmRpdGlvbj86IChyb3c6IGFueSkgPT4gYW55O1xuICAgICAgICBidXR0b25NZXRob2Q/OiAocm93OiBhbnksIGV2ZW50PzogYW55KSA9PiBhbnk7XG4gICAgfVtdO1xuICAgIGlzU29ydGFibGU/OiBib29sZWFuO1xuICAgIGlzRmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgaXNGaWx0ZXJhYmxlQnlEYXRlPzogYm9vbGVhbjtcbiAgICBoYXNMaW5rPzogYm9vbGVhbiB8IHN0cmluZztcbiAgICBoYXNEb3dubG9hZD86IGJvb2xlYW4gfCBzdHJpbmc7XG4gICAgcmVsYXRpb24/OiB7XG4gICAgICAgIGNvbGxlY3Rpb246IHN0cmluZztcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZztcbiAgICAgICAgbmV3UHJvcGVydHk6IHN0cmluZztcbiAgICB9O1xuICAgIHF1ZXJ5TGVuZ3RoPzoge1xuICAgICAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgICAgIG9wZXJhdG9yOiBXaGVyZUZpbHRlck9wO1xuICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH07XG4gICAgaW1hZ2U/OiBJbWFnZTtcbiAgICBtZXRob2Q/OiAocm93OiBhbnksIGV2ZW50PzogYW55KSA9PiBhbnk7XG4gICAgZmlsdGVyUHJlZGljYXRlcz86IHN0cmluZ1tdO1xuICAgIGNhbGN1bGF0ZVZhbHVlPzogKHJvdzogYW55KSA9PiBhbnk7XG4gICAgYXJyYXlGaWVsZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZSB7XG4gICAgY2xhc3M6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHVybD86IGJvb2xlYW47XG4gICAgZGVmYXVsdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJhYmxlT3B0aW9uIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGl0ZW1zOiB7XG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgICBiYXRjaFNpemU6IG51bWJlcjtcbiAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgZG9jPzoge1xuICAgICAgICBmaXJzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PGFueT4gfCBudWxsO1xuICAgICAgICBsYXN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8YW55PiB8IG51bGw7XG4gICAgfTtcbiAgICBuYXZpZ2F0aW9uOiAncmVsb2FkJyB8ICdmb3J3YXJkJyB8ICdiYWNrd2FyZCc7XG4gICAgYXJyYW5nZTogQXJyYW5nZTtcbiAgICBjb25kaXRpb25zPzogQ29uZGl0aW9uW107XG4gICAgZmlsdGVyRm4/OiAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgY2xpZW50UGFnZUluZGV4PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvbiB7XG4gICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XG4gICAgZmlyZXN0b3JlUHJvcGVydHk6IHN0cmluZztcbiAgICBkYXNoUHJvcGVydHk6IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFycmFuZ2Uge1xuICAgIGZpbHRlcnM6IHtcbiAgICAgICAgYXJyYW5nZTpcbiAgICAgICAgICAgIHwgJ2FzY2VuZGluZydcbiAgICAgICAgICAgIHwgJ2Rlc2NlbmRpbmcnXG4gICAgICAgICAgICB8ICdmaWx0ZXInXG4gICAgICAgICAgICB8ICdmaWx0ZXJCeURhdGUnXG4gICAgICAgICAgICB8ICdlcXVhbHMnXG4gICAgICAgICAgICB8ICcnO1xuICAgICAgICBmaWx0ZXI/OiB7cHJvcGVydHk6IHN0cmluZzsgZmlsdGVyaW5nOiBzdHJpbmd9IHwgbnVsbDtcbiAgICAgICAgZGF0ZUZpbHRlcj86IHtcbiAgICAgICAgICAgIGluaXRpYWw6IERhdGU7XG4gICAgICAgICAgICBmaW5hbDogRGF0ZTtcbiAgICAgICAgfTtcbiAgICB9W107XG4gICAgc29ydEJ5OiB7ZmllbGQ6IHN0cmluZzsgb3JkZXI6IE9yZGVyQnlEaXJlY3Rpb259O1xuICAgIGVsZW1lbnRJZD86IHtwcm9wZXJ0eTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfTtcbn1cblxuXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi90eXBlcy9UYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29sbGVjdGlvblJlZmVyZW5jZSxcbiAgRG9jdW1lbnRSZWZlcmVuY2UsXG4gIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdCxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvZmlyZXN0b3JlJztcbmltcG9ydCB7IFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBmaXJlYmFzZSBmcm9tICdmaXJlYmFzZS9jb21wYXQnO1xuaW1wb3J0IFdoZXJlRmlsdGVyT3AgPSBmaXJlYmFzZS5maXJlc3RvcmUuV2hlcmVGaWx0ZXJPcDtcbmltcG9ydCB7IE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRGF0YSB7XG4gIGRpc3BsYXllZENvbHVtbnM6IENvbHVtbltdO1xuICBmaWx0ZXJhYmxlT3B0aW9ucz86IEZpbHRlcmFibGVPcHRpb25bXTtcbiAgY29sbGVjdGlvblJlZjogQ29sbGVjdGlvblJlZmVyZW5jZTx1bmtub3duPjtcbiAgY29sbGVjdGlvbjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHRvdGFsUmVmPzogeyByZWY6IERvY3VtZW50UmVmZXJlbmNlPHVua25vd24+OyBmaWVsZDogc3RyaW5nIH1bXTtcbiAgZG93bmxvYWQ6IGJvb2xlYW47XG4gIHBhZ2luYXRpb246IGJvb2xlYW47XG4gIGlzTm90Q2xpY2thYmxlPzogYm9vbGVhbjtcbiAgdXJsPzogc3RyaW5nO1xuICBzb3J0Qnk/OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiBPcmRlckJ5RGlyZWN0aW9uIH07XG4gIGNvbmRpdGlvbnM/OiB7XG4gICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XG4gICAgZmlyZXN0b3JlUHJvcGVydHk6IHN0cmluZztcbiAgICBkYXNoUHJvcGVydHk6IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9W107XG4gIGZpbHRlckZuPzogKGl0ZW06IGFueSkgPT4gYm9vbGVhbjtcbiAgY29sb3I/OiB7IGJnOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9O1xuICBhY3Rpb25CdXR0b24/OiB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICByb3V0ZXJMaW5rOiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICBjb2xvckNsYXNzPzogc3RyaW5nO1xuICAgIG1ldGhvZD86IChyb3c6IGFueSwgZXZlbnQ/OiBhbnkpID0+IGFueTtcbiAgICBjb25kaXRpb24/OiAocm93PzogYW55KSA9PiBib29sZWFuO1xuICB9O1xuICB0YWJzPzogVGFiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYiB7XG4gIG1ldGhvZDogKHRhYjogYW55LCBldmVudD86IGFueSkgPT4gYW55O1xuICB0YWJzRGF0YTogVGFiRGF0YVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYkRhdGEge1xuICBsYWJlbDogc3RyaW5nO1xuICBjb3VudGVyPzogbnVtYmVyO1xuICBjb3VudGVyQ2xhc3M/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcbiAgcHJvcGVydHk6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGNoYXJMaW1pdD86IG51bWJlcjtcbiAgcGlwZT86IFBpcGVUcmFuc2Zvcm07XG4gIGljb25DbGFzcz86IHtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGNsYXNzPzogc3RyaW5nO1xuICAgIGNvbmRpdGlvbj86IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGJ1dHRvbk1ldGhvZD86IChyb3c6IGFueSwgZXZlbnQ/OiBhbnkpID0+IGFueTtcbiAgfVtdO1xuICBpc1NvcnRhYmxlPzogYm9vbGVhbjtcbiAgaXNGaWx0ZXJhYmxlPzogYm9vbGVhbjtcbiAgaXNGaWx0ZXJhYmxlQnlEYXRlPzogYm9vbGVhbjtcbiAgaGFzTGluaz86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIGhhc0Rvd25sb2FkPzogYm9vbGVhbiB8IHN0cmluZztcbiAgcmVsYXRpb24/OiB7XG4gICAgdGFyZ2V0ZWRDb2xsZWN0aW9uOiBzdHJpbmc7IC8vdXNlcnMgKGNvbGxlY3Rpb24gdGFyZ2V0ZWQgZG8gam9pbilcbiAgICBzb3VyY2VQcm9wZXJ0eTogc3RyaW5nOyAvLyB1c2VySWQgPDwgZGEgY29sbGVjdGlvbiBhdHVhbCBgb3JkZXJzYFxuICAgIHRhcmdldGVkUHJvcGVydHk6IHN0cmluZzsgLy8gbmFtZSA/PyAocHJvcHJpZWRhZGUgcXVlIHF1ZXJvIHB1eGFyIGRhIHRhYmVsYSB1c2VycylcbiAgfTtcbiAgcXVlcnlMZW5ndGg/OiB7XG4gICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbiAgaW1hZ2U/OiBJbWFnZTtcbiAgbWV0aG9kPzogKHJvdzogYW55LCBldmVudD86IGFueSkgPT4gYW55O1xuICBmaWx0ZXJQcmVkaWNhdGVzPzogc3RyaW5nW107XG4gIGNhbGN1bGF0ZVZhbHVlPzogKHJvdzogYW55KSA9PiBhbnk7XG4gIGFycmF5RmllbGQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2Uge1xuICBjbGFzczogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuICB1cmw/OiBib29sZWFuO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcmFibGVPcHRpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICBpdGVtczoge1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW47XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICBiYXRjaFNpemU6IG51bWJlcjtcbiAgY29sbGVjdGlvbjogc3RyaW5nO1xuICBkb2M/OiB7XG4gICAgZmlyc3REb2M6IFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxhbnk+IHwgbnVsbDtcbiAgICBsYXN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8YW55PiB8IG51bGw7XG4gIH07XG4gIG5hdmlnYXRpb246ICdyZWxvYWQnIHwgJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJztcbiAgYXJyYW5nZTogQXJyYW5nZTtcbiAgY29uZGl0aW9ucz86IENvbmRpdGlvbltdO1xuICBmaWx0ZXJGbj86IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG4gIHNpemU/OiBudW1iZXI7XG4gIGNsaWVudFBhZ2VJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb24ge1xuICBvcGVyYXRvcjogV2hlcmVGaWx0ZXJPcDtcbiAgZmlyZXN0b3JlUHJvcGVydHk6IHN0cmluZztcbiAgZGFzaFByb3BlcnR5OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnJhbmdlIHtcbiAgZmlsdGVyczoge1xuICAgIGFycmFuZ2U6XG4gICAgICB8ICdhc2NlbmRpbmcnXG4gICAgICB8ICdkZXNjZW5kaW5nJ1xuICAgICAgfCAnZmlsdGVyJ1xuICAgICAgfCAnZmlsdGVyQnlEYXRlJ1xuICAgICAgfCAnZXF1YWxzJ1xuICAgICAgfCAnJztcbiAgICBmaWx0ZXI/OiB7IHByb3BlcnR5OiBzdHJpbmc7IGZpbHRlcmluZzogc3RyaW5nIH0gfCBudWxsO1xuICAgIGRhdGVGaWx0ZXI/OiB7XG4gICAgICBpbml0aWFsOiBEYXRlO1xuICAgICAgZmluYWw6IERhdGU7XG4gICAgfTtcbiAgfVtdO1xuICBzb3J0Qnk6IHsgZmllbGQ6IHN0cmluZzsgb3JkZXI6IE9yZGVyQnlEaXJlY3Rpb24gfTtcbiAgZWxlbWVudElkPzogeyBwcm9wZXJ0eTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH07XG59XG4iXX0=