@universis/ngx-tables 0.8.2 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -642,8 +642,9 @@ export class AdvancedTableComponent {
642
642
  if (this.dataTable) {
643
643
  const info = this.dataTable.page.info();
644
644
  this.page.emit(info);
645
- if (drawIndex > 1)
645
+ if (drawIndex > 1) {
646
646
  return;
647
+ }
647
648
  try {
648
649
  drawIndex++;
649
650
  setTimeout(() => { this.dataTable.columns.adjust(); }, 1);
@@ -782,9 +783,9 @@ export class AdvancedTableComponent {
782
783
  // get order expression
783
784
  const order = aoData[2].value;
784
785
  // get skip records param
785
- let skip = aoData[3].value;
786
+ const skip = aoData[3].value;
786
787
  // get page size param
787
- let top = aoData[4].value;
788
+ const top = aoData[4].value;
788
789
  // get search value
789
790
  const search = aoData[5].value;
790
791
  // get data queryable
@@ -1209,13 +1210,13 @@ export class AdvancedTableComponent {
1209
1210
  // get column definitions
1210
1211
  const columnDefs = this.dataTable.settings().init().columns;
1211
1212
  const columns = columnDefs.map((columnDef, i) => {
1212
- let key = `column-${i}`;
1213
+ const key = `column-${i}`;
1213
1214
  let title = columnDef.title;
1214
1215
  // get column index
1215
1216
  const index = columnOrder.indexOf(i);
1216
1217
  const visible = this.dataTable.column(index).visible();
1217
1218
  // set title for select column
1218
- if (i == 0 && this.selectable) {
1219
+ if (i === 0 && this.selectable) {
1219
1220
  title = '<' + this._translateService.instant('Tables.SelectColumn') + '>';
1220
1221
  }
1221
1222
  // get column title
@@ -1249,9 +1250,18 @@ export class AdvancedTableComponent {
1249
1250
  });
1250
1251
  this._columnSelector.selectColumns(columns).then((event) => {
1251
1252
  if (event.result === 'ok') {
1253
+ const sorted = event.columns
1254
+ .map((col) => {
1255
+ return {
1256
+ key: col.key,
1257
+ index: col.index
1258
+ };
1259
+ })
1260
+ .sort((a, b) => a.index - b.index);
1252
1261
  // get column order e.g. [3, 1, 2, 0, 4]
1253
- let indexes = event.columns.map((item) => {
1254
- return item.index;
1262
+ const indexes = sorted
1263
+ .map((item) => {
1264
+ return event.columns.findIndex((next) => item.key === next.key);
1255
1265
  });
1256
1266
  // reset column visibilty
1257
1267
  for (let index = 0; index < event.columns.length; index++) {
@@ -1365,12 +1375,10 @@ export class AdvancedTableComponent {
1365
1375
  cleanupIndexes.push(index);
1366
1376
  return false;
1367
1377
  }
1368
- // find item by title
1369
- const findItem = this.config.columns.find((column) => {
1370
- return column.title && column.title.length && this._translateService.instant(column.title) === headerItem;
1371
- });
1372
1378
  // exclude hidden columns
1373
- if (findItem && findItem.hidden === true) {
1379
+ // note: use the datatable visible() function
1380
+ // instead of the hidden config property, to satisfy the column selector
1381
+ if (!this.dataTable.column(index).visible()) {
1374
1382
  cleanupIndexes.push(index);
1375
1383
  return false;
1376
1384
  }
@@ -1482,4 +1490,4 @@ AdvancedTableComponent.propDecorators = {
1482
1490
  };
1483
1491
  export { ɵ0 };
1484
1492
 
1485
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQUUsWUFBWSxFQUN4QixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0csTUFBTSxFQUNkLFNBQVMsRUFDVCxpQkFBaUIsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQWUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUN4RCxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpHLG9GQUFvRjtBQUNwRixPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyx5QkFBeUIsQ0FBQztB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QUFDLE9BQU87eUJBQ2pCLFNBQVMsU0FBQyxZQUFZOzRCQUN0QixTQUFTLFNBQUMsZUFBZTsyQkFDekIsU0FBUyxTQUFDLGNBQWM7cUJBQ3hCLEtBQUs7MEJBQ0wsS0FBSzt1QkFDTCxLQUFLO21CQUNMLE1BQU0sU0FBQyxNQUFNO21CQUNiLE1BQU0sU0FBQyxNQUFNO3FCQUNiLEtBQUssU0FBQyxRQUFRO3FCQUNkLE1BQU0sU0FBQyxRQUFRO21CQUNmLE1BQU0sU0FBQyxNQUFNO21CQUNiLE1BQU0sU0FBQyxNQUFNO29CQUNiLE1BQU0sU0FBQyxPQUFPO3FCQUNkLE1BQU0sU0FBQyxRQUFROzRCQUNmLE1BQU0sU0FBQyxlQUFlO3NCQUN0QixNQUFNLFNBQUMsU0FBUzt5QkFNaEIsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7cUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7d0JBQ0wsS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7c0JBRUwsS0FBSztzQkFDTCxLQUFLO3lCQUlMLEtBQUs7NkJBSUwsS0FBSzsyQkFJTCxLQUFLO3VCQUNMLEtBQUs7d0JBS0wsS0FBSztxQkFNTCxLQUFLLFNBQUMsUUFBUTt5QkFrQmQsS0FBSyxTQUFDLFlBQVk7eUJBeUJqQixLQUFLLFNBQUMsWUFBWTt5QkE4Qm5CLEtBQUssU0FBQyxZQUFZO29CQXlCbEIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCwgT25EZXN0cm95LFxuICBPbkluaXQsIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiwgVGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzOiBzdHJpbmc7XG4gIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc6IHN0cmluZztcbiAgcHVibGljIGZvcm1hdHRlcjogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuOiBib29sZWFuO1xuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgb3JkZXI6IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IGFueSwgcm93OiBhbnksIG1ldGE6IGFueSkge1xuICAgIC8vXG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VDYXN0PFQ+KGlucHV0OiBhbnkpOiBUIHtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24ge1xuICBwdWJsaWMgc3RhdGljIGNhc3QoaW5wdXQ6IGFueSwgY2xvbmU/OiBib29sZWFuKTogVGFibGVDb25maWd1cmF0aW9uIHtcbiAgICBpZiAoY2xvbmUpIHtcbiAgICAgIHJldHVybiBmb3JjZUNhc3Q8VGFibGVDb25maWd1cmF0aW9uPihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlucHV0KSkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oaW5wdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJhbmRvbUlkZW50aWZpZXIoKSB7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKSlcbiAgKS50b1N0cmluZygzNik7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHRhYmxlICN0YWJsZSBjbGFzcz1cImRhdGFUYWJsZVwiPlxuICAgIDwvdGFibGU+XG4gICAgPGRpdiAjZW1wdHlUYWJsZSBjbGFzcz1cImQtbm9uZVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZ3JheS0zMDAgYm9yZGVyLWdyYXktMTAwXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtM3hsIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNlcnJvclRlbXBsYXRlIGNsYXNzPVwiZC1ub25lIGVycm9yLW1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1kYW5nZXIgYm9yZGVyLWdyYXktMTAwXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtM3hsIHRleHQtc2Vjb25kYXJ5XCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkRhdGFFcnJvci5UaXRsZSdcIj48L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1sZyB0ZXh0LXNlY29uZGFyeSBtYi0xXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkRhdGFFcnJvci5NZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgZXJyb3ItaW5uZXItbWVzc2FnZVwiPlxuICAgICAgICAgICAgPHNtYWxsPjwvc21hbGw+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgcHJpdmF0ZSBfcXVlcnk6IENsaWVudERhdGFRdWVyeWFibGU7XG4gIHByaXZhdGUgX2NvbmZpZzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2VtcHR5VGFibGUnKSBwdWJsaWMgZW1wdHlUYWJsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZXJyb3JUZW1wbGF0ZScpIHB1YmxpYyBlcnJvclRlbXBsYXRlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0ID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0FjdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQgPSB0cnVlO1xuICBAT3V0cHV0KCdsb2FkJykgcHVibGljIGxvYWQ6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0PigpO1xuICBAT3V0cHV0KCdpbml0JykgcHVibGljIGluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgncmVsb2FkJykgcHVibGljIHJlbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0JykgcHVibGljIHNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnZHJhdycpIHB1YmxpYyBkcmF3OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdwYWdlJykgcHVibGljIHBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ29yZGVyJykgcHVibGljIG9yZGVyOiBFdmVudEVtaXR0ZXI8YW55W11bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdW10+KCk7XG4gIEBPdXRwdXQoJ3Njcm9sbCcpIHB1YmxpYyBzY3JvbGw6IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCdzZWxlY3RlZEl0ZW1zJykgcHVibGljIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2xvYWRpbmcnKSBwdWJsaWMgbG9hZGluZzogRXZlbnRFbWl0dGVyPHtcbiAgICB0YXJnZXQ6IEFkdmFuY2VkVGFibGVDb21wb25lbnRcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB0YXJnZXQ6IEFkdmFuY2VkVGFibGVDb21wb25lbnRcbiAgfT4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2ZXJTaWRlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGxlbmd0aE1lbnUgPSBbNTAsIDEwMCwgMjAwLCA1MDBdO1xuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2VMZW5ndGggPSAyNTtcbiAgQElucHV0KCkgcHVibGljIGNvbHVtbk9yZGVyaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmUgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlTG9hZENhbGxiYWNrOiAoc2V0dGluZ3M6IGFueSwgY2FsbGJhY2s6IChzdGF0ZTogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlQ2FsbGJhY2s6IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3QgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkID0gW107XG4gIHB1YmxpYyB1bnNlbGVjdGVkID0gW107XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBVUkwgdG8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIGZyb21cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWdTcmM6IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxhc3RRdWVyeVRvdGFsSXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGFibGUgZm9vdGVyIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd0Zvb3RlcicpXG4gIHB1YmxpYyBzZXQgc2hvd0Zvb3Rlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dGb290ZXIgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJyk7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dGb290ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dGb290ZXI7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGFibGUgZm9vdGVyIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gICBASW5wdXQoJ3Nob3dIZWFkZXInKVxuICAgcHVibGljIHNldCBzaG93SGVhZGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgIHRoaXMuX3Nob3dIZWFkZXIgPSB2YWx1ZTtcbiAgICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZT50aGVhZCcpO1xuICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgY29uc3QgZGF0YVRhYmxlID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKTtcbiAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJyk7XG4gICAgICAgICAvLyBhZGQgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ210LTInKTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgIC8vIHJlbW92ZSB0b3AgbWFyZ2luXG4gICAgICAgICBkYXRhVGFibGUuY2xhc3NMaXN0LmFkZCgnbXQtMicpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuXG4gICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKSB7XG4gICAgIHJldHVybiB0aGlzLl9zaG93SGVhZGVyO1xuICAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBwYWdpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KCdzaG93UGFnaW5nJylcbiAgcHVibGljIHNldCBzaG93UGFnaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd1BhZ2luZyA9IHZhbHVlO1xuICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX3BhZ2luYXRlJyk7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBqUXVlcnkoZWxlbWVudCkuc2hvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dQYWdpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dQYWdpbmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGFjdGl2ZSBxdWVyeSBmb3IgdGhpcyB0YWJsZVxuICAgKi9cbiAgQElucHV0KCdxdWVyeScpXG4gIHB1YmxpYyBzZXQgcXVlcnkodmFsdWU6IENsaWVudERhdGFRdWVyeWFibGUpIHtcbiAgICB0aGlzLl9xdWVyeSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zOiBEYXRhU2VydmljZVF1ZXJ5UGFyYW1zO1xuICBwcml2YXRlIF9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIEBJbmplY3QoQ09MVU1OX0ZPUk1BVFRFUlMpIHByaXZhdGUgX2NvbHVtbkZvcm1hdHRlcnM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29sdW1uU2VsZWN0b3I6IENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2V4cG9ydFNwcmVhZHNoZWV0OiBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSkge1xuICAgIC8vIGluaXRpYWxpemUgdHJhbnNsYXRlIHBpcGVcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCBuZXcgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yKCkpO1xuICAgIGpRdWVyeS5mbi5kYXRhVGFibGUuZXh0LmNsYXNzZXMuc1BhZ2VCdXR0b24gPSAnYnRuJztcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlID0gJ2J0biBidG4tbGlnaHQnO1xuICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5yZWxvYWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmZldGNoKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaW1wbGUgc2VhcmNoXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSkge1xuICAgICAgaWYgKHNlYXJjaFRleHQgJiYgdGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbikge1xuICAgICAgICAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmICgvXlwiKC4qPylcIiQvLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJyxcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uLCB7XG4gICAgICAgICAgICAgIHRleHQ6IHNlYXJjaFRleHQucmVwbGFjZSgvXlwifFwiJC9nLCAnJyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiB3b3JkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuam9pbignIGFuZCAnKTtcbiAgICAgICAgICAvLyBzZXQgZmlsdGVyXG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIGVtcHR5IHRhYmxlIGxheW91dFxuICAgICAgdGhpcy5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgIC8vIHNlYXJjaCBsb2NhbGx5XG4gICAgICB0aGlzLmRhdGFUYWJsZS5zZWFyY2goc2VhcmNoVGV4dC50cmltKCkpLmRyYXcoKTtcbiAgICAgIC8vIGdldCBpbmRleGVzIG9mIGZpbHRlcmVkIHJvd3NcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KTtcbiAgICAgIC8vIHNldCByZWNvcmRzRmlsdGVyZWRcbiAgICAgIGNvbnN0IHJlY29yZHNGaWx0ZXJlZCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gc2V0IHJlY29yZHNUb3RhbFxuICAgICAgY29uc3QgcmVjb3Jkc1RvdGFsID0gaW5kZXhlcy5sZW5ndGg7XG4gICAgICAvLyByZXRyaWV2ZSBkYXRhIGZyb20gaW5kZXhlc1xuICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgICBjb25zdCBkYXRhID0gaW5kZXhlcy5tYXAoaW5kZXggPT4gcm93c1s8bnVtYmVyPmluZGV4XSk7XG4gICAgICAvLyBlbWl0IHJlc3VsdHMgdG8gbG9hZCBvdXRwdXRcbiAgICAgIHRoaXMubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiByZWNvcmRzRmlsdGVyZWQsXG4gICAgICAgIHJlY29yZHNUb3RhbDogcmVjb3Jkc1RvdGFsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmV0Y2goY2xlYXJTZWxlY3RlZD86IGJvb2xlYW4pIHtcbiAgICAvLyBpZiBkYXRhIHRhYmxlIGlzIG51bGxcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICByZXR1cm4gdGhpcy5uZ09uSW5pdCgpO1xuICAgIH1cbiAgICAvLyBjbGVhciBzZWxlY3Rpb24gaWYgcGFyYW1ldGVyIGlzIG5vdCBkZWNsYXJlZCBvciBpdCdzIHRydWVcbiAgICBpZiAoY2xlYXJTZWxlY3RlZCA9PSBudWxsIHx8IGNsZWFyU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIGxvYWQgZGF0YSBvbmx5XG4gICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSB0cnVlO1xuICAgICAgalF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuZW1wdHkoKTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gbnVsbDtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHJvdy5ub2RlKCk7XG4gICAgICAvLyBpZiBtdWx0aXBsZSBzZWxlY3QgaXMgZmFsc2VcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gZW51bWVyYXRlIHJvd1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygnLnNlbGVjdGVkJykubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3dOb2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCByb3cgZGF0YVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIHNlYXJjaCBzZWxlY3RlZCBpdGVtc1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgLy8gdmFsaWRhdGUgdW5zZWxlY3RlZCBkYXRhXG4gICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvdyBpZiBpdCdzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgdW5TZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAvLyBhZGQgdGhpcyByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbnkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdE5vbmUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RSb3cocm93OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIC8vIGdldCBpZFxuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICAvLyBmaW5kIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyB1bnNlbGVjdFxuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBEYXRhdGFibGVzIGNvbHVtbiByZW5kZXJlciBmb3Igc2VsZWN0IGNoZWNrYm94XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG1ldGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclNlbGVjdChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmICh0eXBlb2YgY29sdW1uLnNlbGVjdFRlbXBsYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbHVtbiwge1xuICAgICAgICBzZWxlY3RUZW1wbGF0ZTogdGVtcGxhdGUoYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lIHMtcm93XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIiBkYXRhLWlkPVwiXFwke2RhdGF9XCIgLz48bGFiZWwgZm9yPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5cbiAgICAgICAgYCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSh7XG4gICAgICBtZXRhLFxuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICAgIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdGhpcy5jb25maWcuc2VsZWN0YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdtdWx0aXBsZVNlbGVjdCcpKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3QgPSB0aGlzLmNvbmZpZy5tdWx0aXBsZVNlbGVjdDtcbiAgICAgIH1cbiAgICAgIC8vIHByZXBhcmUgY29uZmlndXJhdGlvbiBmb3IgY29sdW1uc1xuICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uc1xuICAgICAgICAvLyBmaWx0ZXIgYWN0aW9uIGxpbmsgY29sdW1uXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdBY3Rpb25MaW5rRm9ybWF0dGVyJyAmJiB0aGlzLnNob3dBY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byBhZHZhbmNlIHRhYmxlIGNvbHVtblxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBDb2x1bW5Gb3JtYXR0ZXIodGhpcy5faW5qZWN0b3IpLCBjb2x1bW4pO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudDogY29sdW1uLmhhc093blByb3BlcnR5KCdkZWZhdWx0Q29udGVudCcpID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdHRlcnMuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdE9wdGlvbnMgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pKHJlc3VsdCwgdHlwZSwgcm93LCBtZXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29sdW1uIGZvcm1hdHRlcnMgZXhwb3J0IGNyZWF0ZWRDZWxsIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGNvbHVtbi5mb3JtYXR0ZXJzLmZpbHRlcigoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb2x1bW5Gb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKShjZWxsLCBjZWxsRGF0YSwgcm93RGF0YSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbi5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGw6IGZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBnZXQgdGFibGUgZWxlbWVudFxuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0galF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XG4gICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgICAgdGFibGVFbGVtZW50Lm9uKCdwcm9jZXNzaW5nLmR0JywgKGV2ZW50LCBzZXR0aW5ncywgcHJvY2Vzc2luZykgPT4ge1xuICAgICAgICBpZiAocHJvY2Vzc2luZykge1xuICAgICAgICAgIC8vIGNsZWFyIGVtcHR5IHRhYmxlIGVsZW1lbnRcbiAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnLmRhdGFUYWJsZXNfZW1wdHknKS5odG1sKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5hZGRDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LnJlbW92ZUNsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGRyYXdJbmRleCA9IDE7XG4gICAgICB0YWJsZUVsZW1lbnQub24oJ29yZGVyLmR0JywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmRhdGFUYWJsZS5vcmRlcigpO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZUNvbHVtbnM7XG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlci5lbWl0KG9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKCdkcmF3LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZHJhdy5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGluZm86IHsgcGFnZTogbnVtYmVyOyBwYWdlczogbnVtYmVyIH0gPSB0aGlzLmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgICAgICB0aGlzLnBhZ2UuZW1pdChpbmZvKTtcbiAgICAgICAgICBpZihkcmF3SW5kZXggPiAxKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRyYXdJbmRleCsrO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTt9LCAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGFkanVzdGluZyB0YWJsZSBjb2x1bW5zJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gYWxsb3cgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4gKGFzIHJvdyBwcmltYXJ5IGtleSlcbiAgICAgICAgLy8gdG9kbzo6YWxsb3cgcm93IHByaW1hcnkga2V5IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZmlyc3RDb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdO1xuICAgICAgICAvLyBhZGQgc2VsZWN0IGNvbHVtblxuICAgICAgICBjb25zdCBzZWxlY3RDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RleHQtY2VudGVyIHBsLTQgcHItMCcsXG4gICAgICAgICAgZGF0YTogZmlyc3RDb2x1bW4ucHJvcGVydHkgfHwgZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgICBkZWZhdWx0Q29udGVudDogJycsXG4gICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jdXN0b21TZWxlY3QsXG4gICAgICAgICAgbmFtZTogZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYXNzaWduIHJlbmRlcmVyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgIHJlbmRlcjogdGhpcy5fcmVuZGVyU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBhZGQgY29sdW1uXG4gICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KHNlbGVjdENvbHVtbkRlZmluaXRpb24pO1xuICAgICAgICAvLyB1c2VyIGludGVyZmFjZSBhZGRpdGlvbnNcbiAgICAgICAgLy8gaGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50IChhIHRyaWNrIGZvciBmaXJpbmcgZHJhdy5kdCBldmVudHMpXG4gICAgICAgIHRhYmxlRWxlbWVudFxuICAgICAgICAgIC8vIGhhbmRsZSBkcmF3IGV2ZW50c1xuICAgICAgICAgIC5vbignZHJhdy5kdCcsICgpID0+IHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIGVuYWJsZSByb3cgc2VsZWN0aW9uIGV2ZW50XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCd0Ym9keScpLm9uKCdjbGljaycsICd0cicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBzZWxmLmRhdGFUYWJsZS5yb3codGhpcyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHJvd1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0LmVtaXQocm93KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dC5zLXJvdycpO1xuICAgICAgICAgICAgZWxlbWVudHMub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBtYWtlIHNlbGVjdGlvbiBvbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGVudW1lcmF0ZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHJvdyBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtW2tleV07XG4gICAgICAgICAgICAgICAgLy8gaWYgaWRlbnRpZmllciBpcyBkZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBmaW5kIGNoZWNrIGVsZW1lbnQgd2l0aCB0aGlzIGlkZW50aWZpZXIgaW4gYXR0cmlidXRlIGRhdGEtaWRcbiAgICAgICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKGBpbnB1dFtkYXRhLWlkPScke2lkfSddYCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyB0aGF0IGFyZSBub3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgLy8gYW5kIGRvIG5vdCBpbmNsdWRlZCBpbiB1bnNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGF0YSBpZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PSBqUXVlcnkoZWxlbWVudCkuYXR0cignZGF0YS1pZCcpO1xuICAgICAgICAgICAgICAgIH0pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3codGhpcy5kYXRhVGFibGUucm93KGluZGV4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIC8vIHNldCBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhNZW51OiBbNSwgMTAsIDUwLCAxMDAsIDIwMCwgNTAwXSxcbiAgICAgICAgLy8gaGlkZSBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAvLyBlbmFibGUgc2VhcmNoIGJ1dCBoaWRlIHNlYXJjaCBib3ggKGNzcylcbiAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZGF0YSBwcm9jZXNzaW5nXG4gICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBnZXR0aW5nIHNlcnZlciBzaWRlIGRhdGFcbiAgICAgICAgc2VydmVyU2lkZTogdGhpcy5zZXJ2ZXJTaWRlLFxuICAgICAgICAvLyBlbnVtZXJhdGUgdGFibGUgY29sdW1uc1xuICAgICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbFJlb3JkZXI6ICB0aGlzLmNvbHVtbk9yZGVyaW5nLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVzZXQgZXJyb3JcbiAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKCk7XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGNvbnN0IG9yZGVyID0gYW9EYXRhWzJdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBza2lwIHJlY29yZHMgcGFyYW1cbiAgICAgICAgICBsZXQgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgbGV0IHRvcCA9IGFvRGF0YVs0XS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2VhcmNoIHZhbHVlXG4gICAgICAgICAgY29uc3Qgc2VhcmNoID0gYW9EYXRhWzVdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBkYXRhIHF1ZXJ5YWJsZVxuICAgICAgICAgIGNvbnN0IHEgPSBzZWxmLl9xdWVyeSBpbnN0YW5jZW9mIENsaWVudERhdGFRdWVyeWFibGUgPyBzZWxmLl9xdWVyeSA6IHNlbGYuX2NvbnRleHQubW9kZWwoc2VsZi5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgICAgLy8gYXBwbHkgcGFnaW5nIHBhcmFtc1xuICAgICAgICAgIGlmICh0b3ApIHtcbiAgICAgICAgICAgIHEudGFrZSh0b3ApLnNraXAoc2tpcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGx5IG9yZGVyIHBhcmFtc1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGdldCBvcmRlciBxdWVyeSBleHByZXNzaW9uXG4gICAgICAgICAgICBjb25zdCBvcmRlckJ5U3RyID0gb3JkZXIubWFwKChleHByOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uc1tleHByLmNvbHVtbl0ubmFtZSArICcgJyArIGV4cHIuZGlyIHx8ICdhc2MnO1xuICAgICAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IG9yZGVyXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIG9yZGVyQnlTdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCBjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHEuc2VsZWN0LmFwcGx5KHEsIHNlbGVjdCk7XG4gICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gc2V0IHJvdXRlIGZpbHRlclxuICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFsgcXVlcnlQYXJhbXMuJGZpbHRlciBdO1xuICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgcm91dGUgJGV4cGFuZFxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZ3JvdXBieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICByZXR1cm4gcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IGl0ZW1zLnRvdGFsO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBqUXVlcnkoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKTtcbiAgICAgICAgLy8gaGFuZGxlIHNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgKHNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0galF1ZXJ5KHNjcm9sbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gdGFyZ2V0LnNjcm9sbFRvcCgpO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdCgpO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwuZW1pdCh7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgbGVmdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLkRhdGFUYWJsZShzZXR0aW5ncyk7XG4gICAgICB0aGlzLmluaXQuZW1pdCgpO1xuICAgICAgLy8gc2hvdyBvciBoaWRlIGhlYWRlclxuICAgICAgaWYgKCF0aGlzLnNob3dIZWFkZXIpIHtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKS5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKS5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSB7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJykuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgcGFnZXJcbiAgICAgIGlmICh0aGlzLnNob3dQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93UGFnaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsVG9wKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbExlZnQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXN0UXVlcnkoKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgaWYgKHRoaXMuY29uZmlnID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGFzdFF1ZXJ5UGFyYW1zKS5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICBxLnNldFBhcmFtKGtleSwgdGhpcy5sYXN0UXVlcnlQYXJhbXNba2V5XSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIHF1ZXJ5XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgdXBkYXRlcyBhIHNpbmdsZSByb3dcbiAgICogQHBhcmFtIGZpbmQgLSBBbnkgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNvbnZlcnRlZCB0byBhIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmV0Y2hPbmUoZmluZDogYW55KSB7XG4gICAgaWYgKGZpbmQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldCByb3dzXG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZpbmQgcmVzdWx0XG4gICAgICBjb25zdCBmaW5kS2V5cyA9IE9iamVjdC5rZXlzKGZpbmQpO1xuICAgICAgaWYgKGZpbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGZpbmQgcm93IGluZGV4IGJ5IHNlYXJjaGluZyBlYWNoIHByb3BlcnR5XG4gICAgICBjb25zdCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZmluZEtleXMubWFwKCAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJvd1trZXldID09PSBmaW5kW2tleV07XG4gICAgICAgIH0pLmZpbHRlciggKHJlcykgPT4ge1xuICAgICAgICAgIHJldHVybiByZXMgPT09IGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBoYXMgYmVlbiBmb3VuZFxuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICAvLyBzZWxlY3QgYXR0cmlidXRlc1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJHNlbGVjdCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRzZWxlY3QpO1xuICAgICAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCkge1xuICAgICAgICAgIC8vIGFwcGx5IGV4cGFuZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRleHBhbmQnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgZm9yIHJvd1xuICAgICAgICBmaW5kS2V5cy5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKCAoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnByb3BlcnR5ID09PSBrZXkgfHwgY29sLm5hbWUgPT09IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJvcGVydHkgb3IgbmFtZVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWU7XG4gICAgICAgICAgICBxdWVyeS5hbmQocHJvcGVydHkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChrZXkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgZ2V0IGl0ZW1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldEl0ZW0oKS50aGVuKCAoaXRlbSkgPT4ge1xuICAgICAgICAgIC8vIGlmIGl0ZW0gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KTtcbiAgICAgICAgICBjb25zdCBjaGVja2VkID0galF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgLy8gcmVkcmF3IHJvd1xuICAgICAgICAgICAgcm93LmRhdGEoaXRlbSk7XG4gICAgICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94Jykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpZiByb3cgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICogQHBhcmFtICRldmVudFxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gICRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAvLyBnZXQgcm93IGZyb20gaWRcbiAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KC8tKFxcZCspJC9nLmV4ZWMoaW5wdXQuaWQpWzFdLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RW1wdHlUYWJsZSgpIHtcbiAgICAvLyB0aGlzIG9wZXJhdGlvbiBpcyBpbXBvcnRhbnRcbiAgICAvLyBkdWUgdG8gbmcgZGF0YSBiaW5kaW5nXG4gICAgLy8gZW1wdHkgdGFibGUgdGVtcGxhdGUgaGFzIG5vIHRyYW5zbGF0ZWQgdGV4dCBkdXJpbmcgbmdPbkluaXQoKVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVFcnJvcihlcnI/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgY29uc3QgaW5uZXJNZXNzYWdlID0gKHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc21hbGwnKS5pdGVtKDApO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSBlcnIuZXJyb3IgJiYgZXJyLmVycm9yLm1lc3NhZ2UgPyBlcnIuZXJyb3IubWVzc2FnZSA6IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDsgIFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAvLyBmZXRjaCBhbmQgcmVkcmF3XG4gICAgICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldChsb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucXVlcnkgPSBudWxsO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuYXV0b0xvYWQgPSAhIWxvYWQ7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucygpIHtcbiAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzAsIDQsIDEsIDIsIDNdXG4gICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgIC8vIGdldCBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5kYXRhVGFibGUuc2V0dGluZ3MoKS5pbml0KCkuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uRGVmcy5tYXAoKFxuICAgICAgY29sdW1uRGVmOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBzb3J0YWJsZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlciB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGxldCBrZXkgPSBgY29sdW1uLSR7aX1gO1xuICAgICAgbGV0IHRpdGxlID0gY29sdW1uRGVmLnRpdGxlO1xuICAgICAgLy8gZ2V0IGNvbHVtbiBpbmRleFxuICAgICAgY29uc3QgaW5kZXggPSAgY29sdW1uT3JkZXIuaW5kZXhPZihpKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKTtcbiAgICAgIC8vIHNldCB0aXRsZSBmb3Igc2VsZWN0IGNvbHVtblxuICAgICAgaWYgKGkgPT0gMCAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5TZWxlY3RDb2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIC8vIGdldCBjb2x1bW4gdGl0bGVcbiAgICAgIGlmICh0aXRsZSAhPSBudWxsICYmIHRpdGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBjb2x1bW4gcGxhY2Vob2xkZXJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2kgLSAxXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2ldLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGxhY2Vob2xkZXIpICsgJz4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlVua25vd25Db2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHZpc2libGUsXG4gICAgICAgIGluZGV4XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fY29sdW1uU2VsZWN0b3Iuc2VsZWN0Q29sdW1ucyhjb2x1bW5zKS50aGVuKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzMsIDEsIDIsIDAsIDRdXG4gICAgICAgIGxldCBpbmRleGVzID0gZXZlbnQuY29sdW1ucy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlc2V0IGNvbHVtbiB2aXNpYmlsdHlcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGV2ZW50LmNvbHVtbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LmNvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1uT3JkZXIuaW5kZXhPZihpbmRleCk7XG4gICAgICAgICAgLy8gc2V0IHZpc2liaWx0eSB3aXRoIHJlZHJhdyAoPXRydWUpXG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1uKGNvbEluZGV4KS52aXNpYmxlKGVsZW1lbnQudmlzaWJsZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWxseSBhcHBseSBjb2x1bW4gb3JkZXJcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihpbmRleGVzLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0byBwYXNzIGFuIGVycm9ySGFuZGxlciBjYWxsYmFjaywgaWYgZGVzaXJlZFxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhwb3J0VmlldyhvcHRpb25zPzoge2Vycm9ySGFuZGxlcj86IChyZWFzb24/OiBhbnkpID0+IGFueX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZy5zaG93TG9hZGluZygpO1xuICAgICAgLy8gdmFsaWRhdGUgcXVlcnkgaXRlbXMgYW5kIGNvbmZpZ1xuICAgICAgaWYgKCEodGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb24uc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gYW5kIGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgZXhwb3J0TGltaXQgPVxuICAgICAgICAoZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA+IDApXG4gICAgICAgID8gZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0IDogTUFYX0VYUE9SVF9JVEVNUztcbiAgICAgIC8vIGFuZCB2YWxpZGF0ZSBpdFxuICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPiBleHBvcnRMaW1pdCkge1xuICAgICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gcHJvdmlkZSBhIHJlY29nbml6aWJsZSBlcnJvciB0eXBlXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIobmV3IEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvcignRXhwb3J0IGxpbWl0IGV4Y2VlZGVkJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvciBzaG93IHdhcm5pbmcgbW9kYWwgYW5kIGV4aXRcbiAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpc3QnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaW1pdEV4Y2VlZGVkJyxcbiAgICAgICAgICAgIHtkYXRhTGVuZ3RoOiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zLCBleHBvcnRMaW1pdH0pLCBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0b3RhbCBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgIGNvbnN0IHRvdGFsRGlzcGxheWVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KS5sZW5ndGg7XG4gICAgICAvLyBpZiB0aGV5IGFscmVhZHkgc2F0aXNmeSB0aGUgbGFzdCBxdWVyeSB0b3RhbFxuICAgICAgaWYgKHRvdGFsRGlzcGxheWVkSXRlbXMgPT09IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMpIHtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhIGltbWVkaWF0ZWx5XG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRoZW0gdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbW9yZSBkYXRhIG5lZWQgdG8gYmUgZmV0Y2hlZFxuICAgICAgICAvLyBob2xkIHByZXZpb3VzIGRhdGEgc3RhdGVcbiAgICAgICAgY29uc3QgcHJldmlvdXNEYXRhU3RhdGUgPSB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gZ2V0IHRhcmdldCBkYXRhIHN0YXRlIGJ5IGV4ZWN1dGluZyB0aGUgbGFzdCBxdWVyeVxuICAgICAgICAvLyBub3RlOiB0YWtpbmcgdGhlIGV4cG9ydExpbWl0IGFtb3VudCBvZiBpdGVtcyB3aWxsIGFsd2F5cyBzYXRpc2Z5IHRoZSByZXN1bHRzLFxuICAgICAgICAvLyBiZWNhdXNlIGl0IGhhcyBiZWVuIHZhbGlkYXRlZFxuICAgICAgICBjb25zdCB0YXJnZXREYXRhU3RhdGUgPSBhd2FpdCB0aGlzLmxhc3RRdWVyeS50YWtlKGV4cG9ydExpbWl0KS5nZXRJdGVtcygpO1xuICAgICAgICAvLyBjaGFuZ2UgdGFibGUgZGF0YSBvbiB0aGUgZmx5LCBidXQgZG8gbm90IHJlZHJhd1xuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHRhcmdldERhdGFTdGF0ZSk7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gcmVzZXQgdGFibGUgZGF0YVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHByZXZpb3VzRGF0YVN0YXRlKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0YXJnZXQgZGF0YSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBleGl0XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBsb2cgZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlciwgaWYgZGVmaW5lZFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZSBkZWZhdWx0IGVycm9yIHNlcnZpY2VcbiAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBvcnRhYmxlRGF0YSgpOiB7Ym9keTogYW55W10sIGhlYWRlcjogYW55W119IHtcbiAgICBpZiAoISh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5idXR0b25zXG4gICAgICAmJiB0eXBlb2YgdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgcmV0dXJuIHtib2R5OiBbXSwgaGVhZGVyOiBbXX07XG4gICAgfVxuICAgIC8vIGZldGNoIGV4cG9ydGFibGUgZXhjZWwgZGF0YVxuICAgIGxldCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSgpO1xuICAgIGNvbnN0IGNsZWFudXBJbmRleGVzID0gW107XG4gICAgLy8gY2xlYW4gdXAgaGVhZGVyc1xuICAgIGhlYWRlciA9IGhlYWRlci5maWx0ZXIoKGhlYWRlckl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBoZWFkZXJzXG4gICAgICBpZiAoaGVhZGVySXRlbS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBmaW5kIGl0ZW0gYnkgdGl0bGVcbiAgICAgIGNvbnN0IGZpbmRJdGVtID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi50aXRsZSAmJiBjb2x1bW4udGl0bGUubGVuZ3RoICYmIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4udGl0bGUpID09PSBoZWFkZXJJdGVtO1xuICAgICAgfSk7XG4gICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICBpZiAoZmluZEl0ZW0gJiYgZmluZEl0ZW0uaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICAvLyBjbGVhbiB1cCBib2R5XG4gICAgYm9keSA9IGJvZHkubWFwKChyb3c6IGFueSBbXSkgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5maWx0ZXIoKF8sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXBJbmRleGVzLmluZGV4T2Yocm93SW5kZXgpID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7Ym9keSwgaGVhZGVyfTtcbiAgfVxufVxuIl19
1493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQUUsWUFBWSxFQUN4QixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0csTUFBTSxFQUNkLFNBQVMsRUFDVCxpQkFBaUIsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQWUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUN4RCxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpHLG9GQUFvRjtBQUNwRixPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyx5QkFBeUIsQ0FBQztB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VS9CLGNBQWM7WUFEQyxnQkFBZ0I7WUFUckMsUUFBUTtZQWVGLDJCQUEyQjtZQWxCakMsVUFBVTtZQW9CSixZQUFZO1lBQUUsY0FBYztZQVUzQixVQUFVO1lBQ1YscUJBQXFCO1lBWFEsb0JBQW9CO1lBQ1osd0JBQXdCO1lBQXBFLFlBQVk7WUFBa0IsWUFBWTs7O29CQXNKekMsU0FBUyxTQUFDLE9BQU87eUJBQ2pCLFNBQVMsU0FBQyxZQUFZOzRCQUN0QixTQUFTLFNBQUMsZUFBZTsyQkFDekIsU0FBUyxTQUFDLGNBQWM7cUJBQ3hCLEtBQUs7MEJBQ0wsS0FBSzt1QkFDTCxLQUFLO21CQUNMLE1BQU0sU0FBQyxNQUFNO21CQUNiLE1BQU0sU0FBQyxNQUFNO3FCQUNiLEtBQUssU0FBQyxRQUFRO3FCQUNkLE1BQU0sU0FBQyxRQUFRO21CQUNmLE1BQU0sU0FBQyxNQUFNO21CQUNiLE1BQU0sU0FBQyxNQUFNO29CQUNiLE1BQU0sU0FBQyxPQUFPO3FCQUNkLE1BQU0sU0FBQyxRQUFROzRCQUNmLE1BQU0sU0FBQyxlQUFlO3NCQUN0QixNQUFNLFNBQUMsU0FBUzt5QkFNaEIsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7cUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7d0JBQ0wsS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7c0JBRUwsS0FBSztzQkFDTCxLQUFLO3lCQUlMLEtBQUs7NkJBSUwsS0FBSzsyQkFJTCxLQUFLO3VCQUNMLEtBQUs7d0JBS0wsS0FBSztxQkFNTCxLQUFLLFNBQUMsUUFBUTt5QkFrQmQsS0FBSyxTQUFDLFlBQVk7eUJBeUJqQixLQUFLLFNBQUMsWUFBWTt5QkE4Qm5CLEtBQUssU0FBQyxZQUFZO29CQXlCbEIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCwgT25EZXN0cm95LFxuICBPbkluaXQsIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiwgVGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5cbi8vIHJlc3RvcmUganF1ZXJ5IGltcG9ydCB0byBhdm9pZCBDYW5ub3QgY2FsbCBhIG5hbWVzcGFjZSAoJ2pxdWVyeScpIGVycm9yXG5jb25zdCBqUXVlcnkgPSBqUXVlcnlfO1xuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRmlsdGVyZWQ6IG51bWJlcjtcbiAgZGF0YTogQXJyYXk8YW55Pjtcbn1cblxuY29uc3QgRGF0YVRhYmxlc0FwaTogYW55ID0galF1ZXJ5LmZuLmRhdGFUYWJsZS5BcGk7XG5EYXRhVGFibGVzQXBpLnJlZ2lzdGVyKCAncHJvY2Vzc2luZygpJywgZnVuY3Rpb24oIHNob3c6IGFueSApIHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRvcigndGFibGUnLCAoIGN0eDogYW55ICkgPT4ge1xuICAgICAgICBjdHgub0FwaS5fZm5Qcm9jZXNzaW5nRGlzcGxheSggY3R4LCBzaG93ICk7XG4gICAgfSApO1xufSk7XG5cbmNvbnN0IEVNUFRZX0RBVEFTRVQgPSB7XG4gIHJlY29yZHNUb3RhbDogMCxcbiAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICBkYXRhOiBbXSxcbn07XG5cbmNsYXNzIFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvciBleHRlbmRzIENoYW5nZURldGVjdG9yUmVmIHtcbiAgcHVibGljIGNoZWNrTm9DaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGFjaCgpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyByZWF0dGFjaCgpOiB2b2lkIHtcbiAgfVxuXG59XG5cbmV4cG9ydCBsZXQgQ09MVU1OX0ZPUk1BVFRFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2NvbHVtbi5mb3JtYXR0ZXJzJyk7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRMaW1pdEV4Y2VlZGVkRXJyb3IgZXh0ZW5kcyBSYW5nZUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0V4cG9ydExpbWl0RXhjZWVkZWRFcnJvcic7XG4gIH1cbn1cblxuY2xhc3MgQ29sdW1uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGFzczogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBkZWZhdWx0Q29udGVudDogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nOiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI6IHN0cmluZztcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIG9yZGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9wZXJ0eTogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHByaXZhdGUgX3F1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlO1xuICBwcml2YXRlIF9jb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfZmlyc3RMb2FkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd0Zvb3RlciA9IGZhbHNlO1xuICBwcml2YXRlIF9zaG93SGVhZGVyID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd1BhZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIF9pZCA9IGdldFJhbmRvbUlkZW50aWZpZXIoKTtcbiAgcHVibGljIHNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gIHB1YmxpYyBjb25maWdDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgcHVibGljIHRhYmxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Vycm9yVGVtcGxhdGUnKSBwdWJsaWMgZXJyb3JUZW1wbGF0ZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbG9hZGluZ1RhYmxlJykgcHVibGljIGxvYWRpbmdUYWJsZTogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjazogKHNldHRpbmdzOiBhbnksIGNhbGxiYWNrOiAoc3RhdGU6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlU2F2ZUNhbGxiYWNrOiAoc2V0dGluZ3M6IGFueSwgc3RhdGU6IGFueSkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWSA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNjcm9sbFggPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyByb3cgc2VsZWN0aW9uLiBUaGUgZGVmYXVsciB2YWx1ZSBpcyBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZSBtdWx0aXBsZSBzZWxlY3Rpb24uIFRoZSBkZWZhdWx0IHZhbHVlcyBpcyB0cnVlLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIG11bHRpcGxlU2VsZWN0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgY3VzdG9tIHNlbGVjdGlvbiBhbmQgaGlkZXMgc2VsZWN0IGNvbHVtbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VsZWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZCA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZCA9IFtdO1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgVVJMIHRvIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnU3JjOiBzdHJpbmc7XG4gIHB1YmxpYyBsYXN0RXJyb3I6IGFueTtcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IFRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xuICAgIC8vIHJhaXNlIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuY29uZmlnQ2hhbmdlcy5uZXh0KHRoaXMuX2NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5O1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0b3I6IFRyYW5zbGF0ZVBpcGU7XG4gIHB1YmxpYyBkYXRhVGFibGU6IGFueTtcbiAgcHVibGljIGR0T3B0aW9uczogYW55O1xuICBwcml2YXRlIGxhc3RRdWVyeVBhcmFtczogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbHVtblNlbGVjdG9yOiBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9leHBvcnRTcHJlYWRzaGVldDogRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24sIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdENvbnRlbnQnKSA/IGNvbHVtbi5kZWZhdWx0Q29udGVudCA6ICcnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRvci50cmFuc2Zvcm0oY29sdW1uLnRpdGxlKSxcbiAgICAgICAgICAgIHNvcnRhYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ3NvcnRhYmxlJykgPyBjb2x1bW4uc29ydGFibGUgOiB0cnVlLFxuICAgICAgICAgICAgdmlzaWJsZTogY29sdW1uLmhhc093blByb3BlcnR5KCdoaWRkZW4nKSA/ICFjb2x1bW4uaGlkZGVuIDogdHJ1ZSxcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoY29sdW1uLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY29sdW1uLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVycykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXR0ZXJzLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRPcHRpb25zID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKShyZXN1bHQsIHR5cGUsIHJvdywgbWV0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5mb3JtYXRTdHJpbmc7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGNvbHVtbiBmb3JtYXR0ZXJzIGV4cG9ydCBjcmVhdGVkQ2VsbCBldmVudFxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBjb2x1bW4uZm9ybWF0dGVycy5maWx0ZXIoKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29sdW1uRm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbChjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbikoY2VsbCwgY2VsbERhdGEsIHJvd0RhdGEsIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW4uZm9ybWF0dGVyXTtcbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsOiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbkRlZmluaXRpb247XG4gICAgICAgIH0pO1xuICAgICAgLy8gZ2V0IHRhYmxlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgICB9KTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIHRhYmxlRWxlbWVudC5vbigncHJvY2Vzc2luZy5kdCcsIChldmVudCwgc2V0dGluZ3MsIHByb2Nlc3NpbmcpID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAvLyBjbGVhciBlbXB0eSB0YWJsZSBlbGVtZW50XG4gICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJy5kYXRhVGFibGVzX2VtcHR5JykuaHRtbCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQuYWRkQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5yZW1vdmVDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkcmF3SW5kZXggPSAxO1xuICAgICAgdGFibGVFbGVtZW50Lm9uKCdvcmRlci5kdCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5kYXRhVGFibGUub3JkZXIoKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVDb2x1bW5zO1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIuZW1pdChvcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbignZHJhdy5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmRyYXcuZW1pdCgpO1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBpbmZvOiB7IHBhZ2U6IG51bWJlcjsgcGFnZXM6IG51bWJlciB9ID0gdGhpcy5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICAgICAgdGhpcy5wYWdlLmVtaXQoaW5mbyk7XG4gICAgICAgICAgaWYgKGRyYXdJbmRleCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRyYXdJbmRleCsrO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTsgfSwgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhZGp1c3RpbmcgdGFibGUgY29sdW1ucycpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFsbG93IHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIChhcyByb3cgcHJpbWFyeSBrZXkpXG4gICAgICAgIC8vIHRvZG86OmFsbG93IHJvdyBwcmltYXJ5IGtleSBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgLy8gYWRkIHNlbGVjdCBjb2x1bW5cbiAgICAgICAgY29uc3Qgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIGFzc2lnbiByZW5kZXJlclxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGVjdENvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICByZW5kZXI6IHRoaXMuX3JlbmRlclNlbGVjdC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgLy8gdXNlciBpbnRlcmZhY2UgYWRkaXRpb25zXG4gICAgICAgIC8vIGhhbmRsZSBwYWdlIGNoYW5nZSBldmVudCAoYSB0cmljayBmb3IgZmlyaW5nIGRyYXcuZHQgZXZlbnRzKVxuICAgICAgICB0YWJsZUVsZW1lbnRcbiAgICAgICAgICAvLyBoYW5kbGUgZHJhdyBldmVudHNcbiAgICAgICAgICAub24oJ2RyYXcuZHQnLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBlbmFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgndGJvZHknKS5vbignY2xpY2snLCAndHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gc2VsZi5kYXRhVGFibGUucm93KHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCByb3dcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdC5lbWl0KHJvdyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXQucy1yb3cnKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gbWFrZSBzZWxlY3Rpb24gb24gY3VycmVudCBwYWdlXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5O1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBlbnVtZXJhdGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCByb3cgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGlmIGlkZW50aWZpZXIgaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBjaGVjayBlbGVtZW50IHdpdGggdGhpcyBpZGVudGlmaWVyIGluIGF0dHJpYnV0ZSBkYXRhLWlkXG4gICAgICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZChgaW5wdXRbZGF0YS1pZD0nJHtpZH0nXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3MgdGhhdCBhcmUgbm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgIC8vIGFuZCBkbyBub3QgaW5jbHVkZWQgaW4gdW5zZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRhdGEgaWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT0galF1ZXJ5KGVsZW1lbnQpLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgICAgICB9KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHRoaXMuZGF0YVRhYmxlLnJvdyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAvLyBzZXQgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoTWVudTogWzUsIDEwLCA1MCwgMTAwLCAyMDAsIDUwMF0sXG4gICAgICAgIC8vIGhpZGUgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgLy8gZW5hYmxlIHNlYXJjaCBidXQgaGlkZSBzZWFyY2ggYm94IChjc3MpXG4gICAgICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGRhdGEgcHJvY2Vzc2luZ1xuICAgICAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZ2V0dGluZyBzZXJ2ZXIgc2lkZSBkYXRhXG4gICAgICAgIHNlcnZlclNpZGU6IHRoaXMuc2VydmVyU2lkZSxcbiAgICAgICAgLy8gZW51bWVyYXRlIHRhYmxlIGNvbHVtbnNcbiAgICAgICAgY29sdW1uczogdGFibGVDb2x1bW5zLFxuICAgICAgICBjb2xSZW9yZGVyOiAgdGhpcy5jb2x1bW5PcmRlcmluZyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICAgICAgLy8gZW1pdCBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGVtcHR5RGF0YVNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlc2V0IGVycm9yXG4gICAgICAgICAgc2VsZi50b2dnbGVFcnJvcigpO1xuICAgICAgICAgIC8vIGdldCBhY3RpdmF0ZWQgcm91dGUgcGFyYW1zXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBzZWxmLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgICAgICAvLyBnZXQgY29sdW1uc1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBhb0RhdGFbMV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IG9yZGVyIGV4cHJlc3Npb25cbiAgICAgICAgICBjb25zdCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5zW2V4cHIuY29sdW1uXS5uYW1lICsgJyAnICsgZXhwci5kaXIgfHwgJ2FzYyc7XG4gICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgb3JkZXJcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgb3JkZXJCeVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbmZpZ3VyZSAkc2VsZWN0IHBhcmFtZXRlclxuICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIGNvbHVtbi52aXJ0dWFsID09PSB0cnVlICkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWUgKyAnIGFzICcgKyBjb2x1bW4ucHJvcGVydHk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5zZWxlY3QuYXBwbHkocSwgc2VsZWN0KTtcbiAgICAgICAgICAvLyBjb25maWd1cmUgJGZpbHRlclxuICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgcm91dGUgZmlsdGVyXG4gICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBxdWVyeVBhcmFtcy4kZmlsdGVyIF07XG4gICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjaGVjayBpZiBxdWVyeSBwYXJhbWV0ZXJzIGNvbnRhaW4gZmlsdGVyXG4gICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHNldCByb3V0ZSAkZXhwYW5kXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgcXVlcnlQYXJhbXMuJGV4cGFuZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5vcmRlckJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRncm91cGJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMuZ3JvdXBCeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIuYXN5bmNCdWlsZEZpbHRlcihzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpLnRoZW4oKGRlZmF1bHRGaWx0ZXJTdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHJldHVybiBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IGl0ZW1zLnRvdGFsO1xuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgLy8gbG9nIGVycm9yIHRvIGNvbnNvbGVcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBieSByZXR1cm5pbmcgZW1wdHkgZGF0YXNldFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgIHEuZ2V0TGlzdCgpLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0ge1xuICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtcy52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVtaXQgbG9hZCBldmVudFxuICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZGF0YVNldCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgLy8gbG9nIGVycm9yIHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKGVycik7XG4gICAgICAgICAgICAvLyBieSByZXR1cm5pbmcgZW1wdHkgZGF0YXNldFxuICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2U6IE9iamVjdC5hc3NpZ24oeyB9LCBzZWxmLnRyYW5zbGF0b3IudHJhbnNmb3JtKCdUYWJsZXMuRGF0YVRhYmxlJyksXG4gICAgICAgICAge2VtcHR5VGFibGU6ICcgJyB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0YXRlU2V0dGluZ3MgPSB7XG4gICAgICAgIHN0YXRlU2F2ZTogdGhpcy5zdGF0ZVNhdmVcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5zdGF0ZUxvYWRDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZUxvYWRDYWxsYmFjazogdGhpcy5zdGF0ZUxvYWRDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXRlU2F2ZUNhbGxiYWNrKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVTZXR0aW5ncywge1xuICAgICAgICAgIHN0YXRlU2F2ZUNhbGxiYWNrOiB0aGlzLnN0YXRlU2F2ZUNhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywgc3RhdGVTZXR0aW5ncyk7XG5cbiAgICAgIGlmICh0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgICAgLy8gc2V0IGNvbnRpbnVvdXMgc2Nyb2xsaW5nXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgc2Nyb2xsQ29sbGFwc2U6IGZhbHNlLFxuICAgICAgICAgIHNjcm9sbGVyOiB7XG4gICAgICAgICAgICBsb2FkaW5nSW5kaWNhdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc3BsYXlCdWZmZXI6IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxuICAgICAgICAgIHBhZ2VMZW5ndGg6IHRoaXMucGFnZUxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG5cbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBpbml0LmR0IGV2ZW50IGFuZCBlbWl0IGxvY2FsIGV2ZW50XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IHRhYmxlRWxlbWVudC5vbignaW5pdC5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IGpRdWVyeShldmVudC50YXJnZXQpLnBhcmVudCgpO1xuICAgICAgICAvLyBoYW5kbGUgc2Nyb2xsaW5nXG4gICAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCAoc2Nyb2xsRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBqUXVlcnkoc2Nyb2xsRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSB0YXJnZXQuc2Nyb2xsVG9wKCk7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0KCk7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5lbWl0KHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSkuRGF0YVRhYmxlKHNldHRpbmdzKTtcbiAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAvLyBzaG93IG9yIGhpZGUgaGVhZGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlcikge1xuICAgICAgICAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZT50aGVhZCcpLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgIH1cblxuICAgICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIpIHtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKS5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgIH1cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBwYWdlclxuICAgICAgaWYgKHRoaXMuc2hvd1BhZ2luZykge1xuICAgICAgICB0aGlzLnNob3dQYWdpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxUb3AodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbExlZnQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsTGVmdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhc3RRdWVyeSgpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAodGhpcy5jb25maWcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5sYXN0UXVlcnlQYXJhbXMpLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgIHEuc2V0UGFyYW0oa2V5LCB0aGlzLmxhc3RRdWVyeVBhcmFtc1trZXldKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gcXVlcnlcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCB1cGRhdGVzIGEgc2luZ2xlIHJvd1xuICAgKiBAcGFyYW0gZmluZCAtIEFueSBvYmplY3Qgd2hpY2ggaXMgYmVpbmcgY29udmVydGVkIHRvIGEgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmZXRjaE9uZShmaW5kOiBhbnkpIHtcbiAgICBpZiAoZmluZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZ2V0IHJvd3NcbiAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgLy8gZmluZCByZXN1bHRcbiAgICAgIGNvbnN0IGZpbmRLZXlzID0gT2JqZWN0LmtleXMoZmluZCk7XG4gICAgICBpZiAoZmluZEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZmluZCByb3cgaW5kZXggYnkgc2VhcmNoaW5nIGVhY2ggcHJvcGVydHlcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kS2V5cy5tYXAoIChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm93W2tleV0gPT09IGZpbmRba2V5XTtcbiAgICAgICAgfSkuZmlsdGVyKCAocmVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcyA9PT0gZmFsc2U7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGhhcyBiZWVuIGZvdW5kXG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIC8vIHNlbGVjdCBhdHRyaWJ1dGVzXG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0JywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJHNlbGVjdCk7XG4gICAgICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKSB7XG4gICAgICAgICAgLy8gYXBwbHkgZXhwYW5kIGF0dHJpYnV0ZXNcbiAgICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJGV4cGFuZCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlciBmb3Igcm93XG4gICAgICAgIGZpbmRLZXlzLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoIChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucHJvcGVydHkgPT09IGtleSB8fCBjb2wubmFtZSA9PT0ga2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0eSBvciBuYW1lXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChwcm9wZXJ0eSkuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkuYW5kKGtleSkuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBnZXQgaXRlbVxuICAgICAgICByZXR1cm4gcXVlcnkuZ2V0SXRlbSgpLnRoZW4oIChpdGVtKSA9PiB7XG4gICAgICAgICAgLy8gaWYgaXRlbSBleGlzdHNcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAvLyByZWRyYXcgcm93XG4gICAgICAgICAgICByb3cuZGF0YShpdGVtKTtcbiAgICAgICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIGlmIHJvdyBpcyBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0aW9uIGNoYW5nZVxuICAgKiBAcGFyYW0gJGV2ZW50XG4gICAqL1xuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSAgJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIC8vIGdldCByb3cgZnJvbSBpZFxuICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoLy0oXFxkKykkL2cuZXhlYyhpbnB1dC5pZClbMV0sIDEwKTtcbiAgICAvLyBnZXQgcm93XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KS5kYXRhKCk7XG4gICAgLy8gZ2V0IHJvdyBpZGVudGlmaWVyXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eTtcbiAgICAgIGNvbnN0IGlkID0gcm93W2tleV07XG4gICAgICBsZXQgZmluZEl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBhZGQgcm93IHRvIHNlbGVjdGVkIHJvd3NcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBpdGVtXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEl0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgIC8vIGFkZCByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgICBmaW5kSXRlbUluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFbXB0eVRhYmxlKCkge1xuICAgIC8vIHRoaXMgb3BlcmF0aW9uIGlzIGltcG9ydGFudFxuICAgIC8vIGR1ZSB0byBuZyBkYXRhIGJpbmRpbmdcbiAgICAvLyBlbXB0eSB0YWJsZSB0ZW1wbGF0ZSBoYXMgbm8gdHJhbnNsYXRlZCB0ZXh0IGR1cmluZyBuZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZW1wdHlUYWJsZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUVycm9yKGVycj86IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICBjb25zdCBpbm5lck1lc3NhZ2UgPSAodGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzbWFsbCcpLml0ZW0oMCk7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9IGVyci5lcnJvciAmJiBlcnIuZXJyb3IubWVzc2FnZSA/IGVyci5lcnJvci5tZXNzYWdlIDogZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPVxuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAvLyBmZXRjaCBhbmQgcmVkcmF3XG4gICAgICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldChsb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucXVlcnkgPSBudWxsO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuYXV0b0xvYWQgPSAhIWxvYWQ7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucygpIHtcbiAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzAsIDQsIDEsIDIsIDNdXG4gICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgIC8vIGdldCBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5kYXRhVGFibGUuc2V0dGluZ3MoKS5pbml0KCkuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uRGVmcy5tYXAoKFxuICAgICAgY29sdW1uRGVmOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBzb3J0YWJsZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlciB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGBjb2x1bW4tJHtpfWA7XG4gICAgICBsZXQgdGl0bGUgPSBjb2x1bW5EZWYudGl0bGU7XG4gICAgICAvLyBnZXQgY29sdW1uIGluZGV4XG4gICAgICBjb25zdCBpbmRleCA9ICBjb2x1bW5PcmRlci5pbmRleE9mKGkpO1xuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpO1xuICAgICAgLy8gc2V0IHRpdGxlIGZvciBzZWxlY3QgY29sdW1uXG4gICAgICBpZiAoaSA9PT0gMCAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5TZWxlY3RDb2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIC8vIGdldCBjb2x1bW4gdGl0bGVcbiAgICAgIGlmICh0aXRsZSAhPSBudWxsICYmIHRpdGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBjb2x1bW4gcGxhY2Vob2xkZXJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2kgLSAxXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2ldLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGxhY2Vob2xkZXIpICsgJz4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlVua25vd25Db2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHZpc2libGUsXG4gICAgICAgIGluZGV4XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtblNlbGVjdG9yLnNlbGVjdENvbHVtbnMoY29sdW1ucykudGhlbigoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5yZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gZXZlbnQuY29sdW1uc1xuICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAga2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgICBpbmRleDogY29sLmluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFszLCAxLCAyLCAwLCA0XVxuICAgICAgICBjb25zdCBpbmRleGVzID0gc29ydGVkXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQuY29sdW1ucy5maW5kSW5kZXgoKG5leHQpID0+IGl0ZW0ua2V5ID09PSBuZXh0LmtleSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHJlc2V0IGNvbHVtbiB2aXNpYmlsdHlcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGV2ZW50LmNvbHVtbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LmNvbHVtbnNbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1uT3JkZXIuaW5kZXhPZihpbmRleCk7XG4gICAgICAgICAgLy8gc2V0IHZpc2liaWx0eSB3aXRoIHJlZHJhdyAoPXRydWUpXG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1uKGNvbEluZGV4KS52aXNpYmxlKGVsZW1lbnQudmlzaWJsZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWxseSBhcHBseSBjb2x1bW4gb3JkZXJcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihpbmRleGVzLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0byBwYXNzIGFuIGVycm9ySGFuZGxlciBjYWxsYmFjaywgaWYgZGVzaXJlZFxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhwb3J0VmlldyhvcHRpb25zPzoge2Vycm9ySGFuZGxlcj86IChyZWFzb24/OiBhbnkpID0+IGFueX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZy5zaG93TG9hZGluZygpO1xuICAgICAgLy8gdmFsaWRhdGUgcXVlcnkgaXRlbXMgYW5kIGNvbmZpZ1xuICAgICAgaWYgKCEodGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb24uc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gYW5kIGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgZXhwb3J0TGltaXQgPVxuICAgICAgICAoZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA+IDApXG4gICAgICAgID8gZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0IDogTUFYX0VYUE9SVF9JVEVNUztcbiAgICAgIC8vIGFuZCB2YWxpZGF0ZSBpdFxuICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPiBleHBvcnRMaW1pdCkge1xuICAgICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gcHJvdmlkZSBhIHJlY29nbml6aWJsZSBlcnJvciB0eXBlXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIobmV3IEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvcignRXhwb3J0IGxpbWl0IGV4Y2VlZGVkJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvciBzaG93IHdhcm5pbmcgbW9kYWwgYW5kIGV4aXRcbiAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpc3QnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaW1pdEV4Y2VlZGVkJyxcbiAgICAgICAgICAgIHtkYXRhTGVuZ3RoOiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zLCBleHBvcnRMaW1pdH0pLCBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0b3RhbCBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgIGNvbnN0IHRvdGFsRGlzcGxheWVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KS5sZW5ndGg7XG4gICAgICAvLyBpZiB0aGV5IGFscmVhZHkgc2F0aXNmeSB0aGUgbGFzdCBxdWVyeSB0b3RhbFxuICAgICAgaWYgKHRvdGFsRGlzcGxheWVkSXRlbXMgPT09IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMpIHtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhIGltbWVkaWF0ZWx5XG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRoZW0gdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbW9yZSBkYXRhIG5lZWQgdG8gYmUgZmV0Y2hlZFxuICAgICAgICAvLyBob2xkIHByZXZpb3VzIGRhdGEgc3RhdGVcbiAgICAgICAgY29uc3QgcHJldmlvdXNEYXRhU3RhdGUgPSB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gZ2V0IHRhcmdldCBkYXRhIHN0YXRlIGJ5IGV4ZWN1dGluZyB0aGUgbGFzdCBxdWVyeVxuICAgICAgICAvLyBub3RlOiB0YWtpbmcgdGhlIGV4cG9ydExpbWl0IGFtb3VudCBvZiBpdGVtcyB3aWxsIGFsd2F5cyBzYXRpc2Z5IHRoZSByZXN1bHRzLFxuICAgICAgICAvLyBiZWNhdXNlIGl0IGhhcyBiZWVuIHZhbGlkYXRlZFxuICAgICAgICBjb25zdCB0YXJnZXREYXRhU3RhdGUgPSBhd2FpdCB0aGlzLmxhc3RRdWVyeS50YWtlKGV4cG9ydExpbWl0KS5nZXRJdGVtcygpO1xuICAgICAgICAvLyBjaGFuZ2UgdGFibGUgZGF0YSBvbiB0aGUgZmx5LCBidXQgZG8gbm90IHJlZHJhd1xuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHRhcmdldERhdGFTdGF0ZSk7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gcmVzZXQgdGFibGUgZGF0YVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHByZXZpb3VzRGF0YVN0YXRlKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0YXJnZXQgZGF0YSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBleGl0XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBsb2cgZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlciwgaWYgZGVmaW5lZFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZSBkZWZhdWx0IGVycm9yIHNlcnZpY2VcbiAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBvcnRhYmxlRGF0YSgpOiB7Ym9keTogYW55W10sIGhlYWRlcjogYW55W119IHtcbiAgICBpZiAoISh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5idXR0b25zXG4gICAgICAmJiB0eXBlb2YgdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgcmV0dXJuIHtib2R5OiBbXSwgaGVhZGVyOiBbXX07XG4gICAgfVxuICAgIC8vIGZldGNoIGV4cG9ydGFibGUgZXhjZWwgZGF0YVxuICAgIGxldCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSgpO1xuICAgIGNvbnN0IGNsZWFudXBJbmRleGVzID0gW107XG4gICAgLy8gY2xlYW4gdXAgaGVhZGVyc1xuICAgIGhlYWRlciA9IGhlYWRlci5maWx0ZXIoKGhlYWRlckl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBoZWFkZXJzXG4gICAgICBpZiAoaGVhZGVySXRlbS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAvLyBub3RlOiB1c2UgdGhlIGRhdGF0YWJsZSB2aXNpYmxlKCkgZnVuY3Rpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGhpZGRlbiBjb25maWcgcHJvcGVydHksIHRvIHNhdGlzZnkgdGhlIGNvbHVtbiBzZWxlY3RvclxuICAgICAgaWYgKCF0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKSkge1xuICAgICAgICBjbGVhbnVwSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgLy8gY2xlYW4gdXAgYm9keVxuICAgIGJvZHkgPSBib2R5Lm1hcCgocm93OiBhbnkgW10pID0+IHtcbiAgICAgIHJldHVybiByb3cuZmlsdGVyKChfLCByb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwSW5kZXhlcy5pbmRleE9mKHJvd0luZGV4KSA9PT0gLTE7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge2JvZHksIGhlYWRlcn07XG4gIH1cbn1cbiJdfQ==