ngx-st-tables 18.0.25 → 18.0.27

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.
@@ -679,6 +679,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
679
679
  return (editableColumns.length > 0 && editableColumns[0].field === column.field);
680
680
  }
681
681
  validateRow(rowData, originalRow, singleColumn) {
682
+ console.log('validRow');
682
683
  const editableColumns = singleColumn
683
684
  ? [singleColumn]
684
685
  : this.columns.filter(col => col.allowEditColumn);
@@ -725,6 +726,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
725
726
  }
726
727
  // Update validation errors
727
728
  if (Object.keys(errors).length > 0) {
729
+ console.log(errors);
728
730
  this.validationErrors[rowId] = errors;
729
731
  }
730
732
  else {
@@ -900,12 +902,18 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
900
902
  }
901
903
  // Create shallow copy to avoid mutating parent data
902
904
  let clonedData = data.map(row => ({ ...row }));
903
- // Add IDs if needed (only on the copy)
905
+ // Add IDs if needed (only on the copy, only if row doesn't have an id)
904
906
  if (this.allowEditRow() || this.allowSelectRow()) {
905
- clonedData = clonedData.map(row => ({
906
- ...row,
907
- id: row.id || StBaseService.generateGUID(),
908
- }));
907
+ clonedData = clonedData.map(row => {
908
+ // Only add id if it doesn't exist - don't overwrite existing IDs
909
+ if (!row.id) {
910
+ return {
911
+ ...row,
912
+ id: StBaseService.generateGUID(),
913
+ };
914
+ }
915
+ return row;
916
+ });
909
917
  }
910
918
  this._data = clonedData;
911
919
  if (this.tableSource) {
@@ -947,4 +955,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
947
955
  type: ViewChildren,
948
956
  args: [MaterialTableRowCellComponent]
949
957
  }] } });
950
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjVHLE1B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QUFPLENBQUMsc0NBQXNDLENBQUMsQ0FDaEQ7YUFDRixDQUFDO1NBQ0g7OzRGQUVVLHNCQUFzQjtrQkF2QmxDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQU1oQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCO3dCQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7NEJBQ3RCLEtBQUssQ0FDSCxnQkFBZ0IsRUFDaEIsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUN6RDs0QkFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQ1Isd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDt5QkFDRixDQUFDO3FCQUNIOzhMQU13QixTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0gsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUVsQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIHNpZ25hbCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmlldy92aWV3LXN0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBTdEJhc2VTZXJ2aWNlLFxyXG4gIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudCxcclxufSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBTdFNuYWNrQmFyU2VydmljZSB9IGZyb20gJ25neC1zdC1zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdC10YWJsZXMtdHJhbnNsYXRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9tYXRlcmlhbC10YWJsZS1jYXB0aW9uL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cvbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIElDYXB0aW9uRGF0YUNoYW5nZWQsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyLFxyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBhbmltYXRlLFxyXG4gIHN0YXRlLFxyXG4gIHN0eWxlLFxyXG4gIHRyYW5zaXRpb24sXHJcbiAgdHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgU3REaWFsb2dTZXJ2aWNlIH0gZnJvbSAnbmd4LXN0LWRpYWxvZyc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVSb3dDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9tYXRlcmlhbC10YWJsZS1yb3ctY2VsbC9tYXRlcmlhbC10YWJsZS1yb3ctY2VsbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtc3QtbWF0ZXJpYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vLi4vLi4vYXNzZXRzL2Jhc2UtdGFibGUuc2NzcycsXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoXHJcbiAgICAgICAgJ2NvbGxhcHNlZCx2b2lkJyxcclxuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnLCBib3JkZXI6ICdub25lJyB9KVxyXG4gICAgICApLFxyXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcclxuICAgICAgICAnZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsXHJcbiAgICAgICAgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJylcclxuICAgICAgKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuICBAVmlld0NoaWxkcmVuKE1hdGVyaWFsVGFibGVSb3dDZWxsQ29tcG9uZW50KVxyXG4gIHJvd0NlbGxzITogUXVlcnlMaXN0PE1hdGVyaWFsVGFibGVSb3dDZWxsQ29tcG9uZW50PjtcclxuXHJcbiAgc2hvd0dsb2JhbFNlYXJjaCA9IGlucHV0KGZhbHNlKTtcclxuXHJcbiAgdGFibGVUaXRsZSA9IGlucHV0KCcnKTtcclxuXHJcbiAgcGFnZVNpemUgPSBpbnB1dDxudW1iZXI+KDEwKTtcclxuXHJcbiAgZGF0YUxlbmd0aCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gIGFsbG93UGlja0NvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGxvY2FsU3RvcmFnZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgbGF6eUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaW5pdENvbHVtbnMgPSBpbnB1dDxTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdPihbXSk7XHJcblxyXG4gIHJvd0NsaWNrQWN0aW9uID0gaW5wdXQ8KHJvdzogYW55KSA9PiB2b2lkPigpO1xyXG5cclxuICBhbGxvd0VkaXRSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93RGVsZXRlSW5FZGl0Um93ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIGFsbG93RWRpdEluRWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBzaG93RWRpdEFsbFJvd3MgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdHJ1ZSwgZmllbGQgY2hhbmdlcyBhcmUgc2F2ZWQgaW1tZWRpYXRlbHkgd2l0aG91dCByZXF1aXJpbmcgc2F2ZS9jYW5jZWwgYnV0dG9ucy5cclxuICAgKiBQZXJmZWN0IGZvciBxdWFudGl0eSBpbnB1dHMsIHRvZ2dsZXMsIG9yIHNlbGVjdGlvbiB0YWJsZXMgd2hlcmUgaW5zdGFudCB1cGRhdGVzIGFyZSBuZWVkZWQuXHJcbiAgICovXHJcbiAgYXV0b1NhdmVPbkNoYW5nZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY2FuRWRpdFJvd1ZhbGlkYXRvciA9IGlucHV0PChyb3c6IGFueSkgPT4gYm9vbGVhbj4oKCkgPT4gdHJ1ZSk7XHJcblxyXG4gIGNhbkRlbGV0ZVJvd1ZhbGlkYXRvciA9IGlucHV0PChyb3c6IGFueSkgPT4gYm9vbGVhbj4oKCkgPT4gdHJ1ZSk7XHJcblxyXG4gIGFsbG93U2VsZWN0Um93ID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICBzZWxlY3Rpb25GaWVsZExhYmVsID0gaW5wdXQoJycpO1xyXG5cclxuICBzZWxlY3RSb3dPbmx5T25lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmb3JtYXR0ZXIgdXNlZCB0byBkZXJpdmUgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGEgc2VsZWN0ZWQgcm93LlxyXG4gICAqXHJcbiAgICogVXNlIHRoaXMgd2hlbiB0aGUgc2ltcGxlIGZpZWxkIG5hbWUgcHJvdmlkZWQgYnkge0BsaW5rIHNlbGVjdGlvbkZpZWxkTGFiZWx9XHJcbiAgICogaXMgbm90IHN1ZmZpY2llbnQgKGZvciBleGFtcGxlLCB3aGVuIHlvdSBuZWVkIHRvIGNvbmNhdGVuYXRlIG11bHRpcGxlIGZpZWxkc1xyXG4gICAqIG9yIGFwcGx5IGN1c3RvbSBmb3JtYXR0aW5nIHRvIHRoZSBkaXNwbGF5ZWQgdmFsdWUpLlxyXG4gICAqXHJcbiAgICogSWYgYm90aCB7QGxpbmsgc2VsZWN0aW9uRmllbGRMYWJlbH0gYW5kIGBzZWxlY3RSb3dWYWx1ZURpc3BsYXlgIGFyZSBzZXQsXHJcbiAgICogdGhpcyBmdW5jdGlvbiB0YWtlcyBwcmVjZWRlbmNlIGFuZCBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIHZpc2libGUgdGV4dFxyXG4gICAqIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgcm93LlxyXG4gICAqL1xyXG4gIHNlbGVjdFJvd1ZhbHVlRGlzcGxheSA9IGlucHV0PChyb3c6IGFueSkgPT4gc3RyaW5nPigpO1xyXG5cclxuICBzaG93Q3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjcmVhdGVCdXR0b25MYWJlbCA9IGlucHV0KCdDcmVhdGUnKTtcclxuXHJcbiAgY3JlYXRlQnV0dG9uQWN0aW9uID0gaW5wdXQ8KCkgPT4gdm9pZD4oKCkgPT4ge30pO1xyXG5cclxuICBkaXNhYmxlQ3JlYXRlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0NyZWF0ZVJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dFeHRlbmRSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGV4dGVuZGVkUm93VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjx7IGRhdGE6IGFueSB9Pj4oKTtcclxuXHJcbiAgaW5pdFNlbGVjdGVkUm93ID0gaW5wdXQ8YW55PigpO1xyXG5cclxuICBleHRyYUN1c3RvbUZpbHRlciA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBmaWx0ZXIgbWV0aG9kIGFwcGxpZWQgdG8gYWxsIHJvd3MgaW4gdGhlIHRhYmxlLlxyXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmb3IgZWFjaCByb3cgYW5kIHNob3VsZCByZXR1cm4gdHJ1ZSB0byBpbmNsdWRlIHRoZSByb3csIGZhbHNlIHRvIGV4Y2x1ZGUgaXQuXHJcbiAgICogQXBwbGllZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRhYmxlIGRhdGEgY2hhbmdlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3cgLSBUaGUgZGF0YSByb3cgdG8gZXZhbHVhdGVcclxuICAgKiBAcmV0dXJucyB0cnVlIHRvIGluY2x1ZGUgdGhlIHJvdyBpbiB0aGUgdGFibGUsIGZhbHNlIHRvIGV4Y2x1ZGUgaXRcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gT25seSBzaG93IGFjdGl2ZSB1c2Vyc1xyXG4gICAqIFtpbml0RmlsdGVyTWV0aG9kXT1cIihyb3cpID0+IHJvdy5pc0FjdGl2ZSA9PT0gdHJ1ZVwiXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIFNob3cgdXNlcnMgd2l0aCBxdWFudGl0eSBncmVhdGVyIHRoYW4gMTBcclxuICAgKiBbaW5pdEZpbHRlck1ldGhvZF09XCIocm93KSA9PiByb3cucXVhbnRpdHkgPiAxMFwiXHJcbiAgICovXHJcbiAgaW5pdEZpbHRlck1ldGhvZCA9IGlucHV0PChyb3c6IGFueSkgPT4gYm9vbGVhbj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW1tdXRhYmxlIERhdGEgUGF0dGVybiAtIE9wdGltaXplZCB2ZXJzaW9uIHdpdGggSUQgY2xlYW51cFxyXG4gICAqL1xyXG4gIGRhdGEgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG5cclxuICBzZXROZXdEYXRhV2l0aG91dFJlZnJlc2ggPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGxvYWREYXRhID0gb3V0cHV0PFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhPigpO1xyXG5cclxuICBzYXZlRWRpdGVkUm93ID0gb3V0cHV0PHsgcm93OiBhbnk7IGluZGV4OiBudW1iZXIgfT4oKTtcclxuXHJcbiAgc2F2ZUNyZWF0ZWRSb3cgPSBvdXRwdXQ8YW55PigpO1xyXG5cclxuICByb3dEZWxldGVkID0gb3V0cHV0PHsgcm93OiBhbnk7IGluZGV4OiBudW1iZXIgfT4oKTtcclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gYSBmaWVsZCB2YWx1ZSBjaGFuZ2VzIGFuZCBhdXRvU2F2ZU9uQ2hhbmdlIGlzIGVuYWJsZWQuXHJcbiAgICogUGFyZW50IHNob3VsZCB1cGRhdGUgdGhlaXIgZGF0YSBpbW1lZGlhdGVseS5cclxuICAgKi9cclxuICBmaWVsZFZhbHVlQ2hhbmdlZCA9IG91dHB1dDx7XHJcbiAgICByb3c6IGFueTtcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICB9PigpO1xyXG5cclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBpbml0TG9jYWxDb2x1bW5zID0gc2lnbmFsPFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuICBleHBhbmRlZFJvd0luZGV4ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjcmVhdGluZ1JvdyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nKS5sZW5ndGggPiAwKTtcclxuXHJcbiAgY29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcbiAgc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICB0YWJsZVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcblxyXG4gIGluaXRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgaW5pdEdsb2JhbFNlYXJjaDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHNob3dUYWJsZSA9IHRydWU7XHJcblxyXG4gIGFjdGl2ZVJvd3NFZGl0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIGFjdGl2ZVJvd3NDcmVhdGluZzogeyBbcm93SWQ6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcclxuICBzZWxlY3RlZFJvd3MgPSBzaWduYWw8YW55W10+KFtdKTtcclxuXHJcbiAgLy8gVHJhY2sgdmFsaWRhdGlvbiBlcnJvcnM6IHsgcm93SWQ6IHsgZmllbGROYW1lOiBlcnJvck1lc3NhZ2UgfSB9XHJcbiAgdmFsaWRhdGlvbkVycm9yczogeyBbcm93SWQ6IHN0cmluZ106IHsgW2ZpZWxkOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XHJcblxyXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlRGF0YTogU3RNYXRlcmlhbFRhYmxlTG9jYWxTdG9yYWdlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzbmFja2JhcjogU3RTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgc3RUYWJsZVRyYW5zbGF0aW9uczogU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdERpYWxvZ1NlcnZpY2U6IFN0RGlhbG9nU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICAvLyBFZmZlY3QgdG8gaGFuZGxlIGRhdGEgY2hhbmdlc1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3QgaW5wdXREYXRhID0gdGhpcy5kYXRhKCk7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShpbnB1dERhdGEpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRWZmZWN0IHRvIHJlYXBwbHkgZmlsdGVyIHdoZW4gaW5pdEZpbHRlck1ldGhvZCBjaGFuZ2VzXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICAvLyBUcmFjayB0aGUgZmlsdGVyIG1ldGhvZCB0byB0cmlnZ2VyIGVmZmVjdCBvbiBjaGFuZ2VcclxuICAgICAgdGhpcy5pbml0RmlsdGVyTWV0aG9kKCk7XHJcbiAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlICYmICF0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGZpbHRlciBwcmVkaWNhdGUgdG8gdXNlIHRoZSBuZXcgZmlsdGVyIG1ldGhvZFxyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5jcmVhdGVDdXN0b21GaWx0ZXJGb3JMb2NhbFRhYmxlKCk7XHJcbiAgICAgICAgLy8gVHJpZ2dlciBmaWx0ZXIgcmVhcHBsaWNhdGlvbiBieSBzZXR0aW5nIGZpbHRlciBzdHJpbmcgYWdhaW5cclxuICAgICAgICBpZiAodGhpcy50YWJsZVNvdXJjZS5maWx0ZXIpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXIgPSB0aGlzLnRhYmxlU291cmNlLmZpbHRlcjtcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IGN1cnJlbnRGaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmxvYWRMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB0aGlzLnZhbGlkYXRlQW5kVXBkYXRlRmlsdGVycygpO1xyXG4gICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldEluaXRUYWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTb3J0UGFnZVN1YnNjcmlwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgdHVybk9uQWxsRWRpdFJvd3MoKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF0gPSB7IC4uLnJvdyB9O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2FwdGlvbkRhdGFDaGFuZ2VkKGV2ZW50OiBJQ2FwdGlvbkRhdGFDaGFuZ2VkKSB7XHJcbiAgICBjb25zdCBsb2FkTGF6eURhdGEgPVxyXG4gICAgICBldmVudC5nbG9iYWxTZWFyY2ggIT09IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2ggfHxcclxuICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnQuZmlsdGVycykgIT09XHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMpO1xyXG5cclxuICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgLi4uZXZlbnQsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgcGFnZUluZGV4OiBsb2FkTGF6eURhdGEgPyAwIDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4LFxyXG4gICAgICBzb3J0RmllbGQ6IHRoaXMuc29ydC5hY3RpdmUsXHJcbiAgICAgIHNvcnRPcmRlcjogdGhpcy5zb3J0LmRpcmVjdGlvbixcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zT3JkZXIoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uc1Zpc2libGUoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRDb2x1bW5zKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG5cclxuICAgIGlmIChsb2FkTGF6eURhdGEpIHtcclxuICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLl9lbWl0UGFnZUV2ZW50KDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnNob3dUYWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLnNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICB0aGlzLmluaXRGaWx0ZXJzID0ge307XHJcbiAgICB0aGlzLmluaXRHbG9iYWxTZWFyY2ggPSAnJztcclxuICAgIHRoaXMuc29ydC5zb3J0KHsgaWQ6ICcnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2UgfSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd1RhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XHJcbiAgICAgIHRoaXMuc2V0SW5pdFRhYmxlKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5ldyByb3cgdG8gdGhlIGxvY2FsIHRhYmxlIGNvcHkgb25seS5cclxuICAgKiBUaGUgcm93IGlzIHRyYWNrZWQgaW4gYWN0aXZlUm93c0NyZWF0aW5nIHVudGlsIHNhdmVkLlxyXG4gICAqIFdoZW4gc2F2ZWQsIHRoZSBwYXJlbnQgcmVjZWl2ZXMgdGhlIGV2ZW50IHRocm91Z2ggc2F2ZU5ld0NyZWF0ZWRSb3cgb3V0cHV0LlxyXG4gICAqIFRoZSBwYXJlbnQgZGVjaWRlcyB3aGV0aGVyIHRvIGFjY2VwdCBhbmQgYWRkIHRvIHRoZWlyIGRhdGEgYXJyYXkuXHJcbiAgICovXHJcbiAgYWRkTmV3Um93KCkge1xyXG4gICAgLy8gQ3JlYXRlIG5ldyByb3cgd2l0aCBnZW5lcmF0ZWQgSUQgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciBlYWNoIGNvbHVtblxyXG4gICAgY29uc3QgbmV3Um93OiBhbnkgPSB7XHJcbiAgICAgIGlkOiBTdEJhc2VTZXJ2aWNlLmdlbmVyYXRlR1VJRCgpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIGZpZWxkcyB3aXRoIG51bGwvZGVmYXVsdCB2YWx1ZXNcclxuICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKVxyXG4gICAgICAuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIG5ld1Jvd1tjb2wuZmllbGRdID0gbnVsbDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gQWRkIHRvIGxvY2FsIHRhYmxlIGNvcHkgb25seVxyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YSwgbmV3Um93XTtcclxuICAgIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW25ld1Jvdy5pZF0gPSB7IC4uLm5ld1JvdyB9O1xyXG5cclxuICAgIC8vIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSB0byBzaG93IHRoZSBuZXcgcm93XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IubGFzdFBhZ2UoKTtcclxuICAgIH0sIDEwMCk7XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGVkaXRSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF0gPSB7IC4uLnJvdyB9O1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUm93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICB0aGlzLnN0RGlhbG9nU2VydmljZVxyXG4gICAgICAuc2hvd0NvbmZpcm1hdGlvbignQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJvdz8nKVxyXG4gICAgICAucGlwZShmaWx0ZXIoU3RCYXNlU2VydmljZS5ub3ROdWxsKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICBkYXRhID0+IGRhdGEuaWQgIT09IHJvdy5pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yb3dEZWxldGVkLmVtaXQoeyByb3csIGluZGV4OiBhYnNvbHV0ZUluZGV4IH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIGFuZCBzYXZlcyBhIHJvdyAoZWl0aGVyIG5ldyBvciBlZGl0ZWQpLlxyXG4gICAqIEVtaXRzIHRoZSB2YWxpZGF0ZWQgcm93IHRvIHRoZSBwYXJlbnQgdGhyb3VnaCBlaXRoZXI6XHJcbiAgICogLSBzYXZlTmV3Q3JlYXRlZFJvdzogZm9yIG5ld2x5IGNyZWF0ZWQgcm93c1xyXG4gICAqIC0gc2F2ZU5ld1JvdzogZm9yIGVkaXRlZCBleGlzdGluZyByb3dzXHJcbiAgICpcclxuICAgKiBUaGUgcGFyZW50IGlzIHJlc3BvbnNpYmxlIGZvcjpcclxuICAgKiAtIFBlcnNpc3RpbmcgdGhlIGNoYW5nZSAoZS5nLiwgQVBJIGNhbGwpXHJcbiAgICogLSBVcGRhdGluZyB0aGVpciBkYXRhIGFycmF5XHJcbiAgICogLSBIYW5kbGluZyBlcnJvcnMvcmVqZWN0aW9uc1xyXG4gICAqXHJcbiAgICogVGhlIGxpYnJhcnkgdXBkYXRlcyBpdHMgbG9jYWwgY29weSBvcHRpbWlzdGljYWxseS5cclxuICAgKi9cclxuICBzYXZlRWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgY29uc3QgaXNDcmVhdGluZ1RoaXNSb3cgPSAhIXRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICBjb25zdCByb3dEYXRhID0gaXNDcmVhdGluZ1RoaXNSb3dcclxuICAgICAgPyB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdXHJcbiAgICAgIDogdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG5cclxuICAgIC8vIFZhbGlkYXRlIHJvd1xyXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUm93KHJvd0RhdGEsIHJvdykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVtaXQgdG8gcGFyZW50XHJcbiAgICBpZiAoaXNDcmVhdGluZ1RoaXNSb3cpIHtcclxuICAgICAgdGhpcy5zYXZlQ3JlYXRlZFJvdy5lbWl0KHsgLi4ucm93RGF0YSB9KTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVFZGl0ZWRSb3cuZW1pdCh7IHJvdzogeyAuLi5yb3dEYXRhIH0sIGluZGV4OiBhYnNvbHV0ZUluZGV4IH0pO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCB0YWJsZSBjb3B5XHJcbiAgICB0aGlzLnVwZGF0ZVJvd0luRGF0YVNvdXJjZShhYnNvbHV0ZUluZGV4LCByb3csIHJvd0RhdGEpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEVkaXRSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKSB7XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIHNwZWNpZmljIHJvdyBpcyBiZWluZyBjcmVhdGVkXHJcbiAgICBjb25zdCBpc0NyZWF0aW5nVGhpc1JvdyA9ICEhdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuXHJcbiAgICBpZiAoaXNDcmVhdGluZ1RoaXNSb3cpIHtcclxuICAgICAgLy8gUmVtb3ZlIGZyb20gbG9jYWwgdGFibGUgY29weVxyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSB0aGlzLnRhYmxlU291cmNlLmRhdGEuZmlsdGVyKFxyXG4gICAgICAgIGRhdGEgPT4gZGF0YS5pZCAhPT0gcm93LmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhciB2YWxpZGF0aW9uIGVycm9ycyBmb3IgdGhpcyByb3dcclxuICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93LmlkXSkge1xyXG4gICAgICBkZWxldGUgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvdy5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgaW1tZWRpYXRlIGZpZWxkIHZhbHVlIGNoYW5nZXMgZm9yIGF1dG8tc2F2ZSBtb2RlLlxyXG4gICAqIEluIGF1dG8tc2F2ZSBtb2RlLCBuZ01vZGVsIGlzIGJvdW5kIGRpcmVjdGx5IHRvIHJvd0RhdGEsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGl0LlxyXG4gICAqIFdlIG9ubHkgZW1pdCB0byBwYXJlbnQgc28gdGhleSBjYW4gdXBkYXRlIHRoZWlyIGRhdGEgY29weS5cclxuICAgKi9cclxuICBvbkZpZWxkVmFsdWVDaGFuZ2VkKFxyXG4gICAgcm93OiBhbnksXHJcbiAgICBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCxcclxuICAgIHZhbHVlOiBhbnksXHJcbiAgICBpbmRleDogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YVthYnNvbHV0ZUluZGV4XVtjb2x1bW4uZmllbGRdID0gdmFsdWU7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGZpZWxkIGlmIGF1dG9TYXZlT25DaGFuZ2UgaXMgZW5hYmxlZFxyXG4gICAgaWYgKHRoaXMuYXV0b1NhdmVPbkNoYW5nZSgpKSB7XHJcbiAgICAgIC8vIFVzZSB2YWxpZGF0ZVJvdyB3aXRoIHNpbmdsZSBjb2x1bW4gdG8gdmFsaWRhdGUganVzdCB0aGlzIGZpZWxkXHJcbiAgICAgIHRoaXMudmFsaWRhdGVSb3cocm93LCByb3csIGNvbHVtbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW1pdCB0byBwYXJlbnQgaW1tZWRpYXRlbHlcclxuICAgIC8vIFRoZSByb3cgb2JqZWN0IGlzIGFscmVhZHkgdXBkYXRlZCBieSBuZ01vZGVsIGJpbmRpbmdcclxuICAgIHRoaXMuZmllbGRWYWx1ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgIHJvdzogeyAuLi5yb3cgfSxcclxuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcclxuICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICBpbmRleDogYWJzb2x1dGVJbmRleCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJlUm93cyhhOiBhbnksIGI6IGFueSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBhSWQgPSBhPy5pZCA/PyBhO1xyXG4gICAgY29uc3QgYklkID0gYj8uaWQgPz8gYjtcclxuICAgIHJldHVybiBhSWQgPT09IGJJZCA/IDAgOiAxO1xyXG4gIH1cclxuXHJcbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzKCkuc29tZShyID0+IHRoaXMuY29tcGFyZVJvd3Mociwgcm93KSA9PT0gMCk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkUm93cygpLmxlbmd0aDtcclxuICAgIGlmICh0aGlzLnRhYmxlU291cmNlKSB7XHJcbiAgICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLnRhYmxlU291cmNlLmRhdGEubGVuZ3RoO1xyXG4gICAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBbGxSb3dzKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGFdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cygpKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGVkUm93KHJvdzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93cy51cGRhdGUoc2VsZWN0ZWQgPT5cclxuICAgICAgc2VsZWN0ZWQuZmlsdGVyKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpICE9PSAwKVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MoKSk7XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZVNlbGVjdGVkUm93KHJvdzogYW55KSB7XHJcbiAgICB0aGlzLnJlbW92ZVNlbGVjdGVkUm93KHJvdyk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb3dDaGFuZ2VkKHZhbHVlOiBib29sZWFuLCByb3c6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdFJvd09ubHlPbmUoKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbcm93XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MudXBkYXRlKHNlbGVjdGVkID0+IFsuLi5zZWxlY3RlZCwgcm93XSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnVwZGF0ZShzZWxlY3RlZCA9PlxyXG4gICAgICAgIHNlbGVjdGVkLmZpbHRlcihyID0+IHRoaXMuY29tcGFyZVJvd3Mociwgcm93KSAhPT0gMClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cygpKTtcclxuICB9XHJcblxyXG4gIGNsaWNrUm93QWN0aW9uKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5hbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkUm93SW5kZXgoKSA9PT0gaW5kZXgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93SW5kZXguc2V0KG51bGwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleC5zZXQoaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxsb3dTZWxlY3RSb3coKSkge1xyXG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlZCghaXNTZWxlY3RlZCwgcm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnJvd0NsaWNrQWN0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLnJvd0NsaWNrQWN0aW9uKCkhKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFic29sdXRlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRvclxyXG4gICAgICAgID8gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKyBpbmRleFxyXG4gICAgICAgIDogaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtbnNGaWx0ZXJSb3dFZGl0VHlwZXMoKSB7XHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09ICdhY3Rpb25zJyAmJiAhY29sdW1uLnR5cGUpIHtcclxuICAgICAgICBjb2x1bW4udHlwZSA9ICdhY3Rpb25zJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFjb2x1bW4uZmlsdGVyVHlwZSAmJiBjb2x1bW4uZmlsdGVyKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnbnVtYmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2RhdGUnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdjdXN0b20tdGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdjdXN0b20nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnYm9vbGVhbic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSAmJiAhY29sdW1uLnJvd0VkaXRUeXBlKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2RhdGUnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdjdXN0b20tdGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpIHtcclxuICAgIGxldCBmaWx0ZXJGdW5jdGlvbiA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zOiB7XHJcbiAgICAgICAgW2NvbHVtbjogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBzdEdsb2JhbFNlYXJjaDogc3RyaW5nO1xyXG4gICAgICB9ID0gSlNPTi5wYXJzZShmaWx0ZXIpO1xyXG4gICAgICBjb25zdCBzZWFyY2hUZXJtc0tleXMgPSBPYmplY3Qua2V5cyhzZWFyY2hUZXJtcyk7XHJcbiAgICAgIGxldCBzZWFyY2hPayA9IHRydWU7XHJcbiAgICAgIGxldCBzZWFyY2hPa0dsb2JhbCA9IHRydWU7XHJcblxyXG4gICAgICBzZWFyY2hUZXJtc0tleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBrZXkgIT09ICdzdEdsb2JhbFNlYXJjaCcgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmluY2x1ZGVzKGtleSkgJiZcclxuICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaFRlcm1zW2tleV0udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVGcm9tOiBzdHJpbmcgfCBudWxsID0gKFxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdXHJcbiAgICAgICAgICAgIClbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUbzogc3RyaW5nIHwgbnVsbCA9IChcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXVxyXG4gICAgICAgICAgICApWzFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGVGcm9tIHx8IGRhdGVUbykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRtcENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGtleSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0bXBDb2x1bW4gJiYgdG1wQ29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tID8gbmV3IERhdGUoZGF0ZUZyb20pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUb1ZhbHVlID0gZGF0ZVRvXHJcbiAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlVG8pLnNldERhdGUobmV3IERhdGUoZGF0ZVRvKS5nZXREYXRlKCkgKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gbmV3IERhdGUoZGF0YVtrZXldKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUZyb21WYWx1ZSAmJiBkYXRlVG9WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgJiZcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEgPj0gZGF0ZUZyb21WYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YSA8PSBkYXRlVG9WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0ZUZyb21WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9IHNlYXJjaE9rICYmIHRhYmxlRGF0YSA+PSBkYXRlRnJvbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRlVG9WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9IHNlYXJjaE9rICYmIHRhYmxlRGF0YSA8PSBkYXRlVG9WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBkYXRhW2tleV0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgIT09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2sgPVxyXG4gICAgICAgICAgICAgICAgc2VhcmNoT2sgJiZcclxuICAgICAgICAgICAgICAgIChzZWFyY2hUZXJtc1trZXldLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJ1xyXG4gICAgICAgICAgICAgICAgICA/IGRhdGFba2V5XSA9PT0gc2VhcmNoVGVybXNba2V5XS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICA6IGRhdGFba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICApICE9PSAtMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoc2VhcmNoVGVybXMuc3RHbG9iYWxTZWFyY2gpIHtcclxuICAgICAgICBzZWFyY2hPa0dsb2JhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhW2NvbF0pIHtcclxuICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgPVxyXG4gICAgICAgICAgICAgIHNlYXJjaE9rR2xvYmFsIHx8XHJcbiAgICAgICAgICAgICAgZGF0YVtjb2xdXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaC50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICkgIT09IC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBcHBseSBjdXN0b20gZmlsdGVyIG1ldGhvZCBpZiBwcm92aWRlZFxyXG4gICAgICBsZXQgY3VzdG9tRmlsdGVyT2sgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5pbml0RmlsdGVyTWV0aG9kKCkpIHtcclxuICAgICAgICBjdXN0b21GaWx0ZXJPayA9IHRoaXMuaW5pdEZpbHRlck1ldGhvZCgpIShkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHNlYXJjaE9rICYmIHNlYXJjaE9rR2xvYmFsICYmIGN1c3RvbUZpbHRlck9rO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBmaWx0ZXJGdW5jdGlvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdExhenlMb2FkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICBjb25zdCBsb2FkRGF0YVJlcXVlc3Q6IFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhID0ge1xyXG4gICAgICAgIGZpcnN0OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgICByb3dzOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZyxcclxuICAgICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2gsXHJcbiAgICAgICAgc29ydEZpZWxkOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydEZpZWxkLFxyXG4gICAgICAgIHNvcnRPcmRlcjogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcixcclxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMubG9hZERhdGEuZW1pdChsb2FkRGF0YVJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMsXHJcbiAgICAgICAgc3RHbG9iYWxTZWFyY2g6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2gsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxTdG9yYWdlRGF0YSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdFRhYmxlKCkge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5fZGF0YSk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZUluZGV4O1xyXG5cclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydEZpZWxkICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIpIHtcclxuICAgICAgY29uc3QgZGlzYWJsZUNsZWFyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHsgaWQ6ICcnLCBzdGFydDogJ2FzYycsIGRpc2FibGVDbGVhciB9KTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnQoe1xyXG4gICAgICAgIGlkOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydEZpZWxkLFxyXG4gICAgICAgIHN0YXJ0OiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyLFxyXG4gICAgICAgIGRpc2FibGVDbGVhcixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmxhenlMb2FkaW5nKCkhKSB7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTb3J0UGFnZVN1YnNjcmlwdGlvbigpIHtcclxuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXHJcbiAgICAgICAgICAocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEsXHJcbiAgICAgICAgICBzb3J0RmllbGQ6IHJlcy5hY3RpdmUsXHJcbiAgICAgICAgICBzb3J0T3JkZXI6IHJlcy5kaXJlY3Rpb24sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YSxcclxuICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4LFxyXG4gICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgdHlwZTogY29sLnR5cGUgPyBjb2wudHlwZSA6ICdzdHJpbmcnLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgZXhwYW5kZWQ6IHRydWUsXHJcbiAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc09yZGVyKCk7XHJcbiAgICB0aGlzLnNldENvbHVtbnNWaXNpYmxlKCk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkQ29sdW1ucygpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc09yZGVyKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YT8uY29sdW1uc09yZGVyKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEuY29sdW1uc09yZGVyXHJcbiAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBjb2x1bW4pKVxyXG4gICAgICAgICAgLm1hcChjb2x1bW4gPT4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uKSEpLFxyXG4gICAgICAgIC4uLnRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgICAgICBjb2x1bW4gPT4gIXRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXIuaW5jbHVkZXMoY29sdW1uLmZpZWxkKVxyXG4gICAgICAgICksXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtbnNWaXNpYmxlKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YT8uc2VsZWN0ZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgdmlzaWJsZTpcclxuICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNlbGVjdGVkQ29sdW1ucy5pbmNsdWRlcyhjb2wuZmllbGQpIHx8XHJcbiAgICAgICAgICAgICF0aGlzLmxvY2FsU3RvcmFnZURhdGEuY29sdW1uc09yZGVyLmluY2x1ZGVzKGNvbC5maWVsZCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkQ29sdW1ucygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4ge1xyXG4gICAgICByZXR1cm4gY29sLnZpc2libGU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZExvY2FsU3RvcmFnZURhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkpIHtcclxuICAgICAgY29uc3QgbG9jYWxTdG9yYWdlRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpISk7XHJcblxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlRGF0YSk7XHJcbiAgICAgICAgLy8gY29uc3QgZmlsdGVycyA9IHRoaXMudmFsaWRPbGRGaWx0ZXJzVG9OZXdGb3JtYXQoXHJcbiAgICAgICAgLy8gICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVyc1xyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgLy8gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMgPSBmaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycztcclxuXHJcbiAgICAgICAgdGhpcy5pbml0R2xvYmFsU2VhcmNoID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZE9sZEZpbHRlcnNUb05ld0Zvcm1hdChvbGRGaWx0ZXJzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfCBzdHJpbmc7XHJcbiAgfSk6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0ge1xyXG4gICAgY29uc3QgbmV3RmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSA9IHt9O1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9sZEZpbHRlcnMpO1xyXG5cclxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbmV3RmlsdGVycztcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgaWYgKHR5cGVvZiBvbGRGaWx0ZXJzW2tleV0gPT09ICdvYmplY3QnICYmIG9sZEZpbHRlcnNba2V5XSAhPT0gbnVsbCkge1xyXG4gICAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IG9sZEZpbHRlcnNba2V5XSBhcyBTdE1hdGVyaWFsVGFibGVGaWx0ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3RmlsdGVycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSgpLFxyXG4gICAgICBwYWdlSW5kZXg6IDAsXHJcbiAgICAgIHNlbGVjdGVkQ29sdW1uczogdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiBjb2wuZmllbGQpLFxyXG4gICAgICBnbG9iYWxTZWFyY2g6ICcnLFxyXG4gICAgICBjb2x1bW5zT3JkZXI6IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4gY29sLmZpZWxkKSxcclxuICAgICAgZmlsdGVyczoge30sXHJcbiAgICAgIHNvcnRGaWVsZDogJycsXHJcbiAgICAgIHNvcnRPcmRlcjogJ2FzYycsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdEVkaXRhYmxlQ29sdW1uKGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICAvLyBHZXQgYWxsIGVkaXRhYmxlIGNvbHVtbnMgaW4gb3JkZXJcclxuICAgIGNvbnN0IGVkaXRhYmxlQ29sdW1ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcihcclxuICAgICAgY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4gJiYgY29sLnZpc2libGVcclxuICAgICk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgZWRpdGFibGUgY29sdW1uXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBlZGl0YWJsZUNvbHVtbnMubGVuZ3RoID4gMCAmJiBlZGl0YWJsZUNvbHVtbnNbMF0uZmllbGQgPT09IGNvbHVtbi5maWVsZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVSb3coXHJcbiAgICByb3dEYXRhOiBhbnksXHJcbiAgICBvcmlnaW5hbFJvdzogYW55LFxyXG4gICAgc2luZ2xlQ29sdW1uPzogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSBzaW5nbGVDb2x1bW5cclxuICAgICAgPyBbc2luZ2xlQ29sdW1uXVxyXG4gICAgICA6IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pO1xyXG4gICAgY29uc3Qgcm93SWQgPSBvcmlnaW5hbFJvdy5pZDtcclxuXHJcbiAgICAvLyBGb3Igc2luZ2xlIGZpZWxkIHZhbGlkYXRpb24sIHByZXNlcnZlIGV4aXN0aW5nIGVycm9ycyBmb3Igb3RoZXIgZmllbGRzXHJcbiAgICBsZXQgZXJyb3JzOiB7IFtmaWVsZDogc3RyaW5nXTogc3RyaW5nIH0gPSBzaW5nbGVDb2x1bW5cclxuICAgICAgPyB7IC4uLnRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF0gfVxyXG4gICAgICA6IHt9O1xyXG5cclxuICAgIC8vIENsZWFyIGFsbCBlcnJvcnMgaWYgdmFsaWRhdGluZyBlbnRpcmUgcm93XHJcbiAgICBpZiAoIXNpbmdsZUNvbHVtbiAmJiB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdKSB7XHJcbiAgICAgIGVycm9ycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcclxuICAgIGxldCBmaXJzdEVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29sIG9mIGVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICBsZXQgZmllbGRIYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICBpZiAoY29sLmN1c3RvbUVkaXRSb3dWYWxpZGF0b3IpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb2wuY3VzdG9tRWRpdFJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSxcclxuICAgICAgICAgIG9yaWdpbmFsUm93W2NvbC5maWVsZF0sXHJcbiAgICAgICAgICBvcmlnaW5hbFJvd1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkge1xyXG4gICAgICAgICAgZXJyb3JzW2NvbC5maWVsZF0gPSByZXN1bHQuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgZmllbGRIYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzdWx0LmVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZmllbGRIYXNFcnJvciAmJiBjb2wuZWRpdENvbHVtblJlcXVpcmVkKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgJHtjb2wuaGVhZGVyfSBpcyByZXF1aXJlZGA7XHJcbiAgICAgICAgICBlcnJvcnNbY29sLmZpZWxkXSA9IGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIGZpZWxkSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENsZWFyIGVycm9yIGZvciB0aGlzIGZpZWxkIGlmIHZhbGlkYXRpb24gcGFzc2VkXHJcbiAgICAgIGlmICghZmllbGRIYXNFcnJvciAmJiBzaW5nbGVDb2x1bW4pIHtcclxuICAgICAgICBkZWxldGUgZXJyb3JzW2NvbC5maWVsZF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENhcHR1cmUgZmlyc3QgZXJyb3IgZm9yIHNuYWNrYmFyIChvbmx5IHdoZW4gdmFsaWRhdGluZyBlbnRpcmUgcm93KVxyXG4gICAgICBpZiAoIXNpbmdsZUNvbHVtbiAmJiBmaWVsZEhhc0Vycm9yICYmICFmaXJzdEVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgIGZpcnN0RXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHZhbGlkYXRpb24gZXJyb3JzXHJcbiAgICBpZiAoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF0gPSBlcnJvcnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTaG93IHNuYWNrYmFyIG9ubHkgd2hlbiB2YWxpZGF0aW5nIGVudGlyZSByb3cgKG9uIHNhdmUpXHJcbiAgICBpZiAoIXNpbmdsZUNvbHVtbiAmJiBoYXNFcnJvcnMgJiYgZmlyc3RFcnJvck1lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5zbmFja2Jhci5lcnJvcihmaXJzdEVycm9yTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHJldHVybiAhaGFzRXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVSb3dJbkRhdGFTb3VyY2UoaW5kZXg6IG51bWJlciwgcm93OiBhbnksIHJvd0RhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnRhYmxlU291cmNlLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKVxyXG4gICAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVkUm93W2NvbC5maWVsZF0gPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGFbaW5kZXhdID0gdXBkYXRlZFJvdztcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnNldChbLi4udGhpcy5pbml0Q29sdW1ucygpXSk7XHJcblxyXG4gICAgLy8gQWRkIHNwZWNpYWwgY29sdW1uc1xyXG4gICAgdGhpcy5hZGRTZWxlY3RDb2x1bW5JZk5lZWRlZCgpO1xyXG4gICAgdGhpcy5hZGRFZGl0Q29sdW1uSWZOZWVkZWQoKTtcclxuICAgIHRoaXMuYWRkRXh0ZW5kQ29sdW1uSWZOZWVkZWQoKTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNGaWx0ZXJSb3dFZGl0VHlwZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkU2VsZWN0Q29sdW1uSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWxsb3dTZWxlY3RSb3coKSkge1xyXG4gICAgICB0aGlzLnJlbW92ZUNvbHVtbkJ5VHlwZSgnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS51bnNoaWZ0KHtcclxuICAgICAgZmllbGQ6ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnLFxyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAnNjBweCcsXHJcbiAgICAgIHNlbGVjdENvbHVtbkxhYmVsOlxyXG4gICAgICAgIHRoaXMuc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJvd1NlbGVjdENvbHVtbkxhYmVsLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaW5pdFNlbGVjdGVkUm93KCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFsuLi50aGlzLmluaXRTZWxlY3RlZFJvdygpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEVkaXRDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmF1dG9TYXZlT25DaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLnJlbW92ZUNvbHVtbkJ5VHlwZSgnYWN0aW9ucy1yb3ctZWRpdGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZWRpdGluZ0NvbHVtbjogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgPSB7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyxcclxuICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgIHdpZHRoOiAnMTEwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dBY3Rpb25zQ29sdW1uTGFiZWwsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy51cGRhdGUoY29sdW1ucyA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RDb2x1bW4gPSBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGlmIChsYXN0Q29sdW1uPy50eXBlICE9PSAnYWN0aW9ucycpIHtcclxuICAgICAgICByZXR1cm4gWy4uLmNvbHVtbnMsIGVkaXRpbmdDb2x1bW5dO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4uY29sdW1uc107XHJcbiAgICAgIG5ld0NvbHVtbnMuc3BsaWNlKG5ld0NvbHVtbnMubGVuZ3RoIC0gMSwgMCwgZWRpdGluZ0NvbHVtbik7XHJcbiAgICAgIHJldHVybiBuZXdDb2x1bW5zO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV4dGVuZENvbHVtbklmTmVlZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LWV4dGVuZGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkudW5zaGlmdCh7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctZXh0ZW5kaW5nJyxcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgdHlwZTogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzYwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dFeHRlbmRDb2x1bW5MYWJlbCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDb2x1bW5CeVR5cGUodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT5cclxuICAgICAgY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWVsZCAhPT0gdHlwZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlQW5kVXBkYXRlRmlsdGVycygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbHRlcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmluaXRGaWx0ZXJzKTtcclxuICAgIGlmIChmaWx0ZXJLZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0ZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWx0ZXJLZXlzKSB7XHJcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLmZpbmQoY29sdW1uID0+IGNvbHVtbi5maWVsZCA9PT0ga2V5KTtcclxuICAgICAgaWYgKCFjb2wpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgbmV3RmlsdGVyc1trZXldID0ge1xyXG4gICAgICAgIHZhbHVlOiB0aGlzLmdldERlZmF1bHRGaWx0ZXJWYWx1ZShjb2wsIHRoaXMuaW5pdEZpbHRlcnNba2V5XSksXHJcbiAgICAgICAgbWF0Y2hNb2RlOiBNYXRlcmlhbFRhYmxlRmlsdGVyRGlhbG9nQ29tcG9uZW50LmdldEJhc2VNYXRjaE1vZGVCeVR5cGUoXHJcbiAgICAgICAgICBjb2wuZmlsdGVyVHlwZSFcclxuICAgICAgICApLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdGaWx0ZXJzKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5pbml0RmlsdGVycykpIHtcclxuICAgICAgdGhpcy5pbml0RmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzID0gbmV3RmlsdGVycztcclxuICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEZpbHRlclZhbHVlKFxyXG4gICAgY29sOiBTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCxcclxuICAgIGZpbHRlcjogU3RNYXRlcmlhbFRhYmxlRmlsdGVyXHJcbiAgKTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlIHtcclxuICAgIGlmIChmaWx0ZXIubWF0Y2hNb2RlID09PSAnZXF1YWwnKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XHJcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpXHJcbiAgICAgICAgPyBmaWx0ZXIudmFsdWVcclxuICAgICAgICA6IFtudWxsLCBudWxsXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyLnZhbHVlIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBkYXRhIGNoYW5nZXMgZnJvbSB0aGUgaW5wdXQgc2lnbmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhQ2hhbmdlKGRhdGE6IGFueVtdKTogdm9pZCB7XHJcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgdGhpcy5fZGF0YSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGRhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLl9kYXRhLmxlbmd0aCA9PT0gZGF0YS5sZW5ndGggJiZcclxuICAgICAgdGhpcy5zZXROZXdEYXRhV2l0aG91dFJlZnJlc2goKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ2lkJyk7XHJcblxyXG4gICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgb2JqZWN0cyBpbiBwbGFjZSB0byBwcmVzZXJ2ZSByZWZlcmVuY2VzIGFuZCBhdm9pZCBsb3NpbmcgZm9jdXNcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZvckVhY2goKGV4aXN0aW5nUm93LCBpbmRleCkgPT4ge1xyXG4gICAgICAgIG9iamVjdEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgZXhpc3RpbmdSb3dba2V5XSA9IGRhdGFbaW5kZXhdW2tleV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gRm9yY2UgdGFibGUgdG8gZGV0ZWN0IGNoYW5nZXMgd2l0aG91dCByZWNyZWF0aW5nIHJvd3NcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gb24gYWxsIGNoaWxkIHJvdyBjZWxsIGNvbXBvbmVudHNcclxuICAgICAgaWYgKHRoaXMucm93Q2VsbHMpIHtcclxuICAgICAgICB0aGlzLnJvd0NlbGxzLmZvckVhY2goY2VsbCA9PiB7XHJcbiAgICAgICAgICBjZWxsLnRyaWdnZXJDaGFuZ2VEZXRlY3Rpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDaGVjayBpZiBkYXRhIGlzIGFjdHVhbGx5IGRpZmZlcmVudCAoZXhjbHVkaW5nIElEcyB3ZSBtaWdodCBoYXZlIGFkZGVkKVxyXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5IHVwZGF0ZXMgd2hlbiBwYXJlbnQgc2VuZHMgdGhlIHNhbWUgZGF0YVxyXG4gICAgICBpZiAodGhpcy5fZGF0YS5sZW5ndGggPT09IGRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVdpdGhvdXRJZHMgPSBkYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG1wID0geyAuLi5yb3cgfTtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhV2l0aG91dElkcyA9IHRoaXMuX2RhdGEubWFwKHJvdyA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0bXAgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgICAgZGVsZXRlIHRtcC5pZDtcclxuICAgICAgICAgIHJldHVybiB0bXA7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGRhdGFXaXRob3V0SWRzKSA9PT1cclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGN1cnJlbnREYXRhV2l0aG91dElkcylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENyZWF0ZSBzaGFsbG93IGNvcHkgdG8gYXZvaWQgbXV0YXRpbmcgcGFyZW50IGRhdGFcclxuICAgICAgbGV0IGNsb25lZERhdGEgPSBkYXRhLm1hcChyb3cgPT4gKHsgLi4ucm93IH0pKTtcclxuXHJcbiAgICAgIC8vIEFkZCBJRHMgaWYgbmVlZGVkIChvbmx5IG9uIHRoZSBjb3B5KVxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgICBjbG9uZWREYXRhID0gY2xvbmVkRGF0YS5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICBpZDogcm93LmlkIHx8IFN0QmFzZVNlcnZpY2UuZ2VuZXJhdGVHVUlEKCksXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9kYXRhID0gY2xvbmVkRGF0YTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gY2xvbmVkRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcoKSAmJiB0aGlzLmxvY2FsU3RvcmFnZURhdGEpIHtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLl9lbWl0UGFnZUV2ZW50KHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2FkRGF0YSB7XHJcbiAgZmlyc3Q6IG51bWJlcjtcclxuICByb3dzOiBudW1iZXI7XHJcbiAgZ2xvYmFsRmlsdGVyOiBzdHJpbmc7XHJcbiAgZ2xvYmFsRmlsdGVyQ29sdW1uczogc3RyaW5nW107XHJcbiAgc29ydEZpZWxkOiBzdHJpbmc7XHJcbiAgc29ydE9yZGVyOiBTb3J0RGlyZWN0aW9uO1xyXG4gIGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RNYXRlcmlhbFRhYmxlTG9jYWxTdG9yYWdlIGV4dGVuZHMgSUNhcHRpb25EYXRhQ2hhbmdlZCB7XHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxuICBwYWdlSW5kZXg6IG51bWJlcjtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN0LW1hdGVyaWFsLXRhYmxlXCI+XHJcbiAgQGlmIChpc0xvYWRpbmcoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPlxyXG4gICAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJhY2NlbnRcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAaWYgKHNob3dUYWJsZSkge1xyXG4gICAgPHN0LW1hdGVyaWFsLXRhYmxlLWNhcHRpb25cclxuICAgICAgW3RhYmxlVGl0bGVdPVwidGFibGVUaXRsZSgpXCJcclxuICAgICAgW2FsbG93UGlja0NvbHVtbnNdPVwiYWxsb3dQaWNrQ29sdW1ucygpXCJcclxuICAgICAgW3Nob3dHbG9iYWxTZWFyY2hdPVwic2hvd0dsb2JhbFNlYXJjaCgpXCJcclxuICAgICAgW2FsbG93UmVvcmRlckNvbHVtbnNdPVwiYWxsb3dSZW9yZGVyQ29sdW1ucygpXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtpbml0RmlsdGVyc109XCJpbml0RmlsdGVyc1wiXHJcbiAgICAgIFtpbml0R2xvYmFsU2VhcmNoXT1cImluaXRHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbc2hvd0NyZWF0ZUJ1dHRvbl09XCJzaG93Q3JlYXRlQnV0dG9uKClcIlxyXG4gICAgICBbY3JlYXRlQnV0dG9uTGFiZWxdPVwiY3JlYXRlQnV0dG9uTGFiZWwoKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25BY3Rpb25dPVwiY3JlYXRlQnV0dG9uQWN0aW9uKClcIlxyXG4gICAgICBbYWxsb3dDcmVhdGVSb3ddPVwiYWxsb3dDcmVhdGVSb3coKVwiXHJcbiAgICAgIFtkaXNhYmxlQ3JlYXRlQnV0dG9uXT1cImRpc2FibGVDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtleHRyYUN1c3RvbUZpbHRlcl09XCJleHRyYUN1c3RvbUZpbHRlcigpXCJcclxuICAgICAgW2NyZWF0aW5nUm93XT1cImNyZWF0aW5nUm93KClcIlxyXG4gICAgICAoY2FwdGlvbkRhdGFDaGFuZ2VkKT1cImNhcHRpb25EYXRhQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgKHJlc2V0VGFibGVTZXR0aW5ncyk9XCJyZXNldFRhYmxlU2V0dGluZ3MoKVwiXHJcbiAgICAgIChhZGROZXdSb3cpPVwiYWRkTmV3Um93KClcIlxyXG4gICAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvbj5cclxuICB9XHJcblxyXG4gIDx0YWJsZVxyXG4gICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAnbm8taG92ZXInOiAhcm93Q2xpY2tBY3Rpb24oKSxcclxuICAgICAgJ2lzLWV4cGVuZGVkLXRhYmxlJzogYWxsb3dFeHRlbmRSb3coKVxyXG4gICAgfVwiXHJcbiAgICBtYXQtdGFibGVcclxuICAgIFtkYXRhU291cmNlXT1cInRhYmxlU291cmNlXCJcclxuICAgIG1hdFNvcnRcclxuICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiYWxsb3dFeHRlbmRSb3coKVwiXHJcbiAgPlxyXG4gICAgQGZvciAoY29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uczsgdHJhY2sgY29sdW1uKSB7XHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uZmllbGRcIj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxyXG4gICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbi5zb3J0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBAaWYgKGNvbHVtbi50eXBlID09PSAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyAmJiAhc2VsZWN0Um93T25seU9uZSgpKSB7XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93cygkZXZlbnQuY2hlY2tlZClcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkUm93cygpLmxlbmd0aCA+IDAgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RlZFJvd3MoKS5sZW5ndGggPiAwICYmICFpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgfSBAZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGNvbHVtbi50eXBlID09PSAnYWN0aW9ucy1yb3ctZWRpdGluZycgJiYgc2hvd0VkaXRBbGxSb3dzKClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1lbmQgZWRpdC1hbGwtcm93cy1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0dXJuT25BbGxFZGl0Um93cygpXCJcclxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFZGl0IGFsbCByb3dzXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdF9hcnJvd19kb3duPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBpbmRleDsgbGV0IGogPSBkYXRhSW5kZXhcIlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHN0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsXHJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZWxlbWVudFwiXHJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCJnZXRBYnNvbHV0ZUluZGV4KGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaSlcIlxyXG4gICAgICAgICAgICBbcm93RGF0YUNvcHldPVwiXHJcbiAgICAgICAgICAgICAgYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfHwgYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3dFZGl0aW5nXT1cIlxyXG4gICAgICAgICAgICAgICEhYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfHxcclxuICAgICAgICAgICAgICAhIWFjdGl2ZVJvd3NDcmVhdGluZ1tlbGVtZW50LmlkXVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbcm93SXNTZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgW3Jvd0lzRXhwYW5kZWRdPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSAoYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVwiXHJcbiAgICAgICAgICAgIFtjYW5FZGl0Um93VmFsaWRhdG9yXT1cImNhbkVkaXRSb3dWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgICAgIFtjYW5EZWxldGVSb3dWYWxpZGF0b3JdPVwiY2FuRGVsZXRlUm93VmFsaWRhdG9yKClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0Um93T25seU9uZV09XCJzZWxlY3RSb3dPbmx5T25lKClcIlxyXG4gICAgICAgICAgICBbaXNGaXJzdEVkaXRhYmxlQ29sdW1uXT1cImlzRmlyc3RFZGl0YWJsZUNvbHVtbihjb2x1bW4pXCJcclxuICAgICAgICAgICAgW2F1dG9TYXZlT25DaGFuZ2VdPVwiYXV0b1NhdmVPbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgW2FsbG93RWRpdEluRWRpdFJvd109XCJhbGxvd0VkaXRJbkVkaXRSb3coKVwiXHJcbiAgICAgICAgICAgIFthbGxvd0RlbGV0ZUluRWRpdFJvd109XCJhbGxvd0RlbGV0ZUluRWRpdFJvdygpXCJcclxuICAgICAgICAgICAgW2ZpZWxkRXJyb3JdPVwidmFsaWRhdGlvbkVycm9yc1tlbGVtZW50LmlkXT8uW2NvbHVtbi5maWVsZF1cIlxyXG4gICAgICAgICAgICAoZWRpdFJvd0VtaXR0ZXIpPVwiZWRpdFJvdyhlbGVtZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgKGRlbGV0ZVJvd0VtaXR0ZXIpPVwiXHJcbiAgICAgICAgICAgICAgZGVsZXRlUm93KGVsZW1lbnQsIGNvbHVtbiwgYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAoc2F2ZUVkaXRSb3dFbWl0dGVyKT1cIlxyXG4gICAgICAgICAgICAgIHNhdmVFZGl0Um93KGVsZW1lbnQsIGNvbHVtbiwgYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAoY2FuY2VsRWRpdFJvd0VtaXR0ZXIpPVwiY2FuY2VsRWRpdFJvdyhlbGVtZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgKHNlbGVjdFJvd0NoYW5nZSk9XCJzZWxlY3RSb3dDaGFuZ2VkKCRldmVudCwgZWxlbWVudClcIlxyXG4gICAgICAgICAgICAoZmllbGRWYWx1ZUNoYW5nZWQpPVwiXHJcbiAgICAgICAgICAgICAgb25GaWVsZFZhbHVlQ2hhbmdlZChcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAkZXZlbnQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1yb3ctY2VsbD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBkYXRhSW5kZXhcIlxyXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwic2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmxlbmd0aFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImV4cGFuZGVkLWVsZW1lbnQtZGV0YWlsLXdyYXBwZXJcIlxyXG4gICAgICAgICAgW0BkZXRhaWxFeHBhbmRdPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSBpID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWxcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImV4dGVuZGVkUm93VGVtcGxhdGUoKSFcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGRhdGE6IGVsZW1lbnQgfVwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJzZWxlY3RlZENvbHVtbnNTdHJpbmdcIj48L3RyPlxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1yb3dcclxuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHNlbGVjdGVkQ29sdW1uc1N0cmluZzsgbGV0IGkgPSBkYXRhSW5kZXhcIlxyXG4gICAgICBbY2xhc3MuZXhwYW5kZWQtZXhwYW5kZWQtcm93XT1cImV4cGFuZGVkUm93SW5kZXgoKSA9PT0gaVwiXHJcbiAgICAgIChjbGljayk9XCJjbGlja1Jvd0FjdGlvbihyb3csIGkpXCJcclxuICAgID48L3RyPlxyXG4gICAgQGlmIChhbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIDx0clxyXG4gICAgICAgIG1hdC1yb3dcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydleHBhbmRlZERldGFpbCddXCJcclxuICAgICAgICBjbGFzcz1cImV4dGVuZGVkLWRldGFpbC1yb3dcIlxyXG4gICAgICA+PC90cj5cclxuICAgIH1cclxuICA8L3RhYmxlPlxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMTUsIDIwLCAyNV1cIlxyXG4gICAgW2xlbmd0aF09XCJkYXRhTGVuZ3RoKClcIlxyXG4gID48L21hdC1wYWdpbmF0b3I+XHJcbiAgPHN0LW1hdGVyaWFsLXRhYmxlLXNlbGVjdGVkLXJvd3NcclxuICAgIFthbGxvd1NlbGVjdFJvd109XCJhbGxvd1NlbGVjdFJvdygpXCJcclxuICAgIFtzZWxlY3RSb3dPbmx5T25lXT1cInNlbGVjdFJvd09ubHlPbmUoKVwiXHJcbiAgICBbc2VsZWN0ZWRSb3dzXT1cInNlbGVjdGVkUm93cygpXCJcclxuICAgIFtzZWxlY3Rpb25GaWVsZExhYmVsXT1cInNlbGVjdGlvbkZpZWxkTGFiZWwoKVwiXHJcbiAgICBbc2VsZWN0Um93VmFsdWVEaXNwbGF5XT1cInNlbGVjdFJvd1ZhbHVlRGlzcGxheSgpXCJcclxuICAgIChyZW1vdmVTZWxlY3RlZFJvdyk9XCJvblJlbW92ZVNlbGVjdGVkUm93KCRldmVudClcIlxyXG4gID48L3N0LW1hdGVyaWFsLXRhYmxlLXNlbGVjdGVkLXJvd3M+XHJcbjwvZGl2PlxyXG4iXX0=
958
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFFWixpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEdBQzVCLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QjVHLE1B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QUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUN6RDtnQkFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxVQUFVLENBQ1Isd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDthQUNGLENBQUM7U0FDSDs7NEZBRVUsc0JBQXNCO2tCQXZCbEMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBTWhCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekI7d0JBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTs0QkFDdEIsS0FBSyxDQUNILGdCQUFnQixFQUNoQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQ3pEOzRCQUNELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFVBQVUsQ0FDUix3QkFBd0IsRUFDeEIsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQ2hEO3lCQUNGLENBQUM7cUJBQ0g7OExBTXdCLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSCxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU87Z0JBRWxCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBpbnB1dCxcclxuICBvdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgc2lnbmFsLFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3L3ZpZXctc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIFN0QmFzZVNlcnZpY2UsXHJcbiAgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50LFxyXG59IGZyb20gJ25neC1zdC1iYXNlLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFN0U25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXN0LXNuYWNrLWJhcic7XHJcbmltcG9ydCB7IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0LXRhYmxlcy10cmFuc2xhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLWNhcHRpb24vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgSUNhcHRpb25EYXRhQ2hhbmdlZCxcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGUsXHJcbiAgc3RhdGUsXHJcbiAgc3R5bGUsXHJcbiAgdHJhbnNpdGlvbixcclxuICB0cmlnZ2VyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTdERpYWxvZ1NlcnZpY2UgfSBmcm9tICduZ3gtc3QtZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQgfSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLXJvdy1jZWxsL21hdGVyaWFsLXRhYmxlLXJvdy1jZWxsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25neC1zdC1tYXRlcmlhbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL21hdGVyaWFsLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICAgICcuLi8uLi8uLi8uLi9hc3NldHMvYmFzZS10YWJsZS5zY3NzJyxcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZShcclxuICAgICAgICAnY29sbGFwc2VkLHZvaWQnLFxyXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcsIGJvcmRlcjogJ25vbmUnIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFxyXG4gICAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkJyxcclxuICAgICAgICBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKVxyXG4gICAgICApLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGFibGVDb21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQpXHJcbiAgcm93Q2VsbHMhOiBRdWVyeUxpc3Q8TWF0ZXJpYWxUYWJsZVJvd0NlbGxDb21wb25lbnQ+O1xyXG5cclxuICBzaG93R2xvYmFsU2VhcmNoID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICB0YWJsZVRpdGxlID0gaW5wdXQoJycpO1xyXG5cclxuICBwYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oMTApO1xyXG5cclxuICBkYXRhTGVuZ3RoID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHJcbiAgYWxsb3dQaWNrQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dSZW9yZGVyQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbG9jYWxTdG9yYWdlTmFtZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBsYXp5TG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaXNMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpbml0Q29sdW1ucyA9IGlucHV0PFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuXHJcbiAgcm93Q2xpY2tBY3Rpb24gPSBpbnB1dDwocm93OiBhbnkpID0+IHZvaWQ+KCk7XHJcblxyXG4gIGFsbG93RWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dEZWxldGVJbkVkaXRSb3cgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgYWxsb3dFZGl0SW5FZGl0Um93ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblxyXG4gIHNob3dFZGl0QWxsUm93cyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0cnVlLCBmaWVsZCBjaGFuZ2VzIGFyZSBzYXZlZCBpbW1lZGlhdGVseSB3aXRob3V0IHJlcXVpcmluZyBzYXZlL2NhbmNlbCBidXR0b25zLlxyXG4gICAqIFBlcmZlY3QgZm9yIHF1YW50aXR5IGlucHV0cywgdG9nZ2xlcywgb3Igc2VsZWN0aW9uIHRhYmxlcyB3aGVyZSBpbnN0YW50IHVwZGF0ZXMgYXJlIG5lZWRlZC5cclxuICAgKi9cclxuICBhdXRvU2F2ZU9uQ2hhbmdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjYW5FZGl0Um93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgY2FuRGVsZXRlUm93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gIHNlbGVjdGlvbkZpZWxkTGFiZWwgPSBpbnB1dCgnJyk7XHJcblxyXG4gIHNlbGVjdFJvd09ubHlPbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZvcm1hdHRlciB1c2VkIHRvIGRlcml2ZSB0aGUgZGlzcGxheSB2YWx1ZSBmb3IgYSBzZWxlY3RlZCByb3cuXHJcbiAgICpcclxuICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBzaW1wbGUgZmllbGQgbmFtZSBwcm92aWRlZCBieSB7QGxpbmsgc2VsZWN0aW9uRmllbGRMYWJlbH1cclxuICAgKiBpcyBub3Qgc3VmZmljaWVudCAoZm9yIGV4YW1wbGUsIHdoZW4geW91IG5lZWQgdG8gY29uY2F0ZW5hdGUgbXVsdGlwbGUgZmllbGRzXHJcbiAgICogb3IgYXBwbHkgY3VzdG9tIGZvcm1hdHRpbmcgdG8gdGhlIGRpc3BsYXllZCB2YWx1ZSkuXHJcbiAgICpcclxuICAgKiBJZiBib3RoIHtAbGluayBzZWxlY3Rpb25GaWVsZExhYmVsfSBhbmQgYHNlbGVjdFJvd1ZhbHVlRGlzcGxheWAgYXJlIHNldCxcclxuICAgKiB0aGlzIGZ1bmN0aW9uIHRha2VzIHByZWNlZGVuY2UgYW5kIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmlzaWJsZSB0ZXh0XHJcbiAgICogcmVwcmVzZW50aW5nIHRoZSBzZWxlY3RlZCByb3cuXHJcbiAgICovXHJcbiAgc2VsZWN0Um93VmFsdWVEaXNwbGF5ID0gaW5wdXQ8KHJvdzogYW55KSA9PiBzdHJpbmc+KCk7XHJcblxyXG4gIHNob3dDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkxhYmVsID0gaW5wdXQoJ0NyZWF0ZScpO1xyXG5cclxuICBjcmVhdGVCdXR0b25BY3Rpb24gPSBpbnB1dDwoKSA9PiB2b2lkPigoKSA9PiB7fSk7XHJcblxyXG4gIGRpc2FibGVDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93Q3JlYXRlUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0V4dGVuZFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXh0ZW5kZWRSb3dUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHsgZGF0YTogYW55IH0+PigpO1xyXG5cclxuICBpbml0U2VsZWN0ZWRSb3cgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIGV4dHJhQ3VzdG9tRmlsdGVyID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIGZpbHRlciBtZXRob2QgYXBwbGllZCB0byBhbGwgcm93cyBpbiB0aGUgdGFibGUuXHJcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZvciBlYWNoIHJvdyBhbmQgc2hvdWxkIHJldHVybiB0cnVlIHRvIGluY2x1ZGUgdGhlIHJvdywgZmFsc2UgdG8gZXhjbHVkZSBpdC5cclxuICAgKiBBcHBsaWVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGFibGUgZGF0YSBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdyAtIFRoZSBkYXRhIHJvdyB0byBldmFsdWF0ZVxyXG4gICAqIEByZXR1cm5zIHRydWUgdG8gaW5jbHVkZSB0aGUgcm93IGluIHRoZSB0YWJsZSwgZmFsc2UgdG8gZXhjbHVkZSBpdFxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyBPbmx5IHNob3cgYWN0aXZlIHVzZXJzXHJcbiAgICogW2luaXRGaWx0ZXJNZXRob2RdPVwiKHJvdykgPT4gcm93LmlzQWN0aXZlID09PSB0cnVlXCJcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gU2hvdyB1c2VycyB3aXRoIHF1YW50aXR5IGdyZWF0ZXIgdGhhbiAxMFxyXG4gICAqIFtpbml0RmlsdGVyTWV0aG9kXT1cIihyb3cpID0+IHJvdy5xdWFudGl0eSA+IDEwXCJcclxuICAgKi9cclxuICBpbml0RmlsdGVyTWV0aG9kID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigpO1xyXG5cclxuICAvKipcclxuICAgKiBJbW11dGFibGUgRGF0YSBQYXR0ZXJuIC0gT3B0aW1pemVkIHZlcnNpb24gd2l0aCBJRCBjbGVhbnVwXHJcbiAgICovXHJcbiAgZGF0YSA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIHNldE5ld0RhdGFXaXRob3V0UmVmcmVzaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbG9hZERhdGEgPSBvdXRwdXQ8U3RNYXRlcmlhbFRhYmxlTG9hZERhdGE+KCk7XHJcblxyXG4gIHNhdmVFZGl0ZWRSb3cgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzYXZlQ3JlYXRlZFJvdyA9IG91dHB1dDxhbnk+KCk7XHJcblxyXG4gIHJvd0RlbGV0ZWQgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzZWxlY3RSb3dDaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGZpZWxkIHZhbHVlIGNoYW5nZXMgYW5kIGF1dG9TYXZlT25DaGFuZ2UgaXMgZW5hYmxlZC5cclxuICAgKiBQYXJlbnQgc2hvdWxkIHVwZGF0ZSB0aGVpciBkYXRhIGltbWVkaWF0ZWx5LlxyXG4gICAqL1xyXG4gIGZpZWxkVmFsdWVDaGFuZ2VkID0gb3V0cHV0PHtcclxuICAgIHJvdzogYW55O1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBpbmRleDogbnVtYmVyO1xyXG4gIH0+KCk7XHJcblxyXG4gIHByaXZhdGUgX2RhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGluaXRMb2NhbENvbHVtbnMgPSBzaWduYWw8U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG4gIGV4cGFuZGVkUm93SW5kZXggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNyZWF0aW5nUm93ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmcpLmxlbmd0aCA+IDApO1xyXG5cclxuICBjb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnNTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHRhYmxlU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuXHJcbiAgaW5pdEZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICBpbml0R2xvYmFsU2VhcmNoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgc2hvd1RhYmxlID0gdHJ1ZTtcclxuXHJcbiAgYWN0aXZlUm93c0VkaXRpbmc6IHsgW3Jvd0lkOiBzdHJpbmddOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSB9ID0ge307XHJcbiAgYWN0aXZlUm93c0NyZWF0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICAvLyBUcmFjayB2YWxpZGF0aW9uIGVycm9yczogeyByb3dJZDogeyBmaWVsZE5hbWU6IGVycm9yTWVzc2FnZSB9IH1cclxuICB2YWxpZGF0aW9uRXJyb3JzOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VEYXRhOiBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBTdFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zOiBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0RGlhbG9nU2VydmljZTogU3REaWFsb2dTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIC8vIEVmZmVjdCB0byBoYW5kbGUgZGF0YSBjaGFuZ2VzXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBpbnB1dERhdGEgPSB0aGlzLmRhdGEoKTtcclxuICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlKGlucHV0RGF0YSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBFZmZlY3QgdG8gcmVhcHBseSBmaWx0ZXIgd2hlbiBpbml0RmlsdGVyTWV0aG9kIGNoYW5nZXNcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIC8vIFRyYWNrIHRoZSBmaWx0ZXIgbWV0aG9kIHRvIHRyaWdnZXIgZWZmZWN0IG9uIGNoYW5nZVxyXG4gICAgICB0aGlzLmluaXRGaWx0ZXJNZXRob2QoKTtcclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UgJiYgIXRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZmlsdGVyIHByZWRpY2F0ZSB0byB1c2UgdGhlIG5ldyBmaWx0ZXIgbWV0aG9kXHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKTtcclxuICAgICAgICAvLyBUcmlnZ2VyIGZpbHRlciByZWFwcGxpY2F0aW9uIGJ5IHNldHRpbmcgZmlsdGVyIHN0cmluZyBhZ2FpblxyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlLmZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMudGFibGVTb3VyY2UuZmlsdGVyO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gY3VycmVudEZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcclxuICAgIHRoaXMubG9hZExvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIHRoaXMudmFsaWRhdGVBbmRVcGRhdGVGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0SW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLnNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICB0dXJuT25BbGxFZGl0Um93cygpIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjYXB0aW9uRGF0YUNoYW5nZWQoZXZlbnQ6IElDYXB0aW9uRGF0YUNoYW5nZWQpIHtcclxuICAgIGNvbnN0IGxvYWRMYXp5RGF0YSA9XHJcbiAgICAgIGV2ZW50Lmdsb2JhbFNlYXJjaCAhPT0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCB8fFxyXG4gICAgICBKU09OLnN0cmluZ2lmeShldmVudC5maWx0ZXJzKSAhPT1cclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyk7XHJcblxyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAuLi5ldmVudCxcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICBwYWdlSW5kZXg6IGxvYWRMYXp5RGF0YSA/IDAgOiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgIHNvcnRGaWVsZDogdGhpcy5zb3J0LmFjdGl2ZSxcclxuICAgICAgc29ydE9yZGVyOiB0aGlzLnNvcnQuZGlyZWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNPcmRlcigpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5zVmlzaWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZENvbHVtbnMoKTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcblxyXG4gICAgaWYgKGxvYWRMYXp5RGF0YSkge1xyXG4gICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlc2V0VGFibGVTZXR0aW5ncygpIHtcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgIHRoaXMuaW5pdEZpbHRlcnMgPSB7fTtcclxuICAgIHRoaXMuaW5pdEdsb2JhbFNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICAgICAgdGhpcy5zZXRJbml0VGFibGUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmV3IHJvdyB0byB0aGUgbG9jYWwgdGFibGUgY29weSBvbmx5LlxyXG4gICAqIFRoZSByb3cgaXMgdHJhY2tlZCBpbiBhY3RpdmVSb3dzQ3JlYXRpbmcgdW50aWwgc2F2ZWQuXHJcbiAgICogV2hlbiBzYXZlZCwgdGhlIHBhcmVudCByZWNlaXZlcyB0aGUgZXZlbnQgdGhyb3VnaCBzYXZlTmV3Q3JlYXRlZFJvdyBvdXRwdXQuXHJcbiAgICogVGhlIHBhcmVudCBkZWNpZGVzIHdoZXRoZXIgdG8gYWNjZXB0IGFuZCBhZGQgdG8gdGhlaXIgZGF0YSBhcnJheS5cclxuICAgKi9cclxuICBhZGROZXdSb3coKSB7XHJcbiAgICAvLyBDcmVhdGUgbmV3IHJvdyB3aXRoIGdlbmVyYXRlZCBJRCBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uXHJcbiAgICBjb25zdCBuZXdSb3c6IGFueSA9IHtcclxuICAgICAgaWQ6IFN0QmFzZVNlcnZpY2UuZ2VuZXJhdGVHVUlEKCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgZmllbGRzIHdpdGggbnVsbC9kZWZhdWx0IHZhbHVlc1xyXG4gICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pXHJcbiAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgbmV3Um93W2NvbC5maWVsZF0gPSBudWxsO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgdG8gbG9jYWwgdGFibGUgY29weSBvbmx5XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhLCBuZXdSb3ddO1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbbmV3Um93LmlkXSA9IHsgLi4ubmV3Um93IH07XHJcblxyXG4gICAgLy8gTmF2aWdhdGUgdG8gbGFzdCBwYWdlIHRvIHNob3cgdGhlIG5ldyByb3dcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5sYXN0UGFnZSgpO1xyXG4gICAgfSwgMTAwKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIHRoaXMuc3REaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5zaG93Q29uZmlybWF0aW9uKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcm93PycpXHJcbiAgICAgIC5waXBlKGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICAgIGRhdGEgPT4gZGF0YS5pZCAhPT0gcm93LmlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJvd0RlbGV0ZWQuZW1pdCh7IHJvdywgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhdmVzIGEgcm93IChlaXRoZXIgbmV3IG9yIGVkaXRlZCkuXHJcbiAgICogRW1pdHMgdGhlIHZhbGlkYXRlZCByb3cgdG8gdGhlIHBhcmVudCB0aHJvdWdoIGVpdGhlcjpcclxuICAgKiAtIHNhdmVOZXdDcmVhdGVkUm93OiBmb3IgbmV3bHkgY3JlYXRlZCByb3dzXHJcbiAgICogLSBzYXZlTmV3Um93OiBmb3IgZWRpdGVkIGV4aXN0aW5nIHJvd3NcclxuICAgKlxyXG4gICAqIFRoZSBwYXJlbnQgaXMgcmVzcG9uc2libGUgZm9yOlxyXG4gICAqIC0gUGVyc2lzdGluZyB0aGUgY2hhbmdlIChlLmcuLCBBUEkgY2FsbClcclxuICAgKiAtIFVwZGF0aW5nIHRoZWlyIGRhdGEgYXJyYXlcclxuICAgKiAtIEhhbmRsaW5nIGVycm9ycy9yZWplY3Rpb25zXHJcbiAgICpcclxuICAgKiBUaGUgbGlicmFyeSB1cGRhdGVzIGl0cyBsb2NhbCBjb3B5IG9wdGltaXN0aWNhbGx5LlxyXG4gICAqL1xyXG4gIHNhdmVFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICBjb25zdCBpc0NyZWF0aW5nVGhpc1JvdyA9ICEhdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIGNvbnN0IHJvd0RhdGEgPSBpc0NyZWF0aW5nVGhpc1Jvd1xyXG4gICAgICA/IHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF1cclxuICAgICAgOiB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgcm93XHJcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVSb3cocm93RGF0YSwgcm93KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRW1pdCB0byBwYXJlbnRcclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICB0aGlzLnNhdmVDcmVhdGVkUm93LmVtaXQoeyAuLi5yb3dEYXRhIH0pO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZUVkaXRlZFJvdy5lbWl0KHsgcm93OiB7IC4uLnJvd0RhdGEgfSwgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgIHRoaXMudXBkYXRlUm93SW5EYXRhU291cmNlKGFic29sdXRlSW5kZXgsIHJvdywgcm93RGF0YSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcm93IGlzIGJlaW5nIGNyZWF0ZWRcclxuICAgIGNvbnN0IGlzQ3JlYXRpbmdUaGlzUm93ID0gISF0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG5cclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICAvLyBSZW1vdmUgZnJvbSBsb2NhbCB0YWJsZSBjb3B5XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgZGF0YSA9PiBkYXRhLmlkICE9PSByb3cuaWRcclxuICAgICAgKTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIHZhbGlkYXRpb24gZXJyb3JzIGZvciB0aGlzIHJvd1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3cuaWRdKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBpbW1lZGlhdGUgZmllbGQgdmFsdWUgY2hhbmdlcyBmb3IgYXV0by1zYXZlIG1vZGUuXHJcbiAgICogSW4gYXV0by1zYXZlIG1vZGUsIG5nTW9kZWwgaXMgYm91bmQgZGlyZWN0bHkgdG8gcm93RGF0YSwgc28gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQuXHJcbiAgICogV2Ugb25seSBlbWl0IHRvIHBhcmVudCBzbyB0aGV5IGNhbiB1cGRhdGUgdGhlaXIgZGF0YSBjb3B5LlxyXG4gICAqL1xyXG4gIG9uRmllbGRWYWx1ZUNoYW5nZWQoXHJcbiAgICByb3c6IGFueSxcclxuICAgIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLFxyXG4gICAgdmFsdWU6IGFueSxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2Fic29sdXRlSW5kZXhdW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuXHJcbiAgICAvLyBWYWxpZGF0ZSB0aGUgZmllbGQgaWYgYXV0b1NhdmVPbkNoYW5nZSBpcyBlbmFibGVkXHJcbiAgICBpZiAodGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgLy8gVXNlIHZhbGlkYXRlUm93IHdpdGggc2luZ2xlIGNvbHVtbiB0byB2YWxpZGF0ZSBqdXN0IHRoaXMgZmllbGRcclxuICAgICAgdGhpcy52YWxpZGF0ZVJvdyhyb3csIHJvdywgY29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbWl0IHRvIHBhcmVudCBpbW1lZGlhdGVseVxyXG4gICAgLy8gVGhlIHJvdyBvYmplY3QgaXMgYWxyZWFkeSB1cGRhdGVkIGJ5IG5nTW9kZWwgYmluZGluZ1xyXG4gICAgdGhpcy5maWVsZFZhbHVlQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgcm93OiB7IC4uLnJvdyB9LFxyXG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgIGluZGV4OiBhYnNvbHV0ZUluZGV4LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVSb3dzKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGFJZCA9IGE/LmlkID8/IGE7XHJcbiAgICBjb25zdCBiSWQgPSBiPy5pZCA/PyBiO1xyXG4gICAgcmV0dXJuIGFJZCA9PT0gYklkID8gMCA6IDE7XHJcbiAgfVxyXG5cclxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5zb21lKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpID09PSAwKTtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCkubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgY29uc3QgbnVtUm93cyA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd3MoZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQoWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnVwZGF0ZShzZWxlY3RlZCA9PlxyXG4gICAgICBzZWxlY3RlZC5maWx0ZXIociA9PiB0aGlzLmNvbXBhcmVSb3dzKHIsIHJvdykgIT09IDApXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cygpKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRSb3cocm93KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvd0NoYW5nZWQodmFsdWU6IGJvb2xlYW4sIHJvdzogYW55KSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0Um93T25seU9uZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KFtyb3ddKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93cy51cGRhdGUoc2VsZWN0ZWQgPT4gWy4uLnNlbGVjdGVkLCByb3ddKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MudXBkYXRlKHNlbGVjdGVkID0+XHJcbiAgICAgICAgc2VsZWN0ZWQuZmlsdGVyKHIgPT4gdGhpcy5jb21wYXJlUm93cyhyLCByb3cpICE9PSAwKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tSb3dBY3Rpb24ocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3dJbmRleCgpID09PSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRSb3dJbmRleC5zZXQobnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvd0luZGV4LnNldChpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5hbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzUm93U2VsZWN0ZWQocm93KTtcclxuICAgICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2VkKCFpc1NlbGVjdGVkLCByb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMucm93Q2xpY2tBY3Rpb24oKSkge1xyXG4gICAgICAgIHRoaXMucm93Q2xpY2tBY3Rpb24oKSEocm93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWJzb2x1dGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yXHJcbiAgICAgICAgPyB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSArIGluZGV4XHJcbiAgICAgICAgOiBpbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc0ZpbHRlclJvd0VkaXRUeXBlcygpIHtcclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0gJ2FjdGlvbnMnICYmICFjb2x1bW4udHlwZSkge1xyXG4gICAgICAgIGNvbHVtbi50eXBlID0gJ2FjdGlvbnMnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWNvbHVtbi5maWx0ZXJUeXBlICYmIGNvbHVtbi5maWx0ZXIpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2N1c3RvbS10ZW1wbGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmFsbG93RWRpdFJvdygpICYmICFjb2x1bW4ucm93RWRpdFR5cGUpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnZGF0ZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2N1c3RvbS10ZW1wbGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdjdXN0b20nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2Jvb2xlYW4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDdXN0b21GaWx0ZXJGb3JMb2NhbFRhYmxlKCkge1xyXG4gICAgbGV0IGZpbHRlckZ1bmN0aW9uID0gKGRhdGE6IGFueSwgZmlsdGVyOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybXM6IHtcclxuICAgICAgICBbY29sdW1uOiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXI7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHN0R2xvYmFsU2VhcmNoOiBzdHJpbmc7XHJcbiAgICAgIH0gPSBKU09OLnBhcnNlKGZpbHRlcik7XHJcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zS2V5cyA9IE9iamVjdC5rZXlzKHNlYXJjaFRlcm1zKTtcclxuICAgICAgbGV0IHNlYXJjaE9rID0gdHJ1ZTtcclxuICAgICAgbGV0IHNlYXJjaE9rR2xvYmFsID0gdHJ1ZTtcclxuXHJcbiAgICAgIHNlYXJjaFRlcm1zS2V5cy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGtleSAhPT0gJ3N0R2xvYmFsU2VhcmNoJyAmJlxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcuaW5jbHVkZXMoa2V5KSAmJlxyXG4gICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VhcmNoVGVybXNba2V5XS52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUZyb206IHN0cmluZyB8IG51bGwgPSAoXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSBhcyBbc3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbF1cclxuICAgICAgICAgICAgKVswXTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRvOiBzdHJpbmcgfCBudWxsID0gKFxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdXHJcbiAgICAgICAgICAgIClbMV07XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0ZUZyb20gfHwgZGF0ZVRvKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG1wQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0ga2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRtcENvbHVtbiAmJiB0bXBDb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlRnJvbVZhbHVlID0gZGF0ZUZyb20gPyBuZXcgRGF0ZShkYXRlRnJvbSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRvVmFsdWUgPSBkYXRlVG9cclxuICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGRhdGVUbykuc2V0RGF0ZShuZXcgRGF0ZShkYXRlVG8pLmdldERhdGUoKSArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgRGF0ZShkYXRhW2tleV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRlRnJvbVZhbHVlICYmIGRhdGVUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID1cclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YSA+PSBkYXRlRnJvbVZhbHVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhIDw9IGRhdGVUb1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRlRnJvbVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID0gc2VhcmNoT2sgJiYgdGFibGVEYXRhID49IGRhdGVGcm9tVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGVUb1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaE9rID0gc2VhcmNoT2sgJiYgdGFibGVEYXRhIDw9IGRhdGVUb1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgZGF0YVtrZXldICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSAhPT0gbnVsbFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgICAgKHNlYXJjaFRlcm1zW2tleV0ubWF0Y2hNb2RlID09PSAnZXF1YWwnXHJcbiAgICAgICAgICAgICAgICAgID8gZGF0YVtrZXldID09PSBzZWFyY2hUZXJtc1trZXldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIDogZGF0YVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICkgIT09IC0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHNlYXJjaE9rR2xvYmFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGFbY29sXSkge1xyXG4gICAgICAgICAgICBzZWFyY2hPa0dsb2JhbCA9XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgfHxcclxuICAgICAgICAgICAgICBkYXRhW2NvbF1cclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1zLnN0R2xvYmFsU2VhcmNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSAhPT0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWx0ZXIgbWV0aG9kIGlmIHByb3ZpZGVkXHJcbiAgICAgIGxldCBjdXN0b21GaWx0ZXJPayA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLmluaXRGaWx0ZXJNZXRob2QoKSkge1xyXG4gICAgICAgIGN1c3RvbUZpbHRlck9rID0gdGhpcy5pbml0RmlsdGVyTWV0aG9kKCkhKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VhcmNoT2sgJiYgc2VhcmNoT2tHbG9iYWwgJiYgY3VzdG9tRmlsdGVyT2s7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbHRlckZ1bmN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0TGF6eUxvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgIGNvbnN0IGxvYWREYXRhUmVxdWVzdDogU3RNYXRlcmlhbFRhYmxlTG9hZERhdGEgPSB7XHJcbiAgICAgICAgZmlyc3Q6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlckNvbHVtbnM6IHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgICBzb3J0RmllbGQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc29ydE9yZGVyOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyLFxyXG4gICAgICAgIGZpbHRlcnM6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5sb2FkRGF0YS5lbWl0KGxvYWREYXRhUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlciA9IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyxcclxuICAgICAgICBzdEdsb2JhbFNlYXJjaDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSEsXHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5sb2NhbFN0b3JhZ2VEYXRhKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbml0VGFibGUoKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcblxyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQgJiYgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcikge1xyXG4gICAgICBjb25zdCBkaXNhYmxlQ2xlYXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyIH0pO1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7XHJcbiAgICAgICAgaWQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIsXHJcbiAgICAgICAgZGlzYWJsZUNsZWFyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcoKSEpIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YSxcclxuICAgICAgICAgIHNvcnRGaWVsZDogcmVzLmFjdGl2ZSxcclxuICAgICAgICAgIHNvcnRPcmRlcjogcmVzLmRpcmVjdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLFxyXG4gICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICB0eXBlOiBjb2wudHlwZSA/IGNvbC50eXBlIDogJ3N0cmluZycsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zT3JkZXIoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uc1Zpc2libGUoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zT3JkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5jb2x1bW5zT3JkZXIpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXJcclxuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbikpXHJcbiAgICAgICAgICAubWFwKGNvbHVtbiA9PiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBjb2x1bW4pISksXHJcbiAgICAgICAgLi4udGhpcy5jb2x1bW5zLmZpbHRlcihcclxuICAgICAgICAgIGNvbHVtbiA9PiAhdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlci5pbmNsdWRlcyhjb2x1bW4uZmllbGQpXHJcbiAgICAgICAgKSxcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc1Zpc2libGUoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5zZWxlY3RlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICB2aXNpYmxlOlxyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5maWVsZCkgfHxcclxuICAgICAgICAgICAgIXRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXIuaW5jbHVkZXMoY29sLmZpZWxkKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XHJcbiAgICAgIHJldHVybiBjb2wudmlzaWJsZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTG9jYWxTdG9yYWdlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBjb25zdCBsb2NhbFN0b3JhZ2VEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhKTtcclxuXHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2VEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VEYXRhKTtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzID0gdGhpcy52YWxpZE9sZEZpbHRlcnNUb05ld0Zvcm1hdChcclxuICAgICAgICAvLyAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICAvLyB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5pbml0RmlsdGVycyA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRHbG9iYWxTZWFyY2ggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkT2xkRmlsdGVyc1RvTmV3Rm9ybWF0KG9sZEZpbHRlcnM6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB8IHN0cmluZztcclxuICB9KTogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSB7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2xkRmlsdGVycyk7XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICBpZiAodHlwZW9mIG9sZEZpbHRlcnNba2V5XSA9PT0gJ29iamVjdCcgJiYgb2xkRmlsdGVyc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyc1trZXldID0gb2xkRmlsdGVyc1trZXldIGFzIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXHJcbiAgICAgIHBhZ2VJbmRleDogMCxcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IGNvbC5maWVsZCksXHJcbiAgICAgIGdsb2JhbFNlYXJjaDogJycsXHJcbiAgICAgIGNvbHVtbnNPcmRlcjogdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiBjb2wuZmllbGQpLFxyXG4gICAgICBmaWx0ZXJzOiB7fSxcclxuICAgICAgc29ydEZpZWxkOiAnJyxcclxuICAgICAgc29ydE9yZGVyOiAnYXNjJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpc0ZpcnN0RWRpdGFibGVDb2x1bW4oY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpOiBib29sZWFuIHtcclxuICAgIC8vIEdldCBhbGwgZWRpdGFibGUgY29sdW1ucyBpbiBvcmRlclxyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbiAmJiBjb2wudmlzaWJsZVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBlZGl0YWJsZSBjb2x1bW5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVkaXRhYmxlQ29sdW1ucy5sZW5ndGggPiAwICYmIGVkaXRhYmxlQ29sdW1uc1swXS5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvdyhcclxuICAgIHJvd0RhdGE6IGFueSxcclxuICAgIG9yaWdpbmFsUm93OiBhbnksXHJcbiAgICBzaW5nbGVDb2x1bW4/OiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxcclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnNvbGUubG9nKCd2YWxpZFJvdycpO1xyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gc2luZ2xlQ29sdW1uXHJcbiAgICAgID8gW3NpbmdsZUNvbHVtbl1cclxuICAgICAgOiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKTtcclxuICAgIGNvbnN0IHJvd0lkID0gb3JpZ2luYWxSb3cuaWQ7XHJcblxyXG4gICAgLy8gRm9yIHNpbmdsZSBmaWVsZCB2YWxpZGF0aW9uLCBwcmVzZXJ2ZSBleGlzdGluZyBlcnJvcnMgZm9yIG90aGVyIGZpZWxkc1xyXG4gICAgbGV0IGVycm9yczogeyBbZmllbGQ6IHN0cmluZ106IHN0cmluZyB9ID0gc2luZ2xlQ29sdW1uXHJcbiAgICAgID8geyAuLi50aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdIH1cclxuICAgICAgOiB7fTtcclxuXHJcbiAgICAvLyBDbGVhciBhbGwgZXJyb3JzIGlmIHZhbGlkYXRpbmcgZW50aXJlIHJvd1xyXG4gICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgdGhpcy52YWxpZGF0aW9uRXJyb3JzW3Jvd0lkXSkge1xyXG4gICAgICBlcnJvcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgICBsZXQgZmlyc3RFcnJvck1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBlZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgbGV0IGZpZWxkSGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICAgICAgaWYgKGNvbC5jdXN0b21FZGl0Um93VmFsaWRhdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sLmN1c3RvbUVkaXRSb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0sXHJcbiAgICAgICAgICBvcmlnaW5hbFJvd1tjb2wuZmllbGRdLFxyXG4gICAgICAgICAgb3JpZ2luYWxSb3dcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgIGVycm9yc1tjb2wuZmllbGRdID0gcmVzdWx0LmVycm9yTWVzc2FnZTtcclxuICAgICAgICAgIGZpZWxkSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWZpZWxkSGFzRXJyb3IgJiYgY29sLmVkaXRDb2x1bW5SZXF1aXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAnJykge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7Y29sLmhlYWRlcn0gaXMgcmVxdWlyZWRgO1xyXG4gICAgICAgICAgZXJyb3JzW2NvbC5maWVsZF0gPSBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICBmaWVsZEhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhciBlcnJvciBmb3IgdGhpcyBmaWVsZCBpZiB2YWxpZGF0aW9uIHBhc3NlZFxyXG4gICAgICBpZiAoIWZpZWxkSGFzRXJyb3IgJiYgc2luZ2xlQ29sdW1uKSB7XHJcbiAgICAgICAgZGVsZXRlIGVycm9yc1tjb2wuZmllbGRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDYXB0dXJlIGZpcnN0IGVycm9yIGZvciBzbmFja2JhciAob25seSB3aGVuIHZhbGlkYXRpbmcgZW50aXJlIHJvdylcclxuICAgICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgZmllbGRIYXNFcnJvciAmJiAhZmlyc3RFcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICBmaXJzdEVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIGVycm9yc1xyXG4gICAgaWYgKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcnMpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnNbcm93SWRdID0gZXJyb3JzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHRoaXMudmFsaWRhdGlvbkVycm9yc1tyb3dJZF07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2hvdyBzbmFja2JhciBvbmx5IHdoZW4gdmFsaWRhdGluZyBlbnRpcmUgcm93IChvbiBzYXZlKVxyXG4gICAgaWYgKCFzaW5nbGVDb2x1bW4gJiYgaGFzRXJyb3JzICYmIGZpcnN0RXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgIHRoaXMuc25hY2tiYXIuZXJyb3IoZmlyc3RFcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICByZXR1cm4gIWhhc0Vycm9ycztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUm93SW5EYXRhU291cmNlKGluZGV4OiBudW1iZXIsIHJvdzogYW55LCByb3dEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy50YWJsZVNvdXJjZS5kYXRhLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5yb3cgfTtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgICAuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlZFJvd1tjb2wuZmllbGRdID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRSb3c7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy5zZXQoWy4uLnRoaXMuaW5pdENvbHVtbnMoKV0pO1xyXG5cclxuICAgIC8vIEFkZCBzcGVjaWFsIGNvbHVtbnNcclxuICAgIHRoaXMuYWRkU2VsZWN0Q29sdW1uSWZOZWVkZWQoKTtcclxuICAgIHRoaXMuYWRkRWRpdENvbHVtbklmTmVlZGVkKCk7XHJcbiAgICB0aGlzLmFkZEV4dGVuZENvbHVtbklmTmVlZGVkKCk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zRmlsdGVyUm93RWRpdFR5cGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFNlbGVjdENvbHVtbklmTmVlZGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LXNlbGVjdGluZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkudW5zaGlmdCh7XHJcbiAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgdHlwZTogJ2FjdGlvbnMtcm93LXNlbGVjdGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzYwcHgnLFxyXG4gICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dTZWxlY3RDb2x1bW5MYWJlbCxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmluaXRTZWxlY3RlZFJvdygpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChbLi4udGhpcy5pbml0U2VsZWN0ZWRSb3coKV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFZGl0Q29sdW1uSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWxsb3dFZGl0Um93KCkgfHwgdGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVDb2x1bW5CeVR5cGUoJ2FjdGlvbnMtcm93LWVkaXRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRpbmdDb2x1bW46IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsID0ge1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWVkaXRpbmcnLFxyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogJzExMHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93QWN0aW9uc0NvbHVtbkxhYmVsLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKGNvbHVtbnMgPT4ge1xyXG4gICAgICBjb25zdCBsYXN0Q29sdW1uID0gY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdO1xyXG4gICAgICBpZiAobGFzdENvbHVtbj8udHlwZSAhPT0gJ2FjdGlvbnMnKSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5jb2x1bW5zLCBlZGl0aW5nQ29sdW1uXTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICBuZXdDb2x1bW5zLnNwbGljZShuZXdDb2x1bW5zLmxlbmd0aCAtIDEsIDAsIGVkaXRpbmdDb2x1bW4pO1xyXG4gICAgICByZXR1cm4gbmV3Q29sdW1ucztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFeHRlbmRDb2x1bW5JZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ29sdW1uQnlUeXBlKCdhY3Rpb25zLXJvdy1leHRlbmRpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1leHRlbmRpbmcnLFxyXG4gICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgd2lkdGg6ICc2MHB4JyxcclxuICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93RXh0ZW5kQ29sdW1uTGFiZWwsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ29sdW1uQnlUeXBlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnVwZGF0ZShjb2x1bW5zID0+XHJcbiAgICAgIGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgIT09IHR5cGUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUFuZFVwZGF0ZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5pbml0RmlsdGVycyk7XHJcbiAgICBpZiAoZmlsdGVyS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmlsdGVyS2V5cykge1xyXG4gICAgICBjb25zdCBjb2wgPSB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5maW5kKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGtleSk7XHJcbiAgICAgIGlmICghY29sKSBjb250aW51ZTtcclxuXHJcbiAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IHtcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0RmlsdGVyVmFsdWUoY29sLCB0aGlzLmluaXRGaWx0ZXJzW2tleV0pLFxyXG4gICAgICAgIG1hdGNoTW9kZTogTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudC5nZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgICAgICAgY29sLmZpbHRlclR5cGUhXHJcbiAgICAgICAgKSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3RmlsdGVycykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuaW5pdEZpbHRlcnMpKSB7XHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSBuZXdGaWx0ZXJzO1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRGaWx0ZXJWYWx1ZShcclxuICAgIGNvbDogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsXHJcbiAgICBmaWx0ZXI6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclxyXG4gICk6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSB7XHJcbiAgICBpZiAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbHRlci5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xyXG4gICAgICByZXR1cm4gZmlsdGVyLnZhbHVlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKVxyXG4gICAgICAgID8gZmlsdGVyLnZhbHVlXHJcbiAgICAgICAgOiBbbnVsbCwgbnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlci52YWx1ZSB8fCAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgZGF0YSBjaGFuZ2VzIGZyb20gdGhlIGlucHV0IHNpZ25hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShkYXRhOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFkYXRhIHx8ICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBkYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgdGhpcy5fZGF0YS5sZW5ndGggPT09IGRhdGEubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMuc2V0TmV3RGF0YVdpdGhvdXRSZWZyZXNoKClcclxuICAgICkge1xyXG4gICAgICBjb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMoZGF0YVswXSkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdpZCcpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIG9iamVjdHMgaW4gcGxhY2UgdG8gcHJlc2VydmUgcmVmZXJlbmNlcyBhbmQgYXZvaWQgbG9zaW5nIGZvY3VzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKChleGlzdGluZ1JvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBvYmplY3RLZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGV4aXN0aW5nUm93W2tleV0gPSBkYXRhW2luZGV4XVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIEZvcmNlIHRhYmxlIHRvIGRldGVjdCBjaGFuZ2VzIHdpdGhvdXQgcmVjcmVhdGluZyByb3dzXHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGFsbCBjaGlsZCByb3cgY2VsbCBjb21wb25lbnRzXHJcbiAgICAgIGlmICh0aGlzLnJvd0NlbGxzKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xyXG4gICAgICAgICAgY2VsbC50cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgZGF0YSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgKGV4Y2x1ZGluZyBJRHMgd2UgbWlnaHQgaGF2ZSBhZGRlZClcclxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSB1cGRhdGVzIHdoZW4gcGFyZW50IHNlbmRzIHRoZSBzYW1lIGRhdGFcclxuICAgICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoID09PSBkYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFXaXRob3V0SWRzID0gZGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRtcCA9IHsgLi4ucm93IH07XHJcbiAgICAgICAgICBkZWxldGUgdG1wLmlkO1xyXG4gICAgICAgICAgcmV0dXJuIHRtcDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0YVdpdGhvdXRJZHMgPSB0aGlzLl9kYXRhLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG1wID0geyAuLi5yb3cgfTtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkYXRhV2l0aG91dElkcykgPT09XHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShjdXJyZW50RGF0YVdpdGhvdXRJZHMpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5IHRvIGF2b2lkIG11dGF0aW5nIHBhcmVudCBkYXRhXHJcbiAgICAgIGxldCBjbG9uZWREYXRhID0gZGF0YS5tYXAocm93ID0+ICh7IC4uLnJvdyB9KSk7XHJcblxyXG4gICAgICAvLyBBZGQgSURzIGlmIG5lZWRlZCAob25seSBvbiB0aGUgY29weSwgb25seSBpZiByb3cgZG9lc24ndCBoYXZlIGFuIGlkKVxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgICBjbG9uZWREYXRhID0gY2xvbmVkRGF0YS5tYXAocm93ID0+IHtcclxuICAgICAgICAgIC8vIE9ubHkgYWRkIGlkIGlmIGl0IGRvZXNuJ3QgZXhpc3QgLSBkb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgSURzXHJcbiAgICAgICAgICBpZiAoIXJvdy5pZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByb3c7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2RhdGEgPSBjbG9uZWREYXRhO1xyXG5cclxuICAgICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBjbG9uZWREYXRhO1xyXG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhIHtcclxuICBmaXJzdDogbnVtYmVyO1xyXG4gIHJvd3M6IG51bWJlcjtcclxuICBnbG9iYWxGaWx0ZXI6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBJQ2FwdGlvbkRhdGFDaGFuZ2VkIHtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIHNvcnRGaWVsZDogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogU29ydERpcmVjdGlvbjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGVcIj5cclxuICBAaWYgKGlzTG9hZGluZygpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImFjY2VudFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoc2hvd1RhYmxlKSB7XHJcbiAgICA8c3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvblxyXG4gICAgICBbdGFibGVUaXRsZV09XCJ0YWJsZVRpdGxlKClcIlxyXG4gICAgICBbYWxsb3dQaWNrQ29sdW1uc109XCJhbGxvd1BpY2tDb2x1bW5zKClcIlxyXG4gICAgICBbc2hvd0dsb2JhbFNlYXJjaF09XCJzaG93R2xvYmFsU2VhcmNoKClcIlxyXG4gICAgICBbYWxsb3dSZW9yZGVyQ29sdW1uc109XCJhbGxvd1Jlb3JkZXJDb2x1bW5zKClcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2luaXRGaWx0ZXJzXT1cImluaXRGaWx0ZXJzXCJcclxuICAgICAgW2luaXRHbG9iYWxTZWFyY2hdPVwiaW5pdEdsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtzaG93Q3JlYXRlQnV0dG9uXT1cInNob3dDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25MYWJlbF09XCJjcmVhdGVCdXR0b25MYWJlbCgpXCJcclxuICAgICAgW2NyZWF0ZUJ1dHRvbkFjdGlvbl09XCJjcmVhdGVCdXR0b25BY3Rpb24oKVwiXHJcbiAgICAgIFthbGxvd0NyZWF0ZVJvd109XCJhbGxvd0NyZWF0ZVJvdygpXCJcclxuICAgICAgW2Rpc2FibGVDcmVhdGVCdXR0b25dPVwiZGlzYWJsZUNyZWF0ZUJ1dHRvbigpXCJcclxuICAgICAgW2V4dHJhQ3VzdG9tRmlsdGVyXT1cImV4dHJhQ3VzdG9tRmlsdGVyKClcIlxyXG4gICAgICBbY3JlYXRpbmdSb3ddPVwiY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgIChjYXB0aW9uRGF0YUNoYW5nZWQpPVwiY2FwdGlvbkRhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAocmVzZXRUYWJsZVNldHRpbmdzKT1cInJlc2V0VGFibGVTZXR0aW5ncygpXCJcclxuICAgICAgKGFkZE5ld1Jvdyk9XCJhZGROZXdSb3coKVwiXHJcbiAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uPlxyXG4gIH1cclxuXHJcbiAgPHRhYmxlXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICduby1ob3Zlcic6ICFyb3dDbGlja0FjdGlvbigpLFxyXG4gICAgICAnaXMtZXhwZW5kZWQtdGFibGUnOiBhbGxvd0V4dGVuZFJvdygpXHJcbiAgICB9XCJcclxuICAgIG1hdC10YWJsZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgbWF0U29ydFxyXG4gICAgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJhbGxvd0V4dGVuZFJvdygpXCJcclxuICA+XHJcbiAgICBAZm9yIChjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zOyB0cmFjayBjb2x1bW4pIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5maWVsZFwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICBtYXQtc29ydC1oZWFkZXJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29sdW1uLnNvcnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnICYmICFzZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRSb3dzKCkubGVuZ3RoID4gMCAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkUm93cygpLmxlbmd0aCA+IDAgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChcclxuICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyAmJiBzaG93RWRpdEFsbFJvd3MoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWVuZCBlZGl0LWFsbC1yb3dzLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInR1cm5PbkFsbEVkaXRSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXQgYWxsIHJvd3NcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0X2Fycm93X2Rvd248L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGluZGV4OyBsZXQgaiA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3QtbWF0ZXJpYWwtdGFibGUtcm93LWNlbGxcclxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICBbcm93RGF0YV09XCJlbGVtZW50XCJcclxuICAgICAgICAgICAgW3Jvd0luZGV4XT1cImdldEFic29sdXRlSW5kZXgoYWxsb3dFeHRlbmRSb3coKSA/IGogOiBpKVwiXHJcbiAgICAgICAgICAgIFtyb3dEYXRhQ29weV09XCJcclxuICAgICAgICAgICAgICBhY3RpdmVSb3dzRWRpdGluZ1tlbGVtZW50LmlkXSB8fCBhY3RpdmVSb3dzQ3JlYXRpbmdbZWxlbWVudC5pZF1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3Jvd0VkaXRpbmddPVwiXHJcbiAgICAgICAgICAgICAgISFhY3RpdmVSb3dzRWRpdGluZ1tlbGVtZW50LmlkXSB8fFxyXG4gICAgICAgICAgICAgICEhYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3dJc1NlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICBbcm93SXNFeHBhbmRlZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IChhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXCJcclxuICAgICAgICAgICAgW2NhbkVkaXRSb3dWYWxpZGF0b3JdPVwiY2FuRWRpdFJvd1ZhbGlkYXRvcigpXCJcclxuICAgICAgICAgICAgW2NhbkRlbGV0ZVJvd1ZhbGlkYXRvcl09XCJjYW5EZWxldGVSb3dWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgICAgIFtzZWxlY3RSb3dPbmx5T25lXT1cInNlbGVjdFJvd09ubHlPbmUoKVwiXHJcbiAgICAgICAgICAgIFtpc0ZpcnN0RWRpdGFibGVDb2x1bW5dPVwiaXNGaXJzdEVkaXRhYmxlQ29sdW1uKGNvbHVtbilcIlxyXG4gICAgICAgICAgICBbYXV0b1NhdmVPbkNoYW5nZV09XCJhdXRvU2F2ZU9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICBbYWxsb3dFZGl0SW5FZGl0Um93XT1cImFsbG93RWRpdEluRWRpdFJvdygpXCJcclxuICAgICAgICAgICAgW2FsbG93RGVsZXRlSW5FZGl0Um93XT1cImFsbG93RGVsZXRlSW5FZGl0Um93KClcIlxyXG4gICAgICAgICAgICBbZmllbGRFcnJvcl09XCJ2YWxpZGF0aW9uRXJyb3JzW2VsZW1lbnQuaWRdPy5bY29sdW1uLmZpZWxkXVwiXHJcbiAgICAgICAgICAgIChlZGl0Um93RW1pdHRlcik9XCJlZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoZGVsZXRlUm93RW1pdHRlcik9XCJcclxuICAgICAgICAgICAgICBkZWxldGVSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChzYXZlRWRpdFJvd0VtaXR0ZXIpPVwiXHJcbiAgICAgICAgICAgICAgc2F2ZUVkaXRSb3coZWxlbWVudCwgY29sdW1uLCBhbGxvd0V4dGVuZFJvdygpID8gaiA6IGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIChjYW5jZWxFZGl0Um93RW1pdHRlcik9XCJjYW5jZWxFZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoc2VsZWN0Um93Q2hhbmdlKT1cInNlbGVjdFJvd0NoYW5nZWQoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIChmaWVsZFZhbHVlQ2hhbmdlZCk9XCJcclxuICAgICAgICAgICAgICBvbkZpZWxkVmFsdWVDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNvbHVtbixcclxuICAgICAgICAgICAgICAgICRldmVudC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGFsbG93RXh0ZW5kUm93KCkgPyBqIDogaVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID48L3N0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cclxuICAgICAgPHRkXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnNTdHJpbmcubGVuZ3RoXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWwtd3JhcHBlclwiXHJcbiAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJleHBhbmRlZFJvd0luZGV4KCkgPT09IGkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmRlZC1lbGVtZW50LWRldGFpbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSgpIVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogZWxlbWVudCB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNlbGVjdGVkQ29sdW1uc1N0cmluZ1wiPjwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgbWF0LXJvd1xyXG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOyBsZXQgaSA9IGRhdGFJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5leHBhbmRlZC1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3dJbmRleCgpID09PSBpXCJcclxuICAgICAgKGNsaWNrKT1cImNsaWNrUm93QWN0aW9uKHJvdywgaSlcIlxyXG4gICAgPjwvdHI+XHJcbiAgICBAaWYgKGFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgPHRyXHJcbiAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIlxyXG4gICAgICAgIGNsYXNzPVwiZXh0ZW5kZWQtZGV0YWlsLXJvd1wiXHJcbiAgICAgID48L3RyPlxyXG4gICAgfVxyXG4gIDwvdGFibGU+XHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzUsIDEwLCAxNSwgMjAsIDI1XVwiXHJcbiAgICBbbGVuZ3RoXT1cImRhdGFMZW5ndGgoKVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuICA8c3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93c1xyXG4gICAgW2FsbG93U2VsZWN0Um93XT1cImFsbG93U2VsZWN0Um93KClcIlxyXG4gICAgW3NlbGVjdFJvd09ubHlPbmVdPVwic2VsZWN0Um93T25seU9uZSgpXCJcclxuICAgIFtzZWxlY3RlZFJvd3NdPVwic2VsZWN0ZWRSb3dzKClcIlxyXG4gICAgW3NlbGVjdGlvbkZpZWxkTGFiZWxdPVwic2VsZWN0aW9uRmllbGRMYWJlbCgpXCJcclxuICAgIFtzZWxlY3RSb3dWYWx1ZURpc3BsYXldPVwic2VsZWN0Um93VmFsdWVEaXNwbGF5KClcIlxyXG4gICAgKHJlbW92ZVNlbGVjdGVkUm93KT1cIm9uUmVtb3ZlU2VsZWN0ZWRSb3coJGV2ZW50KVwiXHJcbiAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93cz5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1626,6 +1626,7 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
1626
1626
  return (editableColumns.length > 0 && editableColumns[0].field === column.field);
1627
1627
  }
1628
1628
  validateRow(rowData, originalRow, singleColumn) {
1629
+ console.log('validRow');
1629
1630
  const editableColumns = singleColumn
1630
1631
  ? [singleColumn]
1631
1632
  : this.columns.filter(col => col.allowEditColumn);
@@ -1672,6 +1673,7 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
1672
1673
  }
1673
1674
  // Update validation errors
1674
1675
  if (Object.keys(errors).length > 0) {
1676
+ console.log(errors);
1675
1677
  this.validationErrors[rowId] = errors;
1676
1678
  }
1677
1679
  else {
@@ -1847,12 +1849,18 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
1847
1849
  }
1848
1850
  // Create shallow copy to avoid mutating parent data
1849
1851
  let clonedData = data.map(row => ({ ...row }));
1850
- // Add IDs if needed (only on the copy)
1852
+ // Add IDs if needed (only on the copy, only if row doesn't have an id)
1851
1853
  if (this.allowEditRow() || this.allowSelectRow()) {
1852
- clonedData = clonedData.map(row => ({
1853
- ...row,
1854
- id: row.id || StBaseService.generateGUID(),
1855
- }));
1854
+ clonedData = clonedData.map(row => {
1855
+ // Only add id if it doesn't exist - don't overwrite existing IDs
1856
+ if (!row.id) {
1857
+ return {
1858
+ ...row,
1859
+ id: StBaseService.generateGUID(),
1860
+ };
1861
+ }
1862
+ return row;
1863
+ });
1856
1864
  }
1857
1865
  this._data = clonedData;
1858
1866
  if (this.tableSource) {