@esfaenza/es-table 11.2.77 → 11.2.80

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.
Files changed (32) hide show
  1. package/bundles/esfaenza-es-table.umd.js +82 -15
  2. package/bundles/esfaenza-es-table.umd.js.map +1 -1
  3. package/bundles/esfaenza-es-table.umd.min.js +1 -1
  4. package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
  5. package/esfaenza-es-table.metadata.json +1 -1
  6. package/esm2015/lib/components/es-table/es_table.component.js +33 -7
  7. package/esm2015/lib/core/CopyPasteDetector.js +5 -1
  8. package/esm2015/lib/core/handlers/ColumnMetadataHandler.js +2 -1
  9. package/esm2015/lib/core/handlers/ReportModeHandler.js +10 -1
  10. package/esm2015/lib/core/handlers/SelectionHandler.js +12 -8
  11. package/esm2015/lib/directives/es_td_editor.directive.js +2 -1
  12. package/esm2015/lib/domain/externals/EsTableColumnsDefinition.js +4 -1
  13. package/esm2015/lib/domain/externals/appsearch/AppSearch.js +18 -1
  14. package/esm2015/lib/domain/internals/EsTableColumn.js +2 -1
  15. package/esm2015/lib/domain/internals/GroupPager.js +4 -3
  16. package/esm2015/lib/domain/internals/TdElement.js +1 -1
  17. package/esm2015/lib/domain/internals/ThElement.js +1 -1
  18. package/fesm2015/esfaenza-es-table.js +82 -15
  19. package/fesm2015/esfaenza-es-table.js.map +1 -1
  20. package/lib/components/es-table/es_table.component.d.ts +20 -11
  21. package/lib/core/CopyPasteDetector.d.ts +4 -0
  22. package/lib/core/handlers/ColumnMetadataHandler.d.ts +1 -0
  23. package/lib/core/handlers/ReportModeHandler.d.ts +9 -0
  24. package/lib/core/handlers/SelectionHandler.d.ts +6 -1
  25. package/lib/directives/es_td_editor.directive.d.ts +1 -0
  26. package/lib/domain/externals/EsTableColumnsDefinition.d.ts +1 -0
  27. package/lib/domain/externals/appsearch/AppSearch.d.ts +10 -0
  28. package/lib/domain/internals/EsTableColumn.d.ts +1 -0
  29. package/lib/domain/internals/GroupPager.d.ts +3 -2
  30. package/lib/domain/internals/TdElement.d.ts +1 -0
  31. package/lib/domain/internals/ThElement.d.ts +5 -0
  32. package/package.json +1 -1
@@ -60,6 +60,7 @@ export class SelectionHandler {
60
60
  this.fillSelectionStatusByEsThs(items[i], ths);
61
61
  }
62
62
  }
63
+ /** @ignore */
63
64
  fillSelectionStatusByDynamicColumns(item, dyn) {
64
65
  for (let k = 0; k < dyn.length; k++) {
65
66
  let th = dyn[k];
@@ -637,15 +638,17 @@ export class SelectionHandler {
637
638
  * @param {any} event Evento Javascript di Click
638
639
  * @param {number} row Indice della riga. Non è l'indice vero e proprio ma è l'ordinale (.ordinal) dell'oggetto bindato su quella riga
639
640
  * @param {number} column Indice della colonna preso banalmente dall'ngIf sui thElement
641
+ * @param {{ row: number, column: number }} firstSelectionOverride Permette di overridare il primo elemento selezionato
640
642
  */
641
- singleCellSelection(event, row, column) {
643
+ singleCellSelection(event, row, column, firstSelectionOverride) {
644
+ var first = firstSelectionOverride || this.lastSingleSelection;
642
645
  this.clearTextSelection(event);
643
- if (event.shiftKey && this.est.ShiftClick && this.lastSingleSelection) {
646
+ if (event.shiftKey && this.est.ShiftClick && first) {
644
647
  this.clearSelectionStatus({ row, column });
645
- let rowAddition = row < this.lastSingleSelection.row ? -1 : +1;
646
- let columnAddition = column < this.lastSingleSelection.column ? -1 : +1;
647
- for (let ir = this.lastSingleSelection.row; ir != row + rowAddition; ir += rowAddition)
648
- for (let ic = this.lastSingleSelection.column; ic != column + columnAddition; ic += columnAddition)
648
+ let rowAddition = row < first.row ? -1 : +1;
649
+ let columnAddition = column < first.column ? -1 : +1;
650
+ for (let ir = first.row; ir != row + rowAddition; ir += rowAddition)
651
+ for (let ic = first.column; ic != column + columnAddition; ic += columnAddition)
649
652
  this.est.selectionStatus[ir][ic].selected = true;
650
653
  this.lastSingleSelection = { row, column };
651
654
  }
@@ -738,9 +741,10 @@ export class SelectionHandler {
738
741
  case 'boolean':
739
742
  case 'enum':
740
743
  case 'autocomplete':
744
+ return valType.value;
741
745
  case 'float':
742
746
  case 'currency':
743
- return valType.value;
747
+ return parseFloat(valType.value).toLocaleString(this.est.locale);
744
748
  case 'date':
745
749
  return dayjs(valType.value).format(this.est.lc.token("getSmallDateDisplayFormat"));
746
750
  case 'datetime':
@@ -750,4 +754,4 @@ export class SelectionHandler {
750
754
  }
751
755
  }
752
756
  }
753
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9TZWxlY3Rpb25IYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW9CbkUscURBQXFEO0FBQ3JELE1BQU0sT0FBTyxnQkFBZ0I7SUF1QnpCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTZCO1FBQTVELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUF0QmhGLCtIQUErSDtRQUN2SCxlQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsaUlBQWlJO1FBQ3pILGdCQUFXLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUlBQXFJO1FBQzdILG9CQUFlLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsMklBQTJJO1FBQ25JLDBCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTVELGlJQUFpSTtRQUN6SCxpQkFBWSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELG1JQUFtSTtRQUMzSCxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELHVJQUF1STtRQUMvSCxzQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCw2SUFBNkk7UUFDckksNEJBQXVCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNbUIsQ0FBQztJQUVyRixzQ0FBc0M7SUFDL0Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxD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QUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7WUFDdkYsS0FBSyxVQUFVO2dCQUNYLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUN0RixLQUFLLE1BQU07Z0JBQ1AsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQXBwU2VhcmNoIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0FwcFNlYXJjaFwiO1xyXG5pbXBvcnQgeyBJdGVtc1NlbGVjdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9JdGVtc1NlbGVjdGlvblwiO1xyXG5pbXBvcnQgeyBDYWNoZVRyaXB0aWMgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9DYWNoZVRyaXB0aWNcIjtcclxuaW1wb3J0IHsgSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZSB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0l0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VcIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uXCI7XHJcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uLy4uL2RvbWFpbi90eXBlcyc7XHJcblxyXG4vLyBDb21wb25lbnRpXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLy8gRGlyZXR0aXZlIFxyXG5pbXBvcnQgeyBFc1RoRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlXCI7XHJcblxyXG4vLyBIYW5kbGVyc1xyXG5pbXBvcnQgeyBSb3dHcm91cGluZ0hhbmRsZXIgfSBmcm9tIFwiLi9Sb3dHcm91cGluZ0hhbmRsZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBEaWNoaWFyYXppb25lIGRlbGxhIHZhcmlhYmlsZSBnbG9iYWxlIGRheWpzLiBMJ29uZXJlIGRpIFwiY3JlYXJsYVwiIMOoIGFmZmlkYXRvIGFsbCdhcHBsaWNhemlvbmUgY2hlIHV0aWxpenphIHF1ZXN0YSBsaWJyZXJpYSwgXHJcbiAqIGNoZSBkb3Zyw6AgaW1wb3J0YXJlIGxvIHNjcmlwdCBnbG9iYWxlIGRpIGRheWpzIG5lbGxhIENMSVxyXG4gKi9cclxuIGRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBnZXN0aXNjZSBsZSBzZWxlemlvbmkgZGVnbGkgb2dnZXR0aSAqL1xyXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqaXRlbXMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2gqL1xyXG4gICAgcHJpdmF0ZSBpdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCAqL1xyXG4gICAgcHJpdmF0ZSBleGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cF9leGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKippdGVtcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlKi9cclxuICAgIHByaXZhdGUgaV9pdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UgKi9cclxuICAgIHByaXZhdGUgaV9ncm91cHNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmV4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwX2V4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogVWx0aW1hIGNlbGxhIHNlbGV6aW9uYXRhIHNpbmdvbGFybWVudGUgKi9cclxuICAgIHByaXZhdGUgbGFzdFNpbmdsZVNlbGVjdGlvbjogeyByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgcmdIYW5kbGVyOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKiBSaXB1bGlzY2UgbGUgY2FjaGUgZGkgc2VsZXppb25lICovXHJcbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb25DYWNoZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pX2l0ZW1zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZ3JvdXBzQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHF1YWxpIGVsZW1lbnRpIGRldm9ubyBlc3NlcmUgbWFyY2F0aSBjb21lIHNlbGV6aW9uYXRpIG5lbGxhIHZpc3RhIGF0dHVhbGUuIFNpIGJhc2Egc3VsbCdvZ2dldHRvICoqc2VsZWN0aW9uKiogaW50ZXJubyBhbGwnQXBwU2VhcmNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkaSBjdWkgdmFsdXRhcmUgbGEgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0aSBkaSBzZWxlemlvbmUgZGVyaXZhbnRlIGRhbGxhIHZpZXcgbyBkYWxsJ29nZ2V0dG8gcGVyIEFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVNlbGVjdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbkl0ZW0pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25FdmFsdWF0aW9uKGl0ZW1zLCBzZWxlY3Rpb25JdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZWNvbXBpbGEgbGUgaW5mb3JtYXppb25pIHN1bGxvIHN0YXRvIGRpIHNlbGV6aW9uZSB0dXR0byBhIGZhbHNlIHBlciBsZSBjZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgYXR0dWFsbWVudGUgYmluZGF0aSBzdWxsYSB0YWJlbGxhXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgc3UgY3VpIGdsaSBvZ2dldHRpIHNvbm8gYmluZGF0aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVTaW5nbGVDZWxsU2VsZWN0aW9uKGl0ZW1zOiBhbnlbXSwgdGhzOiBFc1RoRGlyZWN0aXZlW10sIGR5bjogRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uW10pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIGl0ZW1zW2ldLl9vcmRpbmFsIGRvdnJlYmJlIGVzc2VyZSB1Z3VhbGUgYSBcImlcIiBtYSBkYXRvIGNoZSBsYXRvIEhUTUwgaWwgY2ljbG8gw6ggZXN0ZXJubyBlIG5vbiBobyBsJ2luZGljZSBwZXIgY29udmVuemlvbmUgbWkgYmFzbyBzdWxsJ19vcmRpbmFsXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tpdGVtc1tpXS5fb3JkaW5hbF0gPSB7fTtcclxuICAgICAgICAgICAgaWYgKGR5biAmJiBkeW4ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsbFNlbGVjdGlvblN0YXR1c0J5RHluYW1pY0NvbHVtbnMoaXRlbXNbaV0sIGR5bik7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsbFNlbGVjdGlvblN0YXR1c0J5RXNUaHMoaXRlbXNbaV0sIHRocyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJpdmF0ZSBmaWxsU2VsZWN0aW9uU3RhdHVzQnlEeW5hbWljQ29sdW1ucyhpdGVtOiBhbnksIGR5bjogRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uW10pe1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZHluLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IGR5bltrXTtcclxuICAgICAgICAgICAgbGV0IGlwZXI6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgPSB7IHNlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IHRoLlByb3BlcnR5TmFtZSA/IGl0ZW1bdGguUHJvcGVydHlOYW1lXSA6IFwiVW5kZWZpbmVkIFByb3BlcnR5XCIsIHR5cGU6IHRoLlByb3BlcnR5VHlwZSwgcHJvcGVydHk6IHRoLlByb3BlcnR5TmFtZSwgaGVhZGVyOiB0aC5Qcm9wZXJ0eU5hbWUsIGl0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdW2tdID0gaXBlcjtcclxuXHJcbiAgICAgICAgICAgIC8vIEZ1bnppb25lIGFzc2VnbmF0YSBkb3BvIGluIG1vZG8gZGEgcG90ZXJsZSBmYXJlIGFuY2hlIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCByaWZlcmltZW50byBhbGwnb2dnZXR0byBkaSBzZWxlemlvbmVcclxuICAgICAgICAgICAgaXBlci52YWxfc2V0dGVyID0gKHZhbHVlOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aC5Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW3RoLlByb3BlcnR5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpcGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWxUb0FwcGx5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGguUHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvY29tcGxldGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmxvYXRcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15ZGF0ZSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IGAke215ZGF0ZS5ob3VyKCl9OiR7bXlkYXRlLm1pbnV0ZSgpfToke215ZGF0ZS5zZWNvbmQoKX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbVt0aC5Qcm9wZXJ0eU5hbWVdID0gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgICAgIGlwZXIudmFsdWUgPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZmlsbFNlbGVjdGlvblN0YXR1c0J5RXNUaHMoaXRlbTogYW55LCB0aHM6IEVzVGhEaXJlY3RpdmVbXSkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1trXTtcclxuICAgICAgICAgICAgbGV0IGlwZXI6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgPSB7IHNlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IHRoLnRoUHJvcGVydHkgPyBpdGVtW3RoLnRoUHJvcGVydHldIDogXCJVbmRlZmluZWQgUHJvcGVydHlcIiwgdHlwZTogdGgudGhUeXBlLCBwcm9wZXJ0eTogdGgudGhQcm9wZXJ0eSwgaGVhZGVyOiB0aC50aCwgaXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbF1ba10gPSBpcGVyO1xyXG5cclxuICAgICAgICAgICAgLy8gRnVuemlvbmUgYXNzZWduYXRhIGRvcG8gaW4gbW9kbyBkYSBwb3RlcmxlIGZhcmUgYW5jaGUgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIHJpZmVyaW1lbnRvIGFsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICBpcGVyLnZhbF9zZXR0ZXIgPSAodmFsdWU6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoLnRoUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW3RoLnRoUHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsVG9BcHBseSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoLnRoVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImludFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYXV0b2NvbXBsZXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZsb2F0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB0aGlzLmVzdC5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteWRhdGUgPSB0aGlzLmVzdC5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSBgJHtteWRhdGUuaG91cigpfToke215ZGF0ZS5taW51dGUoKX06JHtteWRhdGUuc2Vjb25kKCl9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW1bdGgudGhQcm9wZXJ0eV0gPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF6aW9uZSBhZ25vc3RpY2EgZGVsbGEgdmFsdXRhemlvbmUgZGVsbGUgc2VsZXppb25pIGRlZ2xpIG9nZ2V0dGkuIFJpY2hpZWRlIGdsaSBvZ2dldHRpIGRlbGxhIHZpc3RhIGF0dHVhbGUgZSBsJ2l0ZW1TZWxlY3RvclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0byBjb250ZW5lbnRlIGxvIHN0YXRvIGF0dHVhbGUgZGkgc2VsZXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uRXZhbHVhdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBpdG0uX2hhc2g7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBpdG0uX2dyb3VwID8gbnVsbCA6IHRoaXMuZ2V0SXRlbUdyb3VwKGl0bSk7XHJcbiAgICAgICAgICAgIC8vIFJlaWRyYXRvIGxhIGNhY2hlIGRpIHNlbGV6aW9uZSBjb2kgbnVvdmkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiByaXVzY2lyZWkgYSBiZWNjYXJlIGdsaSBpbmRpY2kgZ2l1c3RpXHJcbiAgICAgICAgICAgIC8vIERvcG9kaWNow6kgbGEgdXNvIHBlciBjYWxjb2xhcmUgaXN0YW50YW5lYW1lbnRlIHNlIGdsaSBvZ2dldHRpIHNvbm8gc2VsZXppb25hdGkgbyBub1xyXG4gICAgICAgICAgICB0aGlzLnJlaGlkcmF0ZUNhY2hlKGl0bSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRtLl9pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5hbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKCghdGhpcy5ncm91cHNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkgJiYgdGhpcy5pdGVtc0NhY2hlLmhhcyhoYXNoKSkgfHwgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpIHx8IHRoaXMuaXRlbXNDYWNoZS5oYXMoaGFzaCkgfHwgKHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtR3JvdXApID09ICdpbmNsdWRlZCcgJiYgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0bS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmFsbClcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiB0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRtKSAhPSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSB0aGlzLmdyb3Vwc0NhY2hlLmhhcyhoYXNoKSB8fCAodGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0bSkgPT0gJ2luY2x1ZGVkJyAmJiAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgdHV0dGkgZ2xpIG9nZ2V0dGkgZGkgcXVlc3RhIHBhZ2luYSBzb25vIHNvbGV6aW9uYXRpIGFsbG9yYSBwb3NzbyBtZXR0ZXJlIGlsIGdsb2JhbCBjaGVjayBhIHRydWVcclxuICAgICAgICAvLyBTZSBzb25vIGluIHNpdHVhemlvbmUgZGkgYWxsLXNlbGVjdCBhbmNoZSBtZXR0byBsYSBnbG9iYWwgY2hlY2tib3gsIG5vbm9zdGFudGUgY2kgcG9zc2FubyBlc3NlcmUgZGVsbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENoZWNrID0gdGhpcy5lc3QuYm91bmRTb3VyY2UubGVuZ3RoID4gMCAmJiB0aGlzLmVzdC5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiB0Ll9ncm91cCB8fCB0Ll9pdGVtKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKTtcclxuICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBzZWxlY3Rpb25JdGVtLmNvdW50ID4gMCAmJiB0aGlzLmVzdC5TZWxlY3RBbGwgJiYgIXRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUG90cmViYmUgY2FtYmlhcmUgcXVhbG9yYSBxdWFsY3VubyBpbnNlcmlzc2UgZGF0aSBhIG1hbmF6emEgaW4gbW9kYWxpdMOgIEFycmF5IGUgZGVzc2UgaWwgcmVmcmVzaCBtYW51YWxlIGFsbGEgdGFiZWxsYVxyXG4gICAgICAgIC8vIENvbXVucXVlIGNvc3RhIDAgcXVpbmRpIG1pIHBlcm1ldHRvIGRpIHJlZnJlc2hhcmVcclxuICAgICAgICBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2U2VsZWN0ZWQgPSB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHM7XHJcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgIT0gcHJldlNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3Qub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biBvZ2dldHRvIHRyb3ZhIGxhIGNlbGxhIGRpIGNhY2hlIGluIGN1aSDDqCByZWdpc3RyYXRvIGUgYWdnaW9ybmEgaWwgY29udGVudXRvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gZGEgYWdnaW9ybmFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlaGlkcmF0ZUNhY2hlKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGxldCBjdHggPSBpdGVtLl9oYXNoO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzQ2FjaGUuc2V0KGN0eCwgaXRlbSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5leGNsdXNpb25zQ2FjaGUuc2V0KGN0eCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIGdydXBwbyBjb250cm9sbGEgcmljb3JzaXZhbWVudGUgbCdhbGJlcm8gZGkgY3VpIGZhIHBhcnRlIHNlIGMnw6ggc3RhdGEgdW5hIGluY2x1c2lvbmUgbyBlc2NsdXNpb25lIGRpcmV0dGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdycCBHcnVwcG8gZGEgY29udHJvbGxhcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgeydub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnfSBcclxuICAgICAqICdub25lJyBzZSBub24gY2kgc29ubyBpbmZvcm1hemlvbmkgc3UgaW5jbHVzaW9uaSBvIGVzY2x1c2lvbmkgXHJcbiAgICAgKiAnaW5jbHVkZWQnIHNlIGlsIGdydXBwbyBjb250cm9sbGF0byDDqCBzdGF0byBpbmNsdXNvIGluIG1hbmllcmEgZXNwbGljaXRhIGRhbGwnYWxiZXJvIGRlaSBncnVwcGkgcGFkcmlcclxuICAgICAqICdleGNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGVzY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcmVudFRyZWVTdGF0dXMoZ3JwOiBhbnkpOiAnbm9uZScgfCAnZXhjbHVkZWQnIHwgJ2luY2x1ZGVkJyB7XHJcbiAgICAgICAgaWYgKCFncnApXHJcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnRHcm91cDogYW55ID0gdGhpcy5yZ0hhbmRsZXIucmdHcm91cENhY2hlLmdldChncnAuX3BhcmVudCk7XHJcblxyXG4gICAgICAgIGlmICghcGFyZW50R3JvdXApXHJcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2V4Y2x1ZGVkJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKHBhcmVudEdyb3VwLl9oYXNoKSlcclxuICAgICAgICAgICAgcmV0dXJuICdpbmNsdWRlZCc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFRyZWVTdGF0dXMocGFyZW50R3JvdXApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZ2VzdGlyZSBsYSBzZWxlemlvbmUgZGkgTiBlbGVtZW50aSB1dGlsaXp6YW5kbyBsYSBDYWNoZSBkaSBzZWxlemlvbmUgZWQgZXZlbnR1YWxtZW50ZSBhZ2dpb3JuYW5kbyBpbCBjb25jZXR0byBkaSBcImFsbCBzZWxlY3Rpb25cIlxyXG4gICAgICpcclxuICAgICAqIFZ1bnppb25hIHNpYSBpbiBtb2RhbGl0w6AgQXJyYXkgY2hlIGluIG1vZGFsaXTDoCBWaWV3IFNlbXBsaWNlIG8gVmlldyBBdmFuemF0YSAoY29uIGxlIEN1c3RvbSBDZWxscylcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWwgVmFsb3JlIGZvcnphdG8gZGkgY2hlY2sgZGEgYXNzZWduYXJlIGFnbGkgb2dnZXR0aVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWxDaGVjayBWYWxvcmUgZGVsIGNoZWNrIGdsb2JhbGVcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7SXRlbXNTZWxlY3Rpb248YW55Pn0gT2dnZXR0byBkaSBzZWxlemlvbmUgYWdnaW9ybmF0byBjb24gbGUgaW5mb3JtYXppb25pIHN1bGwndWx0aW1hIG9wZXJhemlvbmUgZWZmZXR0dWF0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlSXRlbXNTZWxlY3Rpb24oaXRlbXM6IGFueVtdLCBmb3JjZWRWYWw6IGJvb2xlYW4gPSBudWxsLCBnbG9iYWxDaGVjazogYm9vbGVhbiA9IG51bGwpOiBJdGVtc1NlbGVjdGlvbjxhbnk+IHtcclxuICAgICAgICBsZXQgc2kgPSAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pik/LnNlbGVjdGlvbiB8fCB0aGlzLmVzdC5hcnJheW1vZGVTZWxlY3Rpb247XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBzaW5nb2xhIGUgZGV2byBzZWxlemlvbmFyZSB1bidvZ2dldHRvLCBwZXIgcHJpbWEgY29zYSBkZXZvIGRlc2VsZXppb25hcmUgdHV0dGkgZ2xpIGFsdHJpXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbiAmJiBpdGVtc1swXT8uX3NlbGVjdGVkICYmICFpdGVtc1swXT8uX2dyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAxICYmIGZvcmNlZFZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUZW50YXRpdm8gZGkgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlIHBpw7kgZGkgdW4gZWxlbWVudG8gY29uIFNpbmdsZVNlbGVjdGlvbiBhdHRpdm9cIjtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMSAmJiBmb3JjZWRWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2kgPSB0aGlzLmhhbmRsZUl0ZW1zU2VsZWN0aW9uKHRoaXMuZXN0LmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9ncm91cCksIGZhbHNlLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zWzBdLl9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IHRvQ2hhbmdlID0gZm9yY2VkVmFsICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSBmb3JjZWRWYWwgOiBnbG9iYWxDaGVjayAhPSBudWxsID8gaXRlbS5fc2VsZWN0ZWQgIT0gdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGRldidlc3NlcmUgb3ZlcnJpZGF0byBpbCB2YWxvcmUgZGkgY2hlY2sgZWZmZXR0dW8gbCdvdmVycmlkZSBvIGNvbCB2YWxvcmUgZm9yemF0byBvIGNvbCB2YWxvcmUgZ2xvYmFsZVxyXG4gICAgICAgICAgICBpZiAodG9DaGFuZ2UgJiYgIWl0ZW0ubG9ja2VkKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGZvcmNlZFZhbCA6IHRoaXMuZXN0Lmdsb2JhbENoZWNrO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaWwgdmFsb3JlIG5vbiBkZXYnZXNzZXJlIHZhcmlhdG8gZSB2ZW5nbyBkYSB1bmEgc2VsZXppb25lIGdsb2JhbGUgc2VtcGxpY2VtZW50ZSBldml0byBkaSBlZmZldHR1YXJlIG9wZXJhaXpvbmkgaW51dGlsaS4gTCdpdGVtL2dydXBwbyDDqCBnacOgIG5lbGxvIHN0YXRvIGdpdXN0b1xyXG4gICAgICAgICAgICBpZiAoIXRvQ2hhbmdlICYmIGdsb2JhbENoZWNrICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhbGxTZWxlY3Rpb24gPSBzaS5hbGw7XHJcbiAgICAgICAgICAgIGxldCBpc0dyb3VwID0gaXRlbS5fZ3JvdXA7XHJcbiAgICAgICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IGl0ZW0uX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbUdyb3VwID0gbnVsbCwgYWxsSXRlbXMgPSBudWxsLCBzZWxlY3RlZEl0ZW1zID0gbnVsbCwgdW5zZWxlY3RlZEl0ZW1zID0gbnVsbCwgYWxsR3JvdXBzID0gbnVsbCwgc2VsZWN0ZWRHcm91cHMgPSBudWxsLCB1bnNlbGVjdGVkR3JvdXBzID0gbnVsbCwgcGFyZW50R3JvdXBTZWxlY3RlZCA9IG51bGwsIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHB0cyA9IHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwU2VsZWN0ZWQgPSBwdHMgPT0gJ2luY2x1ZGVkJztcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IHB0cyA9PSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgYWxsSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sIG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgJ3NlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAndW5zZWxlY3RlZCcsIHRydWUsIGFsbEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIGFsbEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3NlbGVjdGVkJywgdHJ1ZSwgYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgICAgIHVuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Hcm91cCA9IHRoaXMuZ2V0SXRlbUdyb3VwKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6IGl0ZW1Hcm91cC5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFVuc2VsZWN0ZWQgPSBpdGVtR3JvdXAgPT0gbnVsbCA/IG51bGwgOiAhaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVzdC5BcnJheUdyb3VwaW5nKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2VsZWN0aW9uT3BlcmF0aW9ucyhzaSwgaXRlbSwgYWxsU2VsZWN0aW9uLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtcywgc2VsZWN0ZWRHcm91cHMsIHVuc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEdyb3VwcywgYWxsSXRlbXMsIGFsbEdyb3VwcywgcGFyZW50R3JvdXBTZWxlY3RlZCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2ltcGxlU2VsZWN0aW9uT3BlcmF0aW9ucyhzaSwgaXRlbSwgaXNHcm91cCwgaXNTZWxlY3Rpb24sIGl0ZW1Hcm91cCwgc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zLCBhbGxJdGVtcywgYWxsR3JvdXBzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEltcG9zdG8gaWwgY2hlY2sgZ2xvYmFsZSBpbiBiYXNlIGEgc2UgdHV0dGkgZ2xpIGVsZW1lbnRpIHNvbm8gc2VsZXppb25hdGkgbyBtZW5vLlxyXG4gICAgICAgIC8vIEV2aXRvIGRpIGZhcmUgcXVlc3RlIG9wZXJhemlvbmkgc2UgbGEgc2VsZXppb25lIGRlcml2YSBwcm9wcmlvIGRhbCBnbG9iYWwgQ2hlY2tcclxuICAgICAgICBpZiAoZ2xvYmFsQ2hlY2sgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSAhdGhpcy5lc3QuYm91bmRTb3VyY2Uuc29tZSh0ID0+ICF0Ll9zZWxlY3RlZCAmJiAhdC5fc2VwKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzaSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzaTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gTCdvZ2dldHRvIGRpIHNlbGV6aW9uZSwgbCdvZ2dldHRvIGRhIHNlbGV6aW9uYXJlL2Rlc2VsZXppb25hcmUgZSB0dXR0aSBpIHBhcmFtZXRyaSBkZWwgY2FzbyBlZmZldHR1YSBsZSBvcGVyYXppb25pIGNoZSBzZXJ2b25vLlxyXG4gICAgICogXHJcbiAgICAgKiBMb2dpY2Egc2VtcGxpZmljYXRhIHJpc3BldHRvIGFsbCdvcmlnaW5hbGUgKipwZXJmb3JtU2VsZWN0aW9uT3BlcmF0aW9ucyoqIHBlciBsYXZvcmFyZSBpbiB1bmEgbW9kYWxpdMOgIGluIGN1aSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBjYXJpY2F0aSAoKipBcnJheUdyb3VwaW5nKiogPSB0cnVlKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGl0ZW06IGFueSwgZ3JvdXA6IGJvb2xlYW4sIHNlbDogYm9vbGVhbiwgaXRtX2dyb3VwOiBhbnksIHNlbF9pdG06IGFueVtdLCBkZXNlbF9pdG06IGFueVtdLCBhbGxfaXRtczogYW55W10sIGFsbF9ncnBzOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCB0cmlwdGljSXRlbSA9IHRoaXMuZ2V0VHJpcHRpYygnaXRlbScsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IHRydWU7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlc2VsX2l0bSlcclxuICAgICAgICAgICAgICAgICAgICBkZXNlbF9pdG0uZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMuYWRkSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IGZhbHNlOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbF9pdG0uZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdG1fZ3JvdXAgJiYgYWxsX2l0bXMgJiYgYWxsX2l0bXMuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChpdG1fZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdG1fZ3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtX2dyb3VwLl9zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBzZWxlemlvbmFyZSB1biBncnVwcG8gZSwgcmljb3JzaXZhbWVudGUsIHNlIHR1dHRpIGkgZ3J1cHBpIHNvdHRvc3RhbnRpIGFsIHBhcmVudCBzb25vIHNlbGV6aW9uYXRpLCBzZWxlemlvbmFyZSBpIGdydXBwaSBwYWRyaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRhIHNlbGV6aW9uYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2VsZWN0R3JvdXAoZ3JvdXA6IGFueSkge1xyXG4gICAgICAgIGdyb3VwLl9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0R3JvdXBQYXJlbnQoZ3JvdXApO1xyXG4gICAgICAgIGlmIChwYXJlbnQgJiYgdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKG51bGwsIHBhcmVudCwgbnVsbCwgdHJ1ZSkuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0R3JvdXAocGFyZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gTCdvZ2dldHRvIGRpIHNlbGV6aW9uZSwgbCdvZ2dldHRvIGRhIHNlbGV6aW9uYXJlL2Rlc2VsZXppb25hcmUgZSB0dXR0aSBpIHBhcmFtZXRyaSBkZWwgY2FzbyBlZmZldHR1YSBsZSBvcGVyYXppb25pIGNoZSBzZXJ2b25vLlxyXG4gICAgICogXHJcbiAgICAgKiBMYSBsb2dpY2EgZGkgcXVlc3RhIGZ1bnppb25lIMOoIG5hdGEgZXNzZW56aWFsbWVudGUgZGEgc3BhbSBkaSB0cmlhbCAmIGVycm9yIGVkIMOoIHN0YXRhIHRlc3RhdGEgc29sbyBmaW5vIGEgZHVlIGxpdmVsbGkgZGkgcmFnZ3J1cHBhbWVudG8sXHJcbiAgICAgKiBxdWFsc2lhc2kgY29zYSB2YWRhIG9sdHJlIG5vbiDDqCAxMDAlIGRldHRvIGNoZSBmdW56aW9uaS4uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGl0ZW06IGFueSwgYWxsOiBib29sZWFuLCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBzZWxfaXRtOiBhbnlbXSwgc2VsX2dycDogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGRlc2VsX2dycDogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdLCBwYXJlbnRfaW5jbDogYm9vbGVhbiwgcGFyZW50X2V4Y2w6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdHJpcHRpY0dyb3VwID0gdGhpcy5nZXRUcmlwdGljKCdncm91cCcsIGJhc2UpO1xyXG4gICAgICAgIGxldCB0cmlwdGljSXRlbSA9IHRoaXMuZ2V0VHJpcHRpYygnaXRlbScsIGJhc2UpO1xyXG4gICAgICAgIGxldCB0cmlwdGljRXhjbCA9IHRoaXMuZ2V0VHJpcHRpYygnZXhjbHVzaW9uJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNncnBFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdncm91cF9leGNsdXNpb24nLCBiYXNlKTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbGwgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNncnBFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0dyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsX2l0bSkgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxfZ3JwKSBzZWxfZ3JwLmZvckVhY2goZ3IgPT4gdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfZ3JwcykgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY2dycEV4Y2wpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbGwgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNncnBFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0dyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKSBkZXNlbF9pdG0uZm9yRWFjaChlbCA9PiB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNFeGNsKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfZ3JwKSBkZXNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNFeGNsKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2l0bXMpIGFsbF9pdG1zLmZvckVhY2goZWwgPT4geyBlbC5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0dyb3VwKTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmICgocGFyZW50X2V4Y2wgPT0gbnVsbCAmJiBhbGwpIHx8IHBhcmVudF9pbmNsKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljRXhjbCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfZXhjbCB8fCAoIWFsbCAmJiBwYXJlbnRfZXhjbCA9PSBudWxsKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljRXhjbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkuc3BsaWNlKGFycmF5LmluZGV4b2YoaXRlbSksIDEpOyAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYykge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRyaXB0aWMuaW5kZXhfY2FjaGUuZ2V0KGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmluZGV4X2NhY2hlLmRlbGV0ZShpdGVtLl9oYXNoKTtcclxuICAgICAgICAgICAgdHJpcHRpYy5hcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICEhaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkucHVzaChpdGVtKTsgZSBsYSBnZXN0aW9uZSBkZWxsYSAgKi9cclxuICAgIHByaXZhdGUgYWRkSXRlbShpdGVtOiBhbnksIHRyaXB0aWM/OiBDYWNoZVRyaXB0aWMpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgaSA9IHRyaXB0aWMuYXJyYXkucHVzaChpdGVtKSAtIDE7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGl0ZW0pO1xyXG4gICAgICAgICAgICB0cmlwdGljLmluZGV4X2NhY2hlLnNldChpdGVtLl9oYXNoLCBpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIHRyaXR0aWNvIGRpIHNlbGV6aW9uZSwgY2lvw6ggbCdhcnJheSBkZWdsaSBvZ2dldHRpIGNoZSBzaSB2dW9sZSBtYW5pcG9sYXJlIGUgbGUgZHVlIGNhY2hlIGNvbGxlZ2F0ZSBhZCBlc3NvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J2dyb3VwJyB8ICdpdGVtJyB8ICdncm91cF9leGNsdXNpb24nIHwgJ2V4Y2x1c2lvbid9IHN1YmplY3QgT2dnZXR0byBsb2dpY28gZGVzaWRlcmF0byBzdSBjdWkgZWZmZXR0dWFyZSBsZSBvcGVyYXppb25pIHN1Y2Nlc3NpdmVcclxuICAgICAqIEBwYXJhbSB7SXRlbXNTZWxlY3Rpb248YW55Pn0gYmFzZSBTZWxldHRvcmUgZGkgYmFzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Q2FjaGVUcmlwdGljfSBUcml0dGljbyBkaSBzZWxlemlvbmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRUcmlwdGljKHN1YmplY3Q6ICdncm91cCcgfCAnaXRlbScgfCAnZ3JvdXBfZXhjbHVzaW9uJyB8ICdleGNsdXNpb24nLCBiYXNlOiBJdGVtc1NlbGVjdGlvbjxhbnk+KTogQ2FjaGVUcmlwdGljIHtcclxuICAgICAgICBzd2l0Y2ggKHN1YmplY3QpIHtcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5ncm91cHNDYWNoZSwgdGhpcy5pX2dyb3Vwc0NhY2hlLCBiYXNlLmdyb3Vwcyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5pdGVtc0NhY2hlLCB0aGlzLmlfaXRlbXNDYWNoZSwgYmFzZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwX2V4Y2x1c2lvbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZSwgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZSwgYmFzZS5ncm91cF9leGNsdXNpb25zKTtcclxuICAgICAgICAgICAgY2FzZSAnZXhjbHVzaW9uJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVUcmlwdGljKHRoaXMuZXhjbHVzaW9uc0NhY2hlLCB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLCBiYXNlLmV4Y2x1c2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gb2dnZXR0byByZXN0aXR1aXNjZSBpbCBncnVwcG8gZGkgY3VpIGZhIHBhcnRlLCBzZSBlc2lzdGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkaSBjdWkgdHJvdmFyZSBpbCBncnVwcG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRJdGVtR3JvdXAoaXRlbTogYW55KTogYW55IHtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5yZ0hhbmRsZXIucmdHcm91cENhY2hlLmdldChpdGVtLl90aGlzS2V5KVxyXG4gICAgICAgIGlmIChwYXJlbnQpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0YSBsYSBjaGlhdmUgZGkgdW4gZ3J1cHBvIHJlc3RpdHVpc2NlIHR1dHRpIGdsaSBvZ2dldHRpIGNvbiBxdWVsbGEgY2hpYXZlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBDaGlhdmUgZGEgY2VyY2FyZVxyXG4gICAgICogQHBhcmFtIHsnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnfSBzdGF0dXMgU3RhdG8gZGVnbGkgZWxlbWVudGksIHNlbGV6aW9uYXRpIG8gbm9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjdXJzaXZlIEluZGljYSBzZSBjZXJjYXJlIHNvbG8gZ2xpIGVsZW1lbnRpIGRpcmV0dGFtZW50ZSBjb2xsZWdhdGkgbyBzZSBwcmVuZGVyZSBhbmNoZSBxdWVsbGkgZGVpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IE9nZ2V0dGkgZGkgdGlwbyAqKl9pdGVtKiogZmFjZW50aSBjYXBvIGFsbGEgY2hpYXZlICoqZ3JvdXBLZXkqKlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3VwSXRlbXMoc2VsOiBJdGVtc1NlbGVjdGlvbjxhbnk+LCBncm91cDogYW55LCBzdGF0dXM/OiAnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnLCByZWN1cnNpdmU6IGJvb2xlYW4gPSBmYWxzZSwgYWxsYmFzZTogYW55W10gPSBudWxsKTogYW55W10ge1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsYmFzZSlcclxuICAgICAgICAgICAgaXRlbXMgPSBhbGxiYXNlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agcmljb3JzaXZhIHByZW5kbyBnbGkgb2dnZXR0aSBkaSB0dXR0ZSBsZSBjaGlhdmkgc2ltaWxpIGNoZSB0cm92b1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmtleXMoKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmdldChrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmdldChncm91cC5fdGhpc0tleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcih0ID0+ICFzdGF0dXMgfHwgKHQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAnc2VsZWN0ZWQnKSB8fCAoIXQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHRyb3ZvIG5lc3N1biBvZ2dldHRvLCBwZXLDsiBtYWdhcmkgZGkgb2dnZXR0aSBuZSBobyBhbGwnaW50ZXJubyBkZWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lLiBcclxuICAgICAgICAvLyBRdWVzdG8gcHXDsiBlc3NlcmUgdmVybyBzb2xvIHNlIE5PTiBzb25vIGluIG1vZGFsaXTDoCBhcnJheSwgaW4gY2FzbyBjb250cmFyaW8gZ2xpIG9nZ2V0dGkgbGkgZGV2byBwZXIgZm9yemEgYXZlcmUgdHV0dGlcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICE9IDAgfHwgIXNlbCB8fCB0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmV4Y2x1c2lvbnMuZmlsdGVyKHQgPT4gdCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5ID09IGdyb3VwLl90aGlzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSk7XHJcbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09ICdzZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLml0ZW1zLmZpbHRlcih0ID0+IHQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc0tleSA9PSBncm91cC5fdGhpc0tleSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgZ2xpIG9nZ2V0dGkgY29uIHF1ZWxsYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIEdydXBwbyBkaSBjdWkgY2VyY2FyZSBpbCBwYXJlbnRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2FueX0gT2dnZXR0byBkaSB0aXBvICoqX2dyb3VwKiogcmFwcHJlc2VudGFudGUgaWwgcGFyZW50IGRlbCAqKmdyb3VwKiogYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3VwUGFyZW50KGdyb3VwOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdyb3VwLl9wYXJlbnQpXHJcbiAgICAgICAgaWYgKHBhcmVudClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgaSBncnVwcGkgZmlnbGlcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwIEdydXBwbyBjaGUgcmFwcHJlc2VudGEgaWwgcGFkcmUgZGkgY3VpIGNlcmNhcmUgaSBmaWdsaVxyXG4gICAgICogQHBhcmFtIHsnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnfSBzdGF0dXMgU3RhdG8gZGVpIGdydXBwaSwgc2VsZXppb25hdGkgbyBub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgSW5kaWNhIHNlIGNlcmNhcmUgc29sbyBpIGdydXBwaSBkaXJldHRhbWVudGUgY29sbGVnYXRpIG8gc2UgcHJlbmRlcmUgYW5jaGUgcXVlbGxpIGRlaSBncnVwcGkgZmlnbGlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2FueVtdfSBPZ2dldHRpIGRpIHRpcG8gKipfZ3JvdXAqKiBmYWNlbnRpIGNhcG8gYWxsYSBjaGlhdmUgKipncm91cEtleSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBDaGlsZEdyb3VwcyhzZWw6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGdyb3VwOiBhbnksIHN0YXR1cz86ICdzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlLCBhbGxiYXNlOiBhbnlbXSA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdGhpc0dyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdyb3VwLl90aGlzS2V5KTtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGFsbGJhc2UpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gYWxsYmFzZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gbW9kYWxpdMOgIHJpY29yc2l2YSBwcmVuZG8gZ2xpIG9nZ2V0dGkgZGkgdHV0dGUgbGUgY2hpYXZpIHNpbWlsaSBjaGUgdHJvdm9cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiB0aGlzLnJnSGFuZGxlci5yZ0NoaWxkR3JvdXBzQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5yZ0hhbmRsZXIucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMucmdIYW5kbGVyLnJnQ2hpbGRHcm91cHNDYWNoZS5nZXQoZ3JvdXAuX3RoaXNLZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIodCA9PiAhc3RhdHVzIHx8ICh0Ll9zZWxlY3RlZCAmJiBzdGF0dXMgPT0gJ3NlbGVjdGVkJykgfHwgKCF0Ll9zZWxlY3RlZCAmJiBzdGF0dXMgPT0gJ3Vuc2VsZWN0ZWQnKSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiB0cm92byBuZXNzdW4gb2dnZXR0bywgcGVyw7IgbWFnYXJpIGRpIG9nZ2V0dGkgbmUgaG8gYWxsJ2ludGVybm8gZGVsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT0gMCB8fCAhc2VsKVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gJ3Vuc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICBpdGVtcyA9IHNlbC5ncm91cF9leGNsdXNpb25zLmZpbHRlcigodDogYW55KSA9PiB0ICE9IG51bGwgJiYgKFxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc1JvdXRlLmxlbmd0aCA9PSB0aGlzR3JvdXAuX3RoaXNSb3V0ZS5sZW5ndGggKyAxICYmIHQuX3RoaXNSb3V0ZS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmdyb3Vwcy5maWx0ZXIoKHQ6IGFueSkgPT4gdCAhPSBudWxsICYmIChcclxuICAgICAgICAgICAgICAgICghcmVjdXJzaXZlICYmIHQuX3RoaXNSb3V0ZS5sZW5ndGggPT0gdGhpc0dyb3VwLl90aGlzUm91dGUubGVuZ3RoICsgMSAmJiB0Ll90aGlzUm91dGUuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogRmluYWxpenphIGxlIGluZm9ybWF6aW9uaSBkaSBzZWxlemlvbmUgZGVsICoqSXRlbXNTZWxlY3Rpb24qKiBjb3JyZW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtOiBJdGVtc1NlbGVjdGlvbjxhbnk+KSB7XHJcbiAgICAgICAgLy8gRGF0byBjaGUgbGUgZGVsZXRlIHNvbm8gbG9naWNoZSBkYXRvIGNoZSB0ZW5nbyBsYSBjYWNoZSBkZWdsaSBpbmRpY2kgZGV2byByZW5kZXJsZSBmaXNpY2hlXHJcbiAgICAgICAgbGV0IHRtcEdycCA9IFtdLCB0bXBJdGVtcyA9IFtdLCB0bXBFeGNsID0gW10sIHRtcEdycEV4Y2wgPSBbXTtcclxuICAgICAgICBsZXQgZ3JwUmVtb3ZlZCA9IGZhbHNlLCBpdGVtc1JlbW92ZWQgPSBmYWxzZSwgZXhjbFJlbW92ZWQgPSBmYWxzZSwgZ3JwRXhjbFJlbW92ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLml0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5pdGVtc1tpXSAhPSBudWxsKSB0bXBJdGVtcy5wdXNoKHNlbGVjdGlvbkl0ZW0uaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGl0ZW1zUmVtb3ZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zW2ldICE9IG51bGwpIHRtcEV4Y2wucHVzaChzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGV4Y2xSZW1vdmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gSW4gdmVjY2hpZSB2ZXJzaW9uaSBkZWxsJ0FwcFNlYXJjaCBwZXIgY3VpIG5vbiB2ZW5nb25vIGRlc2VyaWFsaXp6YXRlIHF1ZXN0ZSBpbmZvcm1haXpvbmkgcG90cmViYmVybyBlc3NlcmNpIGNhc2luaVxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmdyb3Vwcykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uZ3JvdXBzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzW2ldICE9IG51bGwpIHRtcEdycC5wdXNoKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzW2ldKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JwUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9uc1tpXSAhPSBudWxsKSB0bXBHcnBFeGNsLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zW2ldKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JwRXhjbFJlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5pdGVtcyA9IHRtcEl0ZW1zO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IHRtcEdycEV4Y2w7XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zID0gdG1wRXhjbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IHRtcEdycDtcclxuXHJcbiAgICAgICAgLy8gTGUgY2FjaGUgZGVnbGkgaW5kaWNpIHBvdHJlYmJlcm8gYXZlcmUgYnVjaGksIHJpc29sdm9cclxuICAgICAgICBpZiAoZ3JwUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2dyb3Vwc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2dyb3Vwc0NhY2hlKTtcclxuICAgICAgICBpZiAoaXRlbXNSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfaXRlbXNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9pdGVtc0NhY2hlKTtcclxuICAgICAgICBpZiAoZXhjbFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZXhjbHVzaW9uc0NhY2hlKTtcclxuICAgICAgICBpZiAoZ3JwRXhjbFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9ncm91cF9leGNsdXNpb25zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlKTtcclxuXHJcbiAgICAgICAgLy8gUG9pIHJpcHJlbmRvIGEgZmFyZSB0dXR0byBpbiBub3JtYWxpdMOgXHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5jb3VudCA9IHRoaXMuZXZhbHVhdGVTZWxlY3RlZCgpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyBmYXR0byBzZWxlemlvbmUgXCJhbGxcIiBtYSBwb2kgbWkgc29ubyBtZXNzbyBhIHRvZ2xpZXJlIHR1dHRpIGdsaSBlbGVtZW50aSBmaW5vIGEgcmltYW5lcm5lIDAgcmVzZXR0byBsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uY291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZS5mb3JFYWNoKHQgPT4gdC5fc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUmlwdWxpc2NvIGxhIGNhY2hlIGFsdHJpbWVudGkgbWkgcmltYW5lIHBpZW5hIGRpIHR1dHRlIGxlIGVzY2x1c2lvbmlcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgbGEgcG9zc2liaWxpdMOgIGRpIGZhcmUgXCJTZWxlemlvbmEgdHV0dG9cIiDDqCBhYmlsaXRhdGEgYWxsb3JhIGxhIGNvbnNpZGVybyBhcHBlbmEgbWkgdmllbmUgc2VsZXppb25hdG8gcXVhbGNvc2FcclxuICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBzZWxlY3Rpb25JdGVtLmNvdW50ID4gMCAmJiB0aGlzLmVzdC5TZWxlY3RBbGwgJiYgIXRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29tcGF0dGEgdW5hIGNhY2hlIGRpIGluZGljaSAqL1xyXG4gICAgcHJpdmF0ZSBjb21wYWN0SW5kZXhNYXAobWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+KTogTWFwPHN0cmluZywgbnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgcmV0ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBtYXAua2V5cygpKVxyXG4gICAgICAgICAgICByZXQuc2V0KGtleSwgaW5kZXgrKyk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIGxhIHF1YW50aXTDoCBkaSBvZ2dldHRpIGNoZSBzb25vIHN0YXRpIHNlbGV6aW9uYXRpIGFsIHRlcm1pbmUgZGkgdW4gZXZlbnRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWVybyBkaSBvZ2dldHRpIHNlbGV6aW9uYXRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVTZWxlY3RlZCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgbGV0IGV4Y0J5R3JvdXAgPSBzaS5ncm91cF9leGNsdXNpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG4gICAgICAgIGxldCBpbmNCeUdyb3VwID0gc2kuZ3JvdXBzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgPSAoc2kuYWxsID8gdGhpcy5lc3QuQmFzZUl0ZW1zQ291bnQgOiBpbmNCeUdyb3VwKSAtIGV4Y0J5R3JvdXAgKyBzaS5pdGVtcy5sZW5ndGggLSBzaS5leGNsdXNpb25zLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gdGhpcy5lc3Quc2VsZWN0ZWRPYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXN0aXNjZSBpbCBjb21hbmRvIGRpIFwiU2VsZXppb25hIHR1dHRvIGluIHR1dHRlIGxlIHBhZ2luZVwiIG8gaWwgc3VvIGNvbnRyYXJpbywgY2lvw6ggXCJSZWltcG9zdGEgc2VsZXppb25lXCIgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb25JdGVtID0gdGhpcy5lc3QuVmlldy5zZWxlY3Rpb24gfHwgdGhpcy5lc3QuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmFsbCA9ICFzZWxlY3Rpb25JdGVtLmFsbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSBbXTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUmlwdWxpc2NvIGdsaSBzdGF0aSBVSSBkaSBzZWxlemlvbmUgZ2xvYmFsZSBzZSBsJ2hvIGRpc2F0dGl2YXRhXHJcbiAgICAgICAgaWYgKCFzZWxlY3Rpb25JdGVtLmFsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHNlbGVjdGlvbkl0ZW0pO1xyXG5cclxuICAgICAgICAvLyBEb3BvIGF2ZXIgcmVzZXR0YXRvIGRpcmV0dGFtZW50ZSBpbCBzb2xvIG9nZ2V0dG8gdGhpcy5WaWV3LnNlbGVjdGlvbiBkZXZvIGFuY2hlIHJpYWxsaW5lYXJlIGEgdHV0dGkgZ2xpIG9nZ2V0dGkgYmluZGF0aVxyXG4gICAgICAgIHRoaXMuZXZhbHVhdGVTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UsIHNlbGVjdGlvbkl0ZW0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogUmVnaXN0cmEgbGEgc2VsZXppb25lIHNpbmdvbGEgc3UgdW5hIGNlbGxhIHN1bGxhIGNvbWJvIGRpIGNvbWFuZGkgXCJDVFJMICsgQ2xpY2tcIi5cclxuICAgICAqIFNlIHZpZW5lIHByZW11dG8gYW5jaGUgaWwgdGFzdG8gU2hpZnQgdmllbmUgY3JlYXRvIHVuIHJhbmdlIGRpIHNlbGV6aW9uZSBpbCBjdWkgc3RhdHVzIGRpIFwic2VsZXppb25hdG9cIiB2aWVuZSBzYWx2YXRvIG5lbGxhXHJcbiAgICAgKiBtYXRyaWNlIHZpcnR1YWxlICoqc2VsZWN0aW9uU3RhdHVzKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBKYXZhc2NyaXB0IGRpIENsaWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEluZGljZSBkZWxsYSByaWdhLiBOb24gw6ggbCdpbmRpY2UgdmVybyBlIHByb3ByaW8gbWEgw6ggbCdvcmRpbmFsZSAoLm9yZGluYWwpIGRlbGwnb2dnZXR0byBiaW5kYXRvIHN1IHF1ZWxsYSByaWdhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIEluZGljZSBkZWxsYSBjb2xvbm5hIHByZXNvIGJhbmFsbWVudGUgZGFsbCduZ0lmIHN1aSB0aEVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNpbmdsZUNlbGxTZWxlY3Rpb24oZXZlbnQ6IGFueSwgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKGV2ZW50KTtcclxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5lc3QuU2hpZnRDbGljayAmJiB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvblN0YXR1cyh7IHJvdywgY29sdW1uIH0pO1xyXG4gICAgICAgICAgICBsZXQgcm93QWRkaXRpb24gPSByb3cgPCB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24ucm93ID8gLTEgOiArMTtcclxuICAgICAgICAgICAgbGV0IGNvbHVtbkFkZGl0aW9uID0gY29sdW1uIDwgdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uLmNvbHVtbiA/IC0xIDogKzE7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpciA9IHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbi5yb3c7IGlyICE9IHJvdyArIHJvd0FkZGl0aW9uOyBpciArPSByb3dBZGRpdGlvbilcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGljID0gdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uLmNvbHVtbjsgaWMgIT0gY29sdW1uICsgY29sdW1uQWRkaXRpb247IGljICs9IGNvbHVtbkFkZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tpcl1baWNdLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbiA9IHsgcm93LCBjb2x1bW4gfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSaXB1bGlzY28gZXNjbHVkZW5kbyBsJ29nZ2V0dG8gYXR0dWFsZSBjaGUgZXZlbnR1YWxtZW50ZSBjaSBwZW5zbyBpbyBhIGRlc2VlemlvbmFyZVxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdHVzKHsgcm93LCBjb2x1bW4gfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddW2NvbHVtbl0uc2VsZWN0ZWQgPSAhdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd11bY29sdW1uXS5zZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uID0geyByb3csIGNvbHVtbiB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3JhIGNoZSBub24gw6ggYXR0YWNjYXRvIGRpcmV0dGFtZW50ZSBhbGwnaHRtbCBkZXZvIGZhcmUgdW4gbWFya2ZvcmNoZWNrIGZpbml0ZSBsZSBvcGVyYXppb25pIHN1aSBncm91cGluZ1xyXG4gICAgICAgIHRoaXMuZXN0LmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgcmlwdWxpcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lIGRlbGxlIHNpbmdvbGUgY2VsbGUgZGVsbGEgdGFiZWxsYSwgYWQgZXNjbHVzaW9uZSBkaSB1bmEgc2luZ29sYSBjb29yZGluYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7e3JvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcn19IGV4Y2x1c2lvbiBDb29yZGluYXRhIGRhIGVzY2x1ZGVyZSBuZWxsYSBwdWxpemlhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvblN0YXR1cyhleGNsdXNpb24/OiB7IHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciB9KSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93IGluIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1cylcclxuICAgICAgICAgICAgZm9yIChsZXQgY29sdW1uIGluIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFleGNsdXNpb24gfHwgKGV4Y2x1c2lvbiAmJiAocm93ICE9IGV4Y2x1c2lvbi5yb3cudG9TdHJpbmcoKSB8fCBjb2x1bW4gIT0gZXhjbHVzaW9uLmNvbHVtbi50b1N0cmluZygpKSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGVzYW1pbmEgbGEgbWF0cmljZSAqKnNlbGVjdGlvblN0YXR1cyoqIGUgbmUgZXN0cmFwcG9sYSBnbGkgZWxlbWVudGkgc2VsZXppb25hdGkgaW4gdW5hIGNvbW9kYSBtYXRyaWNlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSwgdmFsX3NldHRlcjogRnVuY3Rpb24gfVtdW119IE1hdHJpY2UgZGkgZWxlbWVudGkgc2VsZXppb25hdGkgY29uIGxhIGxvcm8gaW5mb3JtYXppb25lIHN1bCB0aXBvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24oKTogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVtdW10ge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb246IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VbXVtdID0gW11cclxuICAgICAgICBmb3IgKGxldCByb3cgaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGxldCByb3dWYWx1ZXM6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd10pIHtcclxuICAgICAgICAgICAgICAgIGxldCBzc0l0ZW0gPSB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNzSXRlbS5zZWxlY3RlZClcclxuICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZXMucHVzaChzc0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb3dWYWx1ZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHJvd1ZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHJpcHVsaXJlIGxhIHNlbGV6aW9uZSBsYXRvIEhUTUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBuYXRpdm8gSmF2YXNjcmlwdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXJUZXh0U2VsZWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAvLyBTZWxlemlvbm8gZGVsIHRlc3RvIG1hIG5vbiBobyBzaGlmdCBwcmVtdXRvIC0+IGlnbm9ybyBsYSBzZWxlemlvbmVcclxuICAgICAgICBpZiAoKGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudHlwZSA9PSAnUmFuZ2UnIHx8IGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJiAhZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gU2VsZXppb25vIGRlbCB0ZXN0byBlIGhvIHNoaWZ0IHByZW11dG8gLT4gYW5udWxsbyBsYSBzZWxlemlvbmUgZGVsIHRlc3RvXHJcbiAgICAgICAgaWYgKChldmVudC52aWV3LmdldFNlbGVjdGlvbigpLnR5cGUgPT0gJ1JhbmdlJyB8fCBldmVudC52aWV3LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkubGVuZ3RoID4gMCkgJiYgZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnV0aUV4dHMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIG1hdHJpY2UgZGkgc2VsZXppb25lIGdlbmVyYXRhIGRhbCBtZXRvZG8gKipnZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24qKiBnZW5lcmEgbGEgc3RyaWduYSB2ZXJhIGUgcHJvcHJpYSBkYSBjb3BpYXJlIG5lbGxhIENsaXBib2FyZFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIH1bXVtdfSBzZWwgTWF0cmljZSBkaSBzZWxlemlvbmUgY29uIHZhbG9yaSBlIHRpcGkgZGVpIGRhdGkgc2VsZXppb25hdGlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nYSBkYSBjb3BpYXJlIG5lbGxhIGNsaXBib2FyZCwgbGUgc3RyaW5naGUgdmVuZ29ubyB3cmFwcGF0ZSBmcmEgZG9wcGkgYXBpY2kgZSBmcmEgdW4gdmFsb3JlIGUgbCdhbHRybyB2aWVuZSBtZXNzbyB1biB0YWJcclxuICAgICAqIGluIG1vZG8gY2hlIHNpYW5vIGNvbXBhdGliaWxpIGFuY2hlIGNvbiBsYSBjb3BpYSBzdSBFeGNlbFxyXG4gICAgICovXHJcbiAgICBnZXRDbGlwYmFyZFRleHRGcm9tU2VsZWN0aW9uKHNlbDogeyB2YWx1ZTogc3RyaW5nLCB0eXBlOiBJbnB1dFR5cGUgfCBzdHJpbmcgfVtdW10pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgc2VsLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSBzZWxbcl07XHJcbiAgICAgICAgICAgIGlmIChyID4gMCkgcmV0ICs9IFwiXFxuXCI7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gcm93W2NdO1xyXG4gICAgICAgICAgICAgICAgcmV0ICs9IHRoaXMuZ2V0VmFsdWVCeVR5cGUoY29sKSArIChjIDwgcm93Lmxlbmd0aCAtIDEgPyBcIlxcdFwiIDogXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgbGEgcmFwcHJlc2VudGF6aW9uZSBzdHJpbmdhIGRpIHVuIHZhbG9yZSBkYXRvIHVuIHRpcG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHt7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSB9fSB2YWxUeXBlIE9nZ2V0dG8gVmFsb3JlIC0gVGlwbyBkYSBjdWkgZXN0cmFwb2xhcmUgbGEgcmFwcHJlc2VudGF6aW9uZSBkZWwgZGF0byBpbiBzdHJpbmdhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbG9yZSBjb252ZXJ0aXRvIGluIHN0cmluZ2EgaW4gYmFzZSBhbCB0aXBvXHJcbiAgICAgKi9cclxuICAgIGdldFZhbHVlQnlUeXBlKHZhbFR5cGU6IHsgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodmFsVHlwZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1wiJyArIHZhbFR5cGUudmFsdWUgKyAnXCInO1xyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICBjYXNlICdpbnQnOlxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICAgICAgY2FzZSAnZW51bSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2F1dG9jb21wbGV0ZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzpcclxuICAgICAgICAgICAgY2FzZSAnY3VycmVuY3knOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbFR5cGUudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXlqcyh2YWxUeXBlLnZhbHVlKS5mb3JtYXQodGhpcy5lc3QubGMudG9rZW4oXCJnZXRTbWFsbERhdGVEaXNwbGF5Rm9ybWF0XCIpKTtcclxuICAgICAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdCh0aGlzLmVzdC5sYy50b2tlbihcImdldEZ1bGxEYXRlRGlzcGxheUZvcm1hdFwiKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
757
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9TZWxlY3Rpb25IYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW9CbkUscURBQXFEO0FBQ3JELE1BQU0sT0FBTyxnQkFBZ0I7SUF1QnpCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTZCO1FBQTVELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUF0QmhGLCtIQUErSDtRQUN2SCxlQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsaUlBQWlJO1FBQ3pILGdCQUFXLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUlBQXFJO1FBQzdILG9CQUFlLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsMklBQTJJO1FBQ25JLDBCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTVELGlJQUFpSTtRQUN6SCxpQkFBWSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELG1JQUFtSTtRQUMzSCxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELHVJQUF1STtRQUMvSCxzQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCw2SUFBNkk7UUFDckksNEJBQXVCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNbUIsQ0FBQztJQUVyRixzQ0FBc0M7SUFDL0Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxD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Y0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsS0FBSyxNQUFNO2dCQUNQLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztZQUN2RixLQUFLLFVBQVU7Z0JBQ1gsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLEtBQUssTUFBTTtnQkFDUCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwU2VhcmNoXCI7XHJcbmltcG9ydCB7IEl0ZW1zU2VsZWN0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0l0ZW1zU2VsZWN0aW9uXCI7XHJcbmltcG9ydCB7IENhY2hlVHJpcHRpYyB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0NhY2hlVHJpcHRpY1wiO1xyXG5pbXBvcnQgeyBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVwiO1xyXG5pbXBvcnQgeyBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9Fc1RhYmxlQ29sdW1uc0RlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vZG9tYWluL3R5cGVzJztcclxuXHJcbi8vIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBEaXJldHRpdmUgXHJcbmltcG9ydCB7IEVzVGhEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9lc190aC5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IFJvd0dyb3VwaW5nSGFuZGxlciB9IGZyb20gXCIuL1Jvd0dyb3VwaW5nSGFuZGxlclwiO1xyXG5cclxuLyoqXHJcbiAqIERpY2hpYXJhemlvbmUgZGVsbGEgdmFyaWFiaWxlIGdsb2JhbGUgZGF5anMuIEwnb25lcmUgZGkgXCJjcmVhcmxhXCIgw6ggYWZmaWRhdG8gYWxsJ2FwcGxpY2F6aW9uZSBjaGUgdXRpbGl6emEgcXVlc3RhIGxpYnJlcmlhLCBcclxuICogY2hlIGRvdnLDoCBpbXBvcnRhcmUgbG8gc2NyaXB0IGdsb2JhbGUgZGkgZGF5anMgbmVsbGEgQ0xJXHJcbiAqL1xyXG4gZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGdlc3Rpc2NlIGxlIHNlbGV6aW9uaSBkZWdsaSBvZ2dldHRpICovXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25IYW5kbGVyIHtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKippdGVtcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCovXHJcbiAgICBwcml2YXRlIGl0ZW1zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cHMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2ggKi9cclxuICAgIHByaXZhdGUgZ3JvdXBzQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipleGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGV4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwX2V4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2ggKi9cclxuICAgIHByaXZhdGUgZ3JvdXBfZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKml0ZW1zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UqL1xyXG4gICAgcHJpdmF0ZSBpX2l0ZW1zQ2FjaGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cHMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2dyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlICovXHJcbiAgICBwcml2YXRlIGlfZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBfZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlICovXHJcbiAgICBwcml2YXRlIGlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIC8qKiBVbHRpbWEgY2VsbGEgc2VsZXppb25hdGEgc2luZ29sYXJtZW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBsYXN0U2luZ2xlU2VsZWN0aW9uOiB7IHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSByZ0hhbmRsZXI6IFJvd0dyb3VwaW5nSGFuZGxlcikgeyB9XHJcblxyXG4gICAgLyoqIFJpcHVsaXNjZSBsZSBjYWNoZSBkaSBzZWxlemlvbmUgKi9cclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbkNhY2hlcygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLmlfaXRlbXNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuaV9ncm91cHNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1dGEgcXVhbGkgZWxlbWVudGkgZGV2b25vIGVzc2VyZSBtYXJjYXRpIGNvbWUgc2VsZXppb25hdGkgbmVsbGEgdmlzdGEgYXR0dWFsZS4gU2kgYmFzYSBzdWxsJ29nZ2V0dG8gKipzZWxlY3Rpb24qKiBpbnRlcm5vIGFsbCdBcHBTZWFyY2hcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRpIGN1aSB2YWx1dGFyZSBsYSBzZWxlemlvbmVcclxuICAgICAqIEBwYXJhbSB7SXRlbXNTZWxlY3Rpb248YW55Pn0gc2VsZWN0aW9uSXRlbSBPZ2dldHRpIGRpIHNlbGV6aW9uZSBkZXJpdmFudGUgZGFsbGEgdmlldyBvIGRhbGwnb2dnZXR0byBwZXIgQXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV2YWx1YXRlU2VsZWN0aW9uKGl0ZW1zOiBhbnlbXSwgc2VsZWN0aW9uSXRlbTogSXRlbXNTZWxlY3Rpb248YW55Pikge1xyXG4gICAgICAgIGlmICghc2VsZWN0aW9uSXRlbSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdGlvbkV2YWx1YXRpb24oaXRlbXMsIHNlbGVjdGlvbkl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlY29tcGlsYSBsZSBpbmZvcm1hemlvbmkgc3VsbG8gc3RhdG8gZGkgc2VsZXppb25lIHR1dHRvIGEgZmFsc2UgcGVyIGxlIGNlbGxlIGRlbGxhIHRhYmVsbGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBhdHR1YWxtZW50ZSBiaW5kYXRpIHN1bGxhIHRhYmVsbGFcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZVtdfSB0aHMgQ29sb25uZSBzdSBjdWkgZ2xpIG9nZ2V0dGkgc29ubyBiaW5kYXRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVNpbmdsZUNlbGxTZWxlY3Rpb24oaXRlbXM6IGFueVtdLCB0aHM6IEVzVGhEaXJlY3RpdmVbXSwgZHluOiBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb25bXSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gaXRlbXNbaV0uX29yZGluYWwgZG92cmViYmUgZXNzZXJlIHVndWFsZSBhIFwiaVwiIG1hIGRhdG8gY2hlIGxhdG8gSFRNTCBpbCBjaWNsbyDDqCBlc3Rlcm5vIGUgbm9uIGhvIGwnaW5kaWNlIHBlciBjb252ZW56aW9uZSBtaSBiYXNvIHN1bGwnX29yZGluYWxcclxuICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW2l0ZW1zW2ldLl9vcmRpbmFsXSA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoZHluICYmIGR5bi5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxsU2VsZWN0aW9uU3RhdHVzQnlEeW5hbWljQ29sdW1ucyhpdGVtc1tpXSwgZHluKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxsU2VsZWN0aW9uU3RhdHVzQnlFc1RocyhpdGVtc1tpXSwgdGhzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBmaWxsU2VsZWN0aW9uU3RhdHVzQnlEeW5hbWljQ29sdW1ucyhpdGVtOiBhbnksIGR5bjogRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uW10pe1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZHluLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IGR5bltrXTtcclxuICAgICAgICAgICAgbGV0IGlwZXI6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgPSB7IHNlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IHRoLlByb3BlcnR5TmFtZSA/IGl0ZW1bdGguUHJvcGVydHlOYW1lXSA6IFwiVW5kZWZpbmVkIFByb3BlcnR5XCIsIHR5cGU6IHRoLlByb3BlcnR5VHlwZSwgcHJvcGVydHk6IHRoLlByb3BlcnR5TmFtZSwgaGVhZGVyOiB0aC5Qcm9wZXJ0eU5hbWUsIGl0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdW2tdID0gaXBlcjtcclxuXHJcbiAgICAgICAgICAgIC8vIEZ1bnppb25lIGFzc2VnbmF0YSBkb3BvIGluIG1vZG8gZGEgcG90ZXJsZSBmYXJlIGFuY2hlIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCByaWZlcmltZW50byBhbGwnb2dnZXR0byBkaSBzZWxlemlvbmVcclxuICAgICAgICAgICAgaXBlci52YWxfc2V0dGVyID0gKHZhbHVlOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aC5Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW3RoLlByb3BlcnR5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpcGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWxUb0FwcGx5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGguUHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvY29tcGxldGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmxvYXRcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15ZGF0ZSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IGAke215ZGF0ZS5ob3VyKCl9OiR7bXlkYXRlLm1pbnV0ZSgpfToke215ZGF0ZS5zZWNvbmQoKX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbVt0aC5Qcm9wZXJ0eU5hbWVdID0gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgICAgIGlwZXIudmFsdWUgPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZmlsbFNlbGVjdGlvblN0YXR1c0J5RXNUaHMoaXRlbTogYW55LCB0aHM6IEVzVGhEaXJlY3RpdmVbXSkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1trXTtcclxuICAgICAgICAgICAgbGV0IGlwZXI6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgPSB7IHNlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IHRoLnRoUHJvcGVydHkgPyBpdGVtW3RoLnRoUHJvcGVydHldIDogXCJVbmRlZmluZWQgUHJvcGVydHlcIiwgdHlwZTogdGgudGhUeXBlLCBwcm9wZXJ0eTogdGgudGhQcm9wZXJ0eSwgaGVhZGVyOiB0aC50aCwgaXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbF1ba10gPSBpcGVyO1xyXG5cclxuICAgICAgICAgICAgLy8gRnVuemlvbmUgYXNzZWduYXRhIGRvcG8gaW4gbW9kbyBkYSBwb3RlcmxlIGZhcmUgYW5jaGUgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIHJpZmVyaW1lbnRvIGFsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICBpcGVyLnZhbF9zZXR0ZXIgPSAodmFsdWU6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoLnRoUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW3RoLnRoUHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsVG9BcHBseSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoLnRoVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImludFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYXV0b2NvbXBsZXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZsb2F0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB0aGlzLmVzdC5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteWRhdGUgPSB0aGlzLmVzdC5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSBgJHtteWRhdGUuaG91cigpfToke215ZGF0ZS5taW51dGUoKX06JHtteWRhdGUuc2Vjb25kKCl9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW1bdGgudGhQcm9wZXJ0eV0gPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF6aW9uZSBhZ25vc3RpY2EgZGVsbGEgdmFsdXRhemlvbmUgZGVsbGUgc2VsZXppb25pIGRlZ2xpIG9nZ2V0dGkuIFJpY2hpZWRlIGdsaSBvZ2dldHRpIGRlbGxhIHZpc3RhIGF0dHVhbGUgZSBsJ2l0ZW1TZWxlY3RvclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0byBjb250ZW5lbnRlIGxvIHN0YXRvIGF0dHVhbGUgZGkgc2VsZXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uRXZhbHVhdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBpdG0uX2hhc2g7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBpdG0uX2dyb3VwID8gbnVsbCA6IHRoaXMuZ2V0SXRlbUdyb3VwKGl0bSk7XHJcbiAgICAgICAgICAgIC8vIFJlaWRyYXRvIGxhIGNhY2hlIGRpIHNlbGV6aW9uZSBjb2kgbnVvdmkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiByaXVzY2lyZWkgYSBiZWNjYXJlIGdsaSBpbmRpY2kgZ2l1c3RpXHJcbiAgICAgICAgICAgIC8vIERvcG9kaWNow6kgbGEgdXNvIHBlciBjYWxjb2xhcmUgaXN0YW50YW5lYW1lbnRlIHNlIGdsaSBvZ2dldHRpIHNvbm8gc2VsZXppb25hdGkgbyBub1xyXG4gICAgICAgICAgICB0aGlzLnJlaGlkcmF0ZUNhY2hlKGl0bSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRtLl9pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5hbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKCghdGhpcy5ncm91cHNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkgJiYgdGhpcy5pdGVtc0NhY2hlLmhhcyhoYXNoKSkgfHwgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpIHx8IHRoaXMuaXRlbXNDYWNoZS5oYXMoaGFzaCkgfHwgKHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtR3JvdXApID09ICdpbmNsdWRlZCcgJiYgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0bS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmFsbClcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiB0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRtKSAhPSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSB0aGlzLmdyb3Vwc0NhY2hlLmhhcyhoYXNoKSB8fCAodGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0bSkgPT0gJ2luY2x1ZGVkJyAmJiAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgdHV0dGkgZ2xpIG9nZ2V0dGkgZGkgcXVlc3RhIHBhZ2luYSBzb25vIHNvbGV6aW9uYXRpIGFsbG9yYSBwb3NzbyBtZXR0ZXJlIGlsIGdsb2JhbCBjaGVjayBhIHRydWVcclxuICAgICAgICAvLyBTZSBzb25vIGluIHNpdHVhemlvbmUgZGkgYWxsLXNlbGVjdCBhbmNoZSBtZXR0byBsYSBnbG9iYWwgY2hlY2tib3gsIG5vbm9zdGFudGUgY2kgcG9zc2FubyBlc3NlcmUgZGVsbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENoZWNrID0gdGhpcy5lc3QuYm91bmRTb3VyY2UubGVuZ3RoID4gMCAmJiB0aGlzLmVzdC5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiB0Ll9ncm91cCB8fCB0Ll9pdGVtKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKTtcclxuICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBzZWxlY3Rpb25JdGVtLmNvdW50ID4gMCAmJiB0aGlzLmVzdC5TZWxlY3RBbGwgJiYgIXRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUG90cmViYmUgY2FtYmlhcmUgcXVhbG9yYSBxdWFsY3VubyBpbnNlcmlzc2UgZGF0aSBhIG1hbmF6emEgaW4gbW9kYWxpdMOgIEFycmF5IGUgZGVzc2UgaWwgcmVmcmVzaCBtYW51YWxlIGFsbGEgdGFiZWxsYVxyXG4gICAgICAgIC8vIENvbXVucXVlIGNvc3RhIDAgcXVpbmRpIG1pIHBlcm1ldHRvIGRpIHJlZnJlc2hhcmVcclxuICAgICAgICBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2U2VsZWN0ZWQgPSB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHM7XHJcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgIT0gcHJldlNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3Qub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biBvZ2dldHRvIHRyb3ZhIGxhIGNlbGxhIGRpIGNhY2hlIGluIGN1aSDDqCByZWdpc3RyYXRvIGUgYWdnaW9ybmEgaWwgY29udGVudXRvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gZGEgYWdnaW9ybmFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlaGlkcmF0ZUNhY2hlKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGxldCBjdHggPSBpdGVtLl9oYXNoO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzQ2FjaGUuc2V0KGN0eCwgaXRlbSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5leGNsdXNpb25zQ2FjaGUuc2V0KGN0eCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIGdydXBwbyBjb250cm9sbGEgcmljb3JzaXZhbWVudGUgbCdhbGJlcm8gZGkgY3VpIGZhIHBhcnRlIHNlIGMnw6ggc3RhdGEgdW5hIGluY2x1c2lvbmUgbyBlc2NsdXNpb25lIGRpcmV0dGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdycCBHcnVwcG8gZGEgY29udHJvbGxhcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgeydub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnfSBcclxuICAgICAqICdub25lJyBzZSBub24gY2kgc29ubyBpbmZvcm1hemlvbmkgc3UgaW5jbHVzaW9uaSBvIGVzY2x1c2lvbmkgXHJcbiAgICAgKiAnaW5jbHVkZWQnIHNlIGlsIGdydXBwbyBjb250cm9sbGF0byDDqCBzdGF0byBpbmNsdXNvIGluIG1hbmllcmEgZXNwbGljaXRhIGRhbGwnYWxiZXJvIGRlaSBncnVwcGkgcGFkcmlcclxuICAgICAqICdleGNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGVzY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcmVudFRyZWVTdGF0dXMoZ3JwOiBhbnkpOiAnbm9uZScgfCAnZXhjbHVkZWQnIHwgJ2luY2x1ZGVkJyB7XHJcbiAgICAgICAgaWYgKCFncnApXHJcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnRHcm91cDogYW55ID0gdGhpcy5yZ0hhbmRsZXIucmdHcm91cENhY2hlLmdldChncnAuX3BhcmVudCk7XHJcblxyXG4gICAgICAgIGlmICghcGFyZW50R3JvdXApXHJcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2V4Y2x1ZGVkJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKHBhcmVudEdyb3VwLl9oYXNoKSlcclxuICAgICAgICAgICAgcmV0dXJuICdpbmNsdWRlZCc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFRyZWVTdGF0dXMocGFyZW50R3JvdXApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZ2VzdGlyZSBsYSBzZWxlemlvbmUgZGkgTiBlbGVtZW50aSB1dGlsaXp6YW5kbyBsYSBDYWNoZSBkaSBzZWxlemlvbmUgZWQgZXZlbnR1YWxtZW50ZSBhZ2dpb3JuYW5kbyBpbCBjb25jZXR0byBkaSBcImFsbCBzZWxlY3Rpb25cIlxyXG4gICAgICpcclxuICAgICAqIFZ1bnppb25hIHNpYSBpbiBtb2RhbGl0w6AgQXJyYXkgY2hlIGluIG1vZGFsaXTDoCBWaWV3IFNlbXBsaWNlIG8gVmlldyBBdmFuemF0YSAoY29uIGxlIEN1c3RvbSBDZWxscylcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWwgVmFsb3JlIGZvcnphdG8gZGkgY2hlY2sgZGEgYXNzZWduYXJlIGFnbGkgb2dnZXR0aVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWxDaGVjayBWYWxvcmUgZGVsIGNoZWNrIGdsb2JhbGVcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7SXRlbXNTZWxlY3Rpb248YW55Pn0gT2dnZXR0byBkaSBzZWxlemlvbmUgYWdnaW9ybmF0byBjb24gbGUgaW5mb3JtYXppb25pIHN1bGwndWx0aW1hIG9wZXJhemlvbmUgZWZmZXR0dWF0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlSXRlbXNTZWxlY3Rpb24oaXRlbXM6IGFueVtdLCBmb3JjZWRWYWw6IGJvb2xlYW4gPSBudWxsLCBnbG9iYWxDaGVjazogYm9vbGVhbiA9IG51bGwpOiBJdGVtc1NlbGVjdGlvbjxhbnk+IHtcclxuICAgICAgICBsZXQgc2kgPSAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pik/LnNlbGVjdGlvbiB8fCB0aGlzLmVzdC5hcnJheW1vZGVTZWxlY3Rpb247XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBzaW5nb2xhIGUgZGV2byBzZWxlemlvbmFyZSB1bidvZ2dldHRvLCBwZXIgcHJpbWEgY29zYSBkZXZvIGRlc2VsZXppb25hcmUgdHV0dGkgZ2xpIGFsdHJpXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbiAmJiBpdGVtc1swXT8uX3NlbGVjdGVkICYmICFpdGVtc1swXT8uX2dyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAxICYmIGZvcmNlZFZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUZW50YXRpdm8gZGkgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlIHBpw7kgZGkgdW4gZWxlbWVudG8gY29uIFNpbmdsZVNlbGVjdGlvbiBhdHRpdm9cIjtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMSAmJiBmb3JjZWRWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2kgPSB0aGlzLmhhbmRsZUl0ZW1zU2VsZWN0aW9uKHRoaXMuZXN0LmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9ncm91cCksIGZhbHNlLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zWzBdLl9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IHRvQ2hhbmdlID0gZm9yY2VkVmFsICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSBmb3JjZWRWYWwgOiBnbG9iYWxDaGVjayAhPSBudWxsID8gaXRlbS5fc2VsZWN0ZWQgIT0gdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGRldidlc3NlcmUgb3ZlcnJpZGF0byBpbCB2YWxvcmUgZGkgY2hlY2sgZWZmZXR0dW8gbCdvdmVycmlkZSBvIGNvbCB2YWxvcmUgZm9yemF0byBvIGNvbCB2YWxvcmUgZ2xvYmFsZVxyXG4gICAgICAgICAgICBpZiAodG9DaGFuZ2UgJiYgIWl0ZW0ubG9ja2VkKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGZvcmNlZFZhbCA6IHRoaXMuZXN0Lmdsb2JhbENoZWNrO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaWwgdmFsb3JlIG5vbiBkZXYnZXNzZXJlIHZhcmlhdG8gZSB2ZW5nbyBkYSB1bmEgc2VsZXppb25lIGdsb2JhbGUgc2VtcGxpY2VtZW50ZSBldml0byBkaSBlZmZldHR1YXJlIG9wZXJhaXpvbmkgaW51dGlsaS4gTCdpdGVtL2dydXBwbyDDqCBnacOgIG5lbGxvIHN0YXRvIGdpdXN0b1xyXG4gICAgICAgICAgICBpZiAoIXRvQ2hhbmdlICYmIGdsb2JhbENoZWNrICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhbGxTZWxlY3Rpb24gPSBzaS5hbGw7XHJcbiAgICAgICAgICAgIGxldCBpc0dyb3VwID0gaXRlbS5fZ3JvdXA7XHJcbiAgICAgICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IGl0ZW0uX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbUdyb3VwID0gbnVsbCwgYWxsSXRlbXMgPSBudWxsLCBzZWxlY3RlZEl0ZW1zID0gbnVsbCwgdW5zZWxlY3RlZEl0ZW1zID0gbnVsbCwgYWxsR3JvdXBzID0gbnVsbCwgc2VsZWN0ZWRHcm91cHMgPSBudWxsLCB1bnNlbGVjdGVkR3JvdXBzID0gbnVsbCwgcGFyZW50R3JvdXBTZWxlY3RlZCA9IG51bGwsIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHB0cyA9IHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwU2VsZWN0ZWQgPSBwdHMgPT0gJ2luY2x1ZGVkJztcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IHB0cyA9PSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgYWxsSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sIG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgJ3NlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAndW5zZWxlY3RlZCcsIHRydWUsIGFsbEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIGFsbEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3NlbGVjdGVkJywgdHJ1ZSwgYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgICAgIHVuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Hcm91cCA9IHRoaXMuZ2V0SXRlbUdyb3VwKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6IGl0ZW1Hcm91cC5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFVuc2VsZWN0ZWQgPSBpdGVtR3JvdXAgPT0gbnVsbCA/IG51bGwgOiAhaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVzdC5BcnJheUdyb3VwaW5nKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2VsZWN0aW9uT3BlcmF0aW9ucyhzaSwgaXRlbSwgYWxsU2VsZWN0aW9uLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtcywgc2VsZWN0ZWRHcm91cHMsIHVuc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEdyb3VwcywgYWxsSXRlbXMsIGFsbEdyb3VwcywgcGFyZW50R3JvdXBTZWxlY3RlZCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2ltcGxlU2VsZWN0aW9uT3BlcmF0aW9ucyhzaSwgaXRlbSwgaXNHcm91cCwgaXNTZWxlY3Rpb24sIGl0ZW1Hcm91cCwgc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zLCBhbGxJdGVtcywgYWxsR3JvdXBzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEltcG9zdG8gaWwgY2hlY2sgZ2xvYmFsZSBpbiBiYXNlIGEgc2UgdHV0dGkgZ2xpIGVsZW1lbnRpIHNvbm8gc2VsZXppb25hdGkgbyBtZW5vLlxyXG4gICAgICAgIC8vIEV2aXRvIGRpIGZhcmUgcXVlc3RlIG9wZXJhemlvbmkgc2UgbGEgc2VsZXppb25lIGRlcml2YSBwcm9wcmlvIGRhbCBnbG9iYWwgQ2hlY2tcclxuICAgICAgICBpZiAoZ2xvYmFsQ2hlY2sgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSAhdGhpcy5lc3QuYm91bmRTb3VyY2Uuc29tZSh0ID0+ICF0Ll9zZWxlY3RlZCAmJiAhdC5fc2VwKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzaSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzaTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gTCdvZ2dldHRvIGRpIHNlbGV6aW9uZSwgbCdvZ2dldHRvIGRhIHNlbGV6aW9uYXJlL2Rlc2VsZXppb25hcmUgZSB0dXR0aSBpIHBhcmFtZXRyaSBkZWwgY2FzbyBlZmZldHR1YSBsZSBvcGVyYXppb25pIGNoZSBzZXJ2b25vLlxyXG4gICAgICogXHJcbiAgICAgKiBMb2dpY2Egc2VtcGxpZmljYXRhIHJpc3BldHRvIGFsbCdvcmlnaW5hbGUgKipwZXJmb3JtU2VsZWN0aW9uT3BlcmF0aW9ucyoqIHBlciBsYXZvcmFyZSBpbiB1bmEgbW9kYWxpdMOgIGluIGN1aSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBjYXJpY2F0aSAoKipBcnJheUdyb3VwaW5nKiogPSB0cnVlKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGl0ZW06IGFueSwgZ3JvdXA6IGJvb2xlYW4sIHNlbDogYm9vbGVhbiwgaXRtX2dyb3VwOiBhbnksIHNlbF9pdG06IGFueVtdLCBkZXNlbF9pdG06IGFueVtdLCBhbGxfaXRtczogYW55W10sIGFsbF9ncnBzOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCB0cmlwdGljSXRlbSA9IHRoaXMuZ2V0VHJpcHRpYygnaXRlbScsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IHRydWU7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlc2VsX2l0bSlcclxuICAgICAgICAgICAgICAgICAgICBkZXNlbF9pdG0uZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMuYWRkSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IGZhbHNlOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbF9pdG0uZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdG1fZ3JvdXAgJiYgYWxsX2l0bXMgJiYgYWxsX2l0bXMuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChpdG1fZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdG1fZ3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtX2dyb3VwLl9zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBzZWxlemlvbmFyZSB1biBncnVwcG8gZSwgcmljb3JzaXZhbWVudGUsIHNlIHR1dHRpIGkgZ3J1cHBpIHNvdHRvc3RhbnRpIGFsIHBhcmVudCBzb25vIHNlbGV6aW9uYXRpLCBzZWxlemlvbmFyZSBpIGdydXBwaSBwYWRyaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRhIHNlbGV6aW9uYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2VsZWN0R3JvdXAoZ3JvdXA6IGFueSkge1xyXG4gICAgICAgIGdyb3VwLl9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0R3JvdXBQYXJlbnQoZ3JvdXApO1xyXG4gICAgICAgIGlmIChwYXJlbnQgJiYgdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKG51bGwsIHBhcmVudCwgbnVsbCwgdHJ1ZSkuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0R3JvdXAocGFyZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gTCdvZ2dldHRvIGRpIHNlbGV6aW9uZSwgbCdvZ2dldHRvIGRhIHNlbGV6aW9uYXJlL2Rlc2VsZXppb25hcmUgZSB0dXR0aSBpIHBhcmFtZXRyaSBkZWwgY2FzbyBlZmZldHR1YSBsZSBvcGVyYXppb25pIGNoZSBzZXJ2b25vLlxyXG4gICAgICogXHJcbiAgICAgKiBMYSBsb2dpY2EgZGkgcXVlc3RhIGZ1bnppb25lIMOoIG5hdGEgZXNzZW56aWFsbWVudGUgZGEgc3BhbSBkaSB0cmlhbCAmIGVycm9yIGVkIMOoIHN0YXRhIHRlc3RhdGEgc29sbyBmaW5vIGEgZHVlIGxpdmVsbGkgZGkgcmFnZ3J1cHBhbWVudG8sXHJcbiAgICAgKiBxdWFsc2lhc2kgY29zYSB2YWRhIG9sdHJlIG5vbiDDqCAxMDAlIGRldHRvIGNoZSBmdW56aW9uaS4uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGl0ZW06IGFueSwgYWxsOiBib29sZWFuLCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBzZWxfaXRtOiBhbnlbXSwgc2VsX2dycDogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGRlc2VsX2dycDogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdLCBwYXJlbnRfaW5jbDogYm9vbGVhbiwgcGFyZW50X2V4Y2w6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdHJpcHRpY0dyb3VwID0gdGhpcy5nZXRUcmlwdGljKCdncm91cCcsIGJhc2UpO1xyXG4gICAgICAgIGxldCB0cmlwdGljSXRlbSA9IHRoaXMuZ2V0VHJpcHRpYygnaXRlbScsIGJhc2UpO1xyXG4gICAgICAgIGxldCB0cmlwdGljRXhjbCA9IHRoaXMuZ2V0VHJpcHRpYygnZXhjbHVzaW9uJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNncnBFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdncm91cF9leGNsdXNpb24nLCBiYXNlKTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbGwgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNncnBFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0dyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsX2l0bSkgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxfZ3JwKSBzZWxfZ3JwLmZvckVhY2goZ3IgPT4gdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfZ3JwcykgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY2dycEV4Y2wpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbGwgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNncnBFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0dyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKSBkZXNlbF9pdG0uZm9yRWFjaChlbCA9PiB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNFeGNsKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfZ3JwKSBkZXNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNFeGNsKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2l0bXMpIGFsbF9pdG1zLmZvckVhY2goZWwgPT4geyBlbC5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0dyb3VwKTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmICgocGFyZW50X2V4Y2wgPT0gbnVsbCAmJiBhbGwpIHx8IHBhcmVudF9pbmNsKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljRXhjbCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfZXhjbCB8fCAoIWFsbCAmJiBwYXJlbnRfZXhjbCA9PSBudWxsKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljRXhjbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkuc3BsaWNlKGFycmF5LmluZGV4b2YoaXRlbSksIDEpOyAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYykge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRyaXB0aWMuaW5kZXhfY2FjaGUuZ2V0KGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmluZGV4X2NhY2hlLmRlbGV0ZShpdGVtLl9oYXNoKTtcclxuICAgICAgICAgICAgdHJpcHRpYy5hcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICEhaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkucHVzaChpdGVtKTsgZSBsYSBnZXN0aW9uZSBkZWxsYSAgKi9cclxuICAgIHByaXZhdGUgYWRkSXRlbShpdGVtOiBhbnksIHRyaXB0aWM/OiBDYWNoZVRyaXB0aWMpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgaSA9IHRyaXB0aWMuYXJyYXkucHVzaChpdGVtKSAtIDE7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGl0ZW0pO1xyXG4gICAgICAgICAgICB0cmlwdGljLmluZGV4X2NhY2hlLnNldChpdGVtLl9oYXNoLCBpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIHRyaXR0aWNvIGRpIHNlbGV6aW9uZSwgY2lvw6ggbCdhcnJheSBkZWdsaSBvZ2dldHRpIGNoZSBzaSB2dW9sZSBtYW5pcG9sYXJlIGUgbGUgZHVlIGNhY2hlIGNvbGxlZ2F0ZSBhZCBlc3NvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J2dyb3VwJyB8ICdpdGVtJyB8ICdncm91cF9leGNsdXNpb24nIHwgJ2V4Y2x1c2lvbid9IHN1YmplY3QgT2dnZXR0byBsb2dpY28gZGVzaWRlcmF0byBzdSBjdWkgZWZmZXR0dWFyZSBsZSBvcGVyYXppb25pIHN1Y2Nlc3NpdmVcclxuICAgICAqIEBwYXJhbSB7SXRlbXNTZWxlY3Rpb248YW55Pn0gYmFzZSBTZWxldHRvcmUgZGkgYmFzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Q2FjaGVUcmlwdGljfSBUcml0dGljbyBkaSBzZWxlemlvbmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRUcmlwdGljKHN1YmplY3Q6ICdncm91cCcgfCAnaXRlbScgfCAnZ3JvdXBfZXhjbHVzaW9uJyB8ICdleGNsdXNpb24nLCBiYXNlOiBJdGVtc1NlbGVjdGlvbjxhbnk+KTogQ2FjaGVUcmlwdGljIHtcclxuICAgICAgICBzd2l0Y2ggKHN1YmplY3QpIHtcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5ncm91cHNDYWNoZSwgdGhpcy5pX2dyb3Vwc0NhY2hlLCBiYXNlLmdyb3Vwcyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5pdGVtc0NhY2hlLCB0aGlzLmlfaXRlbXNDYWNoZSwgYmFzZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwX2V4Y2x1c2lvbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZSwgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZSwgYmFzZS5ncm91cF9leGNsdXNpb25zKTtcclxuICAgICAgICAgICAgY2FzZSAnZXhjbHVzaW9uJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVUcmlwdGljKHRoaXMuZXhjbHVzaW9uc0NhY2hlLCB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLCBiYXNlLmV4Y2x1c2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gb2dnZXR0byByZXN0aXR1aXNjZSBpbCBncnVwcG8gZGkgY3VpIGZhIHBhcnRlLCBzZSBlc2lzdGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkaSBjdWkgdHJvdmFyZSBpbCBncnVwcG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRJdGVtR3JvdXAoaXRlbTogYW55KTogYW55IHtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5yZ0hhbmRsZXIucmdHcm91cENhY2hlLmdldChpdGVtLl90aGlzS2V5KVxyXG4gICAgICAgIGlmIChwYXJlbnQpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0YSBsYSBjaGlhdmUgZGkgdW4gZ3J1cHBvIHJlc3RpdHVpc2NlIHR1dHRpIGdsaSBvZ2dldHRpIGNvbiBxdWVsbGEgY2hpYXZlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBDaGlhdmUgZGEgY2VyY2FyZVxyXG4gICAgICogQHBhcmFtIHsnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnfSBzdGF0dXMgU3RhdG8gZGVnbGkgZWxlbWVudGksIHNlbGV6aW9uYXRpIG8gbm9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjdXJzaXZlIEluZGljYSBzZSBjZXJjYXJlIHNvbG8gZ2xpIGVsZW1lbnRpIGRpcmV0dGFtZW50ZSBjb2xsZWdhdGkgbyBzZSBwcmVuZGVyZSBhbmNoZSBxdWVsbGkgZGVpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IE9nZ2V0dGkgZGkgdGlwbyAqKl9pdGVtKiogZmFjZW50aSBjYXBvIGFsbGEgY2hpYXZlICoqZ3JvdXBLZXkqKlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3VwSXRlbXMoc2VsOiBJdGVtc1NlbGVjdGlvbjxhbnk+LCBncm91cDogYW55LCBzdGF0dXM/OiAnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnLCByZWN1cnNpdmU6IGJvb2xlYW4gPSBmYWxzZSwgYWxsYmFzZTogYW55W10gPSBudWxsKTogYW55W10ge1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsYmFzZSlcclxuICAgICAgICAgICAgaXRlbXMgPSBhbGxiYXNlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agcmljb3JzaXZhIHByZW5kbyBnbGkgb2dnZXR0aSBkaSB0dXR0ZSBsZSBjaGlhdmkgc2ltaWxpIGNoZSB0cm92b1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmtleXMoKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmdldChrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmdldChncm91cC5fdGhpc0tleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcih0ID0+ICFzdGF0dXMgfHwgKHQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAnc2VsZWN0ZWQnKSB8fCAoIXQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHRyb3ZvIG5lc3N1biBvZ2dldHRvLCBwZXLDsiBtYWdhcmkgZGkgb2dnZXR0aSBuZSBobyBhbGwnaW50ZXJubyBkZWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lLiBcclxuICAgICAgICAvLyBRdWVzdG8gcHXDsiBlc3NlcmUgdmVybyBzb2xvIHNlIE5PTiBzb25vIGluIG1vZGFsaXTDoCBhcnJheSwgaW4gY2FzbyBjb250cmFyaW8gZ2xpIG9nZ2V0dGkgbGkgZGV2byBwZXIgZm9yemEgYXZlcmUgdHV0dGlcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICE9IDAgfHwgIXNlbCB8fCB0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmV4Y2x1c2lvbnMuZmlsdGVyKHQgPT4gdCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5ID09IGdyb3VwLl90aGlzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSk7XHJcbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09ICdzZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLml0ZW1zLmZpbHRlcih0ID0+IHQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc0tleSA9PSBncm91cC5fdGhpc0tleSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgZ2xpIG9nZ2V0dGkgY29uIHF1ZWxsYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIEdydXBwbyBkaSBjdWkgY2VyY2FyZSBpbCBwYXJlbnRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2FueX0gT2dnZXR0byBkaSB0aXBvICoqX2dyb3VwKiogcmFwcHJlc2VudGFudGUgaWwgcGFyZW50IGRlbCAqKmdyb3VwKiogYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3VwUGFyZW50KGdyb3VwOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdyb3VwLl9wYXJlbnQpXHJcbiAgICAgICAgaWYgKHBhcmVudClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgaSBncnVwcGkgZmlnbGlcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwIEdydXBwbyBjaGUgcmFwcHJlc2VudGEgaWwgcGFkcmUgZGkgY3VpIGNlcmNhcmUgaSBmaWdsaVxyXG4gICAgICogQHBhcmFtIHsnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnfSBzdGF0dXMgU3RhdG8gZGVpIGdydXBwaSwgc2VsZXppb25hdGkgbyBub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgSW5kaWNhIHNlIGNlcmNhcmUgc29sbyBpIGdydXBwaSBkaXJldHRhbWVudGUgY29sbGVnYXRpIG8gc2UgcHJlbmRlcmUgYW5jaGUgcXVlbGxpIGRlaSBncnVwcGkgZmlnbGlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2FueVtdfSBPZ2dldHRpIGRpIHRpcG8gKipfZ3JvdXAqKiBmYWNlbnRpIGNhcG8gYWxsYSBjaGlhdmUgKipncm91cEtleSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBDaGlsZEdyb3VwcyhzZWw6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGdyb3VwOiBhbnksIHN0YXR1cz86ICdzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlLCBhbGxiYXNlOiBhbnlbXSA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdGhpc0dyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdyb3VwLl90aGlzS2V5KTtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGFsbGJhc2UpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gYWxsYmFzZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gbW9kYWxpdMOgIHJpY29yc2l2YSBwcmVuZG8gZ2xpIG9nZ2V0dGkgZGkgdHV0dGUgbGUgY2hpYXZpIHNpbWlsaSBjaGUgdHJvdm9cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiB0aGlzLnJnSGFuZGxlci5yZ0NoaWxkR3JvdXBzQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5yZ0hhbmRsZXIucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMucmdIYW5kbGVyLnJnQ2hpbGRHcm91cHNDYWNoZS5nZXQoZ3JvdXAuX3RoaXNLZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIodCA9PiAhc3RhdHVzIHx8ICh0Ll9zZWxlY3RlZCAmJiBzdGF0dXMgPT0gJ3NlbGVjdGVkJykgfHwgKCF0Ll9zZWxlY3RlZCAmJiBzdGF0dXMgPT0gJ3Vuc2VsZWN0ZWQnKSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiB0cm92byBuZXNzdW4gb2dnZXR0bywgcGVyw7IgbWFnYXJpIGRpIG9nZ2V0dGkgbmUgaG8gYWxsJ2ludGVybm8gZGVsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT0gMCB8fCAhc2VsKVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gJ3Vuc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICBpdGVtcyA9IHNlbC5ncm91cF9leGNsdXNpb25zLmZpbHRlcigodDogYW55KSA9PiB0ICE9IG51bGwgJiYgKFxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc1JvdXRlLmxlbmd0aCA9PSB0aGlzR3JvdXAuX3RoaXNSb3V0ZS5sZW5ndGggKyAxICYmIHQuX3RoaXNSb3V0ZS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmdyb3Vwcy5maWx0ZXIoKHQ6IGFueSkgPT4gdCAhPSBudWxsICYmIChcclxuICAgICAgICAgICAgICAgICghcmVjdXJzaXZlICYmIHQuX3RoaXNSb3V0ZS5sZW5ndGggPT0gdGhpc0dyb3VwLl90aGlzUm91dGUubGVuZ3RoICsgMSAmJiB0Ll90aGlzUm91dGUuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogRmluYWxpenphIGxlIGluZm9ybWF6aW9uaSBkaSBzZWxlemlvbmUgZGVsICoqSXRlbXNTZWxlY3Rpb24qKiBjb3JyZW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtOiBJdGVtc1NlbGVjdGlvbjxhbnk+KSB7XHJcbiAgICAgICAgLy8gRGF0byBjaGUgbGUgZGVsZXRlIHNvbm8gbG9naWNoZSBkYXRvIGNoZSB0ZW5nbyBsYSBjYWNoZSBkZWdsaSBpbmRpY2kgZGV2byByZW5kZXJsZSBmaXNpY2hlXHJcbiAgICAgICAgbGV0IHRtcEdycCA9IFtdLCB0bXBJdGVtcyA9IFtdLCB0bXBFeGNsID0gW10sIHRtcEdycEV4Y2wgPSBbXTtcclxuICAgICAgICBsZXQgZ3JwUmVtb3ZlZCA9IGZhbHNlLCBpdGVtc1JlbW92ZWQgPSBmYWxzZSwgZXhjbFJlbW92ZWQgPSBmYWxzZSwgZ3JwRXhjbFJlbW92ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLml0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5pdGVtc1tpXSAhPSBudWxsKSB0bXBJdGVtcy5wdXNoKHNlbGVjdGlvbkl0ZW0uaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGl0ZW1zUmVtb3ZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zW2ldICE9IG51bGwpIHRtcEV4Y2wucHVzaChzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGV4Y2xSZW1vdmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gSW4gdmVjY2hpZSB2ZXJzaW9uaSBkZWxsJ0FwcFNlYXJjaCBwZXIgY3VpIG5vbiB2ZW5nb25vIGRlc2VyaWFsaXp6YXRlIHF1ZXN0ZSBpbmZvcm1haXpvbmkgcG90cmViYmVybyBlc3NlcmNpIGNhc2luaVxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmdyb3Vwcykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uZ3JvdXBzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzW2ldICE9IG51bGwpIHRtcEdycC5wdXNoKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzW2ldKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JwUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9uc1tpXSAhPSBudWxsKSB0bXBHcnBFeGNsLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zW2ldKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JwRXhjbFJlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5pdGVtcyA9IHRtcEl0ZW1zO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IHRtcEdycEV4Y2w7XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zID0gdG1wRXhjbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IHRtcEdycDtcclxuXHJcbiAgICAgICAgLy8gTGUgY2FjaGUgZGVnbGkgaW5kaWNpIHBvdHJlYmJlcm8gYXZlcmUgYnVjaGksIHJpc29sdm9cclxuICAgICAgICBpZiAoZ3JwUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2dyb3Vwc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2dyb3Vwc0NhY2hlKTtcclxuICAgICAgICBpZiAoaXRlbXNSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfaXRlbXNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9pdGVtc0NhY2hlKTtcclxuICAgICAgICBpZiAoZXhjbFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZXhjbHVzaW9uc0NhY2hlKTtcclxuICAgICAgICBpZiAoZ3JwRXhjbFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9ncm91cF9leGNsdXNpb25zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlKTtcclxuXHJcbiAgICAgICAgLy8gUG9pIHJpcHJlbmRvIGEgZmFyZSB0dXR0byBpbiBub3JtYWxpdMOgXHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5jb3VudCA9IHRoaXMuZXZhbHVhdGVTZWxlY3RlZCgpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyBmYXR0byBzZWxlemlvbmUgXCJhbGxcIiBtYSBwb2kgbWkgc29ubyBtZXNzbyBhIHRvZ2xpZXJlIHR1dHRpIGdsaSBlbGVtZW50aSBmaW5vIGEgcmltYW5lcm5lIDAgcmVzZXR0byBsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uY291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZS5mb3JFYWNoKHQgPT4gdC5fc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUmlwdWxpc2NvIGxhIGNhY2hlIGFsdHJpbWVudGkgbWkgcmltYW5lIHBpZW5hIGRpIHR1dHRlIGxlIGVzY2x1c2lvbmlcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgbGEgcG9zc2liaWxpdMOgIGRpIGZhcmUgXCJTZWxlemlvbmEgdHV0dG9cIiDDqCBhYmlsaXRhdGEgYWxsb3JhIGxhIGNvbnNpZGVybyBhcHBlbmEgbWkgdmllbmUgc2VsZXppb25hdG8gcXVhbGNvc2FcclxuICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBzZWxlY3Rpb25JdGVtLmNvdW50ID4gMCAmJiB0aGlzLmVzdC5TZWxlY3RBbGwgJiYgIXRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29tcGF0dGEgdW5hIGNhY2hlIGRpIGluZGljaSAqL1xyXG4gICAgcHJpdmF0ZSBjb21wYWN0SW5kZXhNYXAobWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+KTogTWFwPHN0cmluZywgbnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgcmV0ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBtYXAua2V5cygpKVxyXG4gICAgICAgICAgICByZXQuc2V0KGtleSwgaW5kZXgrKyk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIGxhIHF1YW50aXTDoCBkaSBvZ2dldHRpIGNoZSBzb25vIHN0YXRpIHNlbGV6aW9uYXRpIGFsIHRlcm1pbmUgZGkgdW4gZXZlbnRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWVybyBkaSBvZ2dldHRpIHNlbGV6aW9uYXRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVTZWxlY3RlZCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgbGV0IGV4Y0J5R3JvdXAgPSBzaS5ncm91cF9leGNsdXNpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG4gICAgICAgIGxldCBpbmNCeUdyb3VwID0gc2kuZ3JvdXBzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgPSAoc2kuYWxsID8gdGhpcy5lc3QuQmFzZUl0ZW1zQ291bnQgOiBpbmNCeUdyb3VwKSAtIGV4Y0J5R3JvdXAgKyBzaS5pdGVtcy5sZW5ndGggLSBzaS5leGNsdXNpb25zLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gdGhpcy5lc3Quc2VsZWN0ZWRPYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXN0aXNjZSBpbCBjb21hbmRvIGRpIFwiU2VsZXppb25hIHR1dHRvIGluIHR1dHRlIGxlIHBhZ2luZVwiIG8gaWwgc3VvIGNvbnRyYXJpbywgY2lvw6ggXCJSZWltcG9zdGEgc2VsZXppb25lXCIgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb25JdGVtID0gdGhpcy5lc3QuVmlldy5zZWxlY3Rpb24gfHwgdGhpcy5lc3QuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmFsbCA9ICFzZWxlY3Rpb25JdGVtLmFsbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSBbXTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUmlwdWxpc2NvIGdsaSBzdGF0aSBVSSBkaSBzZWxlemlvbmUgZ2xvYmFsZSBzZSBsJ2hvIGRpc2F0dGl2YXRhXHJcbiAgICAgICAgaWYgKCFzZWxlY3Rpb25JdGVtLmFsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHNlbGVjdGlvbkl0ZW0pO1xyXG5cclxuICAgICAgICAvLyBEb3BvIGF2ZXIgcmVzZXR0YXRvIGRpcmV0dGFtZW50ZSBpbCBzb2xvIG9nZ2V0dG8gdGhpcy5WaWV3LnNlbGVjdGlvbiBkZXZvIGFuY2hlIHJpYWxsaW5lYXJlIGEgdHV0dGkgZ2xpIG9nZ2V0dGkgYmluZGF0aVxyXG4gICAgICAgIHRoaXMuZXZhbHVhdGVTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UsIHNlbGVjdGlvbkl0ZW0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogUmVnaXN0cmEgbGEgc2VsZXppb25lIHNpbmdvbGEgc3UgdW5hIGNlbGxhIHN1bGxhIGNvbWJvIGRpIGNvbWFuZGkgXCJDVFJMICsgQ2xpY2tcIi5cclxuICAgICAqIFNlIHZpZW5lIHByZW11dG8gYW5jaGUgaWwgdGFzdG8gU2hpZnQgdmllbmUgY3JlYXRvIHVuIHJhbmdlIGRpIHNlbGV6aW9uZSBpbCBjdWkgc3RhdHVzIGRpIFwic2VsZXppb25hdG9cIiB2aWVuZSBzYWx2YXRvIG5lbGxhXHJcbiAgICAgKiBtYXRyaWNlIHZpcnR1YWxlICoqc2VsZWN0aW9uU3RhdHVzKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBKYXZhc2NyaXB0IGRpIENsaWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEluZGljZSBkZWxsYSByaWdhLiBOb24gw6ggbCdpbmRpY2UgdmVybyBlIHByb3ByaW8gbWEgw6ggbCdvcmRpbmFsZSAoLm9yZGluYWwpIGRlbGwnb2dnZXR0byBiaW5kYXRvIHN1IHF1ZWxsYSByaWdhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIEluZGljZSBkZWxsYSBjb2xvbm5hIHByZXNvIGJhbmFsbWVudGUgZGFsbCduZ0lmIHN1aSB0aEVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7eyByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIgfX0gZmlyc3RTZWxlY3Rpb25PdmVycmlkZSBQZXJtZXR0ZSBkaSBvdmVycmlkYXJlIGlsIHByaW1vIGVsZW1lbnRvIHNlbGV6aW9uYXRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaW5nbGVDZWxsU2VsZWN0aW9uKGV2ZW50OiBhbnksIHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciwgZmlyc3RTZWxlY3Rpb25PdmVycmlkZT86IHsgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyIH0pIHtcclxuXHJcbiAgICAgICAgdmFyIGZpcnN0ID0gZmlyc3RTZWxlY3Rpb25PdmVycmlkZSB8fCB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oZXZlbnQpO1xyXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiB0aGlzLmVzdC5TaGlmdENsaWNrICYmIGZpcnN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0dXMoeyByb3csIGNvbHVtbiB9KTtcclxuICAgICAgICAgICAgbGV0IHJvd0FkZGl0aW9uID0gcm93IDwgZmlyc3Qucm93ID8gLTEgOiArMTtcclxuICAgICAgICAgICAgbGV0IGNvbHVtbkFkZGl0aW9uID0gY29sdW1uIDwgZmlyc3QuY29sdW1uID8gLTEgOiArMTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGlyID0gZmlyc3Qucm93OyBpciAhPSByb3cgKyByb3dBZGRpdGlvbjsgaXIgKz0gcm93QWRkaXRpb24pXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpYyA9IGZpcnN0LmNvbHVtbjsgaWMgIT0gY29sdW1uICsgY29sdW1uQWRkaXRpb247IGljICs9IGNvbHVtbkFkZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tpcl1baWNdLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbiA9IHsgcm93LCBjb2x1bW4gfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSaXB1bGlzY28gZXNjbHVkZW5kbyBsJ29nZ2V0dG8gYXR0dWFsZSBjaGUgZXZlbnR1YWxtZW50ZSBjaSBwZW5zbyBpbyBhIGRlc2VlemlvbmFyZVxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdHVzKHsgcm93LCBjb2x1bW4gfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddW2NvbHVtbl0uc2VsZWN0ZWQgPSAhdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd11bY29sdW1uXS5zZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uID0geyByb3csIGNvbHVtbiB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3JhIGNoZSBub24gw6ggYXR0YWNjYXRvIGRpcmV0dGFtZW50ZSBhbGwnaHRtbCBkZXZvIGZhcmUgdW4gbWFya2ZvcmNoZWNrIGZpbml0ZSBsZSBvcGVyYXppb25pIHN1aSBncm91cGluZ1xyXG4gICAgICAgIHRoaXMuZXN0LmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgcmlwdWxpcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lIGRlbGxlIHNpbmdvbGUgY2VsbGUgZGVsbGEgdGFiZWxsYSwgYWQgZXNjbHVzaW9uZSBkaSB1bmEgc2luZ29sYSBjb29yZGluYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7e3JvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcn19IGV4Y2x1c2lvbiBDb29yZGluYXRhIGRhIGVzY2x1ZGVyZSBuZWxsYSBwdWxpemlhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvblN0YXR1cyhleGNsdXNpb24/OiB7IHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciB9KSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93IGluIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1cylcclxuICAgICAgICAgICAgZm9yIChsZXQgY29sdW1uIGluIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFleGNsdXNpb24gfHwgKGV4Y2x1c2lvbiAmJiAocm93ICE9IGV4Y2x1c2lvbi5yb3cudG9TdHJpbmcoKSB8fCBjb2x1bW4gIT0gZXhjbHVzaW9uLmNvbHVtbi50b1N0cmluZygpKSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGVzYW1pbmEgbGEgbWF0cmljZSAqKnNlbGVjdGlvblN0YXR1cyoqIGUgbmUgZXN0cmFwcG9sYSBnbGkgZWxlbWVudGkgc2VsZXppb25hdGkgaW4gdW5hIGNvbW9kYSBtYXRyaWNlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSwgdmFsX3NldHRlcjogRnVuY3Rpb24gfVtdW119IE1hdHJpY2UgZGkgZWxlbWVudGkgc2VsZXppb25hdGkgY29uIGxhIGxvcm8gaW5mb3JtYXppb25lIHN1bCB0aXBvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24oKTogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVtdW10ge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb246IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VbXVtdID0gW11cclxuICAgICAgICBmb3IgKGxldCByb3cgaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGxldCByb3dWYWx1ZXM6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd10pIHtcclxuICAgICAgICAgICAgICAgIGxldCBzc0l0ZW0gPSB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNzSXRlbS5zZWxlY3RlZClcclxuICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZXMucHVzaChzc0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb3dWYWx1ZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHJvd1ZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHJpcHVsaXJlIGxhIHNlbGV6aW9uZSBsYXRvIEhUTUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBuYXRpdm8gSmF2YXNjcmlwdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXJUZXh0U2VsZWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAvLyBTZWxlemlvbm8gZGVsIHRlc3RvIG1hIG5vbiBobyBzaGlmdCBwcmVtdXRvIC0+IGlnbm9ybyBsYSBzZWxlemlvbmVcclxuICAgICAgICBpZiAoKGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudHlwZSA9PSAnUmFuZ2UnIHx8IGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJiAhZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gU2VsZXppb25vIGRlbCB0ZXN0byBlIGhvIHNoaWZ0IHByZW11dG8gLT4gYW5udWxsbyBsYSBzZWxlemlvbmUgZGVsIHRlc3RvXHJcbiAgICAgICAgaWYgKChldmVudC52aWV3LmdldFNlbGVjdGlvbigpLnR5cGUgPT0gJ1JhbmdlJyB8fCBldmVudC52aWV3LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkubGVuZ3RoID4gMCkgJiYgZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnV0aUV4dHMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIG1hdHJpY2UgZGkgc2VsZXppb25lIGdlbmVyYXRhIGRhbCBtZXRvZG8gKipnZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24qKiBnZW5lcmEgbGEgc3RyaWduYSB2ZXJhIGUgcHJvcHJpYSBkYSBjb3BpYXJlIG5lbGxhIENsaXBib2FyZFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIH1bXVtdfSBzZWwgTWF0cmljZSBkaSBzZWxlemlvbmUgY29uIHZhbG9yaSBlIHRpcGkgZGVpIGRhdGkgc2VsZXppb25hdGlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nYSBkYSBjb3BpYXJlIG5lbGxhIGNsaXBib2FyZCwgbGUgc3RyaW5naGUgdmVuZ29ubyB3cmFwcGF0ZSBmcmEgZG9wcGkgYXBpY2kgZSBmcmEgdW4gdmFsb3JlIGUgbCdhbHRybyB2aWVuZSBtZXNzbyB1biB0YWJcclxuICAgICAqIGluIG1vZG8gY2hlIHNpYW5vIGNvbXBhdGliaWxpIGFuY2hlIGNvbiBsYSBjb3BpYSBzdSBFeGNlbFxyXG4gICAgICovXHJcbiAgICBnZXRDbGlwYmFyZFRleHRGcm9tU2VsZWN0aW9uKHNlbDogeyB2YWx1ZTogc3RyaW5nLCB0eXBlOiBJbnB1dFR5cGUgfCBzdHJpbmcgfVtdW10pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgc2VsLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSBzZWxbcl07XHJcbiAgICAgICAgICAgIGlmIChyID4gMCkgcmV0ICs9IFwiXFxuXCI7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gcm93W2NdO1xyXG4gICAgICAgICAgICAgICAgcmV0ICs9IHRoaXMuZ2V0VmFsdWVCeVR5cGUoY29sKSArIChjIDwgcm93Lmxlbmd0aCAtIDEgPyBcIlxcdFwiIDogXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgbGEgcmFwcHJlc2VudGF6aW9uZSBzdHJpbmdhIGRpIHVuIHZhbG9yZSBkYXRvIHVuIHRpcG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHt7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSB9fSB2YWxUeXBlIE9nZ2V0dG8gVmFsb3JlIC0gVGlwbyBkYSBjdWkgZXN0cmFwb2xhcmUgbGEgcmFwcHJlc2VudGF6aW9uZSBkZWwgZGF0byBpbiBzdHJpbmdhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbG9yZSBjb252ZXJ0aXRvIGluIHN0cmluZ2EgaW4gYmFzZSBhbCB0aXBvXHJcbiAgICAgKi9cclxuICAgIGdldFZhbHVlQnlUeXBlKHZhbFR5cGU6IHsgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodmFsVHlwZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1wiJyArIHZhbFR5cGUudmFsdWUgKyAnXCInO1xyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICBjYXNlICdpbnQnOlxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICAgICAgY2FzZSAnZW51bSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2F1dG9jb21wbGV0ZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsVHlwZS52YWx1ZTtcclxuICAgICAgICAgICAgY2FzZSAnZmxvYXQnOlxyXG4gICAgICAgICAgICBjYXNlICdjdXJyZW5jeSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWxUeXBlLnZhbHVlKS50b0xvY2FsZVN0cmluZyh0aGlzLmVzdC5sb2NhbGUpO1xyXG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXlqcyh2YWxUeXBlLnZhbHVlKS5mb3JtYXQodGhpcy5lc3QubGMudG9rZW4oXCJnZXRTbWFsbERhdGVEaXNwbGF5Rm9ybWF0XCIpKTtcclxuICAgICAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdCh0aGlzLmVzdC5sYy50b2tlbihcImdldEZ1bGxEYXRlRGlzcGxheUZvcm1hdFwiKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { Directive, Input, TemplateRef } from '@angular/core';
2
+ /** Direttiva che rappresenta il template dell'editor di una cella all'interno della tabella */
2
3
  export class EsTdEditorDirective {
3
4
  /** @ignore */
4
5
  constructor(Template) {
@@ -15,4 +16,4 @@ EsTdEditorDirective.propDecorators = {
15
16
  editor: [{ type: Input }],
16
17
  editorForProperty: [{ type: Input }]
17
18
  };
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfdGRfZWRpdG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvZGlyZWN0aXZlcy9lc190ZF9lZGl0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RCxNQUFNLE9BQU8sbUJBQW1CO0lBUTVCLGNBQWM7SUFDZCxZQUFtQixRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUFJLENBQUM7OztZQVZyRCxTQUFTLFNBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFOzs7WUFGUixXQUFXOzs7cUJBTWpDLEtBQUs7Z0NBR0osS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZWRpdG9yXScgfSlcclxuZXhwb3J0IGNsYXNzIEVzVGRFZGl0b3JEaXJlY3RpdmUge1xyXG5cclxuICAgIC8qKiBJZCBkZWxsJ0VkaXRvciAqL1xyXG4gICAgQElucHV0KCkgZWRpdG9yOiBzdHJpbmc7XHJcbiAgICBcclxuICAgICAvKiogSW4gcXVlc3RhIHByb3ByaWV0w6Agw6ggc2NyaXR0byBpbCBub21lIGRlbGxhIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIGJpbmRhdG8gcGVyIGN1aSBmYXJlIGFwcGFyaXJlIGlsICoqVGVtcGxhdGUqKiAqL1xyXG4gICAgIEBJbnB1dCgpIGVkaXRvckZvclByb3BlcnR5OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XHJcbn1cclxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfdGRfZWRpdG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvZGlyZWN0aXZlcy9lc190ZF9lZGl0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCwrRkFBK0Y7QUFFL0YsTUFBTSxPQUFPLG1CQUFtQjtJQVE1QixjQUFjO0lBQ2QsWUFBbUIsUUFBMEI7UUFBMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFBSSxDQUFDOzs7WUFWckQsU0FBUyxTQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTs7O1lBSFIsV0FBVzs7O3FCQU9qQyxLQUFLO2dDQUdKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqIERpcmV0dGl2YSBjaGUgcmFwcHJlc2VudGEgaWwgdGVtcGxhdGUgZGVsbCdlZGl0b3IgZGkgdW5hIGNlbGxhIGFsbCdpbnRlcm5vIGRlbGxhIHRhYmVsbGEgKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2VkaXRvcl0nIH0pXHJcbmV4cG9ydCBjbGFzcyBFc1RkRWRpdG9yRGlyZWN0aXZlIHtcclxuXHJcbiAgICAvKiogSWQgZGVsbCdFZGl0b3IgKi9cclxuICAgIEBJbnB1dCgpIGVkaXRvcjogc3RyaW5nO1xyXG4gICAgXHJcbiAgICAgLyoqIEluIHF1ZXN0YSBwcm9wcmlldMOgIMOoIHNjcml0dG8gaWwgbm9tZSBkZWxsYSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byBiaW5kYXRvIHBlciBjdWkgZmFyZSBhcHBhcmlyZSBpbCAqKlRlbXBsYXRlKiogKi9cclxuICAgICBASW5wdXQoKSBlZGl0b3JGb3JQcm9wZXJ0eTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxyXG59XHJcbiJdfQ==
@@ -35,5 +35,8 @@ export class EsTableColumnsDefinition {
35
35
  this.EditorName = EditorName;
36
36
  this.RendererName = RendererName;
37
37
  }
38
+ static build(parsObj) {
39
+ return new EsTableColumnsDefinition(parsObj.Description, parsObj.PropertyName, parsObj.RoutePath, parsObj.RouteParameterProperties, parsObj.DataOrder, parsObj.ColumnOrder, parsObj.Visible || true, parsObj.Clss, parsObj.Orderable || true, parsObj.HeaderWraps, parsObj.PropertyType, parsObj.PropertySource, parsObj.EditorName, parsObj.RendererName);
40
+ }
38
41
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vZXh0ZXJuYWxzL0VzVGFibGVDb2x1bW5zRGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxvRkFBb0Y7QUFDcEYsTUFBTSxPQUFPLHdCQUF3QjtJQUVqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsWUFDVyxXQUFtQixFQUNuQixZQUFvQixFQUNwQixZQUFvQixJQUFJLEVBQ3hCLDJCQUFxQyxJQUFJLEVBQ3pDLFlBQTRCLElBQUksRUFDaEMsY0FBc0IsSUFBSSxFQUMxQixVQUFtQixJQUFJLEVBQ3ZCLE9BQWUsSUFBSSxFQUNuQixZQUFxQixJQUFJLEVBQ3pCLGNBQXVCLEtBQUssRUFDNUIsZUFBbUMsSUFBSSxFQUN2QyxpQkFBc0QsRUFBRSxFQUN4RCxhQUFzQixFQUFFLEVBQ3hCLGVBQXVCLEVBQUU7UUFiekIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQWlCO1FBQ3pDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUEyQjtRQUN2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEM7UUFDeEQsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtJQUNwQyxDQUFDO0NBSUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGlkZW50aWZpY2EgdW5hIGNvbG9ubmEuIFV0aWxpenphdGEgaW4gbW9kYWxpdMOgIFwiQ29sb25uZSBkaW5hbWljaGVcIiAqL1xyXG5leHBvcnQgY2xhc3MgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBEZXNjcmlwdGlvbiBEZXNjcml6aW9uZSBkZWxsYSBjb2xvbm5hXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gUHJvcGVydHlOYW1lIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBkZWwgbW9kZWxsbyBpbiBjdWkgc29ubyBjb250ZW51dGkgaSBkYXRpIGRhIHZpc3VhbGl6emFyZSBwZXIgcXVlc3RhIGNvbG9ubmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBSb3V0ZVBhdGggUm91dGUgZGkgbmF2aWdhemlvbmUuIEVzLiBcIlsnL3BhZ2VzL21vZC9tb2RfZGV0YWlsJywgeyAnaWRJdGVtJzogJ3swfScsICdpZEl0ZW0yJyA6ICd7MX0nIH1dXCJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFJvdXRlUGFyYW1ldGVyUHJvcGVydGllcyBQcm9wcmlldMOgIGRhIGJpbmRhcmUgYSAqKnJvdXRlUGF0aCoqIHBlciBnZW5lcmFyZSBsYSByb3V0ZSBjb21wbGV0YS4gXHJcbiAgICAgKiBMJ2luZGljZSBzY3JpdHRvIGluICoqcm91dGVQYXRoKiogw6ggbCdpbmRpY2UgZGkgYWNjZXNzbyBhIHF1ZXN0byBhcnJheS4gRXMuIFtcImlkaXRlbVwiLCBcImlkaXRlbTJcIl1cclxuICAgICAqIEBwYXJhbSB7J0FTQycgfCAnREVTQycgfSBEYXRhT3JkZXIgT3JkaW5hbWVudG8gZGVpIGRhdGkgcHJlc2VudGF0aSBpbiBxdWVzdGEgY29sb25uYVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IENvbHVtbk9yZGVyIE9yZGluYW1lbnRvIGRpIHF1ZXN0YSBjb2xvbm5hXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFZpc2libGUgVmlzaWJpbGl0w6AgbyBtZW5vIGRlbGxhIGNvbG9ubmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBDbHNzIENsYXNzZSBkYSBhcHBsaWNhcmUgc2lhIGFpIFREIGNoZSBhaSBUSCByZWxhdGl2aSBhIHF1ZXN0YSBjb2xvbm5hXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IE9yZGVyYWJsZSBJbmRpY2Egc2UgbGEgY29sb25uYSDDqCBvcmRpbmFiaWxlIG8gbm8gKG5lbCBzZW5zbyBBU0MgLyBERVNDIC8gTk9ORSlcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gSGVhZGVyV3JhcHMgSW5kaWNhIHNlIGlsIHRlc3RvIGRlbGwnaGVhZGVyIGRldidlc3NlcmUgd3JhcHBhdG8gYWxsJ2ludGVybm8gZGVsIHRoLiBEaSBkZWZhdWx0IG5vLlxyXG4gICAgICogQHBhcmFtIHtJbnB1dFR5cGUgfCBzdHJpbmd9IFByb3BlcnR5VHlwZSBJbmRpY2EgaWwgdGlwbyBkZWxsYSBwcm9wcmlldMOgIGlkZW50aWZpY2F0YSBkYSAqKnByb3BlcnR5TmFtZSoqLlxyXG4gICAgICogQHBhcmFtIHt7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ31bXX0gUHJvcGVydHlTb3VyY2UgU29yZ2VudGUgZGF0aSBzdSBjdWkgYXV0b2NvbXBsZXRhcmUvc2NlZ2xpZXJlIGlsIHZhbG9yZSBwZXIgbGEgcHJvcHJpZXTDoCAqKnByb3BlcnR5TmFtZSoqLCBoYSBzZW5zbyBzb2xvIHBlciAqKnByb3BUeXBlKiogZW51bSBvIGF1dG9jb21wbGV0ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBFZGl0b3JOYW1lIE5vbWUgZGVsbCdlZGl0b3IgZGEgdXRpbGl6emFyZSBwZXIgbGEgbW9kaWZpY2EgZGkgcXVlc3RvIGNhbXBvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gUmVuZGVyZXJOYW1lIE5vbWUgZGVsIHJlbmRlcmVyIGRhIHV0aWxpenphcmUgcGVyIHZpc3VhbGl6emFyZSBxdWVzdG8gY2FtcG9cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIERlc2NyaXB0aW9uOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIFByb3BlcnR5TmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBSb3V0ZVBhdGg6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgcHVibGljIFJvdXRlUGFyYW1ldGVyUHJvcGVydGllczogc3RyaW5nW10gPSBudWxsLFxyXG4gICAgICAgIHB1YmxpYyBEYXRhT3JkZXI6ICdBU0MnIHwgJ0RFU0MnID0gbnVsbCxcclxuICAgICAgICBwdWJsaWMgQ29sdW1uT3JkZXI6IG51bWJlciA9IG51bGwsXHJcbiAgICAgICAgcHVibGljIFZpc2libGU6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICAgIHB1YmxpYyBDbHNzOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIHB1YmxpYyBPcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgICAgIHB1YmxpYyBIZWFkZXJXcmFwczogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpYyBQcm9wZXJ0eVR5cGU6IElucHV0VHlwZSB8IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgcHVibGljIFByb3BlcnR5U291cmNlOiB7aWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZ31bXSA9IFtdLFxyXG4gICAgICAgIHB1YmxpYyBFZGl0b3JOYW1lIDogc3RyaW5nID0gXCJcIixcclxuICAgICAgICBwdWJsaWMgUmVuZGVyZXJOYW1lOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJvdXRlcmxpbmsgY2hlIHZlcnLDoCBnZW5lcmF0byBhIHJ1bnRpbWUgYmFzYW5kb3NpIHN1bGxlIGluZm9ybWF6aW9uaSBkaSAqKnJvdXRlUGF0aCoqIGUgKipyb3V0ZVBhcmFtZXRlclByb3BlcnRpZXMqKiAqL1xyXG4gICAgcHVibGljIHJvdXRlckxpbms6IGFueTtcclxufSJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vZXh0ZXJuYWxzL0VzVGFibGVDb2x1bW5zRGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxvRkFBb0Y7QUFDcEYsTUFBTSxPQUFPLHdCQUF3QjtJQUVqQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0gsWUFDVyxXQUFtQixFQUNuQixZQUFvQixFQUNwQixZQUFvQixJQUFJLEVBQ3hCLDJCQUFxQyxJQUFJLEVBQ3pDLFlBQTRCLElBQUksRUFDaEMsY0FBc0IsSUFBSSxFQUMxQixVQUFtQixJQUFJLEVBQ3ZCLE9BQWUsSUFBSSxFQUNuQixZQUFxQixJQUFJLEVBQ3pCLGNBQXVCLEtBQUssRUFDNUIsZUFBbUMsSUFBSSxFQUN2QyxpQkFBc0QsRUFBRSxFQUN4RCxhQUFzQixFQUFFLEVBQ3hCLGVBQXVCLEVBQUU7UUFiekIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQWlCO1FBQ3pDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUEyQjtRQUN2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEM7UUFDeEQsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYTtJQUNwQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFZO1FBRXJCLE9BQU8sSUFBSSx3QkFBd0IsQ0FDL0IsT0FBTyxDQUFDLFdBQVcsRUFDbkIsT0FBTyxDQUFDLFlBQVksRUFDcEIsT0FBTyxDQUFDLFNBQVMsRUFDakIsT0FBTyxDQUFDLHdCQUF3QixFQUNoQyxPQUFPLENBQUMsU0FBUyxFQUNqQixPQUFPLENBQUMsV0FBVyxFQUNuQixPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksRUFDdkIsT0FBTyxDQUFDLElBQUksRUFDWixPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksRUFDekIsT0FBTyxDQUFDLFdBQVcsRUFDbkIsT0FBTyxDQUFDLFlBQVksRUFDcEIsT0FBTyxDQUFDLGNBQWMsRUFDdEIsT0FBTyxDQUFDLFVBQVUsRUFDbEIsT0FBTyxDQUFDLFlBQVksQ0FDdkIsQ0FBQztJQUNOLENBQUM7Q0FJSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuLyoqIENsYXNzZSBjaGUgaWRlbnRpZmljYSB1bmEgY29sb25uYS4gVXRpbGl6emF0YSBpbiBtb2RhbGl0w6AgXCJDb2xvbm5lIGRpbmFtaWNoZVwiICovXHJcbmV4cG9ydCBjbGFzcyBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24ge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IERlc2NyaXB0aW9uIERlc2NyaXppb25lIGRlbGxhIGNvbG9ubmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBQcm9wZXJ0eU5hbWUgTm9tZSBkZWxsYSBwcm9wcmlldMOgIGRlbCBtb2RlbGxvIGluIGN1aSBzb25vIGNvbnRlbnV0aSBpIGRhdGkgZGEgdmlzdWFsaXp6YXJlIHBlciBxdWVzdGEgY29sb25uYVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFJvdXRlUGF0aCBSb3V0ZSBkaSBuYXZpZ2F6aW9uZS4gRXMuIFwiWycvcGFnZXMvbW9kL21vZF9kZXRhaWwnLCB7ICdpZEl0ZW0nOiAnezB9JywgJ2lkSXRlbTInIDogJ3sxfScgfV1cIlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gUm91dGVQYXJhbWV0ZXJQcm9wZXJ0aWVzIFByb3ByaWV0w6AgZGEgYmluZGFyZSBhICoqcm91dGVQYXRoKiogcGVyIGdlbmVyYXJlIGxhIHJvdXRlIGNvbXBsZXRhLiBcclxuICAgICAqIEwnaW5kaWNlIHNjcml0dG8gaW4gKipyb3V0ZVBhdGgqKiDDqCBsJ2luZGljZSBkaSBhY2Nlc3NvIGEgcXVlc3RvIGFycmF5LiBFcy4gW1wiaWRpdGVtXCIsIFwiaWRpdGVtMlwiXVxyXG4gICAgICogQHBhcmFtIHsnQVNDJyB8ICdERVNDJyB9IERhdGFPcmRlciBPcmRpbmFtZW50byBkZWkgZGF0aSBwcmVzZW50YXRpIGluIHF1ZXN0YSBjb2xvbm5hXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gQ29sdW1uT3JkZXIgT3JkaW5hbWVudG8gZGkgcXVlc3RhIGNvbG9ubmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gVmlzaWJsZSBWaXNpYmlsaXTDoCBvIG1lbm8gZGVsbGEgY29sb25uYVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IENsc3MgQ2xhc3NlIGRhIGFwcGxpY2FyZSBzaWEgYWkgVEQgY2hlIGFpIFRIIHJlbGF0aXZpIGEgcXVlc3RhIGNvbG9ubmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gT3JkZXJhYmxlIEluZGljYSBzZSBsYSBjb2xvbm5hIMOoIG9yZGluYWJpbGUgbyBubyAobmVsIHNlbnNvIEFTQyAvIERFU0MgLyBOT05FKVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBIZWFkZXJXcmFwcyBJbmRpY2Egc2UgaWwgdGVzdG8gZGVsbCdoZWFkZXIgZGV2J2Vzc2VyZSB3cmFwcGF0byBhbGwnaW50ZXJubyBkZWwgdGguIERpIGRlZmF1bHQgbm8uXHJcbiAgICAgKiBAcGFyYW0ge0lucHV0VHlwZSB8IHN0cmluZ30gUHJvcGVydHlUeXBlIEluZGljYSBpbCB0aXBvIGRlbGxhIHByb3ByaWV0w6AgaWRlbnRpZmljYXRhIGRhICoqcHJvcGVydHlOYW1lKiouXHJcbiAgICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nfVtdfSBQcm9wZXJ0eVNvdXJjZSBTb3JnZW50ZSBkYXRpIHN1IGN1aSBhdXRvY29tcGxldGFyZS9zY2VnbGllcmUgaWwgdmFsb3JlIHBlciBsYSBwcm9wcmlldMOgICoqcHJvcGVydHlOYW1lKiosIGhhIHNlbnNvIHNvbG8gcGVyICoqcHJvcFR5cGUqKiBlbnVtIG8gYXV0b2NvbXBsZXRlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IEVkaXRvck5hbWUgTm9tZSBkZWxsJ2VkaXRvciBkYSB1dGlsaXp6YXJlIHBlciBsYSBtb2RpZmljYSBkaSBxdWVzdG8gY2FtcG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBSZW5kZXJlck5hbWUgTm9tZSBkZWwgcmVuZGVyZXIgZGEgdXRpbGl6emFyZSBwZXIgdmlzdWFsaXp6YXJlIHF1ZXN0byBjYW1wb1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgRGVzY3JpcHRpb246IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgUHJvcGVydHlOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIFJvdXRlUGF0aDogc3RyaW5nID0gbnVsbCxcclxuICAgICAgICBwdWJsaWMgUm91dGVQYXJhbWV0ZXJQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IG51bGwsXHJcbiAgICAgICAgcHVibGljIERhdGFPcmRlcjogJ0FTQycgfCAnREVTQycgPSBudWxsLFxyXG4gICAgICAgIHB1YmxpYyBDb2x1bW5PcmRlcjogbnVtYmVyID0gbnVsbCxcclxuICAgICAgICBwdWJsaWMgVmlzaWJsZTogYm9vbGVhbiA9IHRydWUsXHJcbiAgICAgICAgcHVibGljIENsc3M6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgcHVibGljIE9yZGVyYWJsZTogYm9vbGVhbiA9IHRydWUsXHJcbiAgICAgICAgcHVibGljIEhlYWRlcldyYXBzOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgcHVibGljIFByb3BlcnR5VHlwZTogSW5wdXRUeXBlIHwgc3RyaW5nID0gbnVsbCxcclxuICAgICAgICBwdWJsaWMgUHJvcGVydHlTb3VyY2U6IHtpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nfVtdID0gW10sXHJcbiAgICAgICAgcHVibGljIEVkaXRvck5hbWUgOiBzdHJpbmcgPSBcIlwiLFxyXG4gICAgICAgIHB1YmxpYyBSZW5kZXJlck5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgYnVpbGQocGFyc09iajogYW55KTogRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24oXHJcbiAgICAgICAgICAgIHBhcnNPYmouRGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIHBhcnNPYmouUHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICBwYXJzT2JqLlJvdXRlUGF0aCxcclxuICAgICAgICAgICAgcGFyc09iai5Sb3V0ZVBhcmFtZXRlclByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIHBhcnNPYmouRGF0YU9yZGVyLFxyXG4gICAgICAgICAgICBwYXJzT2JqLkNvbHVtbk9yZGVyLFxyXG4gICAgICAgICAgICBwYXJzT2JqLlZpc2libGUgfHwgdHJ1ZSxcclxuICAgICAgICAgICAgcGFyc09iai5DbHNzLFxyXG4gICAgICAgICAgICBwYXJzT2JqLk9yZGVyYWJsZSB8fCB0cnVlLFxyXG4gICAgICAgICAgICBwYXJzT2JqLkhlYWRlcldyYXBzLFxyXG4gICAgICAgICAgICBwYXJzT2JqLlByb3BlcnR5VHlwZSxcclxuICAgICAgICAgICAgcGFyc09iai5Qcm9wZXJ0eVNvdXJjZSxcclxuICAgICAgICAgICAgcGFyc09iai5FZGl0b3JOYW1lLFxyXG4gICAgICAgICAgICBwYXJzT2JqLlJlbmRlcmVyTmFtZVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJvdXRlcmxpbmsgY2hlIHZlcnLDoCBnZW5lcmF0byBhIHJ1bnRpbWUgYmFzYW5kb3NpIHN1bGxlIGluZm9ybWF6aW9uaSBkaSAqKnJvdXRlUGF0aCoqIGUgKipyb3V0ZVBhcmFtZXRlclByb3BlcnRpZXMqKiAqL1xyXG4gICAgcHVibGljIHJvdXRlckxpbms6IGFueTtcclxufSJdfQ==