igniteui-angular 13.2.10 → 13.2.13

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.
@@ -1,7 +1,7 @@
1
1
  import { ContentChildren, Directive, EventEmitter, HostBinding, Input, NgModule, Output } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import { noop, Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
4
+ import { startWith, takeUntil } from 'rxjs/operators';
5
5
  import { mkenum } from '../../core/utils';
6
6
  import { IgxRadioComponent, RadioLabelPosition } from '../../radio/radio.component';
7
7
  import { IgxRippleModule } from '../ripple/ripple.directive';
@@ -114,6 +114,11 @@ export class IgxRadioGroupDirective {
114
114
  * @internal
115
115
  */
116
116
  this.destroy$ = new Subject();
117
+ /**
118
+ * @hidden
119
+ * @internal
120
+ */
121
+ this.queryChange$ = new Subject();
117
122
  }
118
123
  /**
119
124
  * Sets/gets the `value` attribute.
@@ -259,8 +264,9 @@ export class IgxRadioGroupDirective {
259
264
  // The initial value can possibly be set by NgModel and it is possible that
260
265
  // the OnInit of the NgModel occurs after the OnInit of this class.
261
266
  this._isInitialized = true;
262
- setTimeout(() => {
263
- this._initRadioButtons();
267
+ this.radioButtons.changes.pipe(startWith(0), takeUntil(this.destroy$)).subscribe(() => {
268
+ this.queryChange$.next();
269
+ setTimeout(() => this._initRadioButtons());
264
270
  });
265
271
  }
266
272
  /**
@@ -338,7 +344,7 @@ export class IgxRadioGroupDirective {
338
344
  button.checked = true;
339
345
  this._selected = button;
340
346
  }
341
- button.change.pipe(takeUntil(this.destroy$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));
347
+ button.change.pipe(takeUntil(button.destroy$), takeUntil(this.destroy$), takeUntil(this.queryChange$)).subscribe((ev) => this._selectedRadioButtonChanged(ev));
342
348
  });
343
349
  }
344
350
  }
@@ -475,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
475
481
  imports: [IgxRippleModule]
476
482
  }]
477
483
  }] });
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFkaW8vcmFkaW8tZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYSxNQUFNLEVBQzVGLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBeUIsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDO0lBQ3RDLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFFBQVEsRUFBRSxVQUFVO0NBQ3ZCLENBQUMsQ0FBQztBQUdILElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQUxuQztRQTJJSTs7Ozs7Ozs7OztXQVVHO1FBQ0gsNERBQTREO1FBQ2xDLFdBQU0sR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFFbEg7Ozs7O1dBS0c7UUFFSSxhQUFRLEdBQUcsaUJBQWlCLENBQUM7UUFFcEM7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LEVBQUUsaUJBQWlCLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ01vZHVsZSwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG1rZW51bSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUNoYW5nZVJhZGlvRXZlbnRBcmdzLCBJZ3hSYWRpb0NvbXBvbmVudCwgUmFkaW9MYWJlbFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vcmFkaW8vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IElneFJpcHBsZU1vZHVsZSB9IGZyb20gJy4uL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBSYWRpbyBHcm91cCBhbGlnbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFJhZGlvR3JvdXBBbGlnbm1lbnQgPSBta2VudW0oe1xuICAgIGhvcml6b250YWw6ICdob3Jpem9udGFsJyxcbiAgICB2ZXJ0aWNhbDogJ3ZlcnRpY2FsJ1xufSk7XG5leHBvcnQgdHlwZSBSYWRpb0dyb3VwQWxpZ25tZW50ID0gdHlwZW9mIFJhZGlvR3JvdXBBbGlnbm1lbnRba2V5b2YgdHlwZW9mIFJhZGlvR3JvdXBBbGlnbm1lbnRdO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBSYWRpbyBncm91cCBkaXJlY3RpdmUgcmVuZGVycyBzZXQgb2YgcmFkaW8gYnV0dG9ucy5cbiAqXG4gKiBAaWd4TW9kdWxlIElneFJhZGlvTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1yYWRpby10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyByYWRpb2dyb3VwLCByYWRpbywgYnV0dG9uLCBpbnB1dFxuICpcbiAqIEBpZ3hHcm91cCBEYXRhIEVudHJ5ICYgRGlzcGxheVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIFJhZGlvIEdyb3VwIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgYSBzaW5nbGUgb3B0aW9uIGZyb20gYW4gYXZhaWxhYmxlIHNldCBvZiBvcHRpb25zIHRoYXQgYXJlIGxpc3RlZCBzaWRlIGJ5IHNpZGUuXG4gKlxuICogQGV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LXJhZGlvLWdyb3VwIG5hbWU9XCJyYWRpb0dyb3VwXCI+XG4gKiAgIDxpZ3gtcmFkaW8gKm5nRm9yPVwibGV0IGl0ZW0gb2YgWydGb28nLCAnQmFyJywgJ0JheiddXCIgdmFsdWU9XCJ7e2l0ZW19fVwiPlxuICogICAgICB7e2l0ZW19fVxuICogICA8L2lneC1yYWRpbz5cbiAqIDwvaWd4LXJhZGlvLWdyb3VwPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIGV4cG9ydEFzOiAnaWd4UmFkaW9Hcm91cCcsXG4gICAgc2VsZWN0b3I6ICdpZ3gtcmFkaW8tZ3JvdXAsIFtpZ3hSYWRpb0dyb3VwXScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneFJhZGlvR3JvdXBEaXJlY3RpdmUsIG11bHRpOiB0cnVlIH1dXG59KVxuZXhwb3J0IGNsYXNzIElneFJhZGlvR3JvdXBEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXF1aXJlZDogYm9vbGVhbiB8ICcnO1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Rpc2FibGVkOiBib29sZWFuIHwgJyc7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcmFkaW9CdXR0b25zID0gIHRoaXMucmFkaW9Hcm91cC5yYWRpb0J1dHRvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hSYWRpb0NvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwdWJsaWMgcmFkaW9CdXR0b25zOiBRdWVyeUxpc3Q8SWd4UmFkaW9Db21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgdmFsdWVgIGF0dHJpYnV0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgW3ZhbHVlXSA9IFwiJ3JhZGlvQnV0dG9uVmFsdWUnXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RSYWRpb0J1dHRvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgbmFtZWAgYXR0cmlidXRlIG9mIHRoZSByYWRpbyBncm91cCBjb21wb25lbnQuIEFsbCBjaGlsZCByYWRpbyBidXR0b25zIGluaGVyaXRzIHRoaXMgbmFtZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgbmFtZSA9IFwiUmFkaW8xXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IG5hbWUobmV3VmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fbmFtZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX25hbWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NldFJhZGlvQnV0dG9uTmFtZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB3aGV0aGVyIHRoZSByYWRpbyBncm91cCBpcyByZXF1aXJlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSWYgbm90IHNldCwgYHJlcXVpcmVkYCB3aWxsIGhhdmUgdmFsdWUgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgW3JlcXVpcmVkXSA9IFwidHJ1ZVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gKHZhbHVlIGFzIGFueSkgPT09ICcnIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbnNSZXF1aXJlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTIuMi4wXG4gICAgICpcbiAgICAgKiBBbiBpbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGUgcmFkaW8gZ3JvdXAuIEJ5IGRlZmF1bHQgaXQncyBmYWxzZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIGRpc2FibGVkPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gKHZhbHVlIGFzIGFueSkgPT09ICcnIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLnNldERpc2FibGVkU3RhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGluIHZlcnNpb24gMTIuMi4wXG4gICAgICpcbiAgICAgKiBTZXRzL2dldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBgbGFiZWxgIGluIHRoZSBjaGlsZCByYWRpbyBidXR0b25zLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3Qgc2V0LCBgbGFiZWxQb3NpdGlvbmAgd2lsbCBoYXZlIHZhbHVlIGBcImFmdGVyXCJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBsYWJlbFBvc2l0aW9uID0gXCJiZWZvcmVcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbGFiZWxQb3NpdGlvbigpOiBSYWRpb0xhYmVsUG9zaXRpb24gfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxQb3NpdGlvbjtcbiAgICB9XG4gICAgcHVibGljIHNldCBsYWJlbFBvc2l0aW9uKG5ld1ZhbHVlOiBSYWRpb0xhYmVsUG9zaXRpb24gfCBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsUG9zaXRpb24gIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbFBvc2l0aW9uID0gbmV3VmFsdWUgPT09IFJhZGlvTGFiZWxQb3NpdGlvbi5CRUZPUkUgPyBSYWRpb0xhYmVsUG9zaXRpb24uQkVGT1JFIDogUmFkaW9MYWJlbFBvc2l0aW9uLkFGVEVSO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFkaW9CdXR0b25MYWJlbFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHNlbGVjdGVkIGNoaWxkIHJhZGlvIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzZWxlY3RlZEJ1dHRvbiA9IHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZDtcbiAgICAgKiB0aGlzLnJhZGlvR3JvdXAuc2VsZWN0ZWQgPSBzZWxlY3RlZEJ1dHRvbjtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG4gICAgcHVibGljIHNldCBzZWxlY3RlZChzZWxlY3RlZDogSWd4UmFkaW9Db21wb25lbnQgfCBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWQgPyBzZWxlY3RlZC52YWx1ZSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIHJhZGlvIGdyb3VwIGB2YWx1ZWAgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgc2VsZWN0ZWQgYElneFJhZGlvQ29tcG9uZW50YCBhbmQgdGhlIGB2YWx1ZWAgcHJvcGVydHkgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCAoY2hhbmdlKT1cImhhbmRsZXIoJGV2ZW50KVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8SUNoYW5nZVJhZGlvRXZlbnRBcmdzPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYW5nZVJhZGlvRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtcmFkaW8tZ3JvdXAnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtcmFkaW8tZ3JvdXAnO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB2ZXJ0aWNhbCBhbGlnbm1lbnQgdG8gdGhlIHJhZGlvIGdyb3VwLCBpZiBgYWxpZ25tZW50YCBpcyBzZXQgdG8gYHZlcnRpY2FsYC5cbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBhbGlnbm1lbnQgaXMgaG9yaXpvbnRhbC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgYWxpZ25tZW50PVwidmVydGljYWxcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1yYWRpby1ncm91cC0tdmVydGljYWwnKVxuICAgIHByaXZhdGUgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFsaWdubWVudCBvZiB0aGUgYGlneC1yYWRpby1ncm91cGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJNeVJhZGlvR3JvdXBcIilcbiAgICAgKiBwdWJsaWMgcmFkaW9Hcm91cDogSWd4UmFkaW9Hcm91cERpcmVjdGl2ZTtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgcmFkaW9BbGlnbm1lbnQgPSB0aGlzLnJhZGlvR3JvdXAuYWxpZ25tZW50O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgYWxpZ25tZW50KCk6IFJhZGlvR3JvdXBBbGlnbm1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IFJhZGlvR3JvdXBBbGlnbm1lbnQudmVydGljYWwgOiBSYWRpb0dyb3VwQWxpZ25tZW50Lmhvcml6b250YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93cyB5b3UgdG8gc2V0IHRoZSByYWRpbyBncm91cCBhbGlnbm1lbnQuXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlIGBSYWRpb0dyb3VwQWxpZ25tZW50Lmhvcml6b250YWxgIChkZWZhdWx0KSBhbmQgYFJhZGlvR3JvdXBBbGlnbm1lbnQudmVydGljYWxgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgYWxpZ25tZW50ID0gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICAgKiAvLy4uXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgW2FsaWdubWVudF09XCJhbGlnbm1lbnRcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGFsaWdubWVudCh2YWx1ZTogUmFkaW9Hcm91cEFsaWdubWVudCkge1xuICAgICAgICB0aGlzLnZlcnRpY2FsID0gdmFsdWUgPT09IFJhZGlvR3JvdXBBbGlnbm1lbnQudmVydGljYWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYW1lID0gYGlneC1yYWRpby1ncm91cC0ke25leHRJZCsrfWA7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBhbnkgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZDogSWd4UmFkaW9Db21wb25lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9sYWJlbFBvc2l0aW9uOiBSYWRpb0xhYmVsUG9zaXRpb24gfCBzdHJpbmcgPSAnYWZ0ZXInO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBjYW4gcG9zc2libHkgYmUgc2V0IGJ5IE5nTW9kZWwgYW5kIGl0IGlzIHBvc3NpYmxlIHRoYXRcbiAgICAgICAgLy8gdGhlIE9uSW5pdCBvZiB0aGUgTmdNb2RlbCBvY2N1cnMgYWZ0ZXIgdGhlIE9uSW5pdCBvZiB0aGlzIGNsYXNzLlxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRSYWRpb0J1dHRvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgXCJjaGVja2VkXCIgcHJvcGVydHkgdmFsdWUgb24gdGhlIHJhZGlvIGlucHV0IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBjb25zaXN0ZW50IHRvIHRoZSBjdXJyZW50IHJhZGlvIGJ1dHRvbi5cbiAgICAgKiBJZiBpdCBpcywgdGhlIGNoZWNrZWQgYXR0cmlidXRlIHdpbGwgaGF2ZSB2YWx1ZSBgdHJ1ZWAgYW5kIHNlbGVjdGVkIHByb3BlcnR5IHdpbGwgY29udGFpbiB0aGUgc2VsZWN0ZWQgYElneFJhZGlvQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMucmFkaW9Hcm91cC53cml0ZVZhbHVlKCdyYWRpb0J1dHRvblZhbHVlJyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGNvbnRyb2wgdmFsdWUgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24uc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGNvbnRyb2wgaXMgdG91Y2hlZC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24ucmVnaXN0ZXJPblRvdWNoZWQoZm4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaW5pdFJhZGlvQnV0dG9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHsgbmFtZTogdGhpcy5fbmFtZSwgcmVxdWlyZWQ6IHRoaXMuX3JlcXVpcmVkIH07XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGJ1dHRvbiwgcHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgaWYoYnV0dG9uLmRpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoYnV0dG9uLmxhYmVsUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24ubGFiZWxQb3NpdGlvbiA9IHRoaXMuX2xhYmVsUG9zaXRpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1dHRvbi52YWx1ZSA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGJ1dHRvbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBidXR0b24uY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2KSA9PiB0aGlzLl9zZWxlY3RlZFJhZGlvQnV0dG9uQ2hhbmdlZChldikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRSYWRpb0J1dHRvbkNoYW5nZWQoYXJnczogSUNoYW5nZVJhZGlvRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSBidXR0b24uaWQgPT09IGFyZ3MucmFkaW8uaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gYXJncy5yYWRpbztcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBhcmdzLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXRSYWRpb0J1dHRvbk5hbWVzKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5uYW1lID0gdGhpcy5fbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdFJhZGlvQnV0dG9uKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBubyB2YWx1ZSAtIHVuY2hlY2sgYWxsIHJhZGlvIGJ1dHRvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1dHRvbi5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09PSBidXR0b24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGVkIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICE9PSBidXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGJ1dHRvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1zZWxlY3RlZCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXRSYWRpb0J1dHRvbkxhYmVsUG9zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLmxhYmVsUG9zaXRpb24gPSB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25zUmVxdWlyZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnJlcXVpcmVkID0gdGhpcy5fcmVxdWlyZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgSWd4UmFkaW9Db21wb25lbnRdLFxuICAgIGV4cG9ydHM6IFtJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlLCBJZ3hSYWRpb0NvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0lneFJpcHBsZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmFkaW9Nb2R1bGUge31cbiJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RpcmVjdGl2ZXMvcmFkaW8vcmFkaW8tZ3JvdXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYSxNQUFNLEVBQzVGLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQXlCLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUU3RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztJQUN0QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixRQUFRLEVBQUUsVUFBVTtDQUN2QixDQUFDLENBQUM7QUFHSCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFFZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQU1ILE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUEySUk7Ozs7Ozs7Ozs7V0FVRztRQUNILDREQUE0RDtRQUNsQyxXQUFNLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRWxIOzs7OztXQUtHO1FBRUksYUFBUSxHQUFHLGlCQUFpQixDQUFDO1FBRXBDOzs7Ozs7OztXQVFHO1FBRUssYUFBUSxHQUFHLEtBQUssQ0FBQztRQStCekI7OztXQUdHO1FBQ0ssc0JBQWlCLEdBQXFCLElBQUksQ0FBQztRQUNuRDs7O1dBR0c7UUFDSyxVQUFLLEdBQUcsbUJBQW1CLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDOUM7OztXQUdHO1FBQ0ssV0FBTSxHQUFRLElBQUksQ0FBQztRQUMzQjs7O1dBR0c7UUFDSyxjQUFTLEdBQTZCLElBQUksQ0FBQztRQUNuRDs7O1dBR0c7UUFDSyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUMvQjs7O1dBR0c7UUFDSyxtQkFBYyxHQUFnQyxPQUFPLENBQUM7UUFDOUQ7OztXQUdHO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztRQUMxQjs7O1dBR0c7UUFDSyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzFCOzs7V0FHRztRQUNLLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzFDOzs7V0FHRztRQUNLLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztLQW9NeEM7SUE5YUc7Ozs7Ozs7T0FPRztJQUNILElBQ1csS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxLQUFLLENBQUMsUUFBYTtRQUMxQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUNXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLFFBQWdCO1FBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7WUFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQ1csUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFJLEtBQWEsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsUUFBUSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBSSxLQUFhLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILElBQ1csYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQVcsYUFBYSxDQUFDLFFBQXFDO1FBQzFELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLEtBQUssa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztZQUNwSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQ1csUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsUUFBa0M7UUFDbEQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQXFDRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztJQUN6RixDQUFDO0lBQ0Q7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQVcsU0FBUyxDQUFDLEtBQTBCO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxLQUFLLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztJQUMzRCxDQUFDO0lBcUREOzs7T0FHRztJQUNJLGtCQUFrQjtRQUNyQiwyRUFBMkU7UUFDM0UsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLFVBQVUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEVBQW9CO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLFVBQW1CO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNqQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLEVBQWM7UUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVc7UUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxpQkFBaUI7UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFN0IsSUFBRyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUNwQztnQkFFRCxJQUFHLE1BQU0sQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO29CQUNuQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQzlDO2dCQUVELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUM5QixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7aUJBQzNCO2dCQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQy9CLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLDJCQUEyQixDQUFDLElBQTJCO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV6QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQjtRQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtvQkFDdEIsdUNBQXVDO29CQUN2QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3FCQUMxQjtpQkFDSjtxQkFBTTtvQkFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRTt3QkFDOUIsa0JBQWtCO3dCQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFOzRCQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQzt5QkFDM0I7d0JBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7NEJBQ2pCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt5QkFDbkI7cUJBQ0o7eUJBQU07d0JBQ0gsc0JBQXNCO3dCQUN0QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7NEJBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3lCQUMxQjtxQkFDSjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssNEJBQTRCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNqQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyx3QkFBd0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7bUhBMWJRLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHNYQUZwQixDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsdURBYTVFLGlCQUFpQjsyRkFYekIsc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHdCQUF3QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDaEc7OEJBWXFFLFlBQVk7c0JBQTdFLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQVc5QyxLQUFLO3NCQURmLEtBQUs7Z0JBb0JLLElBQUk7c0JBRGQsS0FBSztnQkF1QkssUUFBUTtzQkFEbEIsS0FBSztnQkFvQkssUUFBUTtzQkFEbEIsS0FBSztnQkF1QkssYUFBYTtzQkFEdkIsS0FBSztnQkFxQkssUUFBUTtzQkFEbEIsS0FBSztnQkF1Qm9CLE1BQU07c0JBQS9CLE1BQU07Z0JBU0EsUUFBUTtzQkFEZCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFhNUIsUUFBUTtzQkFEZixXQUFXO3VCQUFDLGlDQUFpQztnQkFjbkMsU0FBUztzQkFEbkIsS0FBSzs7QUEwUVY7O0dBRUc7QUFNSCxNQUFNLE9BQU8sY0FBYzs7MkdBQWQsY0FBYzs0R0FBZCxjQUFjLGlCQXJjZCxzQkFBc0IsRUFpY1EsaUJBQWlCLGFBRTlDLGVBQWUsYUFuY2hCLHNCQUFzQixFQWtjRyxpQkFBaUI7NEdBRzFDLGNBQWMsWUFGZCxDQUFDLGVBQWUsQ0FBQzsyRkFFakIsY0FBYztrQkFMMUIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQztvQkFDekQsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ01vZHVsZSwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWtlbnVtIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJQ2hhbmdlUmFkaW9FdmVudEFyZ3MsIElneFJhZGlvQ29tcG9uZW50LCBSYWRpb0xhYmVsUG9zaXRpb24gfSBmcm9tICcuLi8uLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UmlwcGxlTW9kdWxlIH0gZnJvbSAnLi4vcmlwcGxlL3JpcHBsZS5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIFJhZGlvIEdyb3VwIGFsaWdubWVudFxuICovXG5leHBvcnQgY29uc3QgUmFkaW9Hcm91cEFsaWdubWVudCA9IG1rZW51bSh7XG4gICAgaG9yaXpvbnRhbDogJ2hvcml6b250YWwnLFxuICAgIHZlcnRpY2FsOiAndmVydGljYWwnXG59KTtcbmV4cG9ydCB0eXBlIFJhZGlvR3JvdXBBbGlnbm1lbnQgPSB0eXBlb2YgUmFkaW9Hcm91cEFsaWdubWVudFtrZXlvZiB0eXBlb2YgUmFkaW9Hcm91cEFsaWdubWVudF07XG5cbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIFJhZGlvIGdyb3VwIGRpcmVjdGl2ZSByZW5kZXJzIHNldCBvZiByYWRpbyBidXR0b25zLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UmFkaW9Nb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LXJhZGlvLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIHJhZGlvZ3JvdXAsIHJhZGlvLCBidXR0b24sIGlucHV0XG4gKlxuICogQGlneEdyb3VwIERhdGEgRW50cnkgJiBEaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgUmFkaW8gR3JvdXAgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHNpbmdsZSBvcHRpb24gZnJvbSBhbiBhdmFpbGFibGUgc2V0IG9mIG9wdGlvbnMgdGhhdCBhcmUgbGlzdGVkIHNpZGUgYnkgc2lkZS5cbiAqXG4gKiBAZXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtcmFkaW8tZ3JvdXAgbmFtZT1cInJhZGlvR3JvdXBcIj5cbiAqICAgPGlneC1yYWRpbyAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbJ0ZvbycsICdCYXInLCAnQmF6J11cIiB2YWx1ZT1cInt7aXRlbX19XCI+XG4gKiAgICAgIHt7aXRlbX19XG4gKiAgIDwvaWd4LXJhZGlvPlxuICogPC9pZ3gtcmFkaW8tZ3JvdXA+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgZXhwb3J0QXM6ICdpZ3hSYWRpb0dyb3VwJyxcbiAgICBzZWxlY3RvcjogJ2lneC1yYWRpby1ncm91cCwgW2lneFJhZGlvR3JvdXBdJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgbXVsdGk6IHRydWUgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3JlcXVpcmVkOiBib29sZWFuIHwgJyc7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZWQ6IGJvb2xlYW4gfCAnJztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcmFkaW8gYnV0dG9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCByYWRpb0J1dHRvbnMgPSAgdGhpcy5yYWRpb0dyb3VwLnJhZGlvQnV0dG9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneFJhZGlvQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHB1YmxpYyByYWRpb0J1dHRvbnM6IFF1ZXJ5TGlzdDxJZ3hSYWRpb0NvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGB2YWx1ZWAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbdmFsdWVdID0gXCIncmFkaW9CdXR0b25WYWx1ZSdcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJhZGlvQnV0dG9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlIHJhZGlvIGdyb3VwIGNvbXBvbmVudC4gQWxsIGNoaWxkIHJhZGlvIGJ1dHRvbnMgaW5oZXJpdHMgdGhpcyBuYW1lLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBuYW1lID0gXCJSYWRpbzFcIj48L2lneC1yYWRpby1ncm91cD5cbiAgICAgKiAgYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbmFtZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9uYW1lICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fc2V0UmFkaW9CdXR0b25OYW1lcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIHJhZGlvIGdyb3VwIGlzIHJlcXVpcmVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3Qgc2V0LCBgcmVxdWlyZWRgIHdpbGwgaGF2ZSB2YWx1ZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbcmVxdWlyZWRdID0gXCJ0cnVlXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSAodmFsdWUgYXMgYW55KSA9PT0gJycgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIEFuIGlucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSByYWRpbyBncm91cC4gQnkgZGVmYXVsdCBpdCdzIGZhbHNlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgYGBgaHRtbFxuICAgICAqIDxpZ3gtcmFkaW8tZ3JvdXAgZGlzYWJsZWQ+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSAodmFsdWUgYXMgYW55KSA9PT0gJycgfHwgdmFsdWU7XG4gICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxMi4yLjBcbiAgICAgKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGBsYWJlbGAgaW4gdGhlIGNoaWxkIHJhZGlvIGJ1dHRvbnMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBzZXQsIGBsYWJlbFBvc2l0aW9uYCB3aWxsIGhhdmUgdmFsdWUgYFwiYWZ0ZXJcImAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIGxhYmVsUG9zaXRpb24gPSBcImJlZm9yZVwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsYWJlbFBvc2l0aW9uKCk6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbFBvc2l0aW9uO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGxhYmVsUG9zaXRpb24obmV3VmFsdWU6IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fbGFiZWxQb3NpdGlvbiAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhYmVsUG9zaXRpb24gPSBuZXdWYWx1ZSA9PT0gUmFkaW9MYWJlbFBvc2l0aW9uLkJFRk9SRSA/IFJhZGlvTGFiZWxQb3NpdGlvbi5CRUZPUkUgOiBSYWRpb0xhYmVsUG9zaXRpb24uQUZURVI7XG4gICAgICAgICAgICB0aGlzLl9zZXRSYWRpb0J1dHRvbkxhYmVsUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgc2VsZWN0ZWQgY2hpbGQgcmFkaW8gYnV0dG9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNlbGVjdGVkQnV0dG9uID0gdGhpcy5yYWRpb0dyb3VwLnNlbGVjdGVkO1xuICAgICAqIHRoaXMucmFkaW9Hcm91cC5zZWxlY3RlZCA9IHNlbGVjdGVkQnV0dG9uO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBzZWxlY3RlZCA/IHNlbGVjdGVkLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgcmFkaW8gZ3JvdXAgYHZhbHVlYCBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgIGFuZCB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXJhZGlvLWdyb3VwIChjaGFuZ2UpPVwiaGFuZGxlcigkZXZlbnQpXCI+PC9pZ3gtcmFkaW8tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhbmdlUmFkaW9FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1yYWRpby1ncm91cCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1yYWRpby1ncm91cCc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHZlcnRpY2FsIGFsaWdubWVudCB0byB0aGUgcmFkaW8gZ3JvdXAsIGlmIGBhbGlnbm1lbnRgIGlzIHNldCB0byBgdmVydGljYWxgLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGFsaWdubWVudCBpcyBob3Jpem9udGFsLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBhbGlnbm1lbnQ9XCJ2ZXJ0aWNhbFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXJhZGlvLWdyb3VwLS12ZXJ0aWNhbCcpXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWxpZ25tZW50IG9mIHRoZSBgaWd4LXJhZGlvLWdyb3VwYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15UmFkaW9Hcm91cFwiKVxuICAgICAqIHB1YmxpYyByYWRpb0dyb3VwOiBJZ3hSYWRpb0dyb3VwRGlyZWN0aXZlO1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCByYWRpb0FsaWdubWVudCA9IHRoaXMucmFkaW9Hcm91cC5hbGlnbm1lbnQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhbGlnbm1lbnQoKTogUmFkaW9Hcm91cEFsaWdubWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2FsID8gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbCA6IFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBzZXQgdGhlIHJhZGlvIGdyb3VwIGFsaWdubWVudC5cbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYFJhZGlvR3JvdXBBbGlnbm1lbnQuaG9yaXpvbnRhbGAgKGRlZmF1bHQpIGFuZCBgUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBhbGlnbm1lbnQgPSBSYWRpb0dyb3VwQWxpZ25tZW50LnZlcnRpY2FsO1xuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1yYWRpby1ncm91cCBbYWxpZ25tZW50XT1cImFsaWdubWVudFwiPjwvaWd4LXJhZGlvLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgYWxpZ25tZW50KHZhbHVlOiBSYWRpb0dyb3VwQWxpZ25tZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWwgPSB2YWx1ZSA9PT0gUmFkaW9Hcm91cEFsaWdubWVudC52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX25hbWUgPSBgaWd4LXJhZGlvLWdyb3VwLSR7bmV4dElkKyt9YDtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmFsdWU6IGFueSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkOiBJZ3hSYWRpb0NvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhYmVsUG9zaXRpb246IFJhZGlvTGFiZWxQb3NpdGlvbiB8IHN0cmluZyA9ICdhZnRlcic7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHF1ZXJ5Q2hhbmdlJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgLy8gVGhlIGluaXRpYWwgdmFsdWUgY2FuIHBvc3NpYmx5IGJlIHNldCBieSBOZ01vZGVsIGFuZCBpdCBpcyBwb3NzaWJsZSB0aGF0XG4gICAgICAgIC8vIHRoZSBPbkluaXQgb2YgdGhlIE5nTW9kZWwgb2NjdXJzIGFmdGVyIHRoZSBPbkluaXQgb2YgdGhpcyBjbGFzcy5cbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5yYWRpb0J1dHRvbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5xdWVyeUNoYW5nZSQubmV4dCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9pbml0UmFkaW9CdXR0b25zKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBcImNoZWNrZWRcIiBwcm9wZXJ0eSB2YWx1ZSBvbiB0aGUgcmFkaW8gaW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGNvbnNpc3RlbnQgdG8gdGhlIGN1cnJlbnQgcmFkaW8gYnV0dG9uLlxuICAgICAqIElmIGl0IGlzLCB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGB0cnVlYCBhbmQgc2VsZWN0ZWQgcHJvcGVydHkgd2lsbCBjb250YWluIHRoZSBzZWxlY3RlZCBgSWd4UmFkaW9Db21wb25lbnRgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5yYWRpb0dyb3VwLndyaXRlVmFsdWUoJ3JhZGlvQnV0dG9uVmFsdWUnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY29udHJvbCBpcyB0b3VjaGVkLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZWdpc3Rlck9uVG91Y2hlZChmbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pbml0UmFkaW9CdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0geyBuYW1lOiB0aGlzLl9uYW1lLCByZXF1aXJlZDogdGhpcy5fcmVxdWlyZWQgfTtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYnV0dG9uLCBwcm9wcyk7XG5cbiAgICAgICAgICAgICAgICBpZihidXR0b24uZGlzYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihidXR0b24ubGFiZWxQb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5sYWJlbFBvc2l0aW9uID0gdGhpcy5fbGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLnZhbHVlID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gYnV0dG9uO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJ1dHRvbi5jaGFuZ2UucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKGJ1dHRvbi5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMucXVlcnlDaGFuZ2UkKVxuICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKChldikgPT4gdGhpcy5fc2VsZWN0ZWRSYWRpb0J1dHRvbkNoYW5nZWQoZXYpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkUmFkaW9CdXR0b25DaGFuZ2VkKGFyZ3M6IElDaGFuZ2VSYWRpb0V2ZW50QXJncykge1xuICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGJ1dHRvbi5jaGVja2VkID0gYnV0dG9uLmlkID09PSBhcmdzLnJhZGlvLmlkO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGFyZ3MucmFkaW87XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gYXJncy52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25OYW1lcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBidXR0b24ubmFtZSA9IHRoaXMuX25hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RSYWRpb0J1dHRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9CdXR0b25zKSB7XG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm8gdmFsdWUgLSB1bmNoZWNrIGFsbCByYWRpbyBidXR0b25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChidXR0b24uY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gYnV0dG9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAhPT0gYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b247XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub24tc2VsZWN0ZWQgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnV0dG9uLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0UmFkaW9CdXR0b25MYWJlbFBvc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5sYWJlbFBvc2l0aW9uID0gdGhpcy5fbGFiZWxQb3NpdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldFJhZGlvQnV0dG9uc1JlcXVpcmVkKCkge1xuICAgICAgICBpZiAodGhpcy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmFkaW9CdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFJhZGlvR3JvdXBEaXJlY3RpdmUsIElneFJhZGlvQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbSWd4UmFkaW9Hcm91cERpcmVjdGl2ZSwgSWd4UmFkaW9Db21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtJZ3hSaXBwbGVNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFJhZGlvTW9kdWxlIHt9XG4iXX0=