ngx-touch-keyboard 4.4.0 → 4.4.2

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.
@@ -89,6 +89,14 @@ export class NgxTouchKeyboardComponent {
89
89
  }
90
90
  this.locale = value;
91
91
  }
92
+ /**
93
+ * Set active input container
94
+ *
95
+ * @param input Input container native element
96
+ */
97
+ activeInputContainer(input) {
98
+ this._activeInputContainer = input;
99
+ }
92
100
  /**
93
101
  * Set active input
94
102
  *
@@ -486,6 +494,11 @@ export class NgxTouchKeyboardComponent {
486
494
  (targetTagName === 'input' && ['text', 'search', 'email', 'password', 'url', 'tel'].includes(event.target.type));
487
495
  const isKeyboard = event.target === this._elementRef.nativeElement ||
488
496
  (event.target && this._elementRef.nativeElement.contains(event.target));
497
+ const isInputContainer = this._activeInputContainer &&
498
+ (event.target === this._activeInputContainer || this._activeInputContainer.contains(event.target));
499
+ if (this.debug) {
500
+ console.log(`Click on input container: "${isInputContainer}", Click on keyboard: "${isKeyboard}"`);
501
+ }
489
502
  if (isTextInput && this._activeInputElement == event.target) {
490
503
  /**
491
504
  * Tracks current cursor position
@@ -501,7 +514,7 @@ export class NgxTouchKeyboardComponent {
501
514
  this.handleButtonUp('');
502
515
  return;
503
516
  }
504
- else if (!isKeyboard && event?.type !== 'selectionchange') {
517
+ else if (!isInputContainer && !isKeyboard && event?.type !== 'selectionchange') {
505
518
  /**
506
519
  * we must ensure caretPosition doesn't persist once reactivated.
507
520
  */
@@ -626,4 +639,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
626
639
  type: HostListener,
627
640
  args: ['window:selectionchange', ['$event']]
628
641
  }] } });
629
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdG91Y2gta2V5Ym9hcmQvc3JjL2xpYi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFFbkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFVOUMsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFVLGVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNELFdBQU0sR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsZUFBVSxHQUFHLFlBQVksQ0FBQztRQUMxQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWQsZUFBVSxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBRXBCLHVCQUFrQixHQUFHLFFBQVEsQ0FBQztRQUk5QixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsc0JBQWlCLEdBQWtCLElBQUks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QkFBa0IsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0F4cUJVLHlCQUF5QjtrR0FBekIseUJBQXlCLDZWQ3RCdEMsNnhCQW9CQTs7MkZERWEseUJBQXlCO2tCQVByQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzhCQWdEL0MsV0FBVztzQkFEVixZQUFZO3VCQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFZeEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVcxQyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUzVDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBU3pDLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIGluamVjdCxcclxuICBvdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbmltcG9ydCB7IE5HWF9UT1VDSF9LRVlCT0FSRF9MT0NBTEUgfSBmcm9tICcuL25neC10b3VjaC1rZXlib2FyZC5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBmbkJ1dHRvbiB9IGZyb20gJy4vTG9jYWxlL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gJy4vTG9jYWxlL3R5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtdG91Y2gta2V5Ym9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IHtcclxuICBwcml2YXRlIF9zYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcclxuICBwcml2YXRlIF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4pO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRMb2NhbGUgPSBpbmplY3QoTkdYX1RPVUNIX0tFWUJPQVJEX0xPQ0FMRSk7XHJcblxyXG4gIGxvY2FsZTogTG9jYWxlID0gdGhpcy5fZGVmYXVsdExvY2FsZTtcclxuICBsYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gIGxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgZGVidWcgPSBmYWxzZTtcclxuXHJcbiAgY2xvc2VQYW5lbCA9IG91dHB1dDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVCdXR0b25DbGFzcyA9ICdhY3RpdmUnO1xyXG4gIHByaXZhdGUgX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQhOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaG9sZFRpbWVvdXQhOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaXNNb3VzZUhvbGQhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2NhcmV0UG9zaXRpb246IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NhcmV0UG9zaXRpb25FbmQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUlucHV0RWxlbWVudCE6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbDtcclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIEFjY2Vzc29yc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgbWF4TGVuZ3RoXHJcbiAgICovXHJcbiAgZ2V0IG1heExlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8ubWF4TGVuZ3RoID8/IC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0dGVyIGZvciB0eXBlIG9mIGlucHV0XHJcbiAgICovXHJcbiAgZ2V0IGlzVGV4dGFyZWEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py50eXBlID09PSAndGV4dGFyZWEnO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIERlY29yYXRlZCBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogT24ga2V5dXBcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5dXAnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XHJcbiAgICAgIHRoaXMuX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcclxuICAgICAgdGhpcy5faGFuZGxlSGlnaGxpZ2h0S2V5VXAoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24ga2V5ZG93blxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQuaXNUcnVzdGVkKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUhpZ2hsaWdodEtleURvd24oZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gcG9pbnRlcnVwIChtb3VzZXVwIG9yIHRvdWNoZW5kKVxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb2ludGVydXAnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZU1vdXNlVXAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc2VsZWN0XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gc2VsZWN0aW9uY2hhbmdlXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNlbGVjdGlvbmNoYW5nZScsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2FyZXRFdmVudEhhbmRsZXIoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGxvY2FsZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIExvY2FsZVxyXG4gICAqL1xyXG4gIHNldExvY2FsZSh2YWx1ZTogTG9jYWxlID0gdGhpcy5fZGVmYXVsdExvY2FsZSk6IHZvaWQge1xyXG4gICAgaWYgKCEodmFsdWUgJiYgdmFsdWUubGF5b3V0cykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbGUgaXMgbm90IGRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvY2FsZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFjdGl2ZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlucHV0IElucHV0IG5hdGl2ZSBlbGVtZW50XHJcbiAgICovXHJcbiAgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNraW5nIGtleWJvYXJkIGxheW91dFxyXG4gICAgICovXHJcbiAgICBjb25zdCBpbnB1dE1vZGUgPSB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmlucHV0TW9kZTtcclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWyd0ZXh0JywgJ3NlYXJjaCcsICdlbWFpbCcsICd1cmwnLCAnbnVtZXJpYycsICdkZWNpbWFsJywgJ3RlbCddLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSkpIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gaW5wdXRNb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWydudW1lcmljJywgJ2RlY2ltYWwnLCAndGVsJ10uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRNb2RlKSkge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnZGVmYXVsdCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0xvY2FsZTonLCBgJHt0aGlzLmxvY2FsZS5jb2RlfWApO1xyXG4gICAgICBjb25zb2xlLmxvZygnTGF5b3V0OicsIGAke3RoaXMubGF5b3V0TW9kZX1fJHt0aGlzLmxheW91dE5hbWV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICovXHJcbiAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NhcmV0IHN0YXJ0IGF0OicsIHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFuZCBzZXQgZm9jdXMgdG8gaW5wdXRcclxuICAgIHRoaXMuX2ZvY3VzQWN0aXZlSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBhIHN0YW5kYXJkIGJ1dHRvblxyXG4gICAqL1xyXG4gIGlzU3RhbmRhcmRCdXR0b24gPSAoYnV0dG9uOiBzdHJpbmcpID0+IGJ1dHRvbiAmJiAhKGJ1dHRvblswXSA9PT0gJ3snICYmIGJ1dHRvbltidXR0b24ubGVuZ3RoIC0gMV0gPT09ICd9Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGJ1dHRvbiB0eXBlXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGJ1dHRvbiB0eXBlXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uVHlwZShidXR0b246IHN0cmluZyk6ICdzdGFuZGFyZC1rZXknIHwgJ2Z1bmN0aW9uLWtleScge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTdGFuZGFyZEJ1dHRvbihidXR0b24pID8gJ3N0YW5kYXJkLWtleScgOiAnZnVuY3Rpb24ta2V5JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgZGVmYXVsdCBjbGFzc2VzIHRvIGEgZ2l2ZW4gYnV0dG9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIGdldEJ1dHRvbkNsYXNzKGJ1dHRvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ1dHRvblR5cGVDbGFzcyA9IHRoaXMuZ2V0QnV0dG9uVHlwZShidXR0b24pO1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aG91dEJyYWNlcyA9IGJ1dHRvbi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICBsZXQgYnV0dG9uTm9ybWFsaXplZCA9ICcnO1xyXG5cclxuICAgIGlmIChidXR0b25UeXBlQ2xhc3MgIT09ICdzdGFuZGFyZC1rZXknKSBidXR0b25Ob3JtYWxpemVkID0gYCR7YnV0dG9uV2l0aG91dEJyYWNlc30ta2V5YDtcclxuXHJcbiAgICByZXR1cm4gYCR7YnV0dG9uVHlwZUNsYXNzfSAke2J1dHRvbk5vcm1hbGl6ZWR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgKGxhYmVsKSBuYW1lIGZvciBhIGdpdmVuIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uJ3MgbGF5b3V0IG5hbWVcclxuICAgKiBAcmV0dXJuIFRoZSBkaXNwbGF5IG5hbWUgdG8gYmUgc2hvdyB0byB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uRGlzcGxheU5hbWUoYnV0dG9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMubG9jYWxlLmRpc3BsYXlbYnV0dG9uXSB8fCBidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGlja3MgbWFkZSB0byBrZXlib2FyZCBidXR0b25zXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gbGF5b3V0IG5hbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBidXR0b24gZXZlbnQuXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBwcmVzczonLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidXR0b24gPT09IGZuQnV0dG9uLlNISUZUKSB7XHJcbiAgICAgIHRoaXMubGF5b3V0TmFtZSA9IHRoaXMubGF5b3V0TmFtZSA9PT0gJ2FscGhhYmV0aWMnID8gJ3NoaWZ0JyA6ICdhbHBoYWJldGljJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24gPT09IGZuQnV0dG9uLkRPTkUpIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbW1vblBhcmFtczogW251bWJlciwgbnVtYmVyLCBib29sZWFuXSA9IFt0aGlzLl9jYXJldFBvc2l0aW9uIHx8IDAsIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XHJcbiAgICBsZXQgb3V0cHV0ID0gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py52YWx1ZSB8fCAnJztcclxuXHJcbiAgICAvLyBIYW5kZWwgZnVuY3Rpb25hbCBidXR0b25cclxuICAgIGlmICghdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcclxuICAgICAgLy8gSGFuZGVsIEJBQ0tTUEFDRVxyXG4gICAgICBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5CQUNLU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9yZW1vdmVBdChvdXRwdXQsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSGFuZGVsIFNQQUNFXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9hZGRTdHJpbmdBdChvdXRwdXQsICcgJywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgVEFCXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uVEFCKSB7XHJcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCAnXFx0JywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgRU5URVJcclxuICAgICAgZWxzZSBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5FTlRFUikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGV4dGFyZWEpIHtcclxuICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2FkZFN0cmluZ0F0KG91dHB1dCwgJ1xcbicsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEhhbmRlbCBMQVlPVVRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXROYW1lID0gYnV0dG9uLnN1YnN0cmluZygxLCBidXR0b24ubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIYW5kZWwgc3RhbmRhcmQgYnV0dG9uXHJcbiAgICBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCBidXR0b24sIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQudmFsdWUgPSBvdXRwdXQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXJldCBhdDonLCB0aGlzLl9jYXJldFBvc2l0aW9uLCB0aGlzLl9jYXJldFBvc2l0aW9uRW5kLCAnQnV0dG9uJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kaXNwYXRjaEV2ZW50cyhidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBidXR0b24gZG93blxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvbkRvd24oYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBkb3duOicsIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEhhbmRsZSBldmVudCBvcHRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b24pO1xyXG5cclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICBpZiAodGhpcy5faG9sZFRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB0aGlzLl9pc01vdXNlSG9sZCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lIHRvIHdhaXQgdW50aWwgYSBrZXkgaG9sZCBpcyBkZXRlY3RlZFxyXG4gICAgICovXHJcbiAgICB0aGlzLl9ob2xkVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX2lzTW91c2VIb2xkICYmXHJcbiAgICAgICAgKCghYnV0dG9uLmluY2x1ZGVzKCd7JykgJiYgIWJ1dHRvbi5pbmNsdWRlcygnfScpKSB8fCBidXR0b24gPT09IGZuQnV0dG9uLkJBQ0tTUEFDRSB8fCBidXR0b24gPT09IGZuQnV0dG9uLlNQQUNFKVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0J1dHRvbiBob2xkOicsIGJ1dHRvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uSG9sZChidXR0b24pO1xyXG4gICAgICB9XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB9LCA1MDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGVsIGJ1dHRvbiBDbGljayBhZnRlciBidXR0b24gZG93blxyXG4gICAgICovXHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvblByZXNzKGJ1dHRvbiwgZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiB1cFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvblVwKGJ1dHRvbjogc3RyaW5nLCBlPzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdLZXkgdXA6JywgYnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogSGFuZGxlIGV2ZW50IG9wdGlvbnNcclxuICAgICAgICovXHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhY3RpdmUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5fcmVtb3ZlQWN0aXZlQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUhvbGQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiBob2xkXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uSG9sZChidXR0b246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpbWVvdXQgZGljdGF0aW5nIHRoZSBzcGVlZCBvZiBrZXkgaG9sZCBpdGVyYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pc01vdXNlSG9sZCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkhvbGQoYnV0dG9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgaW50ZXJuYWwgY2FyZXQgcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBjYXJldCdzIHN0YXJ0IHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uRW5kIFRoZSBjYXJldCdzIGVuZCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb246IG51bWJlciB8IG51bGwsIGVuZFBvc2l0aW9uID0gcG9zaXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgPSBlbmRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmVzIHRoZSBjdXJzb3IgcG9zaXRpb24gYnkgYSBnaXZlbiBhbW91bnRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGxlbmd0aCBSZXByZXNlbnRzIGJ5IGhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIGlucHV0IHNob3VsZCBiZSBtb3ZlZFxyXG4gICAqIEBwYXJhbSBtaW51cyBXaGV0aGVyIHRoZSBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBsZWZ0IG9yIG5vdC5cclxuICAgKi9cclxuICBwcml2YXRlIF91cGRhdGVDYXJldFBvcyhsZW5ndGg6IG51bWJlciwgbWludXMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgbmV3Q2FyZXRQb3MgPSB0aGlzLl91cGRhdGVDYXJldFBvc0FjdGlvbihsZW5ndGgsIG1pbnVzKTtcclxuICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24obmV3Q2FyZXRQb3MpO1xyXG4gICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uc2Nyb2xsVG8oe1xyXG4gICAgICAgIHRvcDogdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNjcm9sbEhlaWdodCxcclxuICAgICAgfSBhcyBTY3JvbGxUb09wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gbWV0aG9kIG9mIHVwZGF0ZUNhcmV0UG9zXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBsZW5ndGggUmVwcmVzZW50cyBieSBob3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBpbnB1dCBzaG91bGQgYmUgbW92ZWRcclxuICAgKiBAcGFyYW0gbWludXMgV2hldGhlciB0aGUgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgbGVmdCBvciBub3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQ2FyZXRQb3NBY3Rpb24obGVuZ3RoOiBudW1iZXIsIG1pbnVzID0gZmFsc2UpIHtcclxuICAgIGxldCBjYXJldFBvc2l0aW9uID0gdGhpcy5fY2FyZXRQb3NpdGlvbjtcclxuXHJcbiAgICBpZiAoY2FyZXRQb3NpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChtaW51cykge1xyXG4gICAgICAgIGlmIChjYXJldFBvc2l0aW9uID4gMCkgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gLSBsZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gKyBsZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FyZXRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYW4gYW1vdW50IG9mIGNoYXJhY3RlcnMgYmVmb3JlIGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSAoY3Vyc29yKSBwb3NpdGlvbiBmcm9tIHdoZXJlIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZW1vdmVkXHJcbiAgICogQHBhcmFtIG1vdmVDYXJldCBXaGV0aGVyIHRvIHVwZGF0ZSBpbnB1dCBjdXJzb3JcclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVBdChzb3VyY2U6IHN0cmluZywgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLCBwb3NpdGlvbkVuZCA9IHNvdXJjZS5sZW5ndGgsIG1vdmVDYXJldCA9IGZhbHNlKSB7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IDAgJiYgcG9zaXRpb25FbmQgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gcG9zaXRpb25FbmQpIHtcclxuICAgICAgbGV0IHByZXZUd29DaGFycztcclxuICAgICAgbGV0IGVtb2ppTWF0Y2hlZDtcclxuICAgICAgY29uc3QgZW1vamlNYXRjaGVkUmVnID0gLyhbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdKS9nO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEVtb2ppcyBhcmUgbWFkZSBvdXQgb2YgdHdvIGNoYXJhY3RlcnMsIHNvIHdlIG11c3QgdGFrZSBhIGN1c3RvbSBhcHByb2FjaCB0byB0cmltIHRoZW0uXHJcbiAgICAgICAqIEZvciBtb3JlIGluZm86IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGVcclxuICAgICAgICovXHJcbiAgICAgIGlmIChwb3NpdGlvbiAmJiBwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbiAtIDIsIHBvc2l0aW9uKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDIpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygyLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDEpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnNsaWNlKC0yKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIC0yKTtcclxuICAgICAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKDIsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkgdGhpcy5fdXBkYXRlQ2FyZXRQb3MoMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pICsgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKTtcclxuICAgICAgaWYgKG1vdmVDYXJldCkge1xyXG4gICAgICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBzdHJpbmcgdG8gdGhlIGlucHV0IGF0IGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGFkZFxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgKGN1cnNvcikgcG9zaXRpb24gd2hlcmUgdGhlIHN0cmluZyBzaG91bGQgYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gbW92ZUNhcmV0IFdoZXRoZXIgdG8gdXBkYXRlIHZpcnR1YWwta2V5Ym9hcmQgY3Vyc29yXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRkU3RyaW5nQXQoXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIHN0cjogc3RyaW5nLFxyXG4gICAgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgcG9zaXRpb25FbmQgPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgbW92ZUNhcmV0ID0gZmFsc2UsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5tYXhMZW5ndGggIT09IC0xICYmIHNvdXJjZS5sZW5ndGggPj0gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmICghcG9zaXRpb24gJiYgcG9zaXRpb24gIT09IDApIHtcclxuICAgICAgb3V0cHV0ID0gc291cmNlICsgc3RyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gW3NvdXJjZS5zbGljZSgwLCBwb3NpdGlvbiksIHN0ciwgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKV0uam9pbignJyk7XHJcbiAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKHN0ci5sZW5ndGgsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGRpc3BhdGNoIG5lY2Vzc2FyeSBrZXlib2FyZCBldmVudHMgdG8gY3VycmVudCBpbnB1dCBlbGVtZW50LlxyXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3VpZXZlbnRzL3Rvb2xzL2tleS1ldmVudC12aWV3ZXIuaHRtbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc3BhdGNoRXZlbnRzKGJ1dHRvbjogc3RyaW5nKSB7XHJcbiAgICBsZXQga2V5LCBjb2RlO1xyXG4gICAgaWYgKGJ1dHRvbi5pbmNsdWRlcygneycpICYmIGJ1dHRvbi5pbmNsdWRlcygnfScpKSB7XHJcbiAgICAgIC8vIENhcGl0YWxpemUgbmFtZVxyXG4gICAgICBrZXkgPSBidXR0b24uc2xpY2UoMSwgYnV0dG9uLmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcclxuICAgICAgY29kZSA9IGtleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9IGJ1dHRvbjtcclxuICAgICAgY29kZSA9IE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGJ1dHRvbikpID8gYERpZ2l0JHtidXR0b259YCA6IGBLZXkke2J1dHRvbi50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXZlbnRJbml0OiBLZXlib2FyZEV2ZW50SW5pdCA9IHtcclxuICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcclxuICAgICAgc2hpZnRLZXk6IHRoaXMubGF5b3V0TmFtZSA9PSAnc2hpZnQnLFxyXG4gICAgICBrZXk6IGtleSxcclxuICAgICAgY29kZTogY29kZSxcclxuICAgICAgbG9jYXRpb246IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFNpbXVsYXRlIGFsbCBuZWVkZWQgZXZlbnRzIG9uIGJhc2UgZWxlbWVudFxyXG4gICAgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnRJbml0KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXByZXNzJywgZXZlbnRJbml0KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgZXZlbnRJbml0KSk7XHJcblxyXG4gICAgLy8gQW5kIHNldCBmb2N1cyB0byBpbnB1dFxyXG4gICAgdGhpcy5fZm9jdXNBY3RpdmVJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYW4gZXZlbnQgdGhhdCB3YXJyYW50cyBhIGN1cnNvciBwb3NpdGlvbiB1cGRhdGUgaXMgdHJpZ2dlcmVkXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXRUYWdOYW1lID0gJyc7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUpIHtcclxuICAgICAgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNUZXh0SW5wdXQgPVxyXG4gICAgICB0YXJnZXRUYWdOYW1lID09PSAndGV4dGFyZWEnIHx8XHJcbiAgICAgICh0YXJnZXRUYWdOYW1lID09PSAnaW5wdXQnICYmIFsndGV4dCcsICdzZWFyY2gnLCAnZW1haWwnLCAncGFzc3dvcmQnLCAndXJsJywgJ3RlbCddLmluY2x1ZGVzKGV2ZW50LnRhcmdldC50eXBlKSk7XHJcblxyXG4gICAgY29uc3QgaXNLZXlib2FyZCA9XHJcbiAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IHx8XHJcbiAgICAgIChldmVudC50YXJnZXQgJiYgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xyXG5cclxuICAgIGlmIChpc1RleHRJbnB1dCAmJiB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPT0gZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFja3MgY3VycmVudCBjdXJzb3IgcG9zaXRpb25cclxuICAgICAgICogQXMga2V5cyBhcmUgcHJlc3NlZCwgdGV4dCB3aWxsIGJlIGFkZGVkL3JlbW92ZWQgYXQgdGhhdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGlucHV0LlxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5fc2V0Q2FyZXRQb3NpdGlvbihldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsIGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICdDYXJldCBhdDonLFxyXG4gICAgICAgICAgdGhpcy5fY2FyZXRQb3NpdGlvbixcclxuICAgICAgICAgIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQsXHJcbiAgICAgICAgICBldmVudCAmJiBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncG9pbnRlcnVwJyAmJiB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5faXNNb3VzZUhvbGQpIHtcclxuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgaWYgdGhlIHVzZXIgcmVsZWFzZXMgdGhlIGJ1dHRvbiBvdXRzaWRlIG9mIHRoZSB3aW5kb3csIHRoZSBrZXlib2FyZCBkb2Vzbid0IGdldCBzdHVjay5cclxuICAgICAgdGhpcy5oYW5kbGVCdXR0b25VcCgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoIWlzS2V5Ym9hcmQgJiYgZXZlbnQ/LnR5cGUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5fc2V0Q2FyZXRQb3NpdGlvbihudWxsKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYENhcmV0IHBvc2l0aW9uIHJlc2V0IGR1ZSB0byBcIiR7ZXZlbnQ/LnR5cGV9XCIgZXZlbnRgLCBldmVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDbG9zZSBwYW5lbFxyXG4gICAgICAgKi9cclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIHRvIGlucHV0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2ZvY3VzQWN0aXZlSW5wdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmZvY3VzKCk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LnNldFNlbGVjdGlvblJhbmdlKHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGVsIGhpZ2hsaWdodCBvbiBrZXkgZG93blxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIEtleWJvYXJkRXZlbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9oYW5kbGVIaWdobGlnaHRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b25QcmVzc2VkID0gdGhpcy5fZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b25QcmVzc2VkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRlbCBoaWdobGlnaHQgb24ga2V5IHVwXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZUhpZ2hsaWdodEtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBidXR0b25QcmVzc2VkID0gdGhpcy5fZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3JlbW92ZUFjdGl2ZUJ1dHRvbihidXR0b25QcmVzc2VkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybXMgYSBLZXlib2FyZEV2ZW50J3MgXCJrZXkuY29kZVwiIHN0cmluZyBpbnRvIGEgdmlydHVhbC1rZXlib2FyZCBsYXlvdXQgZm9ybWF0XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEtleWJvYXJkTGF5b3V0S2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBsZXQgb3V0cHV0ID0gJyc7XHJcbiAgICBjb25zdCBrZXlJZCA9IGV2ZW50LmNvZGUgfHwgZXZlbnQua2V5O1xyXG5cclxuICAgIGlmIChcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdTcGFjZScpIHx8XHJcbiAgICAgIGtleUlkPy5pbmNsdWRlcygnTnVtcGFkJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdCYWNrc3BhY2UnKSB8fFxyXG4gICAgICBrZXlJZD8uaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdNZXRhJylcclxuICAgICkge1xyXG4gICAgICBvdXRwdXQgPSBgeyR7ZXZlbnQuY29kZX19YCB8fCAnJztcclxuICAgIH0gZWxzZSBpZiAoa2V5SWQ/LmluY2x1ZGVzKCdDb250cm9sJykgfHwga2V5SWQ/LmluY2x1ZGVzKCdTaGlmdCcpIHx8IGtleUlkPy5pbmNsdWRlcygnQWx0JykpIHtcclxuICAgICAgb3V0cHV0ID0gYHske2V2ZW50LmtleX19YCB8fCAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dHB1dCA9IGV2ZW50LmtleSB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDEgPyBvdXRwdXQ/LnRvTG93ZXJDYXNlKCkgOiBvdXRwdXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYWN0aXZlIGNsYXNzIGluIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbk5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIF9zZXRBY3RpdmVCdXR0b24oYnV0dG9uTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKS5uYW1lZEl0ZW0oYnV0dG9uTmFtZSk7XHJcbiAgICBpZiAobm9kZSAmJiBub2RlLmNsYXNzTGlzdCkge1xyXG4gICAgICBub2RlLmNsYXNzTGlzdC5hZGQodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFjdGl2ZSBidXR0b25cclxuICAgKlxyXG4gICAqIEBwYXJhbSBidXR0b25OYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWN0aXZlQnV0dG9uKGJ1dHRvbk5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcclxuICAgIGlmIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5uYW1lZEl0ZW0oYnV0dG9uTmFtZSk7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2FjdGl2ZUJ1dHRvbkNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIG5vZGVzW2ldLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0b3VjaC1rZXlib2FyZFwiIFtjbGFzc109XCInbGF5b3V0LScgKyBsYXlvdXRNb2RlICsgJy0nICsgbGF5b3V0TmFtZVwiPlxyXG4gIEBmb3IgKHJvdyBvZiBsb2NhbGUubGF5b3V0c1tsYXlvdXRNb2RlICsgXCJfXCIgKyBsYXlvdXROYW1lXTsgdHJhY2sgcm93WzBdKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidG91Y2gta2V5Ym9hcmQtcm93XCI+XHJcbiAgICAgIEBmb3IgKGtleSBvZiByb3c7IHRyYWNrIGtleSkge1xyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtuYW1lXT1cImtleVwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIFtkaXJdPVwibG9jYWxlLmRpclwiXHJcbiAgICAgICAgICBjbGFzcz1cInRvdWNoLWtleWJvYXJkLWtleVwiXHJcbiAgICAgICAgICBbY2xhc3NdPVwiZ2V0QnV0dG9uQ2xhc3Moa2V5KVwiXHJcbiAgICAgICAgICBbYXR0ci5kYXRhLWxheW91dF09XCJsYXlvdXRNb2RlXCJcclxuICAgICAgICAgIChwb2ludGVydXApPVwiaGFuZGxlQnV0dG9uVXAoa2V5LCAkZXZlbnQpXCJcclxuICAgICAgICAgIChwb2ludGVyZG93bik9XCJoYW5kbGVCdXR0b25Eb3duKGtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAocG9pbnRlcmNhbmNlbCk9XCJoYW5kbGVCdXR0b25VcChrZXksICRldmVudClcIlxyXG4gICAgICAgICAgW2lubmVySHRtbF09XCJnZXRCdXR0b25EaXNwbGF5TmFtZShrZXkpXCJcclxuICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==
642
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdG91Y2gta2V5Ym9hcmQvc3JjL2xpYi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFFbkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFVOUMsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFVLGVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNELFdBQU0sR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsZUFBVSxHQUFHLFlBQVksQ0FBQztRQUMxQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWQsZUFBVSxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBRXBCLHVCQUFrQixHQUFHLFFBQVEsQ0FBQztRQUk5QixtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsc0JBQWlCLEdBQWtCLElBQUks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UUFDNUUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBMXJCVSx5QkFBeUI7a0dBQXpCLHlCQUF5Qiw2VkN0QnRDLDZ4QkFvQkE7OzJGREVhLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDRSxvQkFBb0IsaUJBR2YsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFpRC9DLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWXhDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXMUMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVM1QyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVN6QyxxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgb3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgeyBOR1hfVE9VQ0hfS0VZQk9BUkRfTE9DQUxFIH0gZnJvbSAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgZm5CdXR0b24gfSBmcm9tICcuL0xvY2FsZS9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBMb2NhbGUgfSBmcm9tICcuL0xvY2FsZS90eXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXRvdWNoLWtleWJvYXJkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmd4LXRvdWNoLWtleWJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KTtcclxuICBwcml2YXRlIF9kZWZhdWx0TG9jYWxlID0gaW5qZWN0KE5HWF9UT1VDSF9LRVlCT0FSRF9MT0NBTEUpO1xyXG5cclxuICBsb2NhbGU6IExvY2FsZSA9IHRoaXMuX2RlZmF1bHRMb2NhbGU7XHJcbiAgbGF5b3V0TW9kZSA9ICd0ZXh0JztcclxuICBsYXlvdXROYW1lID0gJ2FscGhhYmV0aWMnO1xyXG4gIGRlYnVnID0gZmFsc2U7XHJcblxyXG4gIGNsb3NlUGFuZWwgPSBvdXRwdXQ8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfYWN0aXZlQnV0dG9uQ2xhc3MgPSAnYWN0aXZlJztcclxuICBwcml2YXRlIF9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0ITogbnVtYmVyO1xyXG4gIHByaXZhdGUgX2hvbGRUaW1lb3V0ITogbnVtYmVyO1xyXG4gIHByaXZhdGUgX2lzTW91c2VIb2xkITogYm9vbGVhbjtcclxuICBwcml2YXRlIF9jYXJldFBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jYXJldFBvc2l0aW9uRW5kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9hY3RpdmVJbnB1dEVsZW1lbnQhOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw7XHJcbiAgcHJpdmF0ZSBfYWN0aXZlSW5wdXRDb250YWluZXIhOiBIVE1MRWxlbWVudCB8IG51bGw7XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQCBBY2Nlc3NvcnNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKipcclxuICAgKiBHZXR0ZXIgZm9yIG1heExlbmd0aFxyXG4gICAqL1xyXG4gIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/Lm1heExlbmd0aCA/PyAtMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHRlciBmb3IgdHlwZSBvZiBpbnB1dFxyXG4gICAqL1xyXG4gIGdldCBpc1RleHRhcmVhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8udHlwZSA9PT0gJ3RleHRhcmVhJztcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQCBEZWNvcmF0ZWQgbWV0aG9kc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGtleXVwXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleXVwJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50LmlzVHJ1c3RlZCkge1xyXG4gICAgICB0aGlzLl9jYXJldEV2ZW50SGFuZGxlcihldmVudCk7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUhpZ2hsaWdodEtleVVwKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGtleWRvd25cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50LmlzVHJ1c3RlZCkge1xyXG4gICAgICB0aGlzLl9oYW5kbGVIaWdobGlnaHRLZXlEb3duKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHBvaW50ZXJ1cCAobW91c2V1cCBvciB0b3VjaGVuZClcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cG9pbnRlcnVwJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVNb3VzZVVwKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHNlbGVjdFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzZWxlY3QnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZVNlbGVjdChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHNlbGVjdGlvbmNoYW5nZVxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzZWxlY3Rpb25jaGFuZ2UnLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZVNlbGVjdGlvbkNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQCBQdWJsaWMgbWV0aG9kc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsb2NhbGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB2YWx1ZSBMb2NhbGVcclxuICAgKi9cclxuICBzZXRMb2NhbGUodmFsdWU6IExvY2FsZSA9IHRoaXMuX2RlZmF1bHRMb2NhbGUpOiB2b2lkIHtcclxuICAgIGlmICghKHZhbHVlICYmIHZhbHVlLmxheW91dHMpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxlIGlzIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2NhbGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhY3RpdmUgaW5wdXQgY29udGFpbmVyXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaW5wdXQgSW5wdXQgY29udGFpbmVyIG5hdGl2ZSBlbGVtZW50XHJcbiAgICovXHJcbiAgYWN0aXZlSW5wdXRDb250YWluZXIoaW5wdXQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dENvbnRhaW5lciA9IGlucHV0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFjdGl2ZSBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlucHV0IElucHV0IG5hdGl2ZSBlbGVtZW50XHJcbiAgICovXHJcbiAgc2V0QWN0aXZlSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQgPSBpbnB1dDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNraW5nIGtleWJvYXJkIGxheW91dFxyXG4gICAgICovXHJcbiAgICBjb25zdCBpbnB1dE1vZGUgPSB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmlucHV0TW9kZTtcclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWyd0ZXh0JywgJ3NlYXJjaCcsICdlbWFpbCcsICd1cmwnLCAnbnVtZXJpYycsICdkZWNpbWFsJywgJ3RlbCddLnNvbWUoKGkpID0+IGkgPT09IGlucHV0TW9kZSkpIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gaW5wdXRNb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYXlvdXRNb2RlID0gJ3RleHQnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnB1dE1vZGUgJiYgWydudW1lcmljJywgJ2RlY2ltYWwnLCAndGVsJ10uc29tZSgoaSkgPT4gaSA9PT0gaW5wdXRNb2RlKSkge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnZGVmYXVsdCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheW91dE5hbWUgPSAnYWxwaGFiZXRpYyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0xvY2FsZTonLCBgJHt0aGlzLmxvY2FsZS5jb2RlfWApO1xyXG4gICAgICBjb25zb2xlLmxvZygnTGF5b3V0OicsIGAke3RoaXMubGF5b3V0TW9kZX1fJHt0aGlzLmxheW91dE5hbWV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB3ZSBtdXN0IGVuc3VyZSBjYXJldFBvc2l0aW9uIGRvZXNuJ3QgcGVyc2lzdCBvbmNlIHJlYWN0aXZhdGVkLlxyXG4gICAgICovXHJcbiAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCwgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NhcmV0IHN0YXJ0IGF0OicsIHRoaXMuX2NhcmV0UG9zaXRpb24sIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFuZCBzZXQgZm9jdXMgdG8gaW5wdXRcclxuICAgIHRoaXMuX2ZvY3VzQWN0aXZlSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBhIHN0YW5kYXJkIGJ1dHRvblxyXG4gICAqL1xyXG4gIGlzU3RhbmRhcmRCdXR0b24gPSAoYnV0dG9uOiBzdHJpbmcpID0+IGJ1dHRvbiAmJiAhKGJ1dHRvblswXSA9PT0gJ3snICYmIGJ1dHRvbltidXR0b24ubGVuZ3RoIC0gMV0gPT09ICd9Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGJ1dHRvbiB0eXBlXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGJ1dHRvbiB0eXBlXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uVHlwZShidXR0b246IHN0cmluZyk6ICdzdGFuZGFyZC1rZXknIHwgJ2Z1bmN0aW9uLWtleScge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTdGFuZGFyZEJ1dHRvbihidXR0b24pID8gJ3N0YW5kYXJkLWtleScgOiAnZnVuY3Rpb24ta2V5JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgZGVmYXVsdCBjbGFzc2VzIHRvIGEgZ2l2ZW4gYnV0dG9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24ncyBsYXlvdXQgbmFtZVxyXG4gICAqIEByZXR1cm4gVGhlIGNsYXNzZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIGdldEJ1dHRvbkNsYXNzKGJ1dHRvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ1dHRvblR5cGVDbGFzcyA9IHRoaXMuZ2V0QnV0dG9uVHlwZShidXR0b24pO1xyXG4gICAgY29uc3QgYnV0dG9uV2l0aG91dEJyYWNlcyA9IGJ1dHRvbi5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICBsZXQgYnV0dG9uTm9ybWFsaXplZCA9ICcnO1xyXG5cclxuICAgIGlmIChidXR0b25UeXBlQ2xhc3MgIT09ICdzdGFuZGFyZC1rZXknKSBidXR0b25Ob3JtYWxpemVkID0gYCR7YnV0dG9uV2l0aG91dEJyYWNlc30ta2V5YDtcclxuXHJcbiAgICByZXR1cm4gYCR7YnV0dG9uVHlwZUNsYXNzfSAke2J1dHRvbk5vcm1hbGl6ZWR9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGRpc3BsYXkgKGxhYmVsKSBuYW1lIGZvciBhIGdpdmVuIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uJ3MgbGF5b3V0IG5hbWVcclxuICAgKiBAcmV0dXJuIFRoZSBkaXNwbGF5IG5hbWUgdG8gYmUgc2hvdyB0byB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgZ2V0QnV0dG9uRGlzcGxheU5hbWUoYnV0dG9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMubG9jYWxlLmRpc3BsYXlbYnV0dG9uXSB8fCBidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBjbGlja3MgbWFkZSB0byBrZXlib2FyZCBidXR0b25zXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gbGF5b3V0IG5hbWUuXHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBidXR0b24gZXZlbnQuXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBwcmVzczonLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidXR0b24gPT09IGZuQnV0dG9uLlNISUZUKSB7XHJcbiAgICAgIHRoaXMubGF5b3V0TmFtZSA9IHRoaXMubGF5b3V0TmFtZSA9PT0gJ2FscGhhYmV0aWMnID8gJ3NoaWZ0JyA6ICdhbHBoYWJldGljJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24gPT09IGZuQnV0dG9uLkRPTkUpIHtcclxuICAgICAgdGhpcy5jbG9zZVBhbmVsLmVtaXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbW1vblBhcmFtczogW251bWJlciwgbnVtYmVyLCBib29sZWFuXSA9IFt0aGlzLl9jYXJldFBvc2l0aW9uIHx8IDAsIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgfHwgMCwgdHJ1ZV07XHJcbiAgICBsZXQgb3V0cHV0ID0gdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py52YWx1ZSB8fCAnJztcclxuXHJcbiAgICAvLyBIYW5kZWwgZnVuY3Rpb25hbCBidXR0b25cclxuICAgIGlmICghdGhpcy5pc1N0YW5kYXJkQnV0dG9uKGJ1dHRvbikpIHtcclxuICAgICAgLy8gSGFuZGVsIEJBQ0tTUEFDRVxyXG4gICAgICBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5CQUNLU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9yZW1vdmVBdChvdXRwdXQsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSGFuZGVsIFNQQUNFXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uU1BBQ0UpIHtcclxuICAgICAgICBvdXRwdXQgPSB0aGlzLl9hZGRTdHJpbmdBdChvdXRwdXQsICcgJywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgVEFCXHJcbiAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PT0gZm5CdXR0b24uVEFCKSB7XHJcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCAnXFx0JywgLi4uY29tbW9uUGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIYW5kZWwgRU5URVJcclxuICAgICAgZWxzZSBpZiAoYnV0dG9uID09PSBmbkJ1dHRvbi5FTlRFUikge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGV4dGFyZWEpIHtcclxuICAgICAgICAgIG91dHB1dCA9IHRoaXMuX2FkZFN0cmluZ0F0KG91dHB1dCwgJ1xcbicsIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEhhbmRlbCBMQVlPVVRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXROYW1lID0gYnV0dG9uLnN1YnN0cmluZygxLCBidXR0b24ubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIYW5kZWwgc3RhbmRhcmQgYnV0dG9uXHJcbiAgICBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gdGhpcy5fYWRkU3RyaW5nQXQob3V0cHV0LCBidXR0b24sIC4uLmNvbW1vblBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQudmFsdWUgPSBvdXRwdXQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXJldCBhdDonLCB0aGlzLl9jYXJldFBvc2l0aW9uLCB0aGlzLl9jYXJldFBvc2l0aW9uRW5kLCAnQnV0dG9uJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9kaXNwYXRjaEV2ZW50cyhidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBidXR0b24gZG93blxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvbkRvd24oYnV0dG9uOiBzdHJpbmcsIGU/OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleSBkb3duOicsIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEhhbmRsZSBldmVudCBvcHRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYWN0aXZlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX3NldEFjdGl2ZUJ1dHRvbihidXR0b24pO1xyXG5cclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICBpZiAodGhpcy5faG9sZFRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB0aGlzLl9pc01vdXNlSG9sZCA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lIHRvIHdhaXQgdW50aWwgYSBrZXkgaG9sZCBpcyBkZXRlY3RlZFxyXG4gICAgICovXHJcbiAgICB0aGlzLl9ob2xkVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX2lzTW91c2VIb2xkICYmXHJcbiAgICAgICAgKCghYnV0dG9uLmluY2x1ZGVzKCd7JykgJiYgIWJ1dHRvbi5pbmNsdWRlcygnfScpKSB8fCBidXR0b24gPT09IGZuQnV0dG9uLkJBQ0tTUEFDRSB8fCBidXR0b24gPT09IGZuQnV0dG9uLlNQQUNFKVxyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0J1dHRvbiBob2xkOicsIGJ1dHRvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uSG9sZChidXR0b24pO1xyXG4gICAgICB9XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XHJcbiAgICB9LCA1MDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGVsIGJ1dHRvbiBDbGljayBhZnRlciBidXR0b24gZG93blxyXG4gICAgICovXHJcbiAgICB0aGlzLmhhbmRsZUJ1dHRvblByZXNzKGJ1dHRvbiwgZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiB1cFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIGxheW91dCBuYW1lLlxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgYnV0dG9uIGV2ZW50LlxyXG4gICAqL1xyXG4gIGhhbmRsZUJ1dHRvblVwKGJ1dHRvbjogc3RyaW5nLCBlPzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdLZXkgdXA6JywgYnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogSGFuZGxlIGV2ZW50IG9wdGlvbnNcclxuICAgICAgICovXHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhY3RpdmUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5fcmVtb3ZlQWN0aXZlQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5faXNNb3VzZUhvbGQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGJ1dHRvbiBob2xkXHJcbiAgICovXHJcbiAgaGFuZGxlQnV0dG9uSG9sZChidXR0b246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkSW50ZXJhY3Rpb25UaW1lb3V0KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpbWVvdXQgZGljdGF0aW5nIHRoZSBzcGVlZCBvZiBrZXkgaG9sZCBpdGVyYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2hvbGRJbnRlcmFjdGlvblRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9pc01vdXNlSG9sZCkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQnV0dG9uUHJlc3MoYnV0dG9uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZUJ1dHRvbkhvbGQoYnV0dG9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faG9sZEludGVyYWN0aW9uVGltZW91dCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyB0aGUgaW50ZXJuYWwgY2FyZXQgcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSBjYXJldCdzIHN0YXJ0IHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvc2l0aW9uRW5kIFRoZSBjYXJldCdzIGVuZCBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb246IG51bWJlciB8IG51bGwsIGVuZFBvc2l0aW9uID0gcG9zaXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIHRoaXMuX2NhcmV0UG9zaXRpb25FbmQgPSBlbmRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmVzIHRoZSBjdXJzb3IgcG9zaXRpb24gYnkgYSBnaXZlbiBhbW91bnRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGxlbmd0aCBSZXByZXNlbnRzIGJ5IGhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIGlucHV0IHNob3VsZCBiZSBtb3ZlZFxyXG4gICAqIEBwYXJhbSBtaW51cyBXaGV0aGVyIHRoZSBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSBsZWZ0IG9yIG5vdC5cclxuICAgKi9cclxuICBwcml2YXRlIF91cGRhdGVDYXJldFBvcyhsZW5ndGg6IG51bWJlciwgbWludXMgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgbmV3Q2FyZXRQb3MgPSB0aGlzLl91cGRhdGVDYXJldFBvc0FjdGlvbihsZW5ndGgsIG1pbnVzKTtcclxuICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24obmV3Q2FyZXRQb3MpO1xyXG4gICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uc2Nyb2xsVG8oe1xyXG4gICAgICAgIHRvcDogdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50LnNjcm9sbEhlaWdodCxcclxuICAgICAgfSBhcyBTY3JvbGxUb09wdGlvbnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gbWV0aG9kIG9mIHVwZGF0ZUNhcmV0UG9zXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBsZW5ndGggUmVwcmVzZW50cyBieSBob3cgbWFueSBjaGFyYWN0ZXJzIHRoZSBpbnB1dCBzaG91bGQgYmUgbW92ZWRcclxuICAgKiBAcGFyYW0gbWludXMgV2hldGhlciB0aGUgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgbGVmdCBvciBub3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdXBkYXRlQ2FyZXRQb3NBY3Rpb24obGVuZ3RoOiBudW1iZXIsIG1pbnVzID0gZmFsc2UpIHtcclxuICAgIGxldCBjYXJldFBvc2l0aW9uID0gdGhpcy5fY2FyZXRQb3NpdGlvbjtcclxuXHJcbiAgICBpZiAoY2FyZXRQb3NpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChtaW51cykge1xyXG4gICAgICAgIGlmIChjYXJldFBvc2l0aW9uID4gMCkgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gLSBsZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb24gKyBsZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FyZXRQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYW4gYW1vdW50IG9mIGNoYXJhY3RlcnMgYmVmb3JlIGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHBvc2l0aW9uIFRoZSAoY3Vyc29yKSBwb3NpdGlvbiBmcm9tIHdoZXJlIHRoZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSByZW1vdmVkXHJcbiAgICogQHBhcmFtIG1vdmVDYXJldCBXaGV0aGVyIHRvIHVwZGF0ZSBpbnB1dCBjdXJzb3JcclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVBdChzb3VyY2U6IHN0cmluZywgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLCBwb3NpdGlvbkVuZCA9IHNvdXJjZS5sZW5ndGgsIG1vdmVDYXJldCA9IGZhbHNlKSB7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IDAgJiYgcG9zaXRpb25FbmQgPT09IDApIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA9PT0gcG9zaXRpb25FbmQpIHtcclxuICAgICAgbGV0IHByZXZUd29DaGFycztcclxuICAgICAgbGV0IGVtb2ppTWF0Y2hlZDtcclxuICAgICAgY29uc3QgZW1vamlNYXRjaGVkUmVnID0gLyhbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdKS9nO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEVtb2ppcyBhcmUgbWFkZSBvdXQgb2YgdHdvIGNoYXJhY3RlcnMsIHNvIHdlIG11c3QgdGFrZSBhIGN1c3RvbSBhcHByb2FjaCB0byB0cmltIHRoZW0uXHJcbiAgICAgICAqIEZvciBtb3JlIGluZm86IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGVcclxuICAgICAgICovXHJcbiAgICAgIGlmIChwb3NpdGlvbiAmJiBwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbiAtIDIsIHBvc2l0aW9uKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDIpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygyLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnN1YnN0cmluZygwLCBwb3NpdGlvbiAtIDEpICsgc291cmNlLnN1YnN0cmluZyhwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAobW92ZUNhcmV0KSB0aGlzLl91cGRhdGVDYXJldFBvcygxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJldlR3b0NoYXJzID0gc291cmNlLnNsaWNlKC0yKTtcclxuICAgICAgICBlbW9qaU1hdGNoZWQgPSBwcmV2VHdvQ2hhcnMubWF0Y2goZW1vamlNYXRjaGVkUmVnKTtcclxuXHJcbiAgICAgICAgaWYgKGVtb2ppTWF0Y2hlZCkge1xyXG4gICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKDAsIC0yKTtcclxuICAgICAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKDIsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgICAgaWYgKG1vdmVDYXJldCkgdGhpcy5fdXBkYXRlQ2FyZXRQb3MoMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRwdXQgPSBzb3VyY2Uuc2xpY2UoMCwgcG9zaXRpb24pICsgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKTtcclxuICAgICAgaWYgKG1vdmVDYXJldCkge1xyXG4gICAgICAgIHRoaXMuX3NldENhcmV0UG9zaXRpb24ocG9zaXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dHB1dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBzdHJpbmcgdG8gdGhlIGlucHV0IGF0IGEgZ2l2ZW4gcG9zaXRpb25cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGlucHV0XHJcbiAgICogQHBhcmFtIHN0ciBUaGUgc3RyaW5nIHRvIGFkZFxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBUaGUgKGN1cnNvcikgcG9zaXRpb24gd2hlcmUgdGhlIHN0cmluZyBzaG91bGQgYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gbW92ZUNhcmV0IFdoZXRoZXIgdG8gdXBkYXRlIHZpcnR1YWwta2V5Ym9hcmQgY3Vyc29yXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRkU3RyaW5nQXQoXHJcbiAgICBzb3VyY2U6IHN0cmluZyxcclxuICAgIHN0cjogc3RyaW5nLFxyXG4gICAgcG9zaXRpb24gPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgcG9zaXRpb25FbmQgPSBzb3VyY2UubGVuZ3RoLFxyXG4gICAgbW92ZUNhcmV0ID0gZmFsc2UsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5tYXhMZW5ndGggIT09IC0xICYmIHNvdXJjZS5sZW5ndGggPj0gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgb3V0cHV0O1xyXG5cclxuICAgIGlmICghcG9zaXRpb24gJiYgcG9zaXRpb24gIT09IDApIHtcclxuICAgICAgb3V0cHV0ID0gc291cmNlICsgc3RyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gW3NvdXJjZS5zbGljZSgwLCBwb3NpdGlvbiksIHN0ciwgc291cmNlLnNsaWNlKHBvc2l0aW9uRW5kKV0uam9pbignJyk7XHJcbiAgICAgIGlmIChtb3ZlQ2FyZXQpIHRoaXMuX3VwZGF0ZUNhcmV0UG9zKHN0ci5sZW5ndGgsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGRpc3BhdGNoIG5lY2Vzc2FyeSBrZXlib2FyZCBldmVudHMgdG8gY3VycmVudCBpbnB1dCBlbGVtZW50LlxyXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3VpZXZlbnRzL3Rvb2xzL2tleS1ldmVudC12aWV3ZXIuaHRtbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc3BhdGNoRXZlbnRzKGJ1dHRvbjogc3RyaW5nKSB7XHJcbiAgICBsZXQga2V5LCBjb2RlO1xyXG4gICAgaWYgKGJ1dHRvbi5pbmNsdWRlcygneycpICYmIGJ1dHRvbi5pbmNsdWRlcygnfScpKSB7XHJcbiAgICAgIC8vIENhcGl0YWxpemUgbmFtZVxyXG4gICAgICBrZXkgPSBidXR0b24uc2xpY2UoMSwgYnV0dG9uLmxlbmd0aCAtIDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGtleSA9IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcclxuICAgICAgY29kZSA9IGtleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleSA9IGJ1dHRvbjtcclxuICAgICAgY29kZSA9IE51bWJlci5pc0ludGVnZXIoTnVtYmVyKGJ1dHRvbikpID8gYERpZ2l0JHtidXR0b259YCA6IGBLZXkke2J1dHRvbi50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXZlbnRJbml0OiBLZXlib2FyZEV2ZW50SW5pdCA9IHtcclxuICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcclxuICAgICAgc2hpZnRLZXk6IHRoaXMubGF5b3V0TmFtZSA9PSAnc2hpZnQnLFxyXG4gICAgICBrZXk6IGtleSxcclxuICAgICAgY29kZTogY29kZSxcclxuICAgICAgbG9jYXRpb246IDAsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFNpbXVsYXRlIGFsbCBuZWVkZWQgZXZlbnRzIG9uIGJhc2UgZWxlbWVudFxyXG4gICAgdGhpcy5fYWN0aXZlSW5wdXRFbGVtZW50Py5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgZXZlbnRJbml0KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXByZXNzJywgZXZlbnRJbml0KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XHJcbiAgICB0aGlzLl9hY3RpdmVJbnB1dEVsZW1lbnQ/LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgZXZlbnRJbml0KSk7XHJcblxyXG4gICAgLy8gQW5kIHNldCBmb2N1cyB0byBpbnB1dFxyXG4gICAgdGhpcy5fZm9jdXNBY3RpdmVJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYW4gZXZlbnQgdGhhdCB3YXJyYW50cyBhIGN1cnNvciBwb3NpdGlvbiB1cGRhdGUgaXMgdHJpZ2dlcmVkXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NhcmV0RXZlbnRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB0YXJnZXRUYWdOYW1lID0gJyc7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUpIHtcclxuICAgICAgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNUZXh0SW5wdXQgPVxyXG4gICAgICB0YXJnZXRUYWdOYW1lID09PSAndGV4dGFyZWEnIHx8XHJcbiAgICAgICh0YXJnZXRUYWdOYW1lID09PSAnaW5wdXQnICYmIFsndGV4dCcsICdzZWFyY2gnLCAnZW1haWwnLCAncGFzc3dvcmQnLCAndXJsJywgJ3RlbCddLmluY2x1ZGVzKGV2ZW50LnRhcmdldC50eXBlKSk7XHJcblxyXG4gICAgY29uc3QgaXNLZXlib2FyZCA9XHJcbiAgICAgIGV2ZW50LnRhcmdldCA9PT0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IHx8XHJcbiAgICAgIChldmVudC50YXJnZXQgJiYgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xyXG5cclxuICAgIGNvbnN0IGlzSW5wdXRDb250YWluZXIgPVxyXG4gICAgICB0aGlzLl9hY3RpdmVJbnB1dENvbnRhaW5lciAmJlxyXG4gICAgICAoZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9hY3RpdmVJbnB1dENvbnRhaW5lciB8fCB0aGlzLl9hY3RpdmVJbnB1dENvbnRhaW5lci5jb250YWlucyhldmVudC50YXJnZXQpKTtcclxuXHJcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICBjb25zb2xlLmxvZyhgQ2xpY2sgb24gaW5wdXQgY29udGFpbmVyOiBcIiR7aXNJbnB1dENvbnRhaW5lcn1cIiwgQ2xpY2sgb24ga2V5Ym9hcmQ6IFwiJHtpc0tleWJvYXJkfVwiYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzVGV4dElucHV0ICYmIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCA9PSBldmVudC50YXJnZXQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRyYWNrcyBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxyXG4gICAgICAgKiBBcyBrZXlzIGFyZSBwcmVzc2VkLCB0ZXh0IHdpbGwgYmUgYWRkZWQvcmVtb3ZlZCBhdCB0aGF0IHBvc2l0aW9uIHdpdGhpbiB0aGUgaW5wdXQuXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCwgZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ0NhcmV0IGF0OicsXHJcbiAgICAgICAgICB0aGlzLl9jYXJldFBvc2l0aW9uLFxyXG4gICAgICAgICAgdGhpcy5fY2FyZXRQb3NpdGlvbkVuZCxcclxuICAgICAgICAgIGV2ZW50ICYmIGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICBldmVudCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVydXAnICYmIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB0aGlzLl9pc01vdXNlSG9sZCkge1xyXG4gICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBpZiB0aGUgdXNlciByZWxlYXNlcyB0aGUgYnV0dG9uIG91dHNpZGUgb2YgdGhlIHdpbmRvdywgdGhlIGtleWJvYXJkIGRvZXNuJ3QgZ2V0IHN0dWNrLlxyXG4gICAgICB0aGlzLmhhbmRsZUJ1dHRvblVwKCcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmICghaXNJbnB1dENvbnRhaW5lciAmJiAhaXNLZXlib2FyZCAmJiBldmVudD8udHlwZSAhPT0gJ3NlbGVjdGlvbmNoYW5nZScpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHdlIG11c3QgZW5zdXJlIGNhcmV0UG9zaXRpb24gZG9lc24ndCBwZXJzaXN0IG9uY2UgcmVhY3RpdmF0ZWQuXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLl9zZXRDYXJldFBvc2l0aW9uKG51bGwpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGVidWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgQ2FyZXQgcG9zaXRpb24gcmVzZXQgZHVlIHRvIFwiJHtldmVudD8udHlwZX1cIiBldmVudGAsIGV2ZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIENsb3NlIHBhbmVsXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLmNsb3NlUGFuZWwuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9jdXMgdG8gaW5wdXRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZm9jdXNBY3RpdmVJbnB1dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uZm9jdXMoKTtcclxuICAgIHRoaXMuX2FjdGl2ZUlucHV0RWxlbWVudD8uc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5fY2FyZXRQb3NpdGlvbiwgdGhpcy5fY2FyZXRQb3NpdGlvbkVuZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kZWwgaGlnaGxpZ2h0IG9uIGtleSBkb3duXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqIEBwYXJhbSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2hhbmRsZUhpZ2hsaWdodEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ1dHRvblByZXNzZWQgPSB0aGlzLl9nZXRLZXlib2FyZExheW91dEtleShldmVudCk7XHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhY3RpdmUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5fc2V0QWN0aXZlQnV0dG9uKGJ1dHRvblByZXNzZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGVsIGhpZ2hsaWdodCBvbiBrZXkgdXBcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBLZXlib2FyZEV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSGlnaGxpZ2h0S2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ1dHRvblByZXNzZWQgPSB0aGlzLl9nZXRLZXlib2FyZExheW91dEtleShldmVudCk7XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhY3RpdmUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5fcmVtb3ZlQWN0aXZlQnV0dG9uKGJ1dHRvblByZXNzZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhbnNmb3JtcyBhIEtleWJvYXJkRXZlbnQncyBcImtleS5jb2RlXCIgc3RyaW5nIGludG8gYSB2aXJ0dWFsLWtleWJvYXJkIGxheW91dCBmb3JtYXRcclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBLZXlib2FyZEV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0S2V5Ym9hcmRMYXlvdXRLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGxldCBvdXRwdXQgPSAnJztcclxuICAgIGNvbnN0IGtleUlkID0gZXZlbnQuY29kZSB8fCBldmVudC5rZXk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBrZXlJZD8uaW5jbHVkZXMoJ1NwYWNlJykgfHxcclxuICAgICAga2V5SWQ/LmluY2x1ZGVzKCdOdW1wYWQnKSB8fFxyXG4gICAgICBrZXlJZD8uaW5jbHVkZXMoJ0JhY2tzcGFjZScpIHx8XHJcbiAgICAgIGtleUlkPy5pbmNsdWRlcygnQ2Fwc0xvY2snKSB8fFxyXG4gICAgICBrZXlJZD8uaW5jbHVkZXMoJ01ldGEnKVxyXG4gICAgKSB7XHJcbiAgICAgIG91dHB1dCA9IGB7JHtldmVudC5jb2RlfX1gIHx8ICcnO1xyXG4gICAgfSBlbHNlIGlmIChrZXlJZD8uaW5jbHVkZXMoJ0NvbnRyb2wnKSB8fCBrZXlJZD8uaW5jbHVkZXMoJ1NoaWZ0JykgfHwga2V5SWQ/LmluY2x1ZGVzKCdBbHQnKSkge1xyXG4gICAgICBvdXRwdXQgPSBgeyR7ZXZlbnQua2V5fX1gIHx8ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0cHV0ID0gZXZlbnQua2V5IHx8ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gMSA/IG91dHB1dD8udG9Mb3dlckNhc2UoKSA6IG91dHB1dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhY3RpdmUgY2xhc3MgaW4gYnV0dG9uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYnV0dG9uTmFtZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NldEFjdGl2ZUJ1dHRvbihidXR0b25OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpLm5hbWVkSXRlbShidXR0b25OYW1lKTtcclxuICAgIGlmIChub2RlICYmIG5vZGUuY2xhc3NMaXN0KSB7XHJcbiAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCh0aGlzLl9hY3RpdmVCdXR0b25DbGFzcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYWN0aXZlIGJ1dHRvblxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJ1dHRvbk5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIF9yZW1vdmVBY3RpdmVCdXR0b24oYnV0dG9uTmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xyXG4gICAgaWYgKGJ1dHRvbk5hbWUpIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLm5hbWVkSXRlbShidXR0b25OYW1lKTtcclxuICAgICAgaWYgKG5vZGUgJiYgbm9kZS5jbGFzc0xpc3QpIHtcclxuICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fYWN0aXZlQnV0dG9uQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbm9kZXNbaV0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9hY3RpdmVCdXR0b25DbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRvdWNoLWtleWJvYXJkXCIgW2NsYXNzXT1cIidsYXlvdXQtJyArIGxheW91dE1vZGUgKyAnLScgKyBsYXlvdXROYW1lXCI+XHJcbiAgQGZvciAocm93IG9mIGxvY2FsZS5sYXlvdXRzW2xheW91dE1vZGUgKyBcIl9cIiArIGxheW91dE5hbWVdOyB0cmFjayByb3dbMF0pIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ0b3VjaC1rZXlib2FyZC1yb3dcIj5cclxuICAgICAgQGZvciAoa2V5IG9mIHJvdzsgdHJhY2sga2V5KSB7XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW25hbWVdPVwia2V5XCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2Rpcl09XCJsb2NhbGUuZGlyXCJcclxuICAgICAgICAgIGNsYXNzPVwidG91Y2gta2V5Ym9hcmQta2V5XCJcclxuICAgICAgICAgIFtjbGFzc109XCJnZXRCdXR0b25DbGFzcyhrZXkpXCJcclxuICAgICAgICAgIFthdHRyLmRhdGEtbGF5b3V0XT1cImxheW91dE1vZGVcIlxyXG4gICAgICAgICAgKHBvaW50ZXJ1cCk9XCJoYW5kbGVCdXR0b25VcChrZXksICRldmVudClcIlxyXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cImhhbmRsZUJ1dHRvbkRvd24oa2V5LCAkZXZlbnQpXCJcclxuICAgICAgICAgIChwb2ludGVyY2FuY2VsKT1cImhhbmRsZUJ1dHRvblVwKGtleSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICBbaW5uZXJIdG1sXT1cImdldEJ1dHRvbkRpc3BsYXlOYW1lKGtleSlcIlxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
@@ -103,6 +103,8 @@ export class NgxTouchKeyboardDirective {
103
103
  this._overlayRef.updateSize(this._getOverlaySize(this.fullScreenMode()));
104
104
  // Get the input element associated with the directive
105
105
  const inputElement = this._getInputElement();
106
+ // Get the container input element associated with the directive
107
+ const inputContainerElement = this._getOriginElement();
106
108
  // Set input to readonly on mobile devices to prevent the native keyboard from appearing
107
109
  if (this._isMobile)
108
110
  inputElement.readOnly = true;
@@ -111,6 +113,7 @@ export class NgxTouchKeyboardDirective {
111
113
  this._panelRef.instance.debug = this.debugMode();
112
114
  this._panelRef.instance.setLocale(this.locale());
113
115
  this._panelRef.instance.setActiveInput(inputElement);
116
+ this._panelRef.instance.activeInputContainer(inputContainerElement);
114
117
  this._panelRef.instance.closePanel.subscribe(() => this.closePanel());
115
118
  this.open.set(true);
116
119
  }
@@ -119,8 +122,10 @@ export class NgxTouchKeyboardDirective {
119
122
  */
120
123
  closePanel() {
121
124
  if (this._isMobile) {
122
- this._elementRef.nativeElement.readOnly = false;
123
- this._elementRef.nativeElement.blur();
125
+ // Get the input element and remove readonly mode
126
+ const inputElement = this._getInputElement();
127
+ inputElement.readOnly = false;
128
+ inputElement.blur();
124
129
  }
125
130
  this._overlayRef?.detach();
126
131
  this.open.set(false);
@@ -211,16 +216,19 @@ export class NgxTouchKeyboardDirective {
211
216
  }
212
217
  /**
213
218
  * Gets the input element associated with the directive.
214
- * This is necessary because when the directive is applied to an Ionic component (ion-input or ion-textarea),
215
- * the actual input element is nested inside the component's template.
216
219
  *
217
220
  * @private
218
221
  */
219
222
  _getInputElement() {
220
- if (['ION-INPUT', 'ION-TEXTAREA'].includes(this._elementRef.nativeElement.tagName)) {
221
- return this._elementRef.nativeElement.querySelector('input, textarea');
223
+ const el = this._elementRef.nativeElement;
224
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
225
+ return el;
222
226
  }
223
- return this._elementRef.nativeElement;
227
+ const input = el.querySelector('input, textarea');
228
+ if (!input) {
229
+ throw new Error('No input or textarea element found.');
230
+ }
231
+ return input;
224
232
  }
225
233
  /**
226
234
  * Gets the origin element for the keyboard panel.
@@ -264,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
264
272
  type: HostListener,
265
273
  args: ['ionFocus']
266
274
  }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssR0FFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBbUQsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHM0U7OztHQUdHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQUtFLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakM7OEdBRlksc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFLHdCQUF3QjtpQkFDbkM7O0FBS0Q7OztHQUdHO0FBUUgsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFVLGFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztRQUNuRCxjQUFTLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRSxTQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNsQixLQUFLLEVBQUUsc0JBQXNCO1NBQzlCLENBQUMsQ0FBQztRQUVI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Qyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7WUFDeEQsOENBQThDO1lBQzlDLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1FBQ3BELENBQUM7UUFFRCxlQUFlO1FBQ2YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0E5UFUseUJBQXlCO2tHQUF6Qix5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBUHJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFOzs7NENBR2dDO29CQUMxQyxRQUFRLEVBQUUsa0JBQWtCO2lCQUM3Qjs4QkFzQ0MsT0FBTztzQkFGTixZQUFZO3VCQUFDLE9BQU87O3NCQUNwQixZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiwgT3ZlcmxheVNpemVDb25maWcsIFBvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnQgfSBmcm9tICcuL25neC10b3VjaC1rZXlib2FyZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGUgfSBmcm9tICcuL0xvY2FsZS90eXBlJztcclxuXHJcbi8qKlxyXG4gKiBEaXJlY3RpdmUgYXBwbGllZCB0byBhbiBlbGVtZW50IHRvIG1ha2UgaXQgdXNhYmxlIGFzIGFuIG9yaWdpbiBmb3IgYW4ga2V5Ym9hcmQgdXNpbmcgYVxyXG4gKiBDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbmd4VG91Y2hLZXlib2FyZE9yaWdpbl0nLFxyXG4gIGV4cG9ydEFzOiAnbmd4VG91Y2hLZXlib2FyZE9yaWdpbicsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUb3VjaEtleWJvYXJkT3JpZ2luIHtcclxuICBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG59XHJcblxyXG4vKipcclxuICogVGhpcyBkaXJlY3RpdmUgcHJvdmlkZXMgbWV0aG9kcyB0byBvcGVuLCBjbG9zZSwgYW5kIHRvZ2dsZSB0aGUgdG91Y2gga2V5Ym9hcmQgcGFuZWwuXHJcbiAqIEl0IGFsc28gaGFuZGxlcyB0aGUgY3JlYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG92ZXJsYXkgdXNlZCB0byBkaXNwbGF5IHRoZSBrZXlib2FyZC5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiBgaW5wdXRbbmd4VG91Y2hLZXlib2FyZF0sXHJcbiAgICAgICAgICAgICB0ZXh0YXJlYVtuZ3hUb3VjaEtleWJvYXJkXSxcclxuICAgICAgICAgICAgIGlvbi1pbnB1dFtuZ3hUb3VjaEtleWJvYXJkXSxcclxuICAgICAgICAgICAgIGlvbi10ZXh0YXJlYVtuZ3hUb3VjaEtleWJvYXJkXWAsXHJcbiAgZXhwb3J0QXM6ICduZ3hUb3VjaEtleWJvYXJkJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neFRvdWNoS2V5Ym9hcmREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX292ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KTtcclxuICBwcml2YXRlIF9pc01vYmlsZSA9IC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG5cclxuICBvcGVuID0gbW9kZWwoZmFsc2UsIHtcclxuICAgIGFsaWFzOiAnbmd4VG91Y2hLZXlib2FyZE9wZW4nLFxyXG4gIH0pO1xyXG5cclxuICBvcGVuT25Gb2N1cyA9IGlucHV0KGZhbHNlLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRPcGVuT25Gb2N1cycsXHJcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgfSk7XHJcblxyXG4gIGxvY2FsZSA9IGlucHV0PExvY2FsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRMb2NhbGUnLFxyXG4gIH0pO1xyXG5cclxuICBkZWJ1Z01vZGUgPSBpbnB1dChmYWxzZSwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkRGVidWcnLFxyXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxyXG4gIH0pO1xyXG5cclxuICBmdWxsU2NyZWVuTW9kZSA9IGlucHV0KGZhbHNlLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRGdWxsU2NyZWVuJyxcclxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcclxuICB9KTtcclxuXHJcbiAgb3JpZ2luID0gaW5wdXQ8Tmd4VG91Y2hLZXlib2FyZE9yaWdpbiB8IG51bGw+KG51bGwsIHtcclxuICAgIGFsaWFzOiAnbmd4Q29ubmVjdGVkVG91Y2hLZXlib2FyZE9yaWdpbicsXHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgX292ZXJsYXlSZWYhOiBPdmVybGF5UmVmO1xyXG4gIHByaXZhdGUgX3BhbmVsUmVmITogQ29tcG9uZW50UmVmPE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnQ+O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpXHJcbiAgQEhvc3RMaXN0ZW5lcignaW9uRm9jdXMnKVxyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuT25Gb2N1cygpICYmICF0aGlzLm9wZW4oKSkge1xyXG4gICAgICB0aGlzLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIExpZmVjeWNsZSBob29rc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMub3BlbigpID8gdGhpcy5vcGVuUGFuZWwoKSA6IHRoaXMuY2xvc2VQYW5lbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gZGVzdHJveVxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gRGlzcG9zZSB0aGUgb3ZlcmxheVxyXG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHVibGljIG1ldGhvZHNcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGtleWJvYXJkIHBhbmVsXHJcbiAgICovXHJcbiAgb3BlblBhbmVsKCk6IHZvaWQge1xyXG4gICAgLy8gcmV0dXJuIGlmIHBhbmVsIGlzIGF0dGFjaGVkXHJcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZj8uaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIHRoZSBvdmVybGF5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZikge1xyXG4gICAgICB0aGlzLl9jcmVhdGVPdmVybGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2V0IG92ZXJsYXkgY2xhc3NcclxuICAgIGlmICh0aGlzLmZ1bGxTY3JlZW5Nb2RlKCkpIHtcclxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5hZGRQYW5lbENsYXNzKCduZ3gtdG91Y2gta2V5Ym9hcmQtZnVsbFNjcmVlbicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKCduZ3gtdG91Y2gta2V5Ym9hcmQtZnVsbFNjcmVlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBwb3NpdGlvbiB0aGUgb3ZlcmxheVxyXG4gICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3kodGhpcy5mdWxsU2NyZWVuTW9kZSgpKSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHNpemUgdGhlIG92ZXJsYXlcclxuICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh0aGlzLl9nZXRPdmVybGF5U2l6ZSh0aGlzLmZ1bGxTY3JlZW5Nb2RlKCkpKTtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGlucHV0IGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RpdmVcclxuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IHRoaXMuX2dldElucHV0RWxlbWVudCgpO1xyXG5cclxuICAgIC8vIFNldCBpbnB1dCB0byByZWFkb25seSBvbiBtb2JpbGUgZGV2aWNlcyB0byBwcmV2ZW50IHRoZSBuYXRpdmUga2V5Ym9hcmQgZnJvbSBhcHBlYXJpbmdcclxuICAgIGlmICh0aGlzLl9pc01vYmlsZSkgaW5wdXRFbGVtZW50LnJlYWRPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBBdHRhY2ggdGhlIHBvcnRhbCB0byB0aGUgb3ZlcmxheVxyXG4gICAgdGhpcy5fcGFuZWxSZWYgPSB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaChuZXcgQ29tcG9uZW50UG9ydGFsKE5neFRvdWNoS2V5Ym9hcmRDb21wb25lbnQpKTtcclxuICAgIHRoaXMuX3BhbmVsUmVmLmluc3RhbmNlLmRlYnVnID0gdGhpcy5kZWJ1Z01vZGUoKTtcclxuICAgIHRoaXMuX3BhbmVsUmVmLmluc3RhbmNlLnNldExvY2FsZSh0aGlzLmxvY2FsZSgpKTtcclxuICAgIHRoaXMuX3BhbmVsUmVmLmluc3RhbmNlLnNldEFjdGl2ZUlucHV0KGlucHV0RWxlbWVudCk7XHJcbiAgICB0aGlzLl9wYW5lbFJlZi5pbnN0YW5jZS5jbG9zZVBhbmVsLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlUGFuZWwoKSk7XHJcbiAgICB0aGlzLm9wZW4uc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2Uga2V5Ym9hcmQgcGFuZWxcclxuICAgKi9cclxuICBjbG9zZVBhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzTW9iaWxlKSB7XHJcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3ZlcmxheVJlZj8uZGV0YWNoKCk7XHJcbiAgICB0aGlzLm9wZW4uc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBrZXlib2FyZCBwYW5lbFxyXG4gICAqL1xyXG4gIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vcGVuKCkgPyB0aGlzLmNsb3NlUGFuZWwoKSA6IHRoaXMub3BlblBhbmVsKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBvdmVybGF5XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxyXG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXHJcbiAgICAgIHBhbmVsQ2xhc3M6ICduZ3gtdG91Y2gta2V5Ym9hcmQtb3ZlcmxheS1wYW5lJyxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ub29wKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBwb3NpdGlvbiBzdHJhdGVneVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZ1bGxzY3JlZW5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldFBvc2l0aW9uU3RyYXRlZ3koZnVsbHNjcmVlbjogYm9vbGVhbik6IFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgaWYgKGZ1bGxzY3JlZW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5ib3R0b20oJzAnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxyXG4gICAgICAucG9zaXRpb24oKVxyXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCkpXHJcbiAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxyXG4gICAgICAud2l0aFB1c2goKVxyXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG92ZXJsYXkgc2l6ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZ1bGxzY3JlZW5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldE92ZXJsYXlTaXplKGZ1bGxzY3JlZW46IGJvb2xlYW4pOiBPdmVybGF5U2l6ZUNvbmZpZyB7XHJcbiAgICBpZiAoZnVsbHNjcmVlbikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBtaW5XaWR0aDogJzEwMCUnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsXHJcbiAgICAgIG1heFdpZHRoOiB0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsXHJcbiAgICAgIG1pbldpZHRoOiAnMjYwcHgnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGlucHV0IGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RpdmUuXHJcbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3aGVuIHRoZSBkaXJlY3RpdmUgaXMgYXBwbGllZCB0byBhbiBJb25pYyBjb21wb25lbnQgKGlvbi1pbnB1dCBvciBpb24tdGV4dGFyZWEpLFxyXG4gICAqIHRoZSBhY3R1YWwgaW5wdXQgZWxlbWVudCBpcyBuZXN0ZWQgaW5zaWRlIHRoZSBjb21wb25lbnQncyB0ZW1wbGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0SW5wdXRFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHtcclxuICAgIGlmIChbJ0lPTi1JTlBVVCcsICdJT04tVEVYVEFSRUEnXS5pbmNsdWRlcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgb3JpZ2luIGVsZW1lbnQgZm9yIHRoZSBrZXlib2FyZCBwYW5lbC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0T3JpZ2luRWxlbWVudCgpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMub3JpZ2luKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luKCk/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIC8vIE1hdGVyaWFsIGZvcm0gZmllbGQgPD0gdjE0XHJcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1pbnB1dC1lbGVtZW50JykpIHtcclxuICAgICAgLy8gUmV0dXJuIFttYXQtZm9ybS1maWVsZC1mbGV4XSBlbGVtZW50XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF0ZXJpYWwgZm9ybSBmaWVsZCA+IHYxNFxyXG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtbWRjLWlucHV0LWVsZW1lbnQnKSkge1xyXG4gICAgICAvLyBSZXR1cm4gW21hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyXSBlbGVtZW50XHJcbiAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGU/LnBhcmVudE5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIGlucHV0XHJcbiAgICByZXR1cm4gZWxlbWVudDtcclxuICB9XHJcbn1cclxuIl19
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRvdWNoLWtleWJvYXJkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10b3VjaC1rZXlib2FyZC9zcmMvbGliL25neC10b3VjaC1rZXlib2FyZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssR0FFTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBbUQsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHM0U7OztHQUdHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQUpuQztRQUtFLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDakM7OEdBRlksc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtvQkFDcEMsUUFBUSxFQUFFLHdCQUF3QjtpQkFDbkM7O0FBS0Q7OztHQUdHO0FBUUgsTUFBTSxPQUFPLHlCQUF5QjtJQVB0QztRQVFVLGFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUE0QixDQUFBLENBQUMsQ0FBQztRQUNuRCxjQUFTLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRSxTQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNsQixLQUFLLEVBQUUsc0JBQXNCO1NBQzlCLENBQUMsQ0FBQztRQUVI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T0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBRS9DLDZCQUE2QjtRQUM3QixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUNwRCx1Q0FBdUM7WUFDdkMsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDO1lBQ3hELDhDQUE4QztZQUM5QyxPQUFPLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUNwRCxDQUFDO1FBRUQsZUFBZTtRQUNmLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OEdBMVFVLHlCQUF5QjtrR0FBekIseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQVByQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7OzRDQUdnQztvQkFDMUMsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7OEJBc0NDLE9BQU87c0JBRk4sWUFBWTt1QkFBQyxPQUFPOztzQkFDcEIsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlSZWYsIE92ZXJsYXlTaXplQ29uZmlnLCBQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3gtdG91Y2gta2V5Ym9hcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSAnLi9Mb2NhbGUvdHlwZSc7XHJcblxyXG4vKipcclxuICogRGlyZWN0aXZlIGFwcGxpZWQgdG8gYW4gZWxlbWVudCB0byBtYWtlIGl0IHVzYWJsZSBhcyBhbiBvcmlnaW4gZm9yIGFuIGtleWJvYXJkIHVzaW5nIGFcclxuICogQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneS5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW25neFRvdWNoS2V5Ym9hcmRPcmlnaW5dJyxcclxuICBleHBvcnRBczogJ25neFRvdWNoS2V5Ym9hcmRPcmlnaW4nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4VG91Y2hLZXlib2FyZE9yaWdpbiB7XHJcbiAgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIHByb3ZpZGVzIG1ldGhvZHMgdG8gb3BlbiwgY2xvc2UsIGFuZCB0b2dnbGUgdGhlIHRvdWNoIGtleWJvYXJkIHBhbmVsLlxyXG4gKiBJdCBhbHNvIGhhbmRsZXMgdGhlIGNyZWF0aW9uIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBvdmVybGF5IHVzZWQgdG8gZGlzcGxheSB0aGUga2V5Ym9hcmQuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogYGlucHV0W25neFRvdWNoS2V5Ym9hcmRdLFxyXG4gICAgICAgICAgICAgdGV4dGFyZWFbbmd4VG91Y2hLZXlib2FyZF0sXHJcbiAgICAgICAgICAgICBpb24taW5wdXRbbmd4VG91Y2hLZXlib2FyZF0sXHJcbiAgICAgICAgICAgICBpb24tdGV4dGFyZWFbbmd4VG91Y2hLZXlib2FyZF1gLFxyXG4gIGV4cG9ydEFzOiAnbmd4VG91Y2hLZXlib2FyZCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hUb3VjaEtleWJvYXJkRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9vdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xyXG4gIHByaXZhdGUgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pik7XHJcbiAgcHJpdmF0ZSBfaXNNb2JpbGUgPSAvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuXHJcbiAgb3BlbiA9IG1vZGVsKGZhbHNlLCB7XHJcbiAgICBhbGlhczogJ25neFRvdWNoS2V5Ym9hcmRPcGVuJyxcclxuICB9KTtcclxuXHJcbiAgb3Blbk9uRm9jdXMgPSBpbnB1dChmYWxzZSwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkT3Blbk9uRm9jdXMnLFxyXG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLFxyXG4gIH0pO1xyXG5cclxuICBsb2NhbGUgPSBpbnB1dDxMb2NhbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkTG9jYWxlJyxcclxuICB9KTtcclxuXHJcbiAgZGVidWdNb2RlID0gaW5wdXQoZmFsc2UsIHtcclxuICAgIGFsaWFzOiAnbmd4VG91Y2hLZXlib2FyZERlYnVnJyxcclxuICAgIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcclxuICB9KTtcclxuXHJcbiAgZnVsbFNjcmVlbk1vZGUgPSBpbnB1dChmYWxzZSwge1xyXG4gICAgYWxpYXM6ICduZ3hUb3VjaEtleWJvYXJkRnVsbFNjcmVlbicsXHJcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgfSk7XHJcblxyXG4gIG9yaWdpbiA9IGlucHV0PE5neFRvdWNoS2V5Ym9hcmRPcmlnaW4gfCBudWxsPihudWxsLCB7XHJcbiAgICBhbGlhczogJ25neENvbm5lY3RlZFRvdWNoS2V5Ym9hcmRPcmlnaW4nLFxyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIF9vdmVybGF5UmVmITogT3ZlcmxheVJlZjtcclxuICBwcml2YXRlIF9wYW5lbFJlZiE6IENvbXBvbmVudFJlZjxOZ3hUb3VjaEtleWJvYXJkQ29tcG9uZW50PjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxyXG4gIEBIb3N0TGlzdGVuZXIoJ2lvbkZvY3VzJylcclxuICBvbkZvY3VzKCkge1xyXG4gICAgaWYgKHRoaXMub3Blbk9uRm9jdXMoKSAmJiAhdGhpcy5vcGVuKCkpIHtcclxuICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gQCBMaWZlY3ljbGUgaG9va3NcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvKipcclxuICAgKiBPbiBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLm9wZW4oKSA/IHRoaXMub3BlblBhbmVsKCkgOiB0aGlzLmNsb3NlUGFuZWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGRlc3Ryb3lcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vIERpc3Bvc2UgdGhlIG92ZXJsYXlcclxuICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBrZXlib2FyZCBwYW5lbFxyXG4gICAqL1xyXG4gIG9wZW5QYW5lbCgpOiB2b2lkIHtcclxuICAgIC8vIHJldHVybiBpZiBwYW5lbCBpcyBhdHRhY2hlZFxyXG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSB0aGUgb3ZlcmxheSBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCBvdmVybGF5IGNsYXNzXHJcbiAgICBpZiAodGhpcy5mdWxsU2NyZWVuTW9kZSgpKSB7XHJcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcygnbmd4LXRvdWNoLWtleWJvYXJkLWZ1bGxTY3JlZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcygnbmd4LXRvdWNoLWtleWJvYXJkLWZ1bGxTY3JlZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgcG9zaXRpb24gdGhlIG92ZXJsYXlcclxuICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9nZXRQb3NpdGlvblN0cmF0ZWd5KHRoaXMuZnVsbFNjcmVlbk1vZGUoKSkpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBzaXplIHRoZSBvdmVybGF5XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUodGhpcy5fZ2V0T3ZlcmxheVNpemUodGhpcy5mdWxsU2NyZWVuTW9kZSgpKSk7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBpbnB1dCBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlyZWN0aXZlXHJcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLl9nZXRJbnB1dEVsZW1lbnQoKTtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGNvbnRhaW5lciBpbnB1dCBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlyZWN0aXZlXHJcbiAgICBjb25zdCBpbnB1dENvbnRhaW5lckVsZW1lbnQgPSB0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCk7XHJcblxyXG4gICAgLy8gU2V0IGlucHV0IHRvIHJlYWRvbmx5IG9uIG1vYmlsZSBkZXZpY2VzIHRvIHByZXZlbnQgdGhlIG5hdGl2ZSBrZXlib2FyZCBmcm9tIGFwcGVhcmluZ1xyXG4gICAgaWYgKHRoaXMuX2lzTW9iaWxlKSBpbnB1dEVsZW1lbnQucmVhZE9ubHkgPSB0cnVlO1xyXG5cclxuICAgIC8vIEF0dGFjaCB0aGUgcG9ydGFsIHRvIHRoZSBvdmVybGF5XHJcbiAgICB0aGlzLl9wYW5lbFJlZiA9IHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBDb21wb25lbnRQb3J0YWwoTmd4VG91Y2hLZXlib2FyZENvbXBvbmVudCkpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2UuZGVidWcgPSB0aGlzLmRlYnVnTW9kZSgpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2Uuc2V0TG9jYWxlKHRoaXMubG9jYWxlKCkpO1xyXG4gICAgdGhpcy5fcGFuZWxSZWYuaW5zdGFuY2Uuc2V0QWN0aXZlSW5wdXQoaW5wdXRFbGVtZW50KTtcclxuICAgIHRoaXMuX3BhbmVsUmVmLmluc3RhbmNlLmFjdGl2ZUlucHV0Q29udGFpbmVyKGlucHV0Q29udGFpbmVyRWxlbWVudCk7XHJcbiAgICB0aGlzLl9wYW5lbFJlZi5pbnN0YW5jZS5jbG9zZVBhbmVsLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlUGFuZWwoKSk7XHJcbiAgICB0aGlzLm9wZW4uc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2Uga2V5Ym9hcmQgcGFuZWxcclxuICAgKi9cclxuICBjbG9zZVBhbmVsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2lzTW9iaWxlKSB7XHJcbiAgICAgIC8vIEdldCB0aGUgaW5wdXQgZWxlbWVudCBhbmQgcmVtb3ZlIHJlYWRvbmx5IG1vZGVcclxuICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gdGhpcy5fZ2V0SW5wdXRFbGVtZW50KCk7XHJcbiAgICAgIGlucHV0RWxlbWVudC5yZWFkT25seSA9IGZhbHNlO1xyXG4gICAgICBpbnB1dEVsZW1lbnQuYmx1cigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fb3ZlcmxheVJlZj8uZGV0YWNoKCk7XHJcbiAgICB0aGlzLm9wZW4uc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBrZXlib2FyZCBwYW5lbFxyXG4gICAqL1xyXG4gIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vcGVuKCkgPyB0aGlzLmNsb3NlUGFuZWwoKSA6IHRoaXMub3BlblBhbmVsKCk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHRoZSBvdmVybGF5XHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxyXG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXHJcbiAgICAgIHBhbmVsQ2xhc3M6ICduZ3gtdG91Y2gta2V5Ym9hcmQtb3ZlcmxheS1wYW5lJyxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ub29wKCksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBwb3NpdGlvbiBzdHJhdGVneVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZ1bGxzY3JlZW5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldFBvc2l0aW9uU3RyYXRlZ3koZnVsbHNjcmVlbjogYm9vbGVhbik6IFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgaWYgKGZ1bGxzY3JlZW4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5ib3R0b20oJzAnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxyXG4gICAgICAucG9zaXRpb24oKVxyXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCkpXHJcbiAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKVxyXG4gICAgICAud2l0aFB1c2goKVxyXG4gICAgICAud2l0aFBvc2l0aW9ucyhbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG92ZXJsYXkgc2l6ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGZ1bGxzY3JlZW5cclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldE92ZXJsYXlTaXplKGZ1bGxzY3JlZW46IGJvb2xlYW4pOiBPdmVybGF5U2l6ZUNvbmZpZyB7XHJcbiAgICBpZiAoZnVsbHNjcmVlbikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBtaW5XaWR0aDogJzEwMCUnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsXHJcbiAgICAgIG1heFdpZHRoOiB0aGlzLl9nZXRPcmlnaW5FbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsXHJcbiAgICAgIG1pbldpZHRoOiAnMjYwcHgnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGlucHV0IGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RpdmUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldElucHV0RWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IGVsIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gZWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSBlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKTtcclxuXHJcbiAgICBpZiAoIWlucHV0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gaW5wdXQgb3IgdGV4dGFyZWEgZWxlbWVudCBmb3VuZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBvcmlnaW4gZWxlbWVudCBmb3IgdGhlIGtleWJvYXJkIHBhbmVsLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRPcmlnaW5FbGVtZW50KCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5vcmlnaW4oKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW4oKT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgLy8gTWF0ZXJpYWwgZm9ybSBmaWVsZCA8PSB2MTRcclxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWF0LWlucHV0LWVsZW1lbnQnKSkge1xyXG4gICAgICAvLyBSZXR1cm4gW21hdC1mb3JtLWZpZWxkLWZsZXhdIGVsZW1lbnRcclxuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYXRlcmlhbCBmb3JtIGZpZWxkID4gdjE0XHJcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1tZGMtaW5wdXQtZWxlbWVudCcpKSB7XHJcbiAgICAgIC8vIFJldHVybiBbbWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJdIGVsZW1lbnRcclxuICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8ucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gaW5wdXRcclxuICAgIHJldHVybiBlbGVtZW50O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1134,6 +1134,14 @@ class NgxTouchKeyboardComponent {
1134
1134
  }
1135
1135
  this.locale = value;
1136
1136
  }
1137
+ /**
1138
+ * Set active input container
1139
+ *
1140
+ * @param input Input container native element
1141
+ */
1142
+ activeInputContainer(input) {
1143
+ this._activeInputContainer = input;
1144
+ }
1137
1145
  /**
1138
1146
  * Set active input
1139
1147
  *
@@ -1531,6 +1539,11 @@ class NgxTouchKeyboardComponent {
1531
1539
  (targetTagName === 'input' && ['text', 'search', 'email', 'password', 'url', 'tel'].includes(event.target.type));
1532
1540
  const isKeyboard = event.target === this._elementRef.nativeElement ||
1533
1541
  (event.target && this._elementRef.nativeElement.contains(event.target));
1542
+ const isInputContainer = this._activeInputContainer &&
1543
+ (event.target === this._activeInputContainer || this._activeInputContainer.contains(event.target));
1544
+ if (this.debug) {
1545
+ console.log(`Click on input container: "${isInputContainer}", Click on keyboard: "${isKeyboard}"`);
1546
+ }
1534
1547
  if (isTextInput && this._activeInputElement == event.target) {
1535
1548
  /**
1536
1549
  * Tracks current cursor position
@@ -1546,7 +1559,7 @@ class NgxTouchKeyboardComponent {
1546
1559
  this.handleButtonUp('');
1547
1560
  return;
1548
1561
  }
1549
- else if (!isKeyboard && event?.type !== 'selectionchange') {
1562
+ else if (!isInputContainer && !isKeyboard && event?.type !== 'selectionchange') {
1550
1563
  /**
1551
1564
  * we must ensure caretPosition doesn't persist once reactivated.
1552
1565
  */
@@ -1772,6 +1785,8 @@ class NgxTouchKeyboardDirective {
1772
1785
  this._overlayRef.updateSize(this._getOverlaySize(this.fullScreenMode()));
1773
1786
  // Get the input element associated with the directive
1774
1787
  const inputElement = this._getInputElement();
1788
+ // Get the container input element associated with the directive
1789
+ const inputContainerElement = this._getOriginElement();
1775
1790
  // Set input to readonly on mobile devices to prevent the native keyboard from appearing
1776
1791
  if (this._isMobile)
1777
1792
  inputElement.readOnly = true;
@@ -1780,6 +1795,7 @@ class NgxTouchKeyboardDirective {
1780
1795
  this._panelRef.instance.debug = this.debugMode();
1781
1796
  this._panelRef.instance.setLocale(this.locale());
1782
1797
  this._panelRef.instance.setActiveInput(inputElement);
1798
+ this._panelRef.instance.activeInputContainer(inputContainerElement);
1783
1799
  this._panelRef.instance.closePanel.subscribe(() => this.closePanel());
1784
1800
  this.open.set(true);
1785
1801
  }
@@ -1788,8 +1804,10 @@ class NgxTouchKeyboardDirective {
1788
1804
  */
1789
1805
  closePanel() {
1790
1806
  if (this._isMobile) {
1791
- this._elementRef.nativeElement.readOnly = false;
1792
- this._elementRef.nativeElement.blur();
1807
+ // Get the input element and remove readonly mode
1808
+ const inputElement = this._getInputElement();
1809
+ inputElement.readOnly = false;
1810
+ inputElement.blur();
1793
1811
  }
1794
1812
  this._overlayRef?.detach();
1795
1813
  this.open.set(false);
@@ -1880,16 +1898,19 @@ class NgxTouchKeyboardDirective {
1880
1898
  }
1881
1899
  /**
1882
1900
  * Gets the input element associated with the directive.
1883
- * This is necessary because when the directive is applied to an Ionic component (ion-input or ion-textarea),
1884
- * the actual input element is nested inside the component's template.
1885
1901
  *
1886
1902
  * @private
1887
1903
  */
1888
1904
  _getInputElement() {
1889
- if (['ION-INPUT', 'ION-TEXTAREA'].includes(this._elementRef.nativeElement.tagName)) {
1890
- return this._elementRef.nativeElement.querySelector('input, textarea');
1905
+ const el = this._elementRef.nativeElement;
1906
+ if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
1907
+ return el;
1908
+ }
1909
+ const input = el.querySelector('input, textarea');
1910
+ if (!input) {
1911
+ throw new Error('No input or textarea element found.');
1891
1912
  }
1892
- return this._elementRef.nativeElement;
1913
+ return input;
1893
1914
  }
1894
1915
  /**
1895
1916
  * Gets the origin element for the keyboard panel.