@esfaenza/es-table 11.2.102 → 11.2.104

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.
@@ -253,6 +253,8 @@ export class EsTableComponent {
253
253
  this.Editable = false;
254
254
  /** Indica se è possibile effettuare selezioni a range per poi farci eventualmente copia incolla */
255
255
  this.RangeSelection = false;
256
+ /** Indica il numero di millisecondi per cui debouncare il writeValue per la modalità **EsTableHandledSearch** */
257
+ this.SearchThrottle = 50;
256
258
  /** Evento che viene richiamato al cambio di oridnamento di una colonna */
257
259
  this.onOrderChanged = new EventEmitter();
258
260
  /**
@@ -325,6 +327,8 @@ export class EsTableComponent {
325
327
  this.DirectivesBased = false;
326
328
  /** Indica lo stato di selezione per singola cella */
327
329
  this.selectionStatus = {};
330
+ /** Chiamata reale al writeValue dopo il passaggio di **SearchThrottle** millisecondi. Solo modalità EsTableHandledSearch */
331
+ this.callTimeout = null;
328
332
  /** Opzioni di paginazione */
329
333
  this.PagerOptions = { PagerCount: null, ShowCount: true, ShowPaging: true, ShowButtons: true, ShowPagingOptions: true, UsesView: true, View: null, Ready: false, Searches: 'items' };
330
334
  /** @ignore */
@@ -434,12 +438,21 @@ export class EsTableComponent {
434
438
  /** @ignore */
435
439
  registerOnTouched(fn) { }
436
440
  /** @ignore */
437
- changed() { this.propagateChange(this.View); }
441
+ changed(clearItems = false) {
442
+ if (clearItems && this.viewMode)
443
+ this.View.items = [];
444
+ this.propagateChange(this.View);
445
+ }
438
446
  /** @ignore */
439
- writeValue(obj) {
447
+ writeValue(obj, throttle = true) {
440
448
  var _a;
441
449
  return __awaiter(this, void 0, void 0, function* () {
442
450
  this.View = obj ? obj : null;
451
+ if (this.EsTableHandledSearch && throttle) {
452
+ if (this.callTimeout)
453
+ clearTimeout(this.callTimeout);
454
+ this.callTimeout = setTimeout(() => { this.writeValue(obj, false); }, this.SearchThrottle);
455
+ }
443
456
  // Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress
444
457
  this.researchInProgress = false;
445
458
  if (!this.View && !this.SearchView) {
@@ -562,7 +575,7 @@ export class EsTableComponent {
562
575
  this.postBoundSourceCalculation();
563
576
  if (this.View && !this.View.selfsearch && this.EsTableHandledSearch) {
564
577
  this.View.selfsearch = true;
565
- this.changed();
578
+ this.changed(true);
566
579
  this.onSearchRequest.emit(false);
567
580
  }
568
581
  else if (this.View && this.View.selfsearch && this.EsTableHandledSearch) {
@@ -1530,6 +1543,7 @@ EsTableComponent.propDecorators = {
1530
1543
  ShowItemGroupsColumns: [{ type: Input }],
1531
1544
  Editable: [{ type: Input }],
1532
1545
  RangeSelection: [{ type: Input }],
1546
+ SearchThrottle: [{ type: Input }],
1533
1547
  onOrderChanged: [{ type: Output }],
1534
1548
  onSearchRequest: [{ type: Output }],
1535
1549
  onSelectionChanged: [{ type: Output }],
@@ -1544,4 +1558,4 @@ EsTableComponent.propDecorators = {
1544
1558
  };
1545
1559
  export class EsTdReference {
1546
1560
  }
1547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsVUFBVTtBQUNWLE9BQU8sRUFDSCxTQUFTLEVBQUUsZUFBZSxFQUFhLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFDeEYsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsRUFBYyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFlLE1BQU0sRUFDOUksTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSzNELGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFVdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVuRiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxh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U0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDYixFQUFFLFVBQVUsRUFBUSxRQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBUSxRQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7d0JBQ3BsQixFQUFFLFVBQVUsRUFBUSxRQUFTLENBQUMs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TixNQUFNO3dCQUVOLE1BQU07NkJBRU4sTUFBTTs0QkFFTixNQUFNOzZCQUdOLE1BQU07aUNBRU4sTUFBTTsrQkFPTixTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzZCQUUvQyxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtvQ0FVdkMsS0FBSzs7QUEyeENWLE1BQU0sT0FBTyxhQUFhO0NBSXpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCxcclxuICAgIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBDb250ZW50Q2hpbGQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgT3B0aW9uYWwsIFNlbGYsIFRlbXBsYXRlUmVmLCBJbmplY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBFeHBvcnRTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSwgRGF0ZVNlcnZpY2UsIENzdkhlYWRlcnMsIENsaXBib2FyZFNlcnZpY2UgfSBmcm9tICdAZXNmYWVuemEvZXh0ZW5zaW9ucyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAZXNmYWVuemEvbG9jYWxpemF0aW9ucyc7XHJcbmltcG9ydCB7IFByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJ0Blc2ZhZW56YS9wcmVmZXJlbmNlcyc7XHJcblxyXG4vLyBQbHVnaW5zXHJcbmltcG9ydCB7IENvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnQGVzZmFlbnphL25neC1jb250ZXh0bWVudSc7XHJcblxyXG4vLyBNb2RlbGxpIC8gVGlwaVxyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwU2VhcmNoXCI7XHJcbmltcG9ydCB7IEFwcE9yZGVyaW5nIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0FwcE9yZGVyaW5nXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0VzVGFibGVDb2x1bW5zRGVmaW5pdGlvblwiO1xyXG5pbXBvcnQgeyBDb3JuZXJNZW51T3B0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvQ29ybmVyTWVudU9wdGlvblwiO1xyXG5pbXBvcnQgeyBFc1RhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0VzVGFibGVPcGVyYXRpb25EZWZpbml0aW9uXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9Fc1RhYmxlQ29sdW1uXCI7XHJcbmltcG9ydCB7IEdyb3VwUGFnZXIgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9Hcm91cFBhZ2VyXCI7XHJcbmltcG9ydCB7IEdyb3VwUm91dGVGcmFnbWVudCB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0dyb3VwUm91dGVGcmFnbWVudFwiO1xyXG5pbXBvcnQgeyBUaEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9UaEVsZW1lbnRcIjtcclxuaW1wb3J0IHsgVGRFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvVGRFbGVtZW50XCI7XHJcbmltcG9ydCB7IEl0ZW1zU2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvSXRlbXNTZWxlY3Rpb24nO1xyXG5pbXBvcnQgeyBHcm91cE9yQWdncmVnYXRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvR3JvdXBPckFnZ3JlZ2F0aW9uXCI7XHJcbmltcG9ydCB7IEdyb3VwRmlsdGVyIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0dyb3VwRmlsdGVyXCI7XHJcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0dyb3VwXCI7XHJcbmltcG9ydCB7IEVzVGFibGVNb2RlbENoYW5nZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZU1vZGVsQ2hhbmdlJztcclxuaW1wb3J0IHsgSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9leHRlcm5hbHMvSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZSc7XHJcbmltcG9ydCB7IEVzVGFibGVEZWZhdWx0YWJsZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9jb25maWd1cmF0aW9uL0VzVGFibGVEZWZhdWx0YWJsZSc7XHJcblxyXG4vLyBDb21wb25lbnRpIGUgTG9jYWxpenphemlvbmVcclxuaW1wb3J0IHsgRXNUZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUaERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUZEVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGRfZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElFc1RhYmxlVGVtcGxhdGVXcmFwcGVyIH0gZnJvbSAnLi4vZXMtdGFibGUtdGVtcGxhdGUvZXNfdGFibGVfdGVtcGxhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXNUYWJsZUxvYyB9IGZyb20gJy4vZXNfdGFibGUuY29tcG9uZW50LmxvYyc7XHJcblxyXG5pbXBvcnQgeyBFU1RfREVGQVVMVFMsIEVTVF9MT0NBTEUgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xyXG5cclxuLy8gSGFuZGxlcnNcclxuaW1wb3J0IHsgRXhwb3J0SGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0V4cG9ydEhhbmRsZXJcIjtcclxuaW1wb3J0IHsgQ29sdW1uTWV0YWRhdGFIYW5kbGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvaGFuZGxlcnMvQ29sdW1uTWV0YWRhdGFIYW5kbGVyXCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2RlSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0R5bmFtaWNNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBIaWVyYXJjaHlNb2RlSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0hpZXJhcmNoeU1vZGVIYW5kbGVyXCI7XHJcbmltcG9ydCB7IEl0ZW1zSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0l0ZW1zSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBSZXBvcnRNb2RlSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1JlcG9ydE1vZGVIYW5kbGVyXCI7XHJcbmltcG9ydCB7IFJvd0dyb3VwaW5nSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1Jvd0dyb3VwaW5nSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25IYW5kbGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvaGFuZGxlcnMvU2VsZWN0aW9uSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBVdGlsaXRpZXNIYW5kbGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvaGFuZGxlcnMvVXRpbGl0aWVzSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBDb3B5UGFzdGVEZXRlY3RvciB9IGZyb20gJy4uLy4uL2NvcmUvQ29weVBhc3RlRGV0ZWN0b3InO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVzVGQgfSBmcm9tICcuLi9lcy10ZC9lc190ZC5jb21wb25lbnQnO1xyXG5cclxuLyoqIENvbXBvbmVudGUgY2hlIHBlcm1ldHRlIGRpIHJhcHByZXNlbnRhcmUgdW5hIGdyaWdsaWEgZGkgdmFsb3JpICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdlcy10YWJsZScsXHJcbiAgICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogRXNUYWJsZUxvYyB9XSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHN0eWxlVXJsczogWycuL2VzX3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXNfdGFibGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFc1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgLy8gQ29tcG9uZW50aSBwZXIgbGEgZ2VzdGlvbmUgZGVsbGUgdmFyaWUgZnVuemlvbmFsaXTDoCBkZWxsJ2VzLXRhYmxlXHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgZXhwb3J0X0g6IEV4cG9ydEhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgY29sdW1uTWV0YWRhdGFfSDogQ29sdW1uTWV0YWRhdGFIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIGR5bmFtaWNNb2RlX0g6IER5bmFtaWNNb2RlSGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBoaWVyYXJjaHlNb2RlX0g6IEhpZXJhcmNoeU1vZGVIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIGl0ZW1zX0g6IEl0ZW1zSGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyByZXBvcnRNb2RlX0g6IFJlcG9ydE1vZGVIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIHJvd0dyb3VwaW5nX0g6IFJvd0dyb3VwaW5nSGFuZGxlclxyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIHNlbGVjdGlvbl9IOiBTZWxlY3Rpb25IYW5kbGVyO1xyXG5cclxuICAgIC8vIFN1YnNjcmliZXJzIHBlciBnbGkgZXZlbnRpIGRpIGNvcGlhIGUgaW5jb2xsYVxyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJpdmF0ZSBjb3B5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwcml2YXRlIHBhc3RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcHJlZlNlcnZpY2U6IFByZWZlcmVuY2VzU2VydmljZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVTVF9ERUZBVUxUUykgcHJpdmF0ZSBkZWFmdWx0czogRXNUYWJsZURlZmF1bHRhYmxlLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVNUX0xPQ0FMRSkgcHVibGljIGxvY2FsZTogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsYzogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIHV0aWxpdGllc19IOiBVdGlsaXRpZXNIYW5kbGVyLFxyXG4gICAgICAgIHB1YmxpYyB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGV4cEV4dHM6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRhdGVFeHRzOiBEYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1zZ0V4dHM6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY29weVBhc3RlRGV0ZWN0b3I6IENvcHlQYXN0ZURldGVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgY2xpcGJvYXJkU2VydmljZTogQ2xpcGJvYXJkU2VydmljZSkge1xyXG5cclxuICAgICAgICB0aGlzLmNvcHlTdWJzY3JpcHRpb24gPSB0aGlzLmNvcHlQYXN0ZURldGVjdG9yLk9uQ29weS5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLmhhbmRsZUNvcHkoKTsgfSk7XHJcbiAgICAgICAgdGhpcy5wYXN0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29weVBhc3RlRGV0ZWN0b3IuT25QYXN0ZS5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLmhhbmRsZVBhc3RlKCk7IH0pO1xyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydF9IID0gbmV3IEV4cG9ydEhhbmRsZXIodGhpcywgdGhpcy5leHBFeHRzLCB0aGlzLm1zZ0V4dHMsIHRoaXMudXRpRXh0cywgdGhpcy5kYXRlRXh0cyk7XHJcbiAgICAgICAgdGhpcy5yb3dHcm91cGluZ19IID0gbmV3IFJvd0dyb3VwaW5nSGFuZGxlcih0aGlzLCB0aGlzLnV0aWxpdGllc19ILCB0aGlzLmRhdGVFeHRzKTtcclxuICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0ggPSBuZXcgQ29sdW1uTWV0YWRhdGFIYW5kbGVyKHRoaXMsIHRoaXMudXRpbGl0aWVzX0gsIHRoaXMudXRpRXh0cywgdGhpcy5wcmVmU2VydmljZSwgdGhpcy5yb3dHcm91cGluZ19IKTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNNb2RlX0ggPSBuZXcgRHluYW1pY01vZGVIYW5kbGVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGllcmFyY2h5TW9kZV9IID0gbmV3IEhpZXJhcmNoeU1vZGVIYW5kbGVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaXRlbXNfSCA9IG5ldyBJdGVtc0hhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCk7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRNb2RlX0ggPSBuZXcgUmVwb3J0TW9kZUhhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSCA9IG5ldyBTZWxlY3Rpb25IYW5kbGVyKHRoaXMsIHRoaXMucm93R3JvdXBpbmdfSCk7XHJcblxyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gQXNzZWduYXppb25lIHBlciB0dXR0aSBnbGkgSW5wdXQgZGkgZGVmYXVsdFxyXG4gICAgICAgIHRoaXMuQ29sdW1uc1Jlc2l6YWJsZSA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Db2x1bW5zUmVzaXphYmxlLCB0aGlzLmRlYWZ1bHRzPy5Db2x1bW5zUmVzaXphYmxlKTtcclxuICAgICAgICB0aGlzLkF1dG9VcGRhdGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQXV0b1VwZGF0ZSwgdGhpcy5kZWFmdWx0cz8uQXV0b1VwZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5BbGxTZWFyY2ggPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQWxsU2VhcmNoLCB0aGlzLmRlYWZ1bHRzPy5BbGxTZWFyY2gsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuRXhwb3J0ID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkV4cG9ydCwgdGhpcy5kZWFmdWx0cz8uRXhwb3J0KTtcclxuICAgICAgICB0aGlzLkhpZGVQYWdpbmcgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuSGlkZVBhZ2luZywgdGhpcy5kZWFmdWx0cz8uSGlkZVBhZ2luZywgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuSGlkZVBhZ2luZ0NvdW50ID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkhpZGVQYWdpbmdDb3VudCwgdGhpcy5kZWFmdWx0cz8uSGlkZVBhZ2luZ0NvdW50KTtcclxuICAgICAgICB0aGlzLkhpZGVQYWdpbmdCdXR0b25zID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkhpZGVQYWdpbmdCdXR0b25zLCB0aGlzLmRlYWZ1bHRzPy5IaWRlUGFnaW5nQnV0dG9ucyk7XHJcbiAgICAgICAgdGhpcy5Db250YWluZXJDbGFzcyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Db250YWluZXJDbGFzcywgdGhpcy5kZWFmdWx0cz8uQ29udGFpbmVyQ2xhc3MsICcnKTtcclxuICAgICAgICB0aGlzLlRhYmxlQ2xhc3MgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuVGFibGVDbGFzcywgdGhpcy5kZWFmdWx0cz8uVGFibGVDbGFzcywgJ3RhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgdGFibGUtc20nKTtcclxuICAgICAgICB0aGlzLlNlbGVjdGlvbiA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5TZWxlY3Rpb24sIHRoaXMuZGVhZnVsdHM/LlNlbGVjdGlvbik7XHJcbiAgICAgICAgdGhpcy5TYXZlUHJlZmVyZW5jZXMgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuU2F2ZVByZWZlcmVuY2VzLCB0aGlzLmRlYWZ1bHRzPy5TYXZlUHJlZmVyZW5jZXMpO1xyXG4gICAgICAgIHRoaXMuUGFnaW5nU3R5bGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuUGFnaW5nU3R5bGUsIHRoaXMuZGVhZnVsdHM/LlBhZ2luZ1N0eWxlLCAnYm90dG9tJyk7XHJcbiAgICAgICAgdGhpcy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlJvd0dyb3VwaW5nUGFnaW5nU3R5bGUsIHRoaXMuZGVhZnVsdHM/LlJvd0dyb3VwaW5nUGFnaW5nU3R5bGUsICdsZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSwgdGhpcy5kZWFmdWx0cz8uVXNlU2VsZWN0aW9uQ2FjaGUsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuU2hvd0l0ZW1Hcm91cHNDb2x1bW5zID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlNob3dJdGVtR3JvdXBzQ29sdW1ucywgdGhpcy5kZWFmdWx0cz8uU2hvd0l0ZW1Hcm91cHNDb2x1bW5zLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5BcnJheW1vZGVJdGVtc1BlclBhZ2UgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlLCB0aGlzLmRlYWZ1bHRzPy5BcnJheW1vZGVJdGVtc1BlclBhZ2UsIDE1KTtcclxuICAgICAgICB0aGlzLkNvbHVtbnNQaW5uYWJsZSA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Db2x1bW5zUGlubmFibGUsIHRoaXMuZGVhZnVsdHM/LkNvbHVtbnNQaW5uYWJsZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFN1YmplY3QgdXRpbGl6emF0byBpbnRlcm5hbWVudGUgbGF0byBFc1RhYmxlIHBlciBjYXVzYXJlIGlsIEZvY3VzIGxhdG8gY29tcG9uZW50ZSBkaSBJbnB1dCAqL1xyXG4gICAgcHVibGljIEZvY3VzU3ViamVjdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcclxuICAgIC8qKiBUaW1lciBjaGUgdmVycsOgIGltcG9zdGF0byBhICoqZG91YmxlQ2xpY2tCdWZmZXJNcyoqIHBlciBjYXBpcmUgc2Ugw6ggc3RhdG8gZWZmZXR0dWF0byB1biBjbGljayBzaW5nb2xvIG8gdW4gZG91YmxlY2xpY2sgKi9cclxuICAgIHByaXZhdGUgY2VsbERiQ2xpY2tUaW1lcjogYW55O1xyXG4gICAgLyoqIFNlIHZlbmdvbm8gZWZmZXR0dWF0aSAyIGNsaWNrIGEgZGlzdGFuemEgaW5mZXJpb3JlIGEgcXVlc3RpIE1pbGxpc2Vjb25kaSB2aWVuZSBjb25zaWRlcmF0byB1biBkb3BwaW8gY2xpY2sgKi9cclxuICAgIHByaXZhdGUgZG91YmxlQ2xpY2tCdWZmZXJNczogbnVtYmVyID0gMjAwO1xyXG4gICAgLyoqIFZpZXcgZmluYWxlIHN1IGN1aSBiaW5kYXJzaSBsYXRvIEZyb250ZW5kLCBpbCB0aXBvIHB1w7IgZXNzZXJlIElBcHBTZWFyY2g8YW55PiAocGVyIGxhICoqdmlld01vZGUqKiksIGFueVtdIChwZXIgbCcqKmFycmF5TW9kZSoqKSAqL1xyXG4gICAgcHVibGljIFZpZXc6IGFueSA9IG51bGw7XHJcbiAgICAvKiogTW9kZWxsbyBkYSBjdWkgbCdlcy10YWJsZSBtb3N0cmEgaSBwdWxzYW50aSBkaSBwYWdpbmF6aW9uZSBpbiBiYXNzbyBhIGRlc3RyYSAqL1xyXG4gICAgcHVibGljIGFycmF5UHVsc2FudGk6IGFueTtcclxuICAgIC8qKiBJbmRpY2Egc2UgbCdlcy10YWJsZSBkZXZlIG1vc3RyYXJlIGlsIGNoZWNrIGdsb2JhbGUgbmVsbCdoZWFkZXIgcGVyIGZhcmUgaWwgXCJzZWxlemlvbmEgdHV0dG9cIiAqL1xyXG4gICAgcHVibGljIGdsb2JhbENoZWNrID0gZmFsc2U7XHJcbiAgICAvKiogVGllbmUgZGEgY29udG8gbCd1bHRpbW8gZWxlbWVudG8gc2VsZXppb25hdG8gaW4gbW9kbyBkYSBwb3RlciBlZmZldHR1YXJlIGlsIFNISUZUK0NMSUNLICovXHJcbiAgICBwcml2YXRlIGxhc3RTZWxlY3RlZDogYW55ID0gbnVsbDtcclxuICAgIC8qKiBDb250ZWdnaW8gaW50ZXJubyBwZXIgaWwgbnVtZXJvIGRpIGVsZW1lbnRpIHNlbGV6aW9uYXRpICovXHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRPYmplY3RzID0gMDtcclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggcG9zc2liaWxlIGVmZmV0dHVhcmUgdW5hIHNlbGV6aW9uZSBtYXNzaXZhICovXHJcbiAgICBwdWJsaWMgY2FuU2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIHNlIGlsIGNvbXBvbmVudGUgc3RhIGdlc3RlbmRvIHVuIElBcHBTZWFyY2g8YW55PiAqL1xyXG4gICAgcHVibGljIHZpZXdNb2RlID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIHNlIGlsIGNvbXBvbmVudGUgc3RhIGdlc3RlbmRvIHVuIGFueVtdICovXHJcbiAgICBwdWJsaWMgYXJyYXlNb2RlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250ZW5pdG9yZSBkZWdsaSBlbGVtZW50aSBkYSBsaXN0YXJlIGxhdG8gaW50ZXJmYWNjaWEgZG9wbyB0dXR0ZSBsZSBlbGFib3JhemlvbmkgZGVsIGNhc28sXHJcbiAgICAgKiBnZW5lcmFsbWVudGUgbm9uIHNvbm8gYWx0cm8gY2hlIHR1dHRpIGdsaSBvZ2dldHRpIGRhIHByZXNlbnRhcmUgY29uIGluIHBpw7kgbCdoYXNoIGNhbGNvbGF0byBwZXIgaWRlbnRpZmljYXJlIDEgb2dnZXR0byBjb24gbGEgcHJvcHJpYSByaWdhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBib3VuZFNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIC8qKiBTdGVzc2EgY29zYSBkZWxsYSAqKmJvdW5kU291cmNlKiosIHV0aWxpenphdGEgY29tZSBhcHBvZ2dpbyB0ZW1wb3JhbmVvIGludGVybm8gKi9cclxuICAgIHB1YmxpYyBUTVBCb3VuZFNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIC8qKiBcIkZldHRhXCIgZGkgb2dnZXR0aSB1dGlsaXp6YXRhIG5lbGwnZW5kbGVzcyBzY3JvbGwsIG9nbmkgZWxlbWVudG8gZGkgcXVlc3RvIGFycmF5IMOoIHVuIGJsb2NjaGV0dG8gZGkgMTAwIGVsZW1lbnRpICovXHJcbiAgICBwdWJsaWMgYm91bmRTdWJTb3VyY2VzOiBhbnlbXSA9IFtdO1xyXG4gICAgLyoqIFF1ZXN0YSBmdW5nZSBkYSBpbmRpY2F0b3JlIHBlciBnbGkgc2xpY2UgaW5zZXJpdGksIGxhIGx1bmdoZXp6YSBkb3ZyZWJiZSBlc3NlcmUgY29ycmlzcG9uZGVudGUgYSAqKmJvdW5kU3ViU291cmNlcyoqICovXHJcbiAgICBwdWJsaWMgYWRkZWRTbGljZXM6IG51bWJlcltdID0gW107XHJcbiAgICAvKiogVmFyaWFiaWxlIGNoZSBpZGVudGlmaWNhIGlsIHZhbG9yZSBkZWwgXCJzZWxlemlvbmEgVHV0dG9cIiBuZWxsYSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgcHVibGljIGRlZmF1bHRBbGxQYWdlT3ZlcnJpZGUgPSA5OTk5OTk7XHJcbiAgICAvKiogU2VydmUgcGVyIHRlbmVyZSBpbiBtZW1vcmlhIGlsIGNvbnRlZ2dpbyBwcmVjZWRlbnRlIGUgcmVjdXBlcmFybG8gaW4gY2FzbyBkaXZlbnRpIC0yICh2ZXJpZmljYXJlIGNvbiBBbGUgcGVyY2jDqSBsYSBsb2dpY2EgZGVsIC0yKSAqL1xyXG4gICAgcHVibGljIHByZXZpb3VzQ291bnQ6IG51bWJlcjtcclxuICAgIC8qKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBpbCBzaXN0ZW1hIGRpIGF1dG91cGRhdGUsIGNpb8OoIHVuIHRyaWdnZXIgdGltZS1penphdG8gaW4gYWx0byBhIGRlc3RyYSBkZWxsYSB0YWJlbGxhIGNoZSByaXBldGUgbGUgcmljZXJjaGUgb2duaSBYICoqc2Vjb25kcyoqICovXHJcbiAgICBwdWJsaWMgYXV0b1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgLyoqIE51bWVybyBkaSBzZWNvbmRpIGRhIGZhcmUgdHJhc2NvcnJlcmUgZnJhIHVuYSByaWNlcmNhIGUgbCdhbHRyYSAqL1xyXG4gICAgcHVibGljIHNlY29uZHMgPSAnMTAnO1xyXG4gICAgLyoqIFJpZmVyaW1lbnRvIGFsbCdJbnRlcnZhbCBjaGUgdmllbmUgZ2VuZXJhdG8gc2UgKiphdXRvVXBkYXRlKiogw6ggaW1wb3N0YXRhIGEgdHJ1ZSBpbiBtb2RvIGRhIHBvdGVybG8gcmlwdWxpcmUgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVUaW1lcjogYW55O1xyXG4gICAgLyoqIEltcG9zdGF0YSBhIHRydWUgb2duaSB2b2x0YSBjaGUgdmllbmUgYXZ2aWF0YSB1bmEgcmljZXJjYSwgZSBhIGZhbHNlIG9nbmkgdm9sdGEgY2hlIHVuIG51b3ZvIHZhbG9yZSB2aWVuZSByaWNldnV0byAqL1xyXG4gICAgcHVibGljIHJlc2VhcmNoSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGFudGUgdW4gZGl6aW9uYXJpbyBkaSByaWdoZSBkZWxsYSB0YWJlbGxhLCBjb24gY2hpYXZlIGwnaGFzaCBlIHZhbG9yZSBsYSBsaXN0YSBkaSBjZWxsZSAqL1xyXG4gICAgcHVibGljIFJvd1REczogeyBbY29udGV4dDogc3RyaW5nXTogVGRFbGVtZW50W10gfSA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlICoqUm93VERzKiogw6ggdW4gb2dnZXR0byB2dW90byBvIG1lbm8gKi9cclxuICAgIHB1YmxpYyBFbXB0eVJvd1RkczogYm9vbGVhbjtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dURHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1REczogeyBbY29udGV4dDogc3RyaW5nXTogVGRFbGVtZW50W10gfSA9IG51bGw7XHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YW50ZSB1biBzaW5nb2xvIHRoIGRlbGxhIHRhYmVsbGEsIGdlbmVyYXRvIGluIGJhc2UgYWxsZSBjb25maWd1cmF6aW9uaSBlIGFnbGkgb2dnZXR0aSByaWNldnV0aSAqL1xyXG4gICAgcHVibGljIFJvd1RIczogVGhFbGVtZW50W10gPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gZGkgYXBwb2dnaW8gdGVtcG9yYW5lbyBwZXIgaSAqKlJvd1RIcyoqICovXHJcbiAgICBwdWJsaWMgVE1QUm93VEhzOiBUaEVsZW1lbnRbXSA9IG51bGw7XHJcbiAgICAvKiogTW9kZWxsbyBkaSBhcHBvZ2dpbyB0ZW1wb3JhbmVvIHBlciBpICoqUm93VGhHcm91cHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1RoR3JvdXBzOiB7IFNwYW46IG51bWJlciwgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfVtdW10gPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGFudGUgdW4gc2luZ29sbyBoZWFkZXIgZ3JvdXAgZGVsbGEgdGFiZWxsYS4gUXVlc3RhIGxpc3RhIMOoIGdpw6Agb3JkaW5hdGEgZSBwcm9udGEgcGVyIGVzc2VyZSB1dGlsaXp6YXRhIGluIG5nRm9yICovXHJcbiAgICBwdWJsaWMgUm93VGhHcm91cHM6IHsgU3BhbjogbnVtYmVyLCBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB9W11bXSA9IG51bGw7XHJcbiAgICAvKiogQ2FjaGUgcGVyIGkgcm91dGVyTGluayBnZW5lcmF0aSBuZWxsZSB0YWJlbGxlIGRpbmFtaWNoZSAqL1xyXG4gICAgcHVibGljIER5bmFtaWNUYWJsZVJvdXRlckxpbmtDYWNoZToge30gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpc3RhIGRlaSBjb250ZXN0aS4gVW4gY29udGVzdG8gbm9uIMOoIGFsdHJvIGNoZSB1biBoYXNoIHBhcnRpY29sYXJlIGNhbGNvbGF0byBzdSB1biBvZ2dldHRvIGNoZSBpZGVudGlmaWNhIHVuaXZvY2FtZW50ZSB0YWxlIG9nZ2V0dG8uXHJcbiAgICAgKlxyXG4gICAgICogT2dudW5vIGRpIHF1ZXN0aSBjb250ZXN0aSByYXBwcmVzZW50ZXLDoCBhIHN1YSB2b2x0YSwgdW5pdm9jYW1lbnRlLCB1bmEgcmlnYSBhbGwnaW50ZXJubyBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBSb3dDb250ZXh0czogYW55W10gPSBbXTtcclxuICAgIC8qKiBEaXJldHRpdmUgZGkgb3JkaW5hbWVudG8gZGVsbGUgY29sb25uZSAobm9uIG9yZGluYW1lbnRvIGRlaSBkYXRpIG1hIGRlbGxlIGNvbG9ubmUgaW4gc2UpICovXHJcbiAgICBwdWJsaWMgT3JkZXJEaXJlY3RpdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLyoqIENvZGljZSBkZWxsJ3VsdGltbyBvZ2dldHRvIHNvbGV6aW9uYXRvICovXHJcbiAgICBwdWJsaWMgbGFzdFNlbGVjdGVkSXRlbUlEID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBvbHRyZSBhbGxlIGNvbG9ubmUgZGluYW1pY2hlIHNwZWNpZmljaGUgZGkgdW4gdGlwbyBkaSBvZ2dldHRvIGNpIHNvbm8gYW5jaGUgY29sb25uZSBkaW5hbWljaGUgYWdnaXVudGUgZGFsbCd1dGVudGVcclxuICAgICAqXHJcbiAgICAgKiBFcy4gdW5hIGNvbG9ubmEgaW4gY3VpIG1vc3RyYXJlIHNlbXByZSB1biBpY29uY2luYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVXNlckRlZmluZWREeW5hbWljQ29sczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBjaGUgcXVlc3RvIMOoIGlsIHByaW1vIEJpbmQgZGVsbGEgdGFiZWxsYSwgdmllbmUgc2V0dGF0byBhIGZhbHNlIG5vbiBhcHBlbmEgaWwgcHJpbW8gYmluZCB2aWVuZSB0ZXJtaW5hdG8gY29uIHN1Y2Nlc3NvICovXHJcbiAgICBwdWJsaWMgRmlyc3RCaW5kOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIGNoZSBzaSBwb3Nzb25vIHZpc3VhbGl6emFyZS9vcmRpbmFyZSBmcmEgZGkgbG9ybyAqL1xyXG4gICAgcHVibGljIENvbHVtbnNMaXN0OiBFc1RhYmxlQ29sdW1uW10gPSBbXTtcclxuICAgIC8qKiBWYXJpYWJpbGUgZCdhcHBvZ2dpbyB1c2F0YSBkYWxsYSBkaWFsb2cgZGkgc2VsZXppb25lL25hc2NvbmRpbWVudG8sIHBlciBldml0YXJlIGRpIGRhbm5lZ2dpYXJlICoqQ29sdW1uc0xpc3QqKiBpbiBjYXNvIGRpIG1vZGlmaWNoZSBwb2kgYW5udWxsYXRlICovXHJcbiAgICBwdWJsaWMgVE1QQ29sdW1uc0xpc3Q6IEVzVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgLyoqIFZhbG9yZSBkZWwgY2hlY2sgZ2xvYmFsZSBkaSB2aXNpYmlsaXTDoCB2YWxpZG8gcGVyIHR1dHRlIGxlIGNvbG9ubmUgaW4gKipDb2x1bW5zTGlzdCoqICovXHJcbiAgICBwdWJsaWMgZ2xvYmFsQ29sVmlzQ2hlY2sgPSBmYWxzZTtcclxuXHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgdHV0dGUgbGUgZGlyZXR0aXZlIHBlciBnbGkgZWRpdG9yIGN1c3RvbSBkZWxsZSBjZWxsZSAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihFc1RkRWRpdG9yRGlyZWN0aXZlKSBFc1RkRWRpdG9yRGlyZWN0aXZlczogUXVlcnlMaXN0PEVzVGRFZGl0b3JEaXJlY3RpdmU+O1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIHR1dHRlIGxlIG51b3ZlIGRpcmV0dGl2ZSAgYXNzZWduYXRpIGEgZGlyZXR0aXZhIChQZXIgbGEgbW9kYWxpdMOgIGRpbmFtaWNhIGRlbGwnZXMtdGFibGUpICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKEVzVGREaXJlY3RpdmUpIEVzVGRzRGlyZWN0aXZlOiBRdWVyeUxpc3Q8RXNUZERpcmVjdGl2ZT47XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgdHV0dGkgZ2xpIGVzLXRkIGFzc2VnbmF0aSBhIGRpcmV0dGl2YSAoUGVyIGxhIG1vZGFsaXTDoCBkaW5hbWljYSBkZWxsJ2VzLXRhYmxlKSAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihFc1RoRGlyZWN0aXZlKSBFc1Roc0RpcmVjdGl2ZTogUXVlcnlMaXN0PEVzVGhEaXJlY3RpdmU+O1xyXG4gICAgLyoqIElucHV0IGNvbGxlZ2F0byBhIHVuIHRlbXBsYXRlIGNoZSBjb250aWVuZSBsZSBkaXJldHRpdmUgcGVyIHJlbmRlcml6emFyZSBxdWVzdGEgdGFiZWxsYS4gc2UgY2kgc29ubyAqKkVzVGRzRGlyZWN0aXZlKiogZSAqKkVzVGhzRGlyZWN0aXZlKiogcXVlc3RpIGhhbm5vIGxhIHByaW9yaXTDoCAqL1xyXG4gICAgQElucHV0KCkgRXNUYWJsZVRlbXBsYXRlOiBJRXNUYWJsZVRlbXBsYXRlV3JhcHBlcjtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSBsZSBpbmZvcm1hemlvbmkgZGVsIGJvZHkgKHB1bnRvIGRlbGxhIHRhYmVsbGEgZG92ZSB2ZW5nb25vIG1vc3RyYXRlIGxlIHJpZ2hlKSAqL1xyXG4gICAgQENvbnRlbnRDaGlsZCgnYm9keScsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgYm9keVJlZjogYW55O1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGxlIGluZm9ybWF6aW9uaSBkZWxsJ2hlYWRlciAocHVudG8gZGVsbGEgdGFiZWxsYSBkb3ZlIHZlbmdvbm8gbW9zdHJhdGUgbGUgaW50ZXN0YXppb25pIGRlbGxlIHJpZ2hlKSAqL1xyXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBoZWFkZXJSZWY6IGFueTtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSBsZSBpbmZvcm1hemlvbmkgc3VsIHJhZ2dydXBwYW1lbnRvIGRlZ2xpIGhlYWRlciAqL1xyXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyR3JvdXAnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGhlYWRlckdyb3VwUmVmOiBhbnk7XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgbGUgaW5mb3JtYXppb25pIHN1bCByYWdncnVwcGFtZW50byBkaSBzZWNvbmRvIGxpdmVsbG8gZGVnbGkgaGVhZGVyICovXHJcbiAgICBAQ29udGVudENoaWxkKCdzZWNvbmRhcnlIZWFkZXJHcm91cCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgc2Vjb25kYXJ5SGVhZGVyR3JvdXBSZWY6IGFueTtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSBpbCBjYW1wbyBkaSBJbnB1dCBhdHR1YWxlLiBEb3BvIHVuIGRvcHBpbyBjbGljayBsbyBiZWNjbyBlIGxvIGZvY3Vzc28gYXBwZW5hIHRlcm1pbmEgbGEgY2hhZ25lIGRldGVjdGlvbiAqL1xyXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGlucHV0RmllbGQ6IEVsZW1lbnRSZWY7XHJcbiAgICAvKiogT3B6aW9uaSBleHRyYSBjaGUgZGV2b25vIGFwcGFyaXJlIG5lbCBNZW7DuSBjb250ZXN0dWFsZSBpbiBhbHRvIGEgZGVzdHJhLCByaWNoaWFtYXRvIGRhaSAzIHBhbGxpbmkgdmVydGljYWxpICovXHJcbiAgICBASW5wdXQoKSBDb3JuZXJNZW51T3B0aW9uczogQ29ybmVyTWVudU9wdGlvbltdID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgZGV2J2Vzc2VyZSBwb3NzaWJpbGUgZWZmZXR0dWFyZSBpbCByZXNpemUgZGVsbGUgY29sb25uZSAqL1xyXG4gICAgQElucHV0KCkgQ29sdW1uc1Jlc2l6YWJsZTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIGRldidlc3NlcmUgcG9zc2liaWxlIGVmZmV0dHVhcmUgaWwgcGlubmluZyBkZWxsZSBjb2xvbm5lICovXHJcbiAgICBASW5wdXQoKSBDb2x1bW5zUGlubmFibGU6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBkZXYnZXNzZXJlIGRpc3BvbmliaWxlIGlsIHNpc3RlbWEgZGkgYWdnaW9ybmFtZW50byBhdXRvbWF0aWNvICovXHJcbiAgICBASW5wdXQoKSBBdXRvVXBkYXRlOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBcclxuICAgICAqIEBleHBlcmltZW50YWwgSW5kaWNhIHNlIGRldidlc3NlcmUgbCdlc3RhYmxlIGEgZ2VzdGlyZSBsYSByaWNlcmNhLCBhbmNoZSBsYSBwcmltYS4gXHJcbiAgICAgKiBcclxuICAgICAqICoqQVRURU5aSU9ORTogUklDSElFREUgTU9ESUZJQ0hFIE5PTiBUUklWSUFMSSBBTExBIFBBR0lOQSBESSBSSUNFUkNBIENIRSBVVElMSVpaQSBRVUVTVE8gVElQTyBESSBFUy1UQUJMRS4gTk9OIFVUSUxJWlpBUkUgU0UgTk9OIFNJIFNBIENJTycgQ0hFIFNJIFNUQSBGQUNFTkRPKipcclxuICAgICAqKi9cclxuICAgIEBJbnB1dCgpIEVzVGFibGVIYW5kbGVkU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNpZGUgc2UgdXRpbGl6emFyZSBvIG1lbm8gbGUgQ3VzdG9tQ2VsbHMuIEltcG9zdGFuZG9sbyBhICoqdHJ1ZSoqIGwnZXMtdGFibGUgZGl2ZW50YSBpbiBncmFkbyBkaSBnZXN0aXJlIG5hdGl2YW1lbnRlOlxyXG4gICAgICpcclxuICAgICAqIDEpIE9yZGluYW1lbnRvIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZVxyXG4gICAgICpcclxuICAgICAqIDIpIE9yZGluYW1lbnRvIGRlaSBkYXRpXHJcbiAgICAgKlxyXG4gICAgICogMykgTW9kYWxpdMOgIEdlcmFyY2hpY2FcclxuICAgICAqXHJcbiAgICAgKiBlY2MuLi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgVXNlQ3VzdG9tQ2VsbHM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIGltcG9zdGFyZSBsJ2FsdGV6emEgbWFzc2ltYSBkZWxsYSB0YWJlbGxhLiBTZSBudWxsIGxhIGRpbWVuc2lvbmUgc2kgYWRhdHRhIGFsIG51bWVybyBkaSBlbGVtZW50aSBhdHR1YWxtZW50ZSBpbiB2aXN1YWxpenphemlvbmUgKi9cclxuICAgIEBJbnB1dCgpIE1heEhlaWdodDogbnVtYmVyID0gbnVsbDtcclxuICAgIC8qKiBDbGFzc2kgZGEgYXBwbGljYXJlIGFsIGNvbnRlbml0b3JlIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIENvbnRhaW5lckNsYXNzID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBvIG1lbm8gbCdleHBvcnQgaW4gZm9ybWF0byBYTFNYICovXHJcbiAgICBASW5wdXQoKSBYTFNYRXhwb3J0OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBvIG1lbm8gbCdleHBvcnQgaW4gZm9ybWF0byBDU1YgKi9cclxuICAgIEBJbnB1dCgpIENTVkV4cG9ydCA9IHRydWU7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgdmlzdWFsaXp6YXJlIG8gbWVubyBsJ29wemlvbmUgZGkgcGFnaW5hemlvbmUgXCJUdXR0aVwiICovXHJcbiAgICBASW5wdXQoKSBBbGxTZWFyY2ggPSBudWxsO1xyXG4gICAgLyoqIERpbWludWlzY2UgZ2xpIHNwYXppIGZyYSB1bmEgY2VsbGEgZSBsJ2FsdHJhLCBlIGludGVybmFtZW50ZSBpbCBwYWRkaW5nIGRlbCBmb250IGluIG1vZG8gZGEgcHJlc2VudGFyZSBtb2x0aSBwacO5IGRhdGkgaW4gdW4ndW5pY2EgcGFnaW5hICovXHJcbiAgICBASW5wdXQoKSBIaWdoQ2VsbERlbnNpdHk6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEFiaWxpdGEgbyBtZW5vIGxhIHBvc3NpYmlsaXTDoCBkaSBzZWxlemlvbmFyZSBvZ2dldHRpICovXHJcbiAgICBASW5wdXQoKSBTZWxlY3Rpb246IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIE1vc3RyYSBvIG1lbm8gdW4gbWVzc2FnZ2lvIGRpIExvYWRpbmcgYWwgcHJpbW8gY2FyaWNhbWVudG8gZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgU2hvd0xvYWRpbmdPbkJvb3RzdHJhcDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogU2UgaW1wb3N0YXRvIGEgKip0cnVlKiogYWdnaXVuZ2UgdW5hIGNvbG9ubmEgY29uIHB1bHNhbnRlIGRpIGVsaW1pbmF6aW9uZSBwZXIgZWZmZXR0dWFyZSBsJ2VsaW1pbmEgZGVsbCdvZ2dldHRvIHJlbGF0aXZvICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsOiBib29sZWFuID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbmRpemlvbmUgY2hlIG5hc2NvbmRlIGwnaWNvbmEgZGkgZWxpbWluYXppb25lIGluc2VyaXRhIGltcG9zdGFuZG8gKipSZW1vdmFsKiogYSB0cnVlIHF1YWxvcmEgbGEgY29uZGl6aW9uZSBub24gdmVuaXNzZSByaXNwZXR0YXRhXHJcbiAgICAgKlxyXG4gICAgICogQ29tZSBjb25kaXppb25lIHNpIGNvbnNpZGVyYSB1biBzZW1wbGljZSBjYW1wbyBzdSBjdWkgZWZmZXR0dWFyZSB1biBjb250cm9sbG8gYm9vbGVhbm8sIGNvbWUgYWQgZXNlbXBpbyBcImNhbnJlbW92ZVwiXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIFJlbW92YWxDb25kaXRpb24gPSAnJztcclxuICAgIC8qKiBJbmRpY2Egc2UgYWJpbGl0YXJlIGxhIHBvc3NpYmlsaXTDoCBkaSBlc3BvcnRhcmUgbGEgdmlzdGEgZGF0aSBhdHR1YWxlICovXHJcbiAgICBASW5wdXQoKSBFeHBvcnQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBwZXJtZXR0ZXJlIGxhIHNlbGV6aW9uZSBtdWx0aXBsYSBXaW5kb3dzLWxpa2UgY2xpY2NhbmRvIHVuIG9nZ2V0dG8gZSBmYWNlbmRvIHBvaSBTaGlmdCArIGNsaWNrIHN1IHVuIG9nZ2V0dG8gc3VjY2Vzc2l2byAqL1xyXG4gICAgQElucHV0KCkgU2hpZnRDbGljazogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIGlsIHRlc3RvIGNoZSB2YSBhIHNvc3RpdHVpcmUgXCJPZ2dldHRpIFZpc3VhbGl6emF0aVwiIGluIGNhc28gc2kgc3RpYSBmYWNlbmRvIHF1YWxjb3NhIGRpIGN1c3RvbSAqL1xyXG4gICAgQElucHV0KCkgQ291bnRMYWJlbDogc3RyaW5nID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBvIG1vc3RyYXJlIGlsIGNvbXBvbmVudGUgZGkgcGFnaW5hemlvbmUgKi9cclxuICAgIEBJbnB1dCgpIEhpZGVQYWdpbmc6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIG8gbW9zdHJhcmUgaWwgY29udGVnZ2lvIGRlZ2xpIGVsZW1lbnRpIHRyb3ZhdGkgKi9cclxuICAgIEBJbnB1dCgpIEhpZGVQYWdpbmdDb3VudDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIG5hc2NvbmRlcmUgbyBtb3N0cmFyZSBpIHB1bHNhbnRpIGRpIHBhZ2luYXppb25lICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nQnV0dG9uczogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogUmlmZXJpbWVudG8gYWwgQ29udGV4dE1lbnUgKG5neC1jb250ZXh0bWVudSkgYXNzb2NpYXRvIGFsIGNsaWNrIGRlc3RybyBkaSB1bm8gbyBwacO5IGVsZW1lbnRpIHNlbGV6aW9uYXRpIG5lbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIENvbnRleHRNZW51OiBDb250ZXh0TWVudUNvbXBvbmVudCA9IG51bGw7XHJcbiAgICAvKiogTm9tZSBkZWxsJ2VzcG9ydGF6aW9uZSBnZW5lcmF0YSBkYSBxdWVzdGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgRXhwb3J0RmlsZU5hbWUgPSAnRXhwb3J0LmNzdic7XHJcbiAgICAvKiogQ2xhc3NlIChIVE1MKSBkaSBkZWZhdWx0IGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIFRhYmxlQ2xhc3MgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgZGEgdXRpbGl6emFyZSBpbiBlc3BvcnRhemlvbmUuIE5lbCBmb3JtYXRvIFwiUmVwb3J0XCIgYXZyw6AgdW4gdW5pY28gcGFyYW1ldHJvIFwiRm9ybWF0b1wiIGUgbmVzc3VuIHZhbG9yZSBkaSByaXRvcm5vLlxyXG4gICAgICpcclxuICAgICAqIE5lbCBmb3JtYXRvIFwiVmlld1wiIGhhIGNvbWUgcGFyYW1ldHJvIHVuYSBjYWxsYmFjayBjb24gaSBkYXRpIGNvbXBsZXRpIGRhIGVzcG9ydGFyZSAoZGF0byBjaGUgZGkgZGVmYXVsdCBsYSByaWNlcmNhIMOoIHBhZ2luYXRhKVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBFeHBvcnRGdW5jdGlvbjogYW55O1xyXG4gICAgLyoqIEluZGljYSBsYSBwcmVzZW56YSBkaSByYWdncnVwcGFtZW50aSBhIGxpdmVsbG8gZGkgaGVhZGVyICovXHJcbiAgICBASW5wdXQoKSBIYXNIZWFkZXJHcm91cDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIGxhIHByZXNlbnphIGRpIHJhZ2dydXBwYW1lbnRpIGEgbGl2ZWxsbyBkZWwgcmFnZ3J1cHBhbWVudG8gcHJlY2VkZW50ZW1lbnRlIGVzaXN0ZW50ZSwgY2hpYXJhbWVudGUgw6ggaW5zZW5zYXRhIHNlbnphICoqSGFzSGVhZGVyR3JvdXAqKiAqL1xyXG4gICAgQElucHV0KCkgSGFzU2Vjb25kYXJ5SGVhZGVyR3JvdXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIGdsaSBIZWFkZXIgZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgSGVhZGVySGlkZGVuOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBpbCBCb2R5IGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEJvZHlIaWRkZW46IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGxhIHNlbGV6aW9uZSDDqCB0ZW1wb3JhbmVhbWVudGUgZGlzYWJpbGl0YXRhLiBSaXNwZXR0byBhbGwnSW5wdXQgKipTZWxlY3Rpb24qKiBjaGUgdmlzaXZhbWVudGUgZ2VzdGlzY2Ugc2UgY2kgc29ubyBvIG5vIGdsaSBpbnB1dCBkaSBzZWxlemlvbmUsXHJcbiAgICAgKiBxdWVzdG8gSW5wdXQgZ2VzdGlzY2Ugc2UgcXVlc3RpIGlucHV0IHNvbm8gYWJpbGl0YXRpIG8gbWVub1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBTZWxlY3Rpb25EaXNhYmxlZDogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgZm9yemFyZSBpbCBzaXN0ZW1hIGRpIHNlbGV6aW9uZSBhIGdlc3RpcmUgdW4gZWxlbWVudG8gcGVyIHZvbHRhLlxyXG4gICAgICogU2VsZXppb25hcmUgdW4nYWx0cmEgcmlnYSBjb24gdW5hIGdpw6Agc2VsZXppb25hdGEgYXBwbGljaGVyw6AgbGEgc2VsZXppb25lIGFsbGEgbnVvdmEgcmlnYSwgcmltdW92ZW5kb2xhIGRhbGwnYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBTaW5nbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIENhbGxiYWNrIGNoZSBkYXRvIHVuIG9nZ2V0dG8gcmVzaXR1aXNjZSBsJ2V2ZW50dWFsZSBjbGFzc2UgZGEgYXBwbGljYXJlIGFsbGEgcmlnYSBjb2xsZWdhdGEgYWxsJ29nZ2V0dG8gKi9cclxuICAgIEBJbnB1dCgpIFJvd0NsYXNzQXNzaWduZXI6IGFueSA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgb3JkaW5hcmUgaSBkYXRpIGluIG1hbmllcmEgZGlzY2VuZGVudGUgbyBhc2NlbmRlbnRlICovXHJcbiAgICBASW5wdXQoKSBPcmRlckJ5Q29sdW1uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBhdmVyZSBwacO5IGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50byBkZWkgZGF0aSAqL1xyXG4gICAgQElucHV0KCkgTXVsdGlwbGVPcmRlcmluZ0RpcmVjdGl2ZXMgPSB0cnVlO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIG5hc2NvbmRlcmUgbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgc2VsZXppb25pIGVmZmV0dHVhdGUgZGFsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgKi9cclxuICAgIEBJbnB1dCgpIEhpZGRlbkNvbHVtbnM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHJpb3JkaW5hcmUgbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgaW1wb3N0YXppb25pIGVmZmV0dHVhdGUgZGFsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgKi9cclxuICAgIEBJbnB1dCgpIENvbHVtbnNPcmRlcmluZzogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogRXZlbnR1YWxlIHN1cHBvcnRvIGFsbGUgcmljZXJjaGUgYXBwbGljYXRlIGFsbGEgbW9kYWxpdMOgIEFycmF5ICovXHJcbiAgICBASW5wdXQoKSBTZWFyY2hWaWV3ID0gbnVsbCBhcyBBcHBTZWFyY2g8YW55PjtcclxuICAgIC8qKiBBYmlsaXRhIG8gZGlzYWJpbGl0YSBpbCBzaXN0ZW1hIGNoZSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSB0dXR0aSBnbGkgZWxlbWVudGkgbmVsbGEgdmlzdGEgKi9cclxuICAgIEBJbnB1dCgpIFNlbGVjdEFsbDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogU2ltdWxhIGxhIHBhZ2luYXppb25lIGFuY2hlIHBlciBsZSB0YWJlbGxlIGNoZSBmdW56aW9uYW5vIGluIG1vZGFsaXTDoCBBcnJheSAqL1xyXG4gICAgQElucHV0KCkgVXNlQXJyYXlNb2RlUGFnaW5nID0gdHJ1ZTtcclxuICAgIC8qKiBEZWZpbml6aW9uZSBkaSBjb2xvbm5lIGRpbmFtY2hlIHBlciBsYSBtb2RhbGl0w6AsIGFwcHVudG8sIGRpbmFtaWNhICovXHJcbiAgICBASW5wdXQoKSBEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb246IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbltdID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egb3BlcmF6aW9uaSBkaW5hbWljaGUgZ2VuZXJpY2hlIGNoZSBwb3Nzb25vIGVzc2VyZSBlZmZldHR1YXRlIHBlciByaWdhLiBBcHBhaW9ubyBjb21lIGNvbG9ubmUgZXh0cmEgc3VsIGxhdG8gc2luaXN0cm8gZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgRHluYW1pY09wZXJhdGlvbnM6IEVzVGFibGVPcGVyYXRpb25EZWZpbml0aW9uW10gPSBbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgdmlzdWFsaXp6YXJlIGkgZGF0aSBpbiBtYW5pZXJhIGdlcmFyY2hpY2EgKi9cclxuICAgIEBJbnB1dCgpIEhpZXJhcmNoeTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lEIGRlbCBwYWRyZS4gRGEgdXRpbGl6emFyZSBzZSAqKkhpZXJhcmNoeSoqIMOoIGltcG9zdGF0byAqL1xyXG4gICAgQElucHV0KCkgUGFyZW50S2V5ID0gJyc7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lEIGRlbGwnb2dnZXR0byBhdHR1YWxlLiBEYSB1dGlsaXp6YXJlIHNlICoqSGllcmFyY2h5Kiogw6ggaW1wb3N0YXRvICovXHJcbiAgICBASW5wdXQoKSBPd25LZXkgPSAnJztcclxuICAgIC8qKiBJbmRpY2Egc2UgcGFydGlyZSBjb24gdW4gYWxiZXJvIGVzcGFuc28uIERhIHV0aWxpenphcmUgc2UgKipIaWVyYXJjaHkqKiDDqCBpbXBvc3RhdG8gKi9cclxuICAgIEBJbnB1dCgpIFN0YXJ0c0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIC8qKiBJbmRpY2Egc2UgZWZmZXR0dWFyZSBpbCBzYWx2YXRhZ2dpbyBkZWxsZSBwcmVmZXJlbnplIGRpIHJpY2VyY2EgKi9cclxuICAgIEBJbnB1dCgpIFNhdmVQcmVmZXJlbmNlczogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqIEluZGljYSBkb3ZlIHZpc3VhbGl6emFyZSBsZSBpbmZvcm1hemlvbmkgZGkgcGFnaW5hemlvbmUsIHNlIHNvcHJhLCBzb3R0byBvIGluIGVudHJhbWJpICovXHJcbiAgICBASW5wdXQoKSBQYWdpbmdTdHlsZTogJ2JvdGgnIHwgJ3RvcCcgfCAnYm90dG9tJyA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIGRvdmUgdmlzdWFsaXp6YXJlIGxlIGluZm9ybWF6aW9uaSBkaSBwYWdpbmF6aW9uZSwgc2Ugc29wcmEsIHNvdHRvIG8gaW4gZW50cmFtYmkgKi9cclxuICAgIEBJbnB1dCgpIFJvd0dyb3VwaW5nUGFnaW5nU3R5bGU6ICdsZWZ0JyB8ICdyaWdodCcgPSBudWxsO1xyXG4gICAgLyoqIFF1YWxvcmEgcGVyIHF1YWxzaWFzaSBtb3Rpdm8gbm9uIHZlbmlzc2UgdXNhdG8gKippdGVtcyoqIGRlbGwnQXBwU2VhcmNoIHF1ZXN0byBJbnB1dCBpbmRpY2EgcXVhbCDDqCBpbCBub21lIGRlbGxhIHByb3ByaWV0w6AgZGEgdXRpbGl6emFyZSAqL1xyXG4gICAgQElucHV0KCkgSXRlbVNvdXJjZVByb3BlcnR5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgLyoqIEluZGljYSBzZSB1dGlsaXp6YXJlIGxhIGNhY2hlIGRpIHNlbGV6aW9uZSBjaGUgcGVybWV0dGUgZGkgbWFudGVuZXJlIGdsaSBzdGF0aSBkaSBzZWxlemlvbmUgZGVpIHZhcmkgb2dnZXR0aSBuYXZpZ2FuZG8gZGEgdW5hIHBhZ2luYSBhbGwnYWx0cmEgKi9cclxuICAgIEBJbnB1dCgpIFVzZVNlbGVjdGlvbkNhY2hlID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBkZWNpZGVyZSBzZSwgaW4gbW9kYWxpdMOgIHJhZ2dydXBwYW1lbnRvLCBtb3N0cmFyZSBvIG1lbm8gaWwgdmFsb3JlIGRlbGxlIGNvbG9ubmUgZGkgZ3J1cHBvIG5lZ2xpIG9nZ2V0dGkgZmluYWxpLiBEaSBkZWZhdWx0IHNvbm8gbmFzY29zdGkgKi9cclxuICAgIEBJbnB1dCgpIFNob3dJdGVtR3JvdXBzQ29sdW1ucyA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIGNoZSB0dXR0aSBpIGNhbXBpIGNoZSBkZWZpbmlzY29ubyBsZSBtb2RhbGl0w6AgZGkgbW9kaWZpY2EgY2FtcG8gcG9zc29ubyBlc3NlcmUgbW9kaWZpY2F0aSBpbiBiYXNlIGFsbGUgaW1wb3N0YXppb25pICovXHJcbiAgICBASW5wdXQoKSBFZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSDDqCBwb3NzaWJpbGUgZWZmZXR0dWFyZSBzZWxlemlvbmkgYSByYW5nZSBwZXIgcG9pIGZhcmNpIGV2ZW50dWFsbWVudGUgY29waWEgaW5jb2xsYSAqL1xyXG4gICAgQElucHV0KCkgUmFuZ2VTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBFdmVudG8gY2hlIHZpZW5lIHJpY2hpYW1hdG8gYWwgY2FtYmlvIGRpIG9yaWRuYW1lbnRvIGRpIHVuYSBjb2xvbm5hICovXHJcbiAgICBAT3V0cHV0KCkgb25PcmRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcHBPcmRlcmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFwcE9yZGVyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGNoZSB2aWVuZSByaWNoaWFtYXRvIHF1YW5kbyBsJ2VzLXRhYmxlIHJpdGllbmUgc2lhIG5lY2Vzc2FyaW8gcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhLlxyXG4gICAgICogSWwgYm9vbGVhbm8gZGVsbCdldmVudG8gaW5kaWNhIHNlIHZpZW5lIHN1Z2dlcml0byBkaSByZXNldHRhcmUgbGEgcGFnaW5hIG8gbWVuby5cclxuICAgICAqIFxyXG4gICAgICogU29sbyBpbiBjYXNvIHZlbmdhIHV0aWxpenphdGEgbGEgbW9kYWxpdMOgIGEgcmFnZ3J1cHBhbWVudGkgZGkgcmlnaGUgcHXDsiBzdWNjZWRlcmUgY2hlIGwnZXMtdGFibGUgcGFzc2kgdW4gaW50ZXJvIEFwcFNlYXJjaCBjb21lIHBhcmFtZXRybyBkaSByaWNlcmNhLFxyXG4gICAgICogaW4gcXVlbCBjYXNvIGwnYXBwbGljYXppb25lIHJpY2V2ZW50ZSBkb3Zyw6Agb25vcmFyZSBsYSByaWNoaWVzdGEgc3BlZGVuZG8gYWwgYmFja2FuZCBsJ29nZ2V0dG8gZGkgcmljZXJjYSBBUy1JU1xyXG4gICAgICogXHJcbiAgICAgKiBpbCB0aXBvIGRlbGwnRW1pdHRlciBpbnZlY2UgZGkgZXNzZXJlIFtib29sZWFuIHwgQXBwU2VhcmNoPGFueT5dIMOoIHN0YXRvIGltcG9zdGF0byBhIFwiYW55XCIgcGVyIGV2aXRhcmUgcHJvYmxlbWkgZGkgcmV0cm9jb21wYXRpYmlsaXTDoFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25TZWFyY2hSZXF1ZXN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgLyoqIEV2ZW50byBjaGUgcGFydGUgYWQgb2duaSBtb2RpZmljYSBkaSBcImNoZWNrYWdnaW9cIiBpbiBmb3JtYSBkaSBjb21vZG8gYXJyYXkuIEVzcG9uZSBsJ29nZ2V0dG8gY29uIGxvIHN0YXRvIGRpIGNoZWNrIGF0dHVhbGUgKi9cclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJdGVtc1NlbGVjdGlvbjxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SXRlbXNTZWxlY3Rpb248YW55Pj4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGwnZWxpbWluYXppb25lIGRpIHVuIG9nZ2V0dG8gKi9cclxuICAgIEBPdXRwdXQoKSBvblJlbW92YWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gYWxsJ2FubnVsbGFtZW50byBkaSB1bidlbGltaW5hemlvbmUgKi9cclxuICAgIEBPdXRwdXQoKSBvbkFib3J0UmVtb3ZhbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlaSBtb2RlbGxpIGJpbmRhdGkgKi9cclxuICAgIEBPdXRwdXQoKSBvbk1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXNUYWJsZU1vZGVsQ2hhbmdlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxFc1RhYmxlTW9kZWxDaGFuZ2VbXT4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqQ29ybmVyTWVudU9wdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uQ29ybmVyQWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nLCBlc3RhYmxlOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgZXN0YWJsZTogYW55IH0+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqRHluYW1pY09wZXJhdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uRHluYW1pY09wZXJhdGlvbjogRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgaXRlbTogYW55IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBzdHJpbmcsIGl0ZW06IGFueSB9PigpO1xyXG5cclxuICAgIC8qKiBEYXRpIGVzcG9ydGF0aSBkYSBuZ3gtY3N2ICovXHJcbiAgICBwdWJsaWMgZGF0YTogYW55W107XHJcbiAgICAvKiogSGVhZGVyIGRlaSBkYXRpIGVzcG9ydGF0aSBkYSBuZ3gtY3N2ICovXHJcbiAgICBwdWJsaWMgaGVhZGVyczogQ3N2SGVhZGVyc1tdO1xyXG4gICAgLyoqIEVsZW1lbnRvIEhUTUwgZGEgY2xpY2NhcmUgcGVyIGwnZXNwb3J0YXppb25lICovXHJcbiAgICBAVmlld0NoaWxkKCdleHBvcnREb3dubG9hZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBleHBvcnREb3dubG9hZGVyOiBFbGVtZW50UmVmO1xyXG4gICAgLyoqIFBsYWNlaG9sZGVyIGRpIG1lbsO5IGNvbnRlc3R1YWxlIHBlciBxdWFuZG8gbm9uIGNpIHNvbm8gb3B6aW9uaSBuZWwgcGxhY2Vob2xkZXIgXCJWZXJvXCIgICovXHJcbiAgICBAVmlld0NoaWxkKCdlbXB0eU1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgdGFibGVFbXB0eU1lbnU6IENvbnRleHRNZW51Q29tcG9uZW50O1xyXG5cclxuICAgIC8qKiBTdWJzY3JpcHRpb24gc3VsbCdhcGVydHVyYSBkZWwgY29udGV4dCBtZW51IGRhIHJpcHVsaXJlIGFsIGRlc3Ryb3kgZGVsbGEgY2xhc3NlICovXHJcbiAgICBwcml2YXRlIGN0eE1lbnVTdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgICAvKiogUGFnaW5hIGluIHZpc3VhbGl6emF6aW9uZSAoZHVyYW50ZSBsYSBwYWdpbmF6aW9uZSBpbiBtb2RhbGl0w6AgQXJyYXkpICovXHJcbiAgICBwdWJsaWMgYXJyYXltb2RlUGFnZSA9IDE7XHJcbiAgICAvKiogTnVtZXJvIGRpIHBhZ2luZSAoZHVyYW50ZSBsYSBwYWdpbmF6aW9uZSBpbiBtb2RhbGl0w6AgQXJyYXkpICovXHJcbiAgICBwdWJsaWMgYXJyYXltb2RlUGFnZXMgPSAxO1xyXG4gICAgLyoqIE9nZ2V0dGkgcGVyIG9nbmkgcGFnaW5hIChkdXJhbnRlIGxhIHBhZ2luYXppb25lIGluIG1vZGFsaXTDoCBBcnJheSkgKi9cclxuICAgIEBJbnB1dCgpIEFycmF5bW9kZUl0ZW1zUGVyUGFnZSA9IG51bGw7XHJcbiAgICAvKiogT2dnZXR0byBkaSBzZWxlemlvbmUgcGVyIGxhIG1vZGFsaXTDoCBBcnJheSwgY2hlIGRldmUgY29tcG9ydGFyc2kgY29tZSBsYSBjb250cm9wYXJ0ZSBpbiBtb2RhbGl0w6AgVmlldyAqL1xyXG4gICAgcHVibGljIGFycmF5bW9kZVNlbGVjdGlvbjogSXRlbXNTZWxlY3Rpb248YW55PjtcclxuICAgIC8qKiBDb2xvbm5lIGRhIHZpc3VhbGl6emFyZSBpbiBtb2RhbGl0w6AgYXJyYXkgKi9cclxuICAgIHB1YmxpYyBhcnJheUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAvKiogT3JkaW5lIGRlbGxlIGNvbG9ubmUgZGEgdmlzdWFsaXp6YXJlIGluIG1vZGFsaXTDoCBhcnJheSAqL1xyXG4gICAgcHVibGljIGFycmF5Q29sdW1uT3JkZXJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAvKiogT3JkaW5hbWVudGkgQVNDLURFU0Mgc3VsbGUgY29sb25uZSBpbiBtb2RhbGl0w6AgYXJyYXkgKi9cclxuICAgIHB1YmxpYyBhcnJheU9yZGVyczogQXBwT3JkZXJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFyaWFiaWxlIGNoZSBzZXJ2ZSBhIGdlc3RpcmUgaWwgbW9tZW50byBpbiBjdWkgbCdlcy10YWJsZSBhZ2dpb3JuYSBsYSBwYWdpbmF6aW9uZSAocHVsc2FudGkgZWNjKS5cclxuICAgICAqIEVzc2VuZG8gb3BlcmF6aW9uaSBjb211bnF1ZSBjb3N0b3NlIGxlIGVmZmV0dHVvIHNvbG8gc3UgYmluZGluZyBlc3Rlcm5pLCBub24gc3UgcmV3cml0ZSBnZW5lcmF0aSBpbnRlcm5hbWVudGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFdyaXRlQ2FsbCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgY2hlIGNvbnRlcnLDoCB0dXR0ZSBsZSByaWNlcmNoZSBlZmZldHR1YXRlIHN1IGdydXBwaSBkaXZlcnNpIGRhbCBwcmltbyBlIHN1IGVsZW1lbnRpIGNvbnRlbnV0aSBuZWkgZ3J1cHBpLlxyXG4gICAgICogSW4gY2FzbyBkaSBjYW1iaSBkaSBvcmRpbmFtZW50byBkZWxsZSBjb2xvbm5lIGRpdmVyc2UgZGFsbGEgcHJpbWEgdHV0dGUgbGUgY2hpYW1hdGUgZmF0dGUgZGFsIHNlY29uZG8gbGl2ZWxsbyBpbiBwb2kgZGV2b25vIGVzc2VyZSByaWVzZWd1aXRlIHNlY29uZG8gbGEgc2VndWVudGUgbG9naWNhOlxyXG4gICAgICogXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2FtYmlvIG9yZGluYW1lbnRvIHN1bCBwcmltbyBncnVwcG8qKjogcmVsb2FkIGNvbXBsZXRvLCBub24gbWkgb2NjdXBvIGRpIHJpcHVsaXJlIGdsaSBlbGVtZW50aSBiaW5kYXRpIGluIGFsY3VuIG1vZG9cclxuICAgICAqIFxyXG4gICAgICogKipDYW1iaW8gb3JkaW5hbWVudG8gc3VsbGEgY29sb25uYSByZWxhdGl2YSBhbGwnTi1lc2ltbyBncnVwcG8qKjogcmVsb2FkIGNvbXBsZXRvIGRlbCBjb250ZW51dG8gZGVpIGdydXBwaSBwcmVjZWRlbnRpLCByaXB1bGVuZG8gcHJlY2VkZW50ZW1lbnRlIFxyXG4gICAgICogdHV0dGkgZ2xpIGVsZW1lbnRpIGNvbiAqKl9ncm91cGxldmVsKiogPSBOXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2FtYmlvIG9yZGluYW1lbnRvIHN1IHVuYSBjb2xvbm5hIG5vbiByYWdncnVwcGF0YSoqOiByZWxvYWQgY29tcGxldG8gcGVyIHR1dHRpIGkgZ3J1cHBpIGZpbmFsaSBhcGVydGksIGRldm8gcHJlY2VkZW50ZW1lbnRlIHJpcHVsaXJlIHR1dHRpIGdsaSBlbGVtZW50aSBjb24gKipfaXRlbSoqID0gdHJ1ZVxyXG4gICAgICogXHJcbiAgICAgKiBBbHRyaSBldmVudGkgbm9uIGRvdnJlYmJlcm8gcmFwcHJlc2VudGFyZSBwcm9ibGVtaTpcclxuICAgICAqIC0gU2VsZXppb25lOiBub24gY2FtYmlhIG51bGxhXHJcbiAgICAgKiAtIFBhZ2luYXppb25lOiBjYW1iaWEgYSBsaXZlbGxvIHJvb3QgcXVpbmRpIHZpZW5lIHJpY2FyaWNhdG8gdHV0dG8gY29tdW5xdWUsIHN0ZXNzbyB2YWxlIHBlciBsZSBwYWdpbmF6aW9uaSBpbnRlcm5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGU6IHsgcGF0aDogc3RyaW5nLCByb3V0ZTogR3JvdXBSb3V0ZUZyYWdtZW50W10sIHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBncm91cF9jb2x1bW46IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogVmFyaWFiaWxlIGQnYXBwb2dnaW8gcGVyIGNhcGlyZSBzZSBjJ8OoIGJpc29nbm8gZGkgcmktZWZmZXR0dWFyZSB1bmEgcmljZXJjYSBvIG1lbm8gKi9cclxuICAgIHByaXZhdGUgUmVzZWFyY2hOZWVkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBDb2xvbm5lIHZpc2liaWxpIGRlbGxhIHZpc3RhIGF0dHVhbGUuIFZhbG9yaXp6YXRvIGRpIGRlZmF1bHQgYWwgbnVtZXJvIG1hc3NpbW8gZGkgY29sb25uZSBzdXBwb3J0YXRlIGRhbGxhIHRhYmVsbGEgcGVyIGxlIGNhc2lzdGljaGUgaW4gYXNzZW56YSBkaSBjdXN0b20gY2VsbHMgKi9cclxuICAgIHB1YmxpYyBDb2x1bW5zOiB7IFZpc2liaWxlOiBudW1iZXIsIFZpc2libGVVbnBpbm5lZDogbnVtYmVyLCBHbG9iYWw6IG51bWJlciB9ID0geyBWaXNpYmlsZTogMTAwLCBWaXNpYmxlVW5waW5uZWQ6IDEwMCwgR2xvYmFsOiAxMDAgfTtcclxuICAgIC8qKiBJbiBjYXNvIGRpIFJvdyBHcm91cGluZyBxdWkgdmllbmUgc2FsdmF0YSBsYSB2aXN0YSBwcmluY2lwYWxlIGRlaSBncnVwcGkgYmFzZSAqL1xyXG4gICAgcHVibGljIE1haW5Hcm91cFZpZXc6IEFwcFNlYXJjaDxhbnk+ID0gbnVsbDtcclxuICAgIC8qKiBDb250ZWdnaW8gYmFzZSBkZWdsaSBvZ2dldHRpLiBJbiBtb2RhbGl0w6Agbm9ybWFsZSB2aWVuZSByZXNldHRhdG8gYWQgb2duaSBudW92YSBWaWV3IGluc2VyaXRhLCBpbiBtb2RhbGl0w6AgUm93R3JvdXBpbmcgdmllbmUgcmVzZXR0YXRvIHNvbG8gYWQgdW5hIG51b3ZhIFZpZXcgZGkgbGl2ZWxsbyBcIjBcIiAqL1xyXG4gICAgcHVibGljIEJhc2VJdGVtc0NvdW50ID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgY2kgc29ubyBkZWxsZSBjb2xvbm5lIHBpbm5hdGUgZSB2aXNpYmlsaS4gU2VydmUgcGVyIHBvdGVyIHNldHRhcmUgdHV0dGUgbGUgY29sb25uZSBwcmltYSBjaGUgYXJyaXZpbm8gZGF0aSBhIHBpbm5lZCovXHJcbiAgICBwdWJsaWMgSGFzUGlubmVkQ29sdW1uczogYm9vbGVhblxyXG4gICAgLyoqIExhcmdoZXp6YSBjYWxjb2xhdGEgZGVsIGNvbnRhaW5lciBkZWxsZSBjb2xvbm5lIHBpbm5hdGUgKi9cclxuICAgIHB1YmxpYyBQaW5uZWRDb250YWluZXJXaWR0aDogbnVtYmVyO1xyXG4gICAgLyoqIEluZGljYSBzZSBub25vc3RhbnRlIHNpYW1vIGluIG1vZGFsaXTDoCBhcnJheSBzb25vIHN0YXRpIGluZGl2aWR1YXRpIGRlaSBncnVwcGkuIEluIHRhbCBjYXNvIGVzLXRhYmxlIHNpIGNvbXBvcnRhIGRhIHBzZXVkbyBiYWNrZW5kIGVkIGVmZmV0dHVhIGxlIGFnZ3JlZ2F6aW9uaSBlIHJhZ2dydXBwYW1lbnRpIGNvbXBsZXRhbWVudGUgbGF0byBjbGllbnQgKi9cclxuICAgIHB1YmxpYyBBcnJheUdyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGNoZSBsJ2VzLXRhYmxlIMOoIGJhc2F0YSBzdWxsZSBkaXJldHRpdmUgKG51b3ZhIG1vZGFsaXTDoCkgKi9cclxuICAgIHB1YmxpYyBEaXJlY3RpdmVzQmFzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBJbmRpY2EgbG8gc3RhdG8gZGkgc2VsZXppb25lIHBlciBzaW5nb2xhIGNlbGxhICovXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uU3RhdHVzOiB7IFtpbmRleDogbnVtYmVyXTogeyBbaW5kZXg6IG51bWJlcl06IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgfSB9ID0ge307XHJcblxyXG4gICAgLyoqIE9wemlvbmkgZGkgcGFnaW5hemlvbmUgKi9cclxuICAgIHB1YmxpYyBQYWdlck9wdGlvbnM6IHsgUGFnZXJDb3VudDogbnVtYmVyLCBTaG93Q291bnQ6IGJvb2xlYW4sIFNob3dQYWdpbmc6IGJvb2xlYW4sIFVzZXNWaWV3OiBib29sZWFuLCBTaG93QnV0dG9uczogYm9vbGVhbiwgU2hvd1BhZ2luZ09wdGlvbnM6IGJvb2xlYW4sIFZpZXc6IGFueSwgUmVhZHk6IGJvb2xlYW4sIFNlYXJjaGVzOiAnaXRlbXMnIHwgJ2dyb3VwcycgfSA9XHJcbiAgICAgICAgeyBQYWdlckNvdW50OiBudWxsLCBTaG93Q291bnQ6IHRydWUsIFNob3dQYWdpbmc6IHRydWUsIFNob3dCdXR0b25zOiB0cnVlLCBTaG93UGFnaW5nT3B0aW9uczogdHJ1ZSwgVXNlc1ZpZXc6IHRydWUsIFZpZXc6IG51bGwsIFJlYWR5OiBmYWxzZSwgU2VhcmNoZXM6ICdpdGVtcycgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIGNsaWNrIGRlc3RybyBzdSB1bmEgcmlnYSBjb24gc2VsZXppb25lIGF0dGl2YTogVGlybyBmdW9yaSBpbCBjb250ZXh0IG1lbnUgZSBzZWxlemlvbmUgbCdlbGVtZW50byBjb3JyZW50ZVxyXG4gICAgICAgIHRoaXMuY3R4TWVudVN1YnNjcmlwdGlvbiA9ICh0aGlzLkNvbnRleHRNZW51IHx8IHRoaXMudGFibGVFbXB0eU1lbnUpLm9wZW4uc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAvLyBHcnVwcGkgdmEgYmVuZSwgb2dnZXR0aSBwdXJlLCBtYSBzZXBhcmF0b3JpIGZyYSBncnVwcGkgcHJvcHJpbyBuby4uLlxyXG4gICAgICAgICAgICBpZiAodC5pdGVtLl9zZXApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaG91bGRFbWl0ID0gIXQuaXRlbS5fc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgICAgICB0Lml0ZW0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1cygpO1xyXG4gICAgICAgICAgICB2YXIgaXRlbVNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uX0guaGFuZGxlSXRlbXNTZWxlY3Rpb24oW3QuaXRlbV0pO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG91bGRFbWl0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChpdGVtU2VsZWN0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICAvLyBTZSB1dGlsaXp6byBsYSBuZXcgc3BpY3kgbW9kZSBkZWR1Y28gdHV0dGkgaSBwYXJhbWV0cmkgZGkgbGF2b3JvIHBvc3NpYmlsaSBhbCBjYXJpY2FtZW50byBkZWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gVmVuZ29ubyBzb3ZyYXNjcml0dGUgc29sbyBsZSBwcm9wcmlldMOgIG5vbiBpbXBvc3RhdGUgZGFsbCd1dGVudGVcclxuICAgICAgICBsZXQgdGRzRCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUubGVuZ3RoID09IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGRzRGlyZWN0aXZlPy5sZW5ndGggPiAwID8gdGhpcy5Fc1RhYmxlVGVtcGxhdGU/LlRlbXBsYXRlPy5Fc1Rkc0RpcmVjdGl2ZSA6IHRoaXMuRXNUZHNEaXJlY3RpdmUgOiB0aGlzLkVzVGRzRGlyZWN0aXZlO1xyXG4gICAgICAgIGxldCB0aHNEID0gdGhpcy5Fc1Roc0RpcmVjdGl2ZS5sZW5ndGggPT0gMCA/IHRoaXMuRXNUYWJsZVRlbXBsYXRlPy5UZW1wbGF0ZT8uRXNUaHNEaXJlY3RpdmU/Lmxlbmd0aCA+IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGhzRGlyZWN0aXZlIDogdGhpcy5Fc1Roc0RpcmVjdGl2ZSA6IHRoaXMuRXNUaHNEaXJlY3RpdmU7XHJcbiAgICAgICAgbGV0IHVzZXNUaHNBbmRUZHNEaXJlY3RpdmVzID0gdGRzRCAmJiB0ZHNELmxlbmd0aCA+IDAgJiYgdGhzRCAmJiB0aHNELmxlbmd0aCA+IDA7XHJcbiAgICAgICAgbGV0IGhhc05vQ29udGVudFByb2plY3Rpb24gPSAhdGhpcy5ib2R5UmVmICYmICF0aGlzLmhlYWRlclJlZiAmJiAhdGhpcy5oZWFkZXJHcm91cFJlZiAmJiAhdGhpcy5zZWNvbmRhcnlIZWFkZXJHcm91cFJlZjtcclxuXHJcbiAgICAgICAgaWYgKHVzZXNUaHNBbmRUZHNEaXJlY3RpdmVzIHx8IGhhc05vQ29udGVudFByb2plY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuVXNlQ3VzdG9tQ2VsbHMgPT0gbnVsbCkgdGhpcy5Vc2VDdXN0b21DZWxscyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkhpZGRlbkNvbHVtbnMgPT0gbnVsbCAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB0aGlzLkhpZGRlbkNvbHVtbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Db2x1bW5zT3JkZXJpbmcgPT0gbnVsbCAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB0aGlzLkNvbHVtbnNPcmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLk9yZGVyQnlDb2x1bW4gPT0gbnVsbCAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB0aGlzLk9yZGVyQnlDb2x1bW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TZWxlY3RBbGwgPT0gbnVsbCAmJiB0aGlzLlNlbGVjdGlvbikgdGhpcy5TZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TaGlmdENsaWNrID09IG51bGwgJiYgdGhpcy5TZWxlY3Rpb24pIHRoaXMuU2hpZnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuRGlyZWN0aXZlc0Jhc2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vUGVyIHBvdGVyIGNhbWJpYXJlIGlsIGxheW91dCBpbiBiYXNlIGFsIGxpdmVsbG8gZ2VyYXJjaGljbyBpbCBjb21wb25lbnRlIGRldmEgYXZlcmUgaWwgcGllbm8gY29udHJvbGxvIGRpIG9nbmkgY2VsbGEsXHJcbiAgICAgICAgLy9jaGUgY29uIHNvbG8gbGEgcHJvaWV6aW9uZSAoc2VuemEgY2VsbGUgY3Vzb3RtKSBub24gw6ggZGlzcG9uaWJpbGVcclxuICAgICAgICBpZiAodGhpcy5IaWVyYXJjaHkgJiYgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpXHJcbiAgICAgICAgICAgIHRocm93IFwiRXMtdGFibGUgZXJyb3I6IFBlciBwb3RlciB1dGlsaXp6YXJlIGwnZXMtdGFibGUgY29uIFtIaWVyYXJjaHldPVxcXCJ0cnVlXFxcIiDDqCByaWNoaWVzdG8gYW5jaGUgW1VzZUN1c3RvbUNlbGxzXT1cXFwidHJ1ZVxcXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvcHlTdWJzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY29weVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXN0ZVN1YnNjcmlwdGlvbilcclxuICAgICAgICAgICAgdGhpcy5wYXN0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdHhNZW51U3Vic2NyaXB0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmN0eE1lbnVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBsZXQgbmV3U2VhcmNoVmlldyA9IGNoYW5nZXNbJ1NlYXJjaFZpZXcnXTtcclxuICAgICAgICBpZiAobmV3U2VhcmNoVmlldyAmJiB0aGlzLlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlQdWxzYW50aSA9IHRoaXMudXRpbGl0aWVzX0guZ2V0UGFnZXNBcnJheSg2LCB0aGlzLlNlYXJjaFZpZXcucGFnZSwgdGhpcy5TZWFyY2hWaWV3LnBhZ2VzIHx8IDEsIHRoaXMuU2VhcmNoVmlldy5vYmplY3Rjb3VudCwgdGhpcy5TZWFyY2hWaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm4pOiB2b2lkIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjsgfVxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbik6IHZvaWQgeyB9XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY2hhbmdlZCgpIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5WaWV3KTsgfVxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGFzeW5jIHdyaXRlVmFsdWUob2JqKSB7XHJcbiAgICAgICAgdGhpcy5WaWV3ID0gb2JqID8gb2JqIDogbnVsbDtcclxuXHJcbiAgICAgICAgLy8gTWkgw6ggYXJyaXZhdGEgbCdBcHBTZWFyY2ggcXVpbmRpIGRpIHNpY3VybyBub24gaG8gdW5hIHJpY2VyY2EgaW4gcHJvZ3Jlc3NcclxuICAgICAgICB0aGlzLnJlc2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuVmlldyAmJiAhdGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgIC8vIFN1IHZpZXcgbnVsbGEgZXZpdG8gZGkgZmFyZSBwcmVzc29jaMOpIHF1YWxzaWFzaSBjb3NhLiBTZSBhcnJpdmEgdW4gbnVsbCBkZXZvIGFuY2hlIGFzc2ljdXJhcm1pIGRpIG5vbiBtb3N0cmFyZSBudWxsYVxyXG4gICAgICAgICAgICB0aGlzLmJvdW5kU291cmNlID0gdGhpcy5UTVBCb3VuZFNvdXJjZSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFBlciBlc3NlcmUgc2ljdXJvIGNoZSBkb3BvIHVuIGJpbmQgZGkgb2dnZXR0aSBsYSBlcy10YWJsZSBhZ2dpb3JuaSBsYSBncmFmaWNhXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBwZXIgc2JhZ2xpbyBsJ29nZ2V0dG8gY2hlIG1pIGFycml2YSBub24gw6ggdGlwaXp6YXRvIChpbnN0YW5jZW9mIEFwcFNlYXJjaCByZXN0aXR1aXNjZSBmYWxzZSBhbmNoZSBzZSDDqCBkZWwgdGlwbyBnaXVzdG8pXHJcbiAgICAgICAgLy8gbG8gY29ycmVnZ28tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgIGlmICh0aGlzLlZpZXcgJiYgdHlwZW9mICh0aGlzLlZpZXcgYXMgYW55KS5pdGVtc3BlcnBhZ2VvdmVycmlkZSAhPSAndW5kZWZpbmVkJyAmJiAhKHRoaXMuVmlldyBpbnN0YW5jZW9mIEFwcFNlYXJjaCkpXHJcbiAgICAgICAgICAgICh0aGlzLlZpZXcgYXMgYW55KS5fX3Byb3RvX18gPSBuZXcgQXBwU2VhcmNoKCk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5TZWFyY2hWaWV3ICYmIHR5cGVvZiAodGhpcy5TZWFyY2hWaWV3IGFzIGFueSkuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgIT0gJ3VuZGVmaW5lZCcgJiYgISh0aGlzLlNlYXJjaFZpZXcgaW5zdGFuY2VvZiBBcHBTZWFyY2gpKVxyXG4gICAgICAgICAgICAodGhpcy5TZWFyY2hWaWV3IGFzIGFueSkuX19wcm90b19fID0gbmV3IEFwcFNlYXJjaCgpO1xyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVmlldyAmJiB0aGlzLlZpZXcgaW5zdGFuY2VvZiBBcHBTZWFyY2gpIHtcclxuICAgICAgICAgICAgLy8gU2UgY2FtYmlhIGwnb2dnZXR0byBpbnRlcm8gc2lnbmlmaWNhIGNoZSBobyByaW1hbmRhdG8gbGEgcmljZXJjYVxyXG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ3ZpZXcnKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBmaXJzdEl0ZW1Hcm91cE9yTm9Hcm91cGluZyA9ICh0aGlzLlZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggfHwgMCkgPT0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIHZlbmdvIGRhIHVuYSByaWNlcmNhIGludGVybmEgbWFudGVuZ28gbG8gc3RhdG8gZGkgc2VsZXppb25lIHByZWNlZGVudGUgKHF1aW5kaSBzdSBjYW1iaW8gcGFnaW5hLCBjYW1iaW8gaXBwLCBlY2MuLi4pXHJcbiAgICAgICAgICAgIC8vIHNlIGludmVjZSBsJ3V0ZW50ZSBoYSBmYXR0byB1bmEgcmljZXJjYSBsdWkgKHF1aW5kaSBjYW1iaWFuZG8gZmlsdHJpKSwgc2VjY28gbGUgaW5mbyBkaSBzZWxlemlvbmVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLlZpZXcuc2VsZWN0aW9uIHx8ICghdGhpcy5WaWV3LmludGVybmFsc2VhcmNocmVxdWVzdCAmJiBmaXJzdEl0ZW1Hcm91cE9yTm9Hcm91cGluZykgfHwgIXRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuVmlldy5zZWxlY3Rpb24gPSBuZXcgSXRlbXNTZWxlY3Rpb24oW10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh0aGlzLlZpZXcuc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5WaWV3LmludGVybmFsc2VhcmNocmVxdWVzdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVjdXBlcm8gUHJlZmVyZW5jZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5TYXZlUHJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBhdmVyZSB1biAnbmFtZScgcGVyIHF1ZXN0YSB0YWJlbGxhXCIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMucHJlZlNlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgY2hlIGlsIHBhY2NoZXR0byBAZXNmYWVuemEvcHJlZmVyZW5jZXMgc2lhIGluc3RhbGxhdG9cIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZnMgPSBhd2FpdCB0aGlzLnByZWZTZXJ2aWNlLmdldEl0ZW08eyBjb2x1bW5zOiBzdHJpbmdbXSwgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXSwgb3JkZXJzOiBBcHBPcmRlcmluZ1tdIH0+KDxzdHJpbmc+dGhpcy5uZ0NvbnRyb2wubmFtZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzaSBsYSBnZW50ZSBzaSBtZXR0YSBhIHNwYW1tYXJlIHJlZnJlc2ggY29uIG5naWYgc3RyYW5pIHN1bGwnZXN0YWJsZSBjcmVhbmRvbGEgZSBkaXN0cnVnZ2VuZG9sYSBOIHZvbHRlIGFsIHNlY29uZG8gbmVsIHRlbXBvIGNoZSBjaSBtZXR0ZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGEgdGlyYXJlIHN1IGxlIHByZWZlcmVuY2UgZGEgcXVpIHNvcHJhIGxhIFZpZXcgcG90cmViYmUgZXNzZXJlIGNhbWJpYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuVmlldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29scyA9IHByZWZzPy5jb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlZFByZWZzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlcG9zaXRvcnk6IHN0cmluZ1tdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc291cmNlOiBzdHJpbmdbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlZpZXcucmVwb3J0X2NvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPSB0aGlzLlZpZXcucmVwb3J0X2NvbHVtbnMubWFwKHQgPT4gdC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb2xzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSA9IGNvbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB0aGlzLlZpZXcuY29sdW1ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gbW9kYWxpdMOgIHJlcG9ydCBkZXZvIGNvbnRyb2xsYXJlIGNoZSB0dXR0ZSBsZSBjb2xvbm5lIHNhbHZhdGUgZmFjY2lhbm8gcGFydGUgZGVsbGEgdmlzdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gbW9kYWxpdMOgIG5vcm1hbGUgaW52ZWNlIHNlIGxlIHByZWZlcmVuemUgZmFubm8gcmlmZXJpbWVudG8gYSBkZWxsZSBjb2xvbm5lIGNoZSBpbyBub24gaG8gbmVsbGEgVmlldyBhdHR1YWxlIHNpZ25pZmljYSBjaGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvIGZhY2VuZG8gcmlmZXJpbWVudG8gYSB1bmEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ2VzLXRhYmxlLCBxdWluZGkgbm9uIGZvY2NpbyBvcGVyYXppb25pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3NpdG9yeS5pbmRleE9mKHNvdXJjZVtpXSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUHJlZnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3LmNvbHVtbnMgPSBwcmVmcz8uY29sdW1ucyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5fb3JkZXJpbmcgPSBwcmVmcz8uY29sdW1uX29yZGVyaW5nIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3Lm9yZGVycyA9IHByZWZzPy5vcmRlcnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhIHBhZ2luYXppb25lIGRldm8gZmFybGEgc29sYW1lbnRlIHF1YW5kbyByaWNoaWVkbyBvIHVuIGdydXBwbyBwcmluY2lwYWxlIChzZSBzb25vIGluIHJvdyBncm91cGluZykgbyBzZSBub24gcmljaGllZG8gZ3J1cHBpIChpbiB0dXR0aSBsZ2kgYWx0cmkgY2FzaSlcclxuICAgICAgICAgICAgaWYgKGZpcnN0SXRlbUdyb3VwT3JOb0dyb3VwaW5nKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIHRoaXMuVmlldy5wYWdlLCB0aGlzLlZpZXcucGFnZXMgfHwgMSwgdGhpcy5WaWV3Lml0ZW1zLmxlbmd0aCwgdGhpcy5WaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5WaWV3ICYmICh0aGlzLlZpZXcubGVuZ3RoICE9IG51bGwgJiYgdGhpcy5WaWV3Lmxlbmd0aCAhPSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnYXJyYXknKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSB8fCAhdGhpcy5hcnJheW1vZGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uID0gbmV3IEl0ZW1zU2VsZWN0aW9uKFtdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQodGhpcy5hcnJheW1vZGVTZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBSZWN1cGVybyBQcmVmZXJlbmNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNhdmVQcmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbC5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb24gcG9zc28gdXRpbGl6emFyZSBsZSBwcmVmZXJlbmNlIHNlbnphIGF2ZXJlIHVuICduYW1lJyBwZXIgcXVlc3RhIHRhYmVsbGFcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5wcmVmU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBjaGUgaWwgcGFjY2hldHRvIEBlc2ZhZW56YS9wcmVmZXJlbmNlcyBzaWEgaW5zdGFsbGF0b1wiKTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmVmcyA9IGF3YWl0IHRoaXMucHJlZlNlcnZpY2UuZ2V0SXRlbTx7IGNvbHVtbnM6IHN0cmluZ1tdLCBjb2x1bW5fb3JkZXJpbmc6IHN0cmluZ1tdLCBvcmRlcnM6IEFwcE9yZGVyaW5nW10gfT4oPHN0cmluZz50aGlzLm5nQ29udHJvbC5uYW1lKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY29scyA9IHByZWZzPy5jb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkUHJlZnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXBvc2l0b3J5OiBzdHJpbmdbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc291cmNlOiBzdHJpbmdbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gdGhpcy5WaWV3LnJlcG9ydF9jb2x1bW5zLm1hcCh0ID0+IHQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb2xzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSA9IGNvbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMuVmlldy5jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gbW9kYWxpdMOgIHJlcG9ydCBkZXZvIGNvbnRyb2xsYXJlIGNoZSB0dXR0ZSBsZSBjb2xvbm5lIHNhbHZhdGUgZmFjY2lhbm8gcGFydGUgZGVsbGEgdmlzdGFcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agbm9ybWFsZSBpbnZlY2Ugc2UgbGUgcHJlZmVyZW56ZSBmYW5ubyByaWZlcmltZW50byBhIGRlbGxlIGNvbG9ubmUgY2hlIGlvIG5vbiBobyBuZWxsYSBWaWV3IGF0dHVhbGUgc2lnbmlmaWNhIGNoZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0byBmYWNlbmRvIHJpZmVyaW1lbnRvIGEgdW5hIHZlcnNpb25lIHZlY2NoaWEgZGVsbCdlcy10YWJsZSwgcXVpbmRpIG5vbiBmb2NjaW8gb3BlcmF6aW9uaVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBvc2l0b3J5LmluZGV4T2Yoc291cmNlW2ldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByZWZzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcuY29sdW1ucyA9IHByZWZzPy5jb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcuY29sdW1uX29yZGVyaW5nID0gcHJlZnM/LmNvbHVtbl9vcmRlcmluZyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3Lm9yZGVycyA9IHByZWZzPy5vcmRlcnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5TZWFyY2hWaWV3KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIHRoaXMuU2VhcmNoVmlldy5wYWdlLCB0aGlzLlNlYXJjaFZpZXcucGFnZXMgfHwgMSwgdGhpcy5TZWFyY2hWaWV3Lml0ZW1zLmxlbmd0aCwgdGhpcy5TZWFyY2hWaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmluYWxpemVDb250ZXh0KCk7XHJcblxyXG4gICAgICAgIHRoaXMucG9zdEJvdW5kU291cmNlQ2FsY3VsYXRpb24oKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVmlldyAmJiAhdGhpcy5WaWV3LnNlbGZzZWFyY2ggJiYgdGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3LnNlbGZzZWFyY2ggJiYgdGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHRyYWNrYnkgcGVyIGlsIGJvZHkgY2hlIGRvdnJlYmJlIGV2aXRhcmUgaWwgOTAlIGRlbGxlIGNoYW5nZSBkZXRlY3Rpb24gKi9cclxuICAgIHB1YmxpYyBib2R5VHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0uX2hhc2g7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWNjZXNzaXZhbWVudGUgYWwgYmluZCBkZWwgbnVvdm8gaW5wdXQgcXVlc3RhIGZ1bnppb25lIHNpIG9jY3VwYSBkaSBmaW5hbGl6emFyZSB0dXR0aSBpIHBhcmFtZXRyaSBkaSBmdW56aW9uYW1lbnRvIGRlbGwnZXMtdGFibGUgXHJcbiAgICAgKiBpbiBiYXNlIGEgSW5wdXQgLSBNb2RlbGxvLCBlIHF1YWxzaWFzaSBhbHRyYSBjb3NhIHBvc3NhIHNlcnZpcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZUNvbnRleHQoKSB7XHJcbiAgICAgICAgbGV0IHZpZXdDYXN0ZWQgPSB0aGlzLlZpZXcgYXMgQXBwU2VhcmNoPGFueT47XHJcblxyXG4gICAgICAgIGxldCBoYXNSb3dHcm91cHMgPSB2aWV3Q2FzdGVkICYmICh2aWV3Q2FzdGVkLmdyb3VwaW5ncyAmJiB2aWV3Q2FzdGVkLmdyb3VwaW5ncy5maWx0ZXIodCA9PiAhdC5hZ2dyZWdhdGlvbikubGVuZ3RoID4gMCkgfHwgKHRoaXMuYXJyYXlNb2RlICYmIHRoaXMuRXNUaHNEaXJlY3RpdmUuc29tZSh0ID0+IHQudGhHcm91cCkpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyBkZWkgZ3J1cHBpIGluIG1vZGFsaXTDoCBhcnJheSBkZXZvIHNpc3RlbWFyZSB1biBwbycgZGkgdmFyaWFiaWxpIGNoZSBkaXZlbnRhbm8gaW5zZW5zYXRlXHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlICYmIGhhc1Jvd0dyb3VwcylcclxuICAgICAgICAgICAgdGhpcy5Vc2VBcnJheU1vZGVQYWdpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gUmllbXBpbWVudG8gZGVsbGEgVE1QQm91bmRTb3VyY2UgY29uIGdsaSBvZ2dldHRpIGNoZSB2ZXJyYW5ubyBwb2kgbW9zdHJhdGkgYWQgaW50ZXJmYWNjaWFcclxuICAgICAgICB0aGlzLlRNUEJvdW5kU291cmNlID0gdGhpcy5pdGVtc19ILmdldEl0ZW1zQnlNb2RlKGZhbHNlLCAhdGhpcy5pbnRlcm5hbFdyaXRlQ2FsbCk7XHJcblxyXG4gICAgICAgIC8vIFNlIGhvIHVuYSBnZXJhcmNoaWEsIGFzc2Vnbm8gaSBsaXZlbGxpIGdlcmFyY2hpY2kgYWxsYSBUTVBCb3VuZFNvdXJjZVxyXG4gICAgICAgIGlmICh0aGlzLkhpZXJhcmNoeSAmJiAhaGFzUm93R3JvdXBzKVxyXG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoeU1vZGVfSC5hc3NpZ25IaWVyYXJjaHlMZXZlbHModGhpcy5UTVBCb3VuZFNvdXJjZSk7XHJcblxyXG4gICAgICAgIC8vIEwnaGFzaGluZyBkZWdsaSBvZ2dldHRpIGxvIGZhY2NpbyBhIHByZXNjaW5kZXJlXHJcbiAgICAgICAgdGhpcy51dGlsaXRpZXNfSC5jYWxjdWxhdGVIYXNoKHRoaXMuVE1QQm91bmRTb3VyY2UpO1xyXG5cclxuICAgICAgICAvLyBBc3NlZ25vIGEgdW5hIHZhcmlhYmlsZSBtaWEgbCdldmVudHVhbGUgb3ZlcnJpZGUgcGVyIGxhIGNsYXNzZSBkZWxsYSByaWdhXHJcbiAgICAgICAgLy8gU2UgcG9pIHNvbm8gaW4gbW9kYWxpdMOgIGdlcmFyY2hpY2EgaW5pZXR0byBhbmNoZSBsYSBjbGFzc2UgcGVyIGxhIGNvbmZpZ3VyYXppb25lIGRlbCBsaXZlbGxvIGRlbGxhIHJpZ2FcclxuICAgICAgICBpZiAoKHRoaXMuVE1QQm91bmRTb3VyY2UgJiYgdGhpcy5Sb3dDbGFzc0Fzc2lnbmVyKSB8fCB0aGlzLkhpZXJhcmNoeSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVE1QQm91bmRTb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5UTVBCb3VuZFNvdXJjZVtpXTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX3Jvd0NsYXNzID0gdGhpcy5Sb3dDbGFzc0Fzc2lnbmVyID8gdGhpcy5Sb3dDbGFzc0Fzc2lnbmVyKGl0ZW0pIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX3Jvd0NsYXNzICs9IHRoaXMuSGllcmFyY2h5ID8gXCIgZXN0LXJvdy1sdmwtXCIgKyBpdGVtLl9sZXZlbCA6IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdlbmVyYSBsZSBpbmZvcm16aW9uaSBkaSBwYWdpbmF6aW9uZSBwZXIgbGEgdmlzdGEgZ2xvYmFsZSBkZWxsJ2VzLXRhYmxlICovXHJcbiAgICBwcml2YXRlIHNldHVwUGFnaW5nSW5mb3JtYXRpb25zKCkge1xyXG5cclxuICAgICAgICAvLyBEZWZhdWx0IGNoZSB2YWxnb25vIGRpIGJhc2UsIHBvaSBldmVudHVhbG1lbnRlIG1vZGRhdGkgZGFsbGUgZnVuemlvbmkgc290dG9cclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgPSAhdGhpcy5IaWRlUGFnaW5nQ291bnQ7XHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSAhdGhpcy5IaWRlUGFnaW5nQnV0dG9ucztcclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nID0gIXRoaXMuSGlkZVBhZ2luZ1xyXG4gICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlVzZXNWaWV3ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlICYmIHRoaXMuVXNlQXJyYXlNb2RlUGFnaW5nICYmICF0aGlzLlNlYXJjaFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9ICg8YW55W10+dGhpcy5WaWV3KS5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyAmJiB0aGlzLlZpZXcubGVuZ3RoID4gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlZpZXcgPSB0aGlzLlZpZXc7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlVzZXNWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dQYWdpbmdPcHRpb25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYXJyYXlNb2RlICYmICghdGhpcy5Vc2VBcnJheU1vZGVQYWdpbmcgfHwgdGhpcy5TZWFyY2hWaWV3KSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3ID0gdGhpcy5TZWFyY2hWaWV3XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5QYWdlckNvdW50ID0gdGhpcy5TZWFyY2hWaWV3Lm9iamVjdGNvdW50IHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9ICg8YW55W10+dGhpcy5WaWV3KS5sZW5ndGggfHwgMFxyXG5cclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyAmJiAodGhpcy5WaWV3Lmxlbmd0aCA+IDEwIHx8ICh0aGlzLlNlYXJjaFZpZXc/Lm9iamVjdGNvdW50IHx8IDApID4gMTApO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgfHwgKHRoaXMuVmlldyAmJiB0aGlzLlZpZXcubGVuZ3RoKSB8fCAodGhpcy5TZWFyY2hWaWV3ICYmIHRoaXMuU2VhcmNoVmlldy5vYmplY3Rjb3VudCAmJiB0aGlzLlNlYXJjaFZpZXcub2JqZWN0Y291bnQgIT0gLTEpO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgfHwgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXdNb2RlKSB7XHJcbiAgICAgICAgICAgIGxldCB0bXBWaWV3ID0gdGhpcy5NYWluR3JvdXBWaWV3IHx8IHRoaXMuVmlldztcclxuICAgICAgICAgICAgbGV0IGNvdW50ID0gdG1wVmlldz8uZ3JvdXBjb3VudCB8fCB0bXBWaWV3Py5vYmplY3Rjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2VhcmNoZXMgPSB0bXBWaWV3Py5ncm91cGNvdW50ICE9IG51bGwgJiYgdG1wVmlldz8uZ3JvdXBjb3VudCAhPSB1bmRlZmluZWQgPyAnZ3JvdXBzJyA6ICdpdGVtcyc7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPSBjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3ID0gdG1wVmlldztcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50ID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50IHx8ICh0bXBWaWV3ICYmIGNvdW50ICYmIGNvdW50ICE9IC0xKTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyAmJiAodG1wVmlldy5wYWdpbmdhdmFpbGFibGUgfHwgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd1BhZ2luZ09wdGlvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gbGFuY2lhdG8gZG9wbyBjaGUgbGEgc29yZ2VudGUgZGF0aSDDqCBzdGF0YSBjb3JyZXR0YW1lbnRlIGJpbmRhdGEsIHNpIG9jY3VwYSBkaSByaWNhbGNvbGFyZSB0dXR0byBjacOyIGNoZSBzZXJ2ZVxyXG4gICAgICogYWxsJ2VzLXRhYmxlIHBlciByZW5kZXJpenphcmUgaSB2YWxvcmkgZGEgbW9zdHJhcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwb3N0Qm91bmRTb3VyY2VDYWxjdWxhdGlvbigpIHtcclxuICAgICAgICAvLyBSZXNldHRvIHR1dHRvIHRyYW5uZSBSb3dURHMgZSBSb3dUSHMgcGVyIGV2aXRhcmUgZmxpY2tlcmluZy4gUm93VERzIGUgUm93VEhzIHNhcmFubm8gbW9kaWZpY2F0ZSBhbGwnaW50ZXJubyBkZWwgcHJvc3NpbW8gY2ljbG8gZGkgQ0RcclxuICAgICAgICB0aGlzLlJvd0NvbnRleHRzID0gW107XHJcbiAgICAgICAgdGhpcy5PcmRlckRpcmVjdGl2ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW1JRCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxQb3N0Qm91bmRTb3VyY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUGVyIHBvdGVyIGRpc3Rpbmd1ZXJlIGxlIGNoaWFtYXRlIGEgcXVlc3RvIG1ldG9kbzogRG9wbyBpbCBzZXRUaW1lb3V0IHNlIHVzbyBnbGkgRXNUZC9Fc1RoIHZlY2NoaSwgc2VuemEgaWwgc2V0VGltZW91dCBzZSB1c28gbGUgbnVvdmUgZGlyZXR0aXZlICovXHJcbiAgICBwcml2YXRlIGludGVybmFsUG9zdEJvdW5kU291cmNlKCkge1xyXG4gICAgICAgIGxldCBWaWV3ID0gdGhpcy5WaWV3O1xyXG5cclxuICAgICAgICBsZXQgdGRzRCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUubGVuZ3RoID09IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGRzRGlyZWN0aXZlPy5sZW5ndGggPiAwID8gdGhpcy5Fc1RhYmxlVGVtcGxhdGU/LlRlbXBsYXRlPy5Fc1Rkc0RpcmVjdGl2ZSA6IHRoaXMuRXNUZHNEaXJlY3RpdmUgOiB0aGlzLkVzVGRzRGlyZWN0aXZlO1xyXG4gICAgICAgIGxldCB0aHNEID0gdGhpcy5Fc1Roc0RpcmVjdGl2ZS5sZW5ndGggPT0gMCA/IHRoaXMuRXNUYWJsZVRlbXBsYXRlPy5UZW1wbGF0ZT8uRXNUaHNEaXJlY3RpdmU/Lmxlbmd0aCA+IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGhzRGlyZWN0aXZlIDogdGhpcy5Fc1Roc0RpcmVjdGl2ZSA6IHRoaXMuRXNUaHNEaXJlY3RpdmU7XHJcblxyXG4gICAgICAgIGxldCB0aHMgPSB0aHNEICYmIHRoc0QubGVuZ3RoID4gMCA/IHRoc0QudG9BcnJheSgpIDogW107XHJcbiAgICAgICAgbGV0IHRkcyA9IHRkc0QgJiYgdGRzRC5sZW5ndGggPiAwID8gdGRzRC50b0FycmF5KCkgOiBbXTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIGNvbG9ubmUgZGluYW1pY2hlIG1hIHNvbm8gaW4gbW9kYWxpdMOgIGRpbmFtaWNhIChsbyBjYXBpc2NvIHBlcmNow6kgYyfDqCB1bmEgdmlldyBwaWVuYSBkaSBnZW5lcmljaXRlbSkgbWV0dG8gaWwgZGVmYXVsdCBkZWxsZSBjb2xvbm5lXHJcbiAgICAgICAgdGhpcy5keW5hbWljTW9kZV9ILmV2ZW50dWFsbHlSZXZpZXdEeW5hbWljQ29sdW1ucygpO1xyXG4gICAgICAgIHRoaXMuYmluZERpc3BsYXlUb0xvYWRlZEl0ZW1zT3JHcm91cHMoVmlldyk7XHJcblxyXG4gICAgICAgIC8vIFF1ZXN0byBkZXYnZXNzZXJlIHBlciBmb3J6YSBsYW5jaWF0byBkb3BvICoqYmluZERpc3BsYXlUb0xvYWRlZEl0ZW1zT3JHcm91cHMqKiBkYXRvIGNoZSDDqCBsw6wgY2hlIGFsY3VuZSBjb3NlIHZlbmdvbm8gdmFsb3JpenphdGVcclxuICAgICAgICB0aGlzLnNldHVwUGFnaW5nSW5mb3JtYXRpb25zKCk7XHJcblxyXG4gICAgICAgIC8vIE1vbHRlIGNvc2Ugc29ubyBvdnZpYW1lbnRlIGRpc3BvbmliaWxpIHNvbG8gaW4gbW9kYWxpdMOgIFZpZXdcclxuICAgICAgICBpZiAoKHRoaXMudmlld01vZGUgfHwgdGhpcy5hcnJheU1vZGUpICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgbGV0IHZpZXcgPSB0aGlzLnZpZXdNb2RlID8gVmlldyBhcyBBcHBTZWFyY2g8YW55PiA6IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBpdGVtc0FuZEdyb3VwcyA9IHRoaXMudmlld01vZGUgPyBbLi4uKHZpZXcuaXRlbXMgfHwgW10pLCAuLi4odmlldy5ncm91cHMgfHwgW10pXSA6IFZpZXcgYXMgYW55W107XHJcbiAgICAgICAgICAgIGxldCBzaSA9IHRoaXMudmlld01vZGUgPyB2aWV3LnNlbGVjdGlvbiA6IHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAvLyBOLkI6IFJpc3BldHRhcmUgbCdvcmRpbmUgZGkgcXVlc3RlIDMgbWFjcm9jYXRlZ29yaWUgw6ggVklUQUxFXHJcblxyXG4gICAgICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICBTaXN0ZW1hemlvbmkgZGkgVEgsIFRELCBlIHZpc2liaWxpdMOgIHZhcmllICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAgICAgICAgICAgLy8gRXNwYW5kbyBpIHRoIGUgaSB0ZCBtdWx0aXBsaSBkdXBsaWNhbmRvbGlcclxuICAgICAgICAgICAgbGV0IHJldCA9IHRoaXMuY29sdW1uTWV0YWRhdGFfSC5leHBhbmRNdWx0aVRoc0FuZFRkcyh0aHMsIHRkcywgaXRlbXNBbmRHcm91cHMpO1xyXG4gICAgICAgICAgICB0aHMgPSByZXQuZXhwVGhzO1xyXG4gICAgICAgICAgICB0ZHMgPSByZXQuZXhwVGRzO1xyXG5cclxuICAgICAgICAgICAgLy8gR2VzdGlvbmUgZGVsbGUgdmlldyBpbiBtb2RhbGl0w6AgcmVwb3J0LCBpIHRoIGUgaSB0ZCB2ZW5nb25vIHJpZ2VuZXJhdGkgZGFsbGUgY29uZmlndXJhemlvbmkgZGVsbGEgdmlld1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXJyYXlNb2RlICYmIHZpZXcucmVwb3J0X2NvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXQgPSB0aGlzLnJlcG9ydE1vZGVfSC5nZW5lcmF0ZVRoc0FuZFRkc0Zyb21WaWV3KHZpZXcpO1xyXG4gICAgICAgICAgICAgICAgdGhzID0gcmV0LnRocztcclxuICAgICAgICAgICAgICAgIHRkcyA9IHJldC50ZHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByZXBhc3NhZ2dpbyBwZXIgdGlyYXJlIGZ1b3JpIHR1dHRlIGxlIGluZm8gdXRpbGkgc3VnbGkgaGVhZGVycyBpbiBtb2RvIGRhIG5vbiByaWNhY29sYXJzZWxpIHNlbXByZSBkb3BvXHJcbiAgICAgICAgICAgIGxldCBoSSA9IHRoaXMuY29sdW1uTWV0YWRhdGFfSC5ldmFsdWF0ZUhlYWRlcnNHcm91cGluZ0luZm9zKHRocyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgYXJyYXkgbm9uIGhvIHVuIGJhY2tlbmQuLi5cclxuICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBpbmdfSC5hcnJheU1vZGVSZXZpZXdHcm91cGluZ3MoaEkubGVhZnMpOyAgLy8gLi4uIGkgcmFnZ3J1cHBhbWVudGkgbGkgZGV2byBmYXJlIGxhdG8gY2xpZW50XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmV2aWV3Q29sdW1uc0xpc3QoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQWdnaW9ybmEgbGEgbGlzdGEgZGVsbGUgY29sb25uZSBkYSBtb3N0cmFyZSBuZWxsYSBkaWFsb2cgcGVyIG9yZGluYW1lbnRvIGVjY1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guYWxpZ25Db2x1bW5zSWZMb2FkZWRWaWV3KHZpZXcpOyAgICAgICAgICAgICAgICAgICAgLy8gU2Ugc3RvIGNhcmljYW5kbyB1bmEgVmlldyBkYSBob3Rwb3RhdG8gKHF1aW5kaSBjb24gc2F2ZWRzdGF0ZSA9IHRydWUpIHJpYWxsaW5lbyBsYSB2aXNpYmlsaXTDoCBkZWxsZSBjb2xvbm5lIGUgaWwgbG9ybyBvcmRpbmUuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5tb3ZlRml4ZWRDb2x1bW5zQXRUaGVCZWdpbm5pbmcoaEkubGVhZnMsIHRkcyk7ICAgICAvLyBTcG9zdG8gdHV0dGUgbGUgY29zZSBmaXhlZCBhbGwnaW5pemlvIGluIG1vZG8gY2hlIGxhIGNyZWF6aW9uZSBkaSB0aCBlIHRkIHNpYSBwacO5IHNuZWxsYSAoVXRpbGl6emEgbGUgQ29sdW1uc0xpc3QsIHF1aW5kaSBkZXYnZXNzZXJlIHJpY2hpYW1hdGEgUElSTUEgZGkgcmV2aWV3Q29sdW1uc0xpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5hbGlnbkhlYWRlcnNPcmRlcmluZyhoSS5sZWFmcywgdmlldyk7ICAgICAgICAgICAgICAvLyBBbGxpbmVvIGdsaSBvcmRpbmFtZW50aSBhZ2xpIGhlYWRlclxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KGhJLmxlYWZzLCB0ZHMsIHZpZXcpOyAgICAgLy8gTGF2b3JvIHN1aSBUSCBlZCBldmVudHVhbG1lbnRlIG1vZGlmaWNvIGxhIHZpc2liaWxpdMOgIGFuY2hlIGRlaSBURC5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmV2YWx1YXRlUGlubmVkQ29sdW1uc1dpZHRoKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIHNvbm8gcHJlc2VudGkgY29sb25uZSBwaW5uYXRlIHZhbHV0YSBsYSBkaW1lbnNpb25lIGRlbCBjb250ZW5pdG9yZVxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guZ2VuZXJhdGVEZWZhdWx0T3JkZXIoaEkubGVhZnMsIHZpZXcpOyAgICAgICAgICAgICAgLy8gR2VuZXJvIGxlIGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50bywgY2hlIHNpYW5vIGRlZmF1bHQgbyBkZXJpdmFudGkgZGFsbGEgQXBwU2VhcmNoXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5ldmFsdWF0ZUhlYWRlckdyb3VwcyhoSSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWx1dG8gaSByYWdncnVwcGFtZW50aSBkZWdsaSBoZWFkZXIgc2UgcHJlc2VudGlcclxuXHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgIEdlbmVyYXppb25lIGJpbmRpbmcgcGVyIHJpZ2hlIGUgY29sb25uZSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVSb3dUaHMoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhY2NvbGdvIGkgVEhcclxuICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZVJvd1RkcyhoSS5sZWFmcywgdGRzKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFjY29sZ28gaSBURCBpbiBjb250ZXN0aSBzZXBhcmF0aSwgdW4gY29udGVzdG8gcGVyIG9nbmkgaXRlbSBvIGdydXBwb1xyXG5cclxuICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgVWx0aW1pIGFnZ2l1c3RtYWVudGkgZGVpIGJpbmRpbmcgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmFwcGx5T3JkZXJpbmcodmlldywgdHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGljbyBsJ29yZGluYW1lbnRvIHN1bGxlIGNvbG9ubmUgKG5vbiBBU0MgREVTQywgbWEgXCJwcmltYSBxdWVzdGEgbyBxdWVsbGEgY29sb25uYVwiKVxyXG4gICAgICAgICAgICB0aGlzLk1vdmVUZW1wb3JhcnlWYXJpYWJsZXNUb1JlYWxPbmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2xsZWdvIFRIIGUgVEQgYWdnaXVzdGF0aSBmaW5vIGFkIG9yYSBhbGxlIHZhcmlhYmlsaSBkaSBCaW5kaW5nIEhUTUxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNlbGVjdGlvbihpdGVtc0FuZEdyb3Vwcywgc2kpOyAgICAgICAgICAgICAgICAgLy8gUmlhbGxpbmVvIGxlIGluZm8gZGkgc2VsZXppb25lIGRlZ2xpIGVsZW1lbnRpIGRlbGxhIFZpZXdcclxuXHJcbiAgICAgICAgICAgIC8vIFZhbHV0YSBsbyBzdGF0byBpbml6aWFsZSBkaSBzZWxlemlvbmUgYSByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmV2YWx1YXRlU2luZ2xlQ2VsbFNlbGVjdGlvbihpdGVtc0FuZEdyb3VwcywgaEkubGVhZnMsIHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlJlc2VhcmNoTmVlZGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5SZXNlYXJjaE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLnZpZXdNb2RlIHx8IHRoaXMuYXJyYXlNb2RlKSAmJiAhdGhpcy5Vc2VDdXN0b21DZWxscykge1xyXG4gICAgICAgICAgICAvLyBSaWFsbGluZW8gbGUgaW5mbyBkaSBzZWxlemlvbmUgZGVnbGkgZWxlbWVudGkgZGVsbGEgVmlld1xyXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLnZpZXdNb2RlID8gKFZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLml0ZW1zIDogVmlldyBhcyBhbnlbXTtcclxuICAgICAgICAgICAgbGV0IHNpID0gdGhpcy52aWV3TW9kZSA/IChWaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5zZWxlY3Rpb24gOiB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNlbGVjdGlvbihpdGVtcywgc2kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUGVyIGVzc2VyZSBzaWN1cm8gY2hlIGRvcG8gdW4gYmluZCBkaSBvZ2dldHRpIGxhIGVzLXRhYmxlIGFnZ2lvcm5pIGxhIGdyYWZpY2FcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLkZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgaWwgYmluZGluZyBkZWdsaSBvZ2dldHRpIHBlcnZlbnV0aSBkYSBxdWVzdGEgY2hpYW1hdGEgY29uIGdsaSBvZ2dldHRpIGVmZmV0dGl2YW1lbnRlIGRhIGdyYWZpY2FyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmlldyBWaWV3IGRhIGN1aSBzb25vIGFycml2YXRpIGdsaSBvZ2dldHRpLiBQdcOyIGVzc2VyZSBvIHVuIGFycmF5IHNlIHNvbm8gaW4gKiphcnJheU1vZGUqKiBvIHVuYSBBcHBTZWFyY2g8VD4gc2Ugc29ubyBpbiAqKnZpZXdNb2RlKipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kRGlzcGxheVRvTG9hZGVkSXRlbXNPckdyb3Vwcyh2aWV3OiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuVE1QQm91bmRTb3VyY2UgfHwgdGhpcy5UTVBCb3VuZFNvdXJjZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLkJhc2VJdGVtc0NvdW50ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUgfHwgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMuQmFzZUl0ZW1zQ291bnQgPSB2aWV3Py5vYmplY3Rjb3VudCB8fCB2aWV3Py5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGdyb3VwaW5nS2V5cyA9IHZpZXc/Lmdyb3VwaW5ncz8uZmlsdGVyKHQgPT4gIXQuYWdncmVnYXRpb24pPy5sZW5ndGggfHwgMDtcclxuICAgICAgICBpZiAoZ3JvdXBpbmdLZXlzID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMuQmFzZUl0ZW1zQ291bnQgPSB2aWV3Py5vYmplY3Rjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvd0dyb3VwaW5nX0guaGFuZGxlTmV3RGF0YU9uUm93R3JvdXBpbmcodmlldywgZ3JvdXBpbmdLZXlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gc29sbyBxdWFuZG8gKipUTVBSb3dURHMqKiBlICoqVE1QUm93VEhzKiogc29ubyBjb21wbGV0YW1lbnRlIGdlbmVyYXRpIGVkIGFnZ2l1c3RhdGkuIFNlcnZlIHBlciBjb2xsZWdhcmxpIGFsbGUgdmFyaWFiaWxpIHVzYXRlIGxhdG8gYmluZGluZyBIVE1MICovXHJcbiAgICBwcml2YXRlIE1vdmVUZW1wb3JhcnlWYXJpYWJsZXNUb1JlYWxPbmVzKCkge1xyXG5cclxuICAgICAgICB0aGlzLlJvd1REcyA9IHRoaXMuVE1QUm93VERzO1xyXG4gICAgICAgIHRoaXMuUm93VEhzID0gdGhpcy5UTVBSb3dUSHM7XHJcbiAgICAgICAgdGhpcy5Sb3dUaEdyb3VwcyA9IHRoaXMuVE1QUm93VGhHcm91cHMgPyB0aGlzLlRNUFJvd1RoR3JvdXBzLnJldmVyc2UoKSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5FbXB0eVJvd1RkcyA9IHRoaXMuaXNFbXB0eSh0aGlzLlJvd1REcyk7XHJcblxyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5WaXNpYmlsZSA9IHRoaXMuUm93VEhzLmZpbHRlcih0ID0+IHQuVmlzaWJsZSkubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgPSB0aGlzLlJvd1RIcy5maWx0ZXIodCA9PiB0LlZpc2libGUgJiYgIXQuUGlubmVkKS5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5Db2x1bW5zLkdsb2JhbCA9IHRoaXMuQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgKyAodGhpcy5IYXNQaW5uZWRDb2x1bW5zID8gMSA6IDApICsgKHRoaXMuU2VsZWN0aW9uID8gMSA6IDApICsgKHRoaXMuUmVtb3ZhbCA/IDEgOiAwKSArICh0aGlzLkV4cG9ydCB8fCB0aGlzLkhpZGRlbkNvbHVtbnMgfHwgdGhpcy5Db2x1bW5zT3JkZXJpbmcgfHwgdGhpcy5Db3JuZXJNZW51T3B0aW9ucyA/IDEgOiAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIE1ldG9kbyBwZXIgY2FwaXJlIHNlIHVuIG9nZ2V0dG8gw6ggY29tcGxldGFtZW50ZSB2dW90byBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRhIGNvbnRyb2xsYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29nZ2V0dG8gw6ggdnVvdG8sICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHkob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IgKHZhciBfIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZSBpbiBtYW5pZXJhIGFyYml0cmFyaWEgZGVnbGkgb2dnZXR0aVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3QgKip0cnVlKiogcGVyIHNlbGV6aW9uYXJsaSwgKipmYWxzZSoqIHBlciBub24gdG9jY2FybGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFNlbGVjdGlvblN0YXR1cyhpdGVtczogYW55W10sIGFsbDogYm9vbGVhbiwgc2VsZWN0OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGFsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuU2VsZWN0QWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW1wb3NzaWJpbGUgaW1wb3N0YXJlIGxhIHNlbGV6aW9uZSBjb24gbCdhbGwgc2VsZWN0aW9uIHF1YW5kbyBsJ0lucHV0IFNlbGVjdEFsbCDDqCBmYWxzZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHNpID0gKHRoaXMuVmlldyBhcyBBcHBTZWFyY2g8YW55Pik/LnNlbGVjdGlvbiB8fCB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuICAgICAgICAgICAgLy9zZSBkZXNlbGV6aW9ubyBjb24gYXR0dWFsZSBzZWxlemlvbmUgYWQgYWxsIG8gc2Ugc2VsZXppb25vIGNvbiBhdHR1YWxlIHNlbGV6aW9uZSBtYW51YWxlIGRldm8gcmljaGlhbWFyZSBsYSAqKnNlbGVjdEFsbE9yUmVzZXRTZWxlY3Rpb24qKlxyXG4gICAgICAgICAgICBpZiAoKHNpLmFsbCAmJiAhc2VsZWN0KSB8fCAoIXNpLmFsbCAmJiBzZWxlY3QpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5zZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtcywgc2VsZWN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGdlc3Rpc2NlIGlsIGNhbWJpbyBkaSBPcmRpbmFtZW50byBkaSB1bmEgY29sb25uYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBkZWxsYSBjb2xvbm5hIGlsIGN1aSBvcmlkbmFtZW50byDDqCBjYW1iaWF0b1xyXG4gICAgICogQHBhcmFtIHsnREVTQycgfCAnQVNDJ30gb3JkZXIgTnVvdm8gb3JkaW5lIHNlbGV6aW9uYXRvIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aE9yZGVyQ2hhbmdlZChpZDogc3RyaW5nLCBvcmRlcj86ICdERVNDJyB8ICdBU0MnKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdNb2RlICYmICF0aGlzLmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ09yZGVyIGNoYW5nZWQgb24gYSB0YWJsZSBub3QgaW4gdmlld01vZGUgb3IgQXJyYXkgbW9kZS4gT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLk9yZGVyQnlDb2x1bW4pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmhhbmRsZVRIT3JkZXJDaGFuZ2UoaWQsIG9yZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBkYSBjaGlhbWFyZSBvZ25pIHZvbHRhIGNoZSBzaSB2dW9sZSBkYXJlIGV2aWRlbnphIGFsbCdlc3Rlcm5vIGRlbCBiaXNvZ25vIGRpIHJpZWZmZXR0dWFyZSBsYSByaWNlcmNhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzZXRzUGFnZSBJbmRpY2EgYWwgbGlzdGVuZXIgY2hlIGRldmUgcmVzZXR0YXJlIGlsIG51bWVybyBkaSBwYWdpbmFcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXdPdmVycmlkZSBPdmVycmlkZSBkZWxsYSB2aWV3IGRhIGVtZXR0ZXJlIHBlciBxdWVzdGEgcmljZXJjYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW1pdFNlYXJjaFJlcXVlc3QocmVzZXRzUGFnZTogYm9vbGVhbiwgdmlld092ZXJyaWRlPzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBpZiAodGhpcy52aWV3TW9kZSAmJiAhdmlld092ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgICh0aGlzLlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLmludGVybmFsc2VhcmNocmVxdWVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpZXdPdmVycmlkZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzZXRzUGFnZSlcclxuICAgICAgICAgICAgICAgIHZpZXdPdmVycmlkZS5wYWdlID0gMTtcclxuICAgICAgICAgICAgdmlld092ZXJyaWRlLmludGVybmFsc2VhcmNocmVxdWVzdCA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZWFyY2hJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KHZpZXdPdmVycmlkZSA/IHZpZXdPdmVycmlkZSA6IHJlc2V0c1BhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFydGVuZG8gZGFnbGkgKipFc1RkcyoqIGJpbmRhdGkgZ2VuZXJhLCBhbGwnaW50ZXJubyBkZWwgZGl6aW9uYXJpbyAqKlRNUFJvd1REcyoqIHR1dHRpIGkgY29udGVzdGkgZGVpIHZhcmkgb2dnZXR0aS5cclxuICAgICAqXHJcbiAgICAgKiBWZW5nb25vIGVzY2x1c2kgaSBURCBcIkludGVybmlcIiBpbiBxdWFudG8gdmVuZ29ubyBnZW5lcmF0aSBkYWdsaSBvcmlnaW5hbGkgcXVpbmRpIGluY2x1ZGVybGkgdm9ycmViYmUgZGlyZSByaWVmZmV0dHVhcmUgbGUgb3BlcmF6aW9uaSBkdWUgdm9sdGVcclxuICAgICAqXHJcbiAgICAgKiBDb3N0bzogMiBzY2FuIEVzVGhzLCAxIHNjYW4gRXNUZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICogQHBhcmFtIHtFc1RkRGlyZWN0aXZlW119IHRkcyBDZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVSb3dUZHModGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgaWYgKHRkcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgdGhzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlIH0gPSB7fTtcclxuICAgICAgICBsZXQgY29sdW1uc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbiB9ID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNvbGkgPSAwOyBjb2xpIDwgdGhpcy5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgIHRoc0NhY2hlW3RoLnRoXSA9IHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5UTVBSb3dURHMgPSB7fTtcclxuICAgICAgICAvLyBWYXJpYWJpbGUgZCdhcHBvZ2dpbyBwZXIgcGVybWV0dGVybWkgZGkgaW5zZXJpcmUgdHV0dGUgbGUgY29sb25uZSBcIkZpeGVkXCIgZGF2YW50aVxyXG4gICAgICAgIGxldCBjb250ZXh0Rml4ZWRzOiB7IFtjb250ZXh0OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZFNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmJvdW5kU291cmNlW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGQudGQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aHNDYWNoZVt0ZC50ZF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGguX3JlZmVyZW5jZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNraXBwYXJlIHNlbnphIHRoIChjYXNpc3RpY2EgdGFiZWxsYSBkaW5hbWljYSlcclxuICAgICAgICAgICAgICAgIGlmICh0aCAmJiAodGQudGRJZiB8fCB0aC50aEdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aENhc3RlZCA9IDxFc1RoRGlyZWN0aXZlPnRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc0ZpeGVkID0gdGgudGhGaXhlZCB8fCB0aC50aEdyb3VwIHx8IHRoLnRoUGlubmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtVG9BZGQgPSBpdGVtLl9pdGVtID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRkRWxlbWVudD57IExlZnRCb3JkZXI6ICg8YW55PnRoQ2FzdGVkKS5fbGJvcmQsIFJpZ2h0Qm9yZGVyOiAoPGFueT50aENhc3RlZCkuX3Jib3JkLCBJRDoga2V5LCBQaW5uZWQ6IGNvbHVtbnNDYWNoZVt0ZC50ZF0ucGlubmVkLCBQaW5uZWRXaWR0aDogdGhDYXN0ZWQudGhQaW5uZWRXaWR0aCwgR3JvdXBIZWFkZXI6IGZhbHNlLCBHcm91cEFnZ3JlZ2F0aW9uOiBmYWxzZSwgVmlzaWJsZTogY29sdW1uc0NhY2hlW3RkLnRkXS52aXNpYmxlLCBXcmFwczogZmFsc2UsIENsYXNzOiB0ZC50ZENsYXNzLCBUZW1wbGF0ZTogdGhDYXN0ZWQudGhHcm91cCAmJiAhdGhpcy5TaG93SXRlbUdyb3Vwc0NvbHVtbnMgPyBudWxsIDogdGQuVGVtcGxhdGUsIE11bHRpOiB0ZC5fbXVsdGksIE11bHRpUHJvcDogdGQuX211bHRpID8gdGQudGQuc3BsaXQoJ18nKVswXSA6IG51bGwsIE11bHRpSW5kZXg6IHRkLl9tdWx0aSA/IHRkLnRkLnNwbGl0KCdfJylbMV0gOiBudWxsLCBQcm9wZXJ0eU5hbWU6IHRoLnRoUHJvcGVydHksIFByb3BlcnR5VHlwZTogdGgudGhUeXBlLCBQcm9wZXJ0eVNvdXJjZTogdGgudGhTb3VyY2UsIFByb3BBY2Nlc3NvcjogdGQudGRQcm9wZXJ0eUFjY2Vzc29yIH0gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGRFbGVtZW50PnsgTGVmdEJvcmRlcjogKDxhbnk+dGhDYXN0ZWQpLl9sYm9yZCwgUmlnaHRCb3JkZXI6ICg8YW55PnRoQ2FzdGVkKS5fcmJvcmQsIElEOiBrZXksIFBpbm5lZDogY29sdW1uc0NhY2hlW3RkLnRkXS5waW5uZWQsIFBpbm5lZFdpZHRoOiB0aENhc3RlZC50aFBpbm5lZFdpZHRoLCBHcm91cEhlYWRlcjogdGhDYXN0ZWQudGhHcm91cCwgR3JvdXBBZ2dyZWdhdGlvbjogISF0aENhc3RlZC50aEFnZ3JlZ2F0aW9uLCBWaXNpYmxlOiBjb2x1bW5zQ2FjaGVbdGQudGRdLnZpc2libGUsIFdyYXBzOiBmYWxzZSwgQ2xhc3M6IHRoQ2FzdGVkLnRoR3JvdXBDbGFzcyB8fCAnJywgQ29udGVudDogdGhpcy5yb3dHcm91cGluZ19ILmdldEdyb3VwQ2VsbERpc3BsYXkoPEdyb3VwPml0ZW0sIGtleSwgPEVzVGhEaXJlY3RpdmU+dGgpIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlRNUFJvd1REc1tjdHhdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVE1QUm93VERzW2N0eF0ucHVzaChpdGVtVG9BZGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Sb3dDb250ZXh0cy5wdXNoKGN0eCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVE1QUm93VERzW2N0eF0gPSBbaXRlbVRvQWRkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dEZpeGVkc1tjdHhdID0gaXNGaXhlZCA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIG9nZ2V0dGkgw6ggaW51dGlsZSBjaGUgY29udHJvbGxvIGdsaSBlcnJvcmksIGRhdG8gY2hlIGdsaSBlcy10ZCBub24gZXNpc3RlcmFubm8gZGkgY2VydG8gZSBkaSBjb25zZWd1ZW56YSBnbGkgZXMtdGggbm9uIHNhcmFubm8gcmVmZXJlbnppYXRpXHJcbiAgICAgICAgaWYgKHRoaXMuVE1QQm91bmRTb3VyY2UubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGVycnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoLl9yZWZlcmVuY2VkKVxyXG4gICAgICAgICAgICAgICAgZXJycy5wdXNoKHRoLnRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGVycklkcyA9IGVycnMuam9pbignLCAnKTtcclxuICAgICAgICAgICAgdGhyb3cgXCJMJ0lEIGRpIHVubyBvIHBpw7kgRXNUaCBub24gaGFubm8gYWxjdW4gRXNUZCBhc3NvY2lhdG86IFwiICsgZXJySWRzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRlbmRvIGRhZ2xpICoqRXNUaHMqKiBiaW5kYXRpIGdlbmVyYSwgYWxsJ2ludGVybm8gZGVsIGRpemlvbmFyaW8gKipUTVBSb3dUSHMqKiB0dXR0aSBpIGNvbnRlc3RpIGRlaSB2YXJpIG9nZ2V0dGkuXHJcbiAgICAgKlxyXG4gICAgICogVmVuZ29ubyBlc2NsdXNpIGkgVEggXCJJbnRlcm5pXCIgaW4gcXVhbnRvIHZlbmdvbm8gZ2VuZXJhdGkgZGFnbGkgb3JpZ2luYWxpIHF1aW5kaSBpbmNsdWRlcmxpIHZvcnJlYmJlIGRpcmUgcmllZmZldHR1YXJlIGxlIG9wZXJhemlvbmkgZHVlIHZvbHRlXHJcbiAgICAgKlxyXG4gICAgICogQ29zdG86IDEgc2NhbiBFc1RocyArIDEgc2NhbiBDb2x1bW5zTGlzdFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZVtdfSB0aHMgQ29sb25uZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVSb3dUaHModGhzOiBFc1RoRGlyZWN0aXZlW10pIHtcclxuICAgICAgICBpZiAodGhzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zTGlzdENhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbiB9ID0ge307XHJcbiAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSA8QXBwU2VhcmNoPGFueT4+dGhpcy5WaWV3O1xyXG4gICAgICAgIGxldCBncm91cGluZ3NVbmRlZmluZWQgPSB0aGlzLnZpZXdNb2RlICYmIChjYXN0ZWRWaWV3ICYmICFjYXN0ZWRWaWV3Lmdyb3VwaW5ncyB8fCBjYXN0ZWRWaWV3Lmdyb3VwaW5ncy5sZW5ndGggPT0gMCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5Db2x1bW5zTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRtID0gdGhpcy5Db2x1bW5zTGlzdFtpXTtcclxuICAgICAgICAgICAgY29sdW1uc0xpc3RDYWNoZVtpdG0uaWRdID0gaXRtXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLlRNUFJvd1RIcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuICAgICAgICAgICAgbGV0IHRvQWRkOiBUaEVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGgudGhJZiB8fCB0aC50aEdyb3VwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRoQ2xhc3MgPSAodGgudGhDbGFzcyB8fCAnJykgKyAodGgudGhHcm91cCA/IFwiIGVzdC1jb2wtbWluXCIgOiBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHRvQWRkID0geyBQaW5uZWQ6IGNvbHVtbnNMaXN0Q2FjaGVbdGgudGhdLnBpbm5lZCwgRml4ZWQ6IHRoLnRoRml4ZWQsIFBpbm5lZFdpZHRoOiB0aC50aFBpbm5lZFdpZHRoLCBJRDogdGgudGgsIFZpc2libGU6IHRoLnRoVmlzaWJsZSwgQ2xhc3M6IHRoQ2xhc3MsIE9yZGVyOiB0aC50aE9yZGVyLCBPcmRlcmFibGU6IHRoLnRoT3JkZXJhYmxlLCBUZW1wbGF0ZTogdGguVGVtcGxhdGUsIENvbnRlbnQ6IHRoLnRoU3RhdGljQ29udGVudCwgV3JhcDogdGgudGhXcmFwLCBMZWZ0Qm9yZGVyOiAoPGFueT50aCkuX2xib3JkLCBSaWdodEJvcmRlcjogKDxhbnk+dGgpLl9yYm9yZCwgTXVsdGk6IHRoLl9tdWx0aSwgTXVsdGlDb250ZW50OiB0aC5fbXVsdGlfY29udGVudCB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5UTVBSb3dUSHMucHVzaCh0b0FkZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2UgaG8gdW4gbW9kZWxsbyBjaGUgZGV2ZSBmdW56aW9uYXJlIGEgcm93Z3JvdXBpbmcgbWEgbm9uIMOoIGFuY29yYSBzdGF0YSBlZmZldHR1YXRhIG5lc3N1bmEgcmljZXJjYSBzdWkgZ3J1cHBpIHByaW5jaXBhbGkgKGdyb3VwaW5nc1VuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIC8vIGxpIGdlbmVybyBlIG1hbmRvIGxhIHByaW1hIHJpY2VyY2EgY2hlIGRldidlc3NlcmUgc3BlZGl0YSBhbCBiYWNrZW5kIHBlciBpbCBwcmltbyBjYXJpY2FtZW50byBkZWkgZ3J1cHBpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmdzVW5kZWZpbmVkICYmICh0aC50aEFnZ3JlZ2F0aW9uIHx8IHRoLnRoR3JvdXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwQWdncmVnYXRpb25zOiBHcm91cE9yQWdncmVnYXRpb25bXSA9IHRoaXMucm93R3JvdXBpbmdfSC5nZXRHcm91cEFnZ3JlZ2F0aW9ucyh0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWaWV3Lmdyb3VwaW5ncylcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzdGVkVmlldy5ncm91cGluZ3MgPSBncm91cEFnZ3JlZ2F0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc3RlZFZpZXcuZ3JvdXBpbmdzLnB1c2goLi4uZ3JvdXBBZ2dyZWdhdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlJlc2VhcmNoTmVlZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGRpIHVuYSBwYWdpbmEgaW4gYXZhbnRpIChvIGluZGlldHJvKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE51bWVybyBkaSBwYWdpbmUgZGEgYWdnaXVuZ2VyZSAobyBzb3R0cmFycmUsIHNlIG5lZ2F0aXZvKSBhbGxhIHBhZ2luYSBhdHR1YWxlXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gcGFnZXIgRWxlbWVudG8gZGkgc2VwYXJhemlvbmUgc3UgY3VpIMOoIGVmZmV0dHVhdGEgbGEgcmljZXJjYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkVG9QYWdlR3JvdXAocGFnZTogbnVtYmVyLCBwYWdlcjogR3JvdXBQYWdlcikge1xyXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2VHcm91cChwYWdlci52aWV3LnBhZ2UgKyBwYWdlLCBwYWdlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcG9zdGEgbGEgcmljZXJjYSBhbGxhIHBhZ2luYSBzcGVjaWZpY2F0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIFBhZ2luYSBhIGN1aSBuYXZpZ2FyZVxyXG4gICAgICogQHBhcmFtIHthbnl9IHBhZ2VyIEVsZW1lbnRvIGRpIHNlcGFyYXppb25lIHN1IGN1aSDDqCBlZmZldHR1YXRhIGxhIHJpY2VyY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvVG9QYWdlR3JvdXAocGFnZTogbnVtYmVyLCBwYWdlcjogR3JvdXBQYWdlcikge1xyXG5cclxuICAgICAgICBsZXQgYXBwU2VhcmNoRWxlbWVudCA9IHBhZ2VyLnZpZXc7XHJcbiAgICAgICAgaWYgKHBhZ2UgPT09IDAgfHwgKHBhZ2UgPiBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzICYmIGFwcFNlYXJjaEVsZW1lbnQucGFnZXMgPiAwKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBhcHBTZWFyY2hFbGVtZW50LnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIHBhZ2VyLmJ1dHRvbnMgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgYXBwU2VhcmNoRWxlbWVudC5wYWdlLCBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdChmYWxzZSwgYXBwU2VhcmNoRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFRPRE8gU3Bvc3RhcmUgaW4gU2VsZWN0aW9uSGFuZGxlclxyXG4gICAgICogXHJcbiAgICAgKiBHZXN0aXNjZSBpIGNsaWNrIHN1bGxhIHRhYmVsbGEgc29sbyBwZXIgbGUgcmlnaGUgYSBncnVwcG8uIFxyXG4gICAgICogTyByaW11b3ZlIGdsaSBlbGVtZW50aSBhdHR1YWxtZW50ZSBwcmVzZW50aSBvIGNhcmljYSBpbCBjb250ZW51dG8gZGVsIGdydXBwb1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gYmluZGF0byBzdSBjdWkgc2kgw6ggZWZmZXR0dWF0byBpbCBjbGlja1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29wZXJhaXpvbmUgw6ggYW5kYXRhIGEgYnVvbiBmaW5lLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlR3JvdXBDbGljayhncm91cDogR3JvdXApOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgY2FzdGVkID0gdGhpcy5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+O1xyXG4gICAgICAgIGxldCBhbnlHID0gKDxhbnk+Z3JvdXApO1xyXG4gICAgICAgIGFueUcuX2V4cGFuZGVkID0gIWFueUcuX2V4cGFuZGVkO1xyXG5cclxuICAgICAgICAvLyBTb25vIGluIG1vZGFsaXTDoCByYWdncnVwcGFtZW50byB2aXJ0dWFsZSBkYSBhcnJheTogRXNwYW5kZXJlIHNpZ25pZmljYSByZW5kZXJlIHZpc2liaWxpIHR1dHRpIGdsaSBvZ2dldHRpIHJlbGF0aXZpIGEgcXVlc3RvIGdydXBwbywgdmljZXZlcnNhIGlsIGNvbnRyYXJyZVxyXG4gICAgICAgIGlmICh0aGlzLkFycmF5R3JvdXBpbmcpIHtcclxuICAgICAgICAgICAgbGV0IGFsbFJlbGF0aXZlcyA9IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT5cclxuICAgICAgICAgICAgICAgICh0Ll9ncm91cCAmJiAoKGFueUcuX2V4cGFuZGVkICYmIHQuX3BhcmVudCA9PSBhbnlHLl90aGlzS2V5KSB8fCAoIWFueUcuX2V4cGFuZGVkICYmIHQuX3BhcmVudCAmJiB0Ll9wYXJlbnQuc3RhcnRzV2l0aChhbnlHLl90aGlzS2V5KSkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKHQuX2l0ZW0gJiYgKChhbnlHLl9leHBhbmRlZCAmJiB0Ll90aGlzS2V5ID09IGFueUcuX3RoaXNLZXkpIHx8ICghYW55Ry5fZXhwYW5kZWQgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGFueUcuX3RoaXNLZXkpKSkpKVxyXG4gICAgICAgICAgICBhbGxSZWxhdGl2ZXMuZm9yRWFjaCh0ID0+IHsgdC5fdmlzaWJsZSA9IGFueUcuX2V4cGFuZGVkOyBpZiAodC5fZ3JvdXApIHQuX2V4cGFuZGVkID0gZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbnlHLl9leHBhbmRlZCkge1xyXG4gICAgICAgICAgICAvLyBSZXNldHRvIGlwcFxyXG4gICAgICAgICAgICBjYXN0ZWQuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICAgICAgaWYgKCFjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzKVxyXG4gICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3VwcyA9IFtuZXcgR3JvdXBGaWx0ZXIoZ3JvdXAuY29sdW1uLCBncm91cC52YWx1ZSldO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBsZXZlbCA9IGFueUcuX2dyb3VwbGV2ZWw7XHJcbiAgICAgICAgICAgICAgICAvLyBzZSBpbCBncnVwcG8gY2xpY2NhdG8gbm9uIGhhIHVuIGxpdmVsbG8gw6ggaWwgcHJpbW8gZ3J1cHBvLCBxdWluZGkgb3JkaW5hbWVudG8gdW5pY29cclxuICAgICAgICAgICAgICAgIC8vIGFsdHJpbWVudGkgZGV2byByaW11b3ZlcmUgdHV0dGkgaSBmaWx0cmkgc3UgbGl2ZWxsaSBzdXBlcmlvcmkgYWwgbGV2ZWwgY2xpY2NhdG8gZSBhZ2dpdW5nZXJlIGlsIGxldmVsIGNsaWNjYXRvXHJcbiAgICAgICAgICAgICAgICBpZiAoIWxldmVsKVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMgPSBbbmV3IEdyb3VwRmlsdGVyKGdyb3VwLmNvbHVtbiwgZ3JvdXAudmFsdWUpXTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBhbnlHLl9wYXJlbnRSb3V0ZS5mb3JFYWNoKChzdGVwOiBHcm91cFJvdXRlRnJhZ21lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3Vwcy5wdXNoKG5ldyBHcm91cEZpbHRlcihzdGVwLmNvbHVtbiwgc3RlcC52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMucHVzaChuZXcgR3JvdXBGaWx0ZXIoZ3JvdXAuY29sdW1uLCBncm91cC52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoID0gKGFueUcuX3BhcmVudCB8fCAnJykgKyBncm91cC52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGhvIGNoaXVzbyB1biBncnVwcG8gbm9uIG1pIHNlcnZlIHJpZWZmZXR0dWFyZSByaWNlcmNlLCBtaSBiYXN0YSBlbGltaW5hcmUgZGFnbGkgb2dnZXR0aSBiaW5kYXRpIHR1dHRpIGdsaSBlbGVtZW50aSBzb3R0b3N0YW50aSBhIHF1ZWwgZ3J1cHBvXHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRTb3VyY2UgPSB0aGlzLmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9wYXJlbnQgfHwgIXQuX3BhcmVudC5zdGFydHNXaXRoKHBhdGgpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGRldm8gcGVyw7IgYW5jaGUgcmltdW92ZXJlIGV2ZW50dWFsaSBjYWNoZSByZWxhdGl2ZVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZSA9IHRoaXMuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmZpbHRlcih0ID0+IHQucGF0aCAhPSBwYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlc3Rpc2NlIGxhIHNlbGV6aW9uZSBnbG9iYWxlIGRlZ2xpIG9nZ2V0dGksIHNpYSBwZXIgcGFnaW5hIGNoZSBhIGxpdmVsbG8gZGkgKipTZWxlY3RBbGwqKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VkVmFsIFZhbG9yZSBmb3J6YXRvIGRpIGNoZWNrIGRhIGFzc2VnbmFyZSBhZ2xpIG9nZ2V0dGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdsb2JhbENoZWNrQ2hhbmdlZChmb3JjZWRWYWw6IGJvb2xlYW4gPSBudWxsKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXMoKTtcclxuXHJcbiAgICAgICAgLy8gUHJlbmRvIHR1dHRpIGdsaSBlbGVtZW50aSBwcmVzZW50aSBpbiBxdWVzdGEgdmlzdGEuIFNlIGhvIGdydXBwaSBwcmVuZG8gc29sbyBpIGdydXBwaSBhIGxpdmVsbG8gMCwgYWx0cmltZW50aSBwcmVuZG8gdHV0dGkgZ2xpIG9nZ2V0dGkgcGVyIHNlbGV6aW9uYXJsaVxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuYm91bmRTb3VyY2UuZmluZCh0ID0+IHQuX2dyb3VwKSA/IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgJiYgIXQuX3BhcmVudCkgOiB0aGlzLmJvdW5kU291cmNlO1xyXG4gICAgICAgIHZhciBpdGVtU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtcywgZm9yY2VkVmFsLCB0aGlzLmdsb2JhbENoZWNrKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChpdGVtU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogR2VzdGlzY2UgaSBjbGljayBzdWxsYSB0YWJlbGxhLCBnZXN0ZW5kbyBldmVudHVhbG1lbnRlIGFuY2hlIGdsaSBTaGlmdCArIENsaWNrIHBlciBzZWxlemlvbmFyZSB1biByYW5nZSBkaSBvZ2dldHRpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBuYXRpdm8gSFRNTCBkZWwgY2xpY2tcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gYmluZGF0byBzdSBjdWkgc2kgw6ggZWZmZXR0dWF0byBpbCBjbGlja1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29wZXJhaXpvbmUgw6ggYW5kYXRhIGEgYnVvbiBmaW5lLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2xpY2soZXZlbnQ6IGFueSwgaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclRleHRTZWxlY3Rpb24oZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXMoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkaXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuU2hpZnRDbGljayAmJiAhdGhpcy5TaW5nbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0U2VsZWN0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9ncm91cCAmJiAhdC5fc2VwKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydFNlbGVjdGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZGl0ZW1zLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKHQgPT0gaXRlbSB8fCB0ID09IHRoaXMubGFzdFNlbGVjdGVkKSAmJiAhc3RhcnRTZWxlY3RpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5fc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkaXRlbXMucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHQgPT0gaXRlbSB8fCB0ID09IHRoaXMubGFzdFNlbGVjdGVkKSAmJiBzdGFydFNlbGVjdGluZylcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSAhaXRlbS5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gaXRlbTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGl0ZW1TZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbl9ILmhhbmRsZUl0ZW1zU2VsZWN0aW9uKHNlbGVjdGVkaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG5cclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KGl0ZW1TZWxlY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGRpIHVuYSBwYWdpbmEgaW4gYXZhbnRpIChvIGluZGVpdHJvKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE51bWVybyBkaSBwYWdpbmUgZGEgYWdnaXVuZ2VyZSAobyBzb3R0cmFycmUsIHNlIG5lZ2F0aXZvKSBhbGxhIHBhZ2luYSBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRUb1BhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLk1haW5Hcm91cFZpZXcgPyB0aGlzLk1haW5Hcm91cFZpZXcgOiB0aGlzLlZpZXc7XHJcblxyXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoKCh0aGlzLlNlYXJjaFZpZXcgfHwgdmlldyk/LnBhZ2UgfHwgMCkgKyBwYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGFsbGEgcGFnaW5hIHNwZWNpZmljYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgUGFnaW5hIGEgY3VpIG5hdmlnYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdmlldyA9IHRoaXMuTWFpbkdyb3VwVmlldyA/IHRoaXMuTWFpbkdyb3VwVmlldyA6ICh0aGlzLmFycmF5TW9kZSA/IHRoaXMuU2VhcmNoVmlldyA6IHRoaXMuVmlldyk7XHJcbiAgICAgICAgaWYgKCF2aWV3LnBhZ2UgfHwgIXZpZXcucGFnZXMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGFwcFNlYXJjaEVsZW1lbnQgPSB0aGlzLlNlYXJjaFZpZXcgfHwgdmlldztcclxuICAgICAgICBpZiAocGFnZSA9PT0gMCB8fCAocGFnZSA+IGFwcFNlYXJjaEVsZW1lbnQucGFnZXMgJiYgYXBwU2VhcmNoRWxlbWVudC5wYWdlcyA+IDApKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGFwcFNlYXJjaEVsZW1lbnQucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gKHZpZXcuaXRlbXMubGVuZ3RoIHx8IHZpZXcuZ3JvdXBzPy5sZW5ndGggfHwgMCk7XHJcbiAgICAgICAgbGV0IGlwcCA9IHZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgfHwgMTU7XHJcbiAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIGFwcFNlYXJjaEVsZW1lbnQucGFnZSwgYXBwU2VhcmNoRWxlbWVudC5wYWdlcywgY291bnQsIGlwcCk7XHJcblxyXG4gICAgICAgIGxldCBoYXNHcm91cGluZ3MgPSAhIXRoaXMuTWFpbkdyb3VwVmlldztcclxuICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlLCBoYXNHcm91cGluZ3MgPyB2aWV3IDogdGhpcy5TZWFyY2hWaWV3ID8gdGhpcy5TZWFyY2hWaWV3IDogbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gcmljaGlhbWF0byBzdWwgY2FtYmlvIGRlbGxhIHBhZ2luYXppb25lLiBWZXJyw6AgcmljaGlhbWF0byBsJ2V2ZW50byAqKmVtaXRTZWFyY2hSZXF1ZXN0KipcclxuICAgICAqIHBlciBjb211bmljYXJlIGFsIGNvbXBvbmVudGUgY2hlIHV0aWxpenphIHF1ZXN0YSB0YWJlbGxhIGNoZSBpIGRhdGkgc29ubyBkYSBhZ2dpb3JuYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkl0ZW1zUGVyUGFnZUNoYW5nZWQobmV3SXBwKSB7XHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuVmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZSA9IG5ld0lwcDtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5NYWluR3JvdXBWaWV3KVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuTWFpbkdyb3VwVmlldyk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgIC8vIFF1ZXN0byBzZWNvbmRvIG1lIHNpIHB1w7IgcG9ydGFyZSBhIGxpdmVsbG8gdW4gcG8nIHBpw7kgYWx0b1xyXG4gICAgICAgICAgICB0aGlzLlNlYXJjaFZpZXcucGFnZSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSwgdGhpcy5TZWFyY2hWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBzdWwgY2FtYmlvIGRlbGxhIHBhZ2luYXppb25lLiBWZXJyw6AgcmljaGlhbWF0byBsJ2V2ZW50byAqKmVtaXRTZWFyY2hSZXF1ZXN0KiogY29uIGxhIHZpc3RhIGRlbCBzZXBhcmF0b3JlICovXHJcbiAgICBwdWJsaWMgb25Hcm91cEl0ZW1zUGVyUGFnZUNoYW5nZWQocGFnZXI6IEdyb3VwUGFnZXIsIG5ld0lwcDogbnVtYmVyKSB7XHJcbiAgICAgICAgcGFnZXIudmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZSA9IG5ld0lwcDtcclxuICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHBhZ2VyLnZpZXcpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogTWV0b2RvIGNoZSBnZXN0aXNjZSBsYSBtb2RpZmljYSBkZWwgdGVtcG8gc3BlY2lmaWNhdG8gcGVyIGwnYWdnaW9ybmFtZW50byBhdXRvbWF0aWNvICovXHJcbiAgICBwdWJsaWMgYXV0b1VwZGF0ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCEvXlsxLTldXFxkKiQvLnRlc3QodGhpcy5zZWNvbmRzKSlcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmRzID0gJzEwJztcclxuXHJcbiAgICAgICAgbGV0IHNlY29uZHNJbk1zID0gcGFyc2VJbnQodGhpcy5zZWNvbmRzLCBudWxsKSAqIDEwMDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpOyB9LCBzZWNvbmRzSW5Ncyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoaWFtYXRvIGRhbCBjbGljayBzdSB1bmEgZGVsbGUgY29sb25uZSBnZW5lcmF0ZSBkYWxsJ0lucHV0ICoqRHluYW1pY09wZXJhdGlvbnMqKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIEwnb2dnZXR0byBzdSBjdWkgdmEgZWZmZXR0dWF0YSBsJ29wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGlkIENvZGljZSBpZGVudGlmaWNhdGl2byBkZWxsJ29wZXJhemlvbmUgZGEgZWZmZXR0dWFyc2lcclxuICAgICAqL1xyXG4gICAgcHVibGljIGR5bmFtaWNPcGVyYXRpb24oaXRlbTogYW55LCBvcGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm9uRHluYW1pY09wZXJhdGlvbi5lbWl0KHsgaWQ6IG9waWQsIGl0ZW06IGl0ZW0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIGNvbnRlbnV0byBkZWxsJ0VzVGQgZGEgdXRpbGl6emFyZSBwZXIgbGEgY29sb25uYSBzcGVjaWZpY2F0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uIENvbG9ubmEgcGVyIGN1aSBjZXJjYXJlIGxhIGNlbGxhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOb21lIGRpcmV0dG8gcGVyIGNlcmNhcmUgaWwgVEQgY29uIGwnSUQuIFF1ZXN0YSB2YXJpYWJpbGUgaGEgcHJpb3JpdMOgIHJpc3BldHRvIGEgKipjb2x1bW4qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7VGVtcGxhdGVSZWY8YW55Pn0gVGVtcGxhdGUgZGEgdXNhcmUgcGVyIGxhIGNvbG9ubmFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmRFc1RkKGNvbHVtbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgdmFyIEVzVGQgPSB0aGlzLkVzVGRzRGlyZWN0aXZlLmZpbmQoKGl0ZW0pID0+IG5hbWUgPyBpdGVtLnRkID09PSBuYW1lIDogaXRlbS50ZEZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIC8vIE5hbWUgbm9uIHRyb3ZhdG8sIGZhbGxiYWNrIGFsIG5vbWUgZGVsbGEgY29sb25uYVxyXG4gICAgICAgIGlmIChuYW1lICYmIGNvbHVtbiAmJiAhRXNUZClcclxuICAgICAgICAgICAgRXNUZCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUuZmluZCgoaXRlbSkgPT4gaXRlbS50ZEZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIHJldHVybiBFc1RkID8gRXNUZC5UZW1wbGF0ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIGNvbnRlbnV0byBkZWxsJ2VkaXRvciBFc1RkIGRhIHV0aWxpenphcmUgcGVyIGxhIGNvbG9ubmEgc3BlY2lmaWNhdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbiBDb2xvbm5hIHBlciBjdWkgY2VyY2FyZSBsJ2VkaXRvclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9tZSBkaXJldHRvIHBlciBjZXJjYXJlIGwnRWRpdG9yIGNvbiBsJ0lELiBRdWVzdGEgdmFyaWFiaWxlIGhhIHByaW9yaXTDoCByaXNwZXR0byBhICoqY29sdW1uKipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1RlbXBsYXRlUmVmPGFueT59IFRlbXBsYXRlIGRhIHVzYXJlIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5kRWRpdG9yKGNvbHVtbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgdmFyIEVkaXRvciA9IHRoaXMuRXNUZEVkaXRvckRpcmVjdGl2ZXMuZmluZCgoaXRlbSkgPT4gbmFtZSA/IGl0ZW0uZWRpdG9yID09PSBuYW1lIDogaXRlbS5lZGl0b3JGb3JQcm9wZXJ0eSA9PT0gY29sdW1uKTtcclxuICAgICAgICAvLyBOYW1lIG5vbiB0cm92YXRvLCBmYWxsYmFjayBhbCBub21lIGRlbGxhIGNvbG9ubmFcclxuICAgICAgICBpZiAobmFtZSAmJiBjb2x1bW4gJiYgIUVkaXRvcilcclxuICAgICAgICAgICAgRWRpdG9yID0gdGhpcy5Fc1RkRWRpdG9yRGlyZWN0aXZlcy5maW5kKChpdGVtKSA9PiBpdGVtLmVkaXRvckZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIHJldHVybiBFZGl0b3IgPyBFZGl0b3IuVGVtcGxhdGUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXF1aXZhbGVudGUgZGVsIG1ldG9kbyAqKmFkZFRvUGFnZSoqIHJpYWRhdHRhdG8gcGVyIGxhIG1vZGFsaXTDoCBhcnJheVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE51bWVybyBkaSBwYWdpbmUgZGEgYWdnaXVuZ2VyZSAobyBzb3R0cmFycmUsIHNlIG5lZ2F0aXZvKSBhbGxhIHBhZ2luYSBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcnJheUFkZFRvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmFycmF5R29Ub1BhZ2UodGhpcy5hcnJheW1vZGVQYWdlICsgcGFnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVxdWl2YWxlbnRlIGRlbCBtZXRvZG8gKipnb1RvUGFnZSoqIHJpYWRhdHRhdG8gcGVyIGxhIG1vZGFsaXTDoCBhcnJheVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIFBhZ2luYSBhIGN1aSBuYXZpZ2FyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJyYXlHb1RvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAocGFnZSA9PT0gMCB8fCBwYWdlID4gdGhpcy5hcnJheW1vZGVQYWdlcylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYXJyYXltb2RlUGFnZSA9IHBhZ2U7XHJcblxyXG4gICAgICAgIC8vIFJpZm9yem8gaWwgd3JpdGV2YWx1ZSBpbiBtb2RvIGNoZSBpbCBjb2RpY2UgcGFzc2kgZGFsbGEgZ2VzdGlvbmUgY29tZSBzZSBmb3NzZSBmYXR0YSByaXBhcnRpcmUgdW5hIHJpY2VyY2FcclxuICAgICAgICB0aGlzLmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VzdGlvbmUgZGVpIGNsaWNrIHN1bGxlIG9wemlvbmkgZGVsIG1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgZ2VuZXJhdG8gZGFsbCdJbnB1dCAqKkNvcm5lck1lbnVPcHRpb25zKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29ybmVyaWQgQ29kaWNlIGRlbGwnb3BlcmF6aW9uZSBzZWxlemlvbmF0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29ybmVyQWN0aW9uQ2xpY2tlZChjb3JuZXJpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5vbkNvcm5lckFjdGlvbi5lbWl0KHsgaWQ6IGNvcm5lcmlkLCBlc3RhYmxlOiB0aGlzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEltcG9zdGF6aW9uZSBtb2RhbGl0w6AgZGVsbCdFc1RhYmxlIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geydhcnJheScgfCAndmlldycgfCAncmVwb3J0J30gbW9kZSBNb2RhbGl0w6AgZGEgaW1wb3N0YXJlXHJcbiAgICAgKiovXHJcbiAgICBwcml2YXRlIHNldE1vZGUobW9kZTogJ2FycmF5JyB8ICd2aWV3Jykge1xyXG4gICAgICAgIHRoaXMudmlld01vZGUgPSBtb2RlID09ICd2aWV3JztcclxuICAgICAgICB0aGlzLmFycmF5TW9kZSA9IG1vZGUgPT0gJ2FycmF5JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZWZmZXR0dWFyZSBjaGlhbWF0ZSBpbnRlcm5lIGRpIGFsbGluZWFtZW50byBhbGxhIGZ1bnppb25lICoqd3JpdGVWYWx1ZSoqLCBcclxuICAgICAqIGltcG9zdGFuZG8gcHJpbWEgKippbnRlcm5hbFdyaXRlQ2FsbCoqIGluIG1vZG8gZGEgbm9uIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBpbnV0aWxpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbFdyaXRlVmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFdyaXRlQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuVmlldyk7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFdyaXRlQ2FsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gZXZlbnR1YWxtZW50ZSByaWNoaWFtYWJpbGUgYW5jaGUgZGFsIGNvbXBvbmVudGUgZXN0ZXJubyBjaGUgcGVybWV0dGUgZGkgZm9yemFyZSB1biByZWZyZXNoIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIHB1YmxpYyBmb3JjZVJlZnJlc2goKSB7XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIFZpZXcgdmllbmUgbWFudGVudXRvIGluIGF1dG9tYXRpY28gaWwgbnVtZXJvIGRpIHBhZ2luYSwgbWEgcGVyIGxhIG1vZGFsaXTDoCBhcnJheSBkZXZvIHByZW5kZXJlIGxlIGluZm8gZGkgcGFnaW5hemlvbmUgcHJpbWEgZSByaWFwcGxpY2FybGUgZG9wb1xyXG4gICAgICAgIGxldCBhcnJheVBhZ2U6IG51bWJlcjtcclxuICAgICAgICBsZXQgYXJyYXlJcHA6IG51bWJlcjtcclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgYXJyYXlQYWdlID0gdGhpcy5hcnJheW1vZGVQYWdlO1xyXG4gICAgICAgICAgICBhcnJheUlwcCA9IHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuVmlldyk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5BcnJheW1vZGVJdGVtc1BlclBhZ2UgPSBhcnJheUlwcDtcclxuICAgICAgICAgICAgdGhpcy5hcnJheUdvVG9QYWdlKGFycmF5UGFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgY2hlIGluIGJhc2UgYWkgY2xpY2sgc3UgdW5hIGNlbGxhIGNhcGlzY2Ugc2Ugc3RvIGVmZmV0dHVhbmRvIHVuJ29wZXJhemlvbmUgZGkgc2VsZXppb25lIG8gc2Ugc3RvIGVudHJhbmRvIG5lbGwnZWRpdCBkaSB1bmEgY2VsbGEgY29uIHVuIGRvcHBpbyBjbGlja1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gJGV2ZW50IEV2ZW50byBuYXRpdm8gamF2YXNjcmlwdFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gUmlmZXJpbWVudG8gYSBiaW5kZXIgZGVsbGEgcmlnYVxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gSXRlbSBjaGUgcmFwcHJlc2VudGEgaWwgY29udGVzdG8gc3UgY3VpIMOoIHN0YXRvIGVmZmV0dHVhdG8gdW4gY2xpY2tcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dJbmRleCBJbmRpY2UgZGVsbGEgcmlnYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGJDbGlja0VkaXRPclNpbmdsZUNsaWNrUm93U2VsZWN0aW9uKCRldmVudDogYW55LCByb3dJdGVtOiBUZEVsZW1lbnQsIGl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgICAgICAvLyBNb2RhbGl0w6AgRWRpdGFibGUsIGdlc3Rpc2NvIGkgZG9wcGkgY2xpY2sgc2VuemEgcGVyw7IgcmFsbGVudGFyZSBsYSBtb2RhbGl0w6AgZGkgc2VsZXppb25lIGEgcmFuZ2VcclxuICAgICAgICBpZiAodGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAvLyBTZWNvbmRvIGNsaWNrOiBzZSBpbCB0aW1lciBub24gw6ggc2NhZHV0byDDqCB1biBkb3BwaW8gY2xpY2sgZWQgZXNlZ3VvIGlsIHJlc3RvXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxEYkNsaWNrVGltZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dJdGVtLlByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVwVXNlckVkaXQocm93SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2VsbENsaWNrVGltZXIoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHJpbW8gY2xpY2s6IG5vbiBmYSBuaWVudGUgZSBzZSBpbCB0ZW1wbyBwZXIgaWwgc2Vjb25kbyBjbGljayBzY2FkZSByZXNldHRhIHR1dHRvXHJcbiAgICAgICAgICAgIHRoaXMuY2VsbERiQ2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckNlbGxDbGlja1RpbWVyKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0sIHRoaXMuU2VsZWN0aW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5kb3VibGVDbGlja0J1ZmZlck1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluIG1vZGFsaXTDoCBhIHJhbmdlIGxhIGNyZWF6aW9uZSBkZWwgcmFuZ2Ugw6ggZ2VzdGl0YSBkYWkgbW91c2Vkb3duLCBtb3ZlIGVkIHVwLi4uXHJcbiAgICAgICAgLy8gTGEgc2VsZXppb25lIGRlbGxlIHJpZ2hlIGludmVjZSDDqCBnZXN0aXRhIGRhbGxlIGNhc2VsbGluZSBhIHNpbmlzdHJhXHJcbiAgICAgICAgaWYgKHRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZmF0dG8gY2xpY2sgY29sIGNvbnRyb2wgYXR0YWNjYXRvIGVzY28gc3ViaXRvIGRhdG8gY2hlIGRldmUgc29sbyBwZXJtZXR0ZXJlIGxhIG5hdmlnYXppb25lIGRlaSBsaW5rXHJcbiAgICAgICAgaWYgKCRldmVudC5jdHJsS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFR1dHRpIGkgY2xpY2sgc3UgdW5hIGNlbGxhIGdpw6AgaW4gZWRpdCBub24gZGV2b25vIGVmZmV0dHVhcmUgbGEgc2VsZXppb25lIGRlbGxhIHJpZ2FcclxuICAgICAgICBpZiAoKHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uPy5sZW5ndGggPiAwICYmICg8RXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uPjxhbnk+cm93SXRlbSkuZWRpdHMgJiYgKDxFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24+PGFueT5yb3dJdGVtKS5lZGl0c1tpdGVtLl9oYXNoXT8uX2VkaXRpbmcpIHx8XHJcbiAgICAgICAgICAgICg8YW55PnJvd0l0ZW0pLl9lZGl0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFBlciBldml0YXJlIGRpIHJhbGxlbnRhcmUgYSBwcmVzY2luZGVyZVxyXG4gICAgICAgIGlmICghdGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKCRldmVudCwgaXRlbSwgdGhpcy5TZWxlY3Rpb24sIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGdlc3Rpc2NlIGlsIGNvbWFuZG8gXCJDb3BpYVwiIGJ1dHRhbmRvIGkgdmFsb3JpIHNlbGV6aW9uYXRpIG5lbGxhIGNsaXBib2FyZCBpbiBiYXNlIGFsIGxvcm8gdGlwbyAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVDb3B5KCkge1xyXG4gICAgICAgIGlmKCF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGV0IHNlbCA9IHRoaXMuc2VsZWN0aW9uX0guZ2V0U2VsZWN0aW9uU3RhdHVzU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKHNlbC5sZW5ndGggPiAwICYmIHNlbFswXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5zZWxlY3Rpb25fSC5nZXRDbGlwYmFyZFRleHRGcm9tU2VsZWN0aW9uKHNlbCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkU2VydmljZS5jb3B5VGV4dFRvQ2xpcGJvYXJkKHNlbGVjdGlvblRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlSW5mbyh0aGlzLmxjLmxvYyhcIlZhbHVlcyBjb3BpZWQgaW4gdGhlIGNsaXBib2FyZFwiKSwgXCJ0b2FzdHJcIiwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGdlc3Rpc2NlIGlsIGNvbWFuZG8gXCJJbmNvbGxhXCIgcHJlbmRlbmRvIGkgZGF0aSBkZWxsYSBjbGlwYm9hcmQgZSBhcHBsaWNhbmRvbGkgYWwgcmFuZ2UgZGkgc2VsZXppb25lIGF0dHVhbGUgaW4gYmFzZSBhbCB0aXBvIGRlbGxlIGNlbGxlIHNvdHRvICovXHJcbiAgICBoYW5kbGVQYXN0ZSgpIHtcclxuICAgICAgICBpZighdGhpcy5SYW5nZVNlbGVjdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGxldCBzZWwgPSB0aGlzLnNlbGVjdGlvbl9ILmdldFNlbGVjdGlvblN0YXR1c1NlbGVjdGlvbigpO1xyXG4gICAgICAgIGlmIChzZWwubGVuZ3RoID4gMCAmJiBzZWxbMF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZFNlcnZpY2UuZ2V0Q2xpcGJvYXJkKFwibWF0cml4XCIsICh2YWx1ZXM6IHN0cmluZ1tdW10pID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEZpeCBjbGlwYm9hcmQgc2VydmljZSBjaGUgcGFyZSB1biBwbycgc3Ryb256YSwgcmltdW92byBsJ3VsdGltbyBhcnJheSBzZSBtaSBhY2NvcmdvIGNoZSDDqCB1biBzaW5nb2xvIGFycmF5IGNvbiB1biBzb2xvIGVsZW1lbnRvIHZ1b3RvXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDAgJiYgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXS5sZW5ndGggPT0gMSAmJiB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdWzBdID09ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UodmFsdWVzLmxlbmd0aCAtIDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXNbMF0ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBzZSBsYSBtb2RpZmljYSDDqCBhYmlsaXRhdGFcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tc2dFeHRzLnNpbXBsZVdhcm5pbmcodGhpcy5sYy5sb2MoXCJEYXRhIGZvciB0aGlzIHRhYmxlIGNhbm5vdCBiZSBlZGl0ZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb250cm9sbG8gY2hlIHF1ZWxsbyBjaGUgc3RvIGNvcGlhbmRvIHNpYSBkZWxsYSBzdGVzc2EgZGltZW5zaW9uZSBkZWxsYSBzZWxlemlvbmUgc3VsbCdlcy10YWJsZSwgdHJhbm5lIG5lbCBjYXNvIGhvIHVuIHNpbmdvbG8gdmFsb3JlIGRhIGNvcGlhcmVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHNlbC5sZW5ndGggIT0gdmFsdWVzLmxlbmd0aCB8fCBzZWxbMF0ubGVuZ3RoICE9IHZhbHVlc1swXS5sZW5ndGgpICYmICh2YWx1ZXMubGVuZ3RoICE9IDEgfHwgdmFsdWVzWzBdLmxlbmd0aCAhPSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlV2FybmluZyh0aGlzLmxjLmxvYyhcIlNpemUgb2YgY29waWVkIGRhdGEgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2YgdGhlIHNlbGVjdGlvblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIGxlIGRpbWVuc2lvbmkgY29pbmNpZG9ubyBjb3BpbyBkYSB1bmEgcGFydGUgYWxsJ2FsdHJhXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoYW5nZXM6IEVzVGFibGVNb2RlbENoYW5nZVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCBzZWwubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHNlbFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsID0gcm93W2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2UgaG8gdW4gc2luZ29sbyB2YWxvcmUgbG8gYXBwbGljbyBhIHR1dHRhIGxhIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzLmxlbmd0aCA9PSAxICYmIHZhbHVlc1swXS5sZW5ndGggPT0gMSA/IHZhbHVlc1swXVswXSA6IHZhbHVlc1tyXVtjXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9sZCA9IGNlbGwudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbml1ID0gY2VsbC52YWxfc2V0dGVyKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2xkZGF0ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24ob2xkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuaXVkYXRlID0gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbihuaXUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGRkYXRlICYmIG5pdWRhdGUgJiYgb2xkZGF0ZS5pc1NhbWUgJiYgb2xkZGF0ZS5pc1NhbWUobml1ZGF0ZSkpIHx8IG9sZCA9PT0gbml1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChuZXcgRXNUYWJsZU1vZGVsQ2hhbmdlKGNlbGwuaXRlbSwgY2VsbC5oZWFkZXIsIGNlbGwucHJvcGVydHksIG9sZCwgbml1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZS5lbWl0KGNoYW5nZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJpcHVsaXNjZSBpbCB0aW1lciB1dGlsaXp6YXRvIHBlciBjYXBpcmUgc2Ugw6ggc3RhdG8gZWZmZXR0dWF0byB1biBkb3BwaW8gY2xpY2sgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIGNsZWFyQ2VsbENsaWNrVGltZXIoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2VsbERiQ2xpY2tUaW1lcilcclxuICAgICAgICB0aGlzLmNlbGxEYkNsaWNrVGltZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlciBjbGljayBzaW5nb2xvIHN1IHVuYSByaWdhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSAkZXZlbnQgRXZlbnRvIG5hdGl2byBqYXZhc2NyaXB0XHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBJdGVtIGNoZSByYXBwcmVzZW50YSBpbCBjb250ZXN0byBzdSBjdWkgw6ggc3RhdG8gZWZmZXR0dWF0byB1biBjbGlja1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3Rpb24gSW5kaWNhIHNlIGxhIHNlbGV6aW9uZSDDqCBhdHRpdmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW50ZXJuYWxDYWxsIEluZGljYSBzZSBsYSBjaGlhbWF0YSBhIHF1ZXN0YSBmdW56aW9uZSDDqCBpbnRlcm5hOiBwZXJtZXR0ZSBkaSBza2lwcGFyZSBpIGNoZWNrIHN1bGxlIEN1c3RvbUNlbGxzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVSb3dDbGljaygkZXZlbnQ6IGFueSwgaXRlbTogYW55LCBzZWxlY3Rpb246IGJvb2xlYW4sIGludGVybmFsQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgLy8gU2UgaG8gdW4gY3RybCBwcmVtdXRvIGVzY28gY29uIHRydWUgaW4gbW9kbyBkYSBmYXJlIGJ1YmJsaW5nIGRlbGwnZXZlbnRvIGUgbGFzY2lhcmxvIGdlc3RpcmUgYWwgYnJvd3NlciAobGluayBlY2MuLi4pXHJcbiAgICAgICAgLy8gU3Rlc3NhIGNvc2Egc2UgaG8gY3VzdG9tIGNlbGwgZGF0byBjaGUgbGEgZ2VzdGlvbmUgZGVpIGNsaWNrIHZpZW5lIGFmZmlkYXRhIGFpIHNpbmdvbGkgVERcclxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgKHRoaXMuVXNlQ3VzdG9tQ2VsbHMgJiYgIWludGVybmFsQ2FsbCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uICYmICFpdGVtLmxvY2tlZCAmJiAhaXRlbS5fc2VwICYmICFpdGVtLl9ncm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1cygpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUdyb3VwQ2xpY2soaXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPcmEgY2hlIG5vbiDDqCBhdHRhY2NhdG8gZGlyZXR0YW1lbnRlIGFsbCdodG1sIGRldm8gZmFyZSB1biBtYXJrZm9yY2hlY2sgZmluaXRlIGxlIG9wZXJhemlvbmkgc3VpIGdyb3VwaW5nXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYSBtb2RpZmljYSBkZWxsJ3V0ZW50ZSDDqCBpbml6aWF0YS4gU2kgaW1wb3N0YSBsYSB2YXJpYWJpbGUgcmVsYXRpdmEgYSBcInRydWVcIiBpbiBtb2RvIGRhIG1vc3RyYXJlIGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqIFxyXG4gICAgICogRG9wbyBjaGUgbCdpbnB1dCDDqCBhcHBhcnNvLCBkb3BvIHVuIGNpY2xvIGRpIENoYW5nZSBEZXRlY3Rpb24gdmllbmUgYXR0aXZhdG8gaWwgU3ViamVjdCBjb2xsZWdhdG8gYWxsJ2lucHV0IGNoZSBzZXJ2aXLDoCBhIGVmZmV0dHVhcmUgaWwgZm9jdXNcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gRWxlbWVudG8gZGkgcmlnYSBzdSBjdWkgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gc29wcmEgaWwgcXVhbGUgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldHVwVXNlckVkaXQocm93SXRlbTogVGRFbGVtZW50LCBpdGVtOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuRWRpdGFibGUgJiYgcm93SXRlbS5Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAoPEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbj48YW55PnJvd0l0ZW0pLmVkaXRzW2l0ZW0uX2hhc2hdID0geyBfZWRpdGluZzogdHJ1ZSwgb2xkX3ZhbHVlOiBpdGVtW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkub2xkX3ZhbHVlID0gaXRlbVtyb3dJdGVtLlByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5Gb2N1c1N1YmplY3QubmV4dCgpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExhIG1vZGlmaWNhIGRlbGwndXRlbnRlIMOoIHRlcm1pbmF0YS4gU2kgcmVpbXBvc3RhIGxhIHZhcmlhYmlsZSByZWxhdGl2YSBhIFwiZmFsc2VcIiBpbiBtb2RvIGRhIG5hc2NvbmRlcmUgbCdpbnB1dCBkaSB0ZXN0byBlIHNpIGVtZXR0ZSBsYSBtb2RpZmljYSBkZWwgdmFsb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7VGRFbGVtZW50fSByb3dJdGVtIEVsZW1lbnRvIGRpIHJpZ2Egc3UgY3VpIMOoIHN0YXRhIGF0dGl2YXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIHNvcHJhIGlsIHF1YWxlIMOoIHN0YXRhIGF0dGl2YXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggSW5kaWNlIGRlbGxhIGNvbG9ubmEgc3UgY3VpIMOoIGF2dmVudXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5hbGl6ZVVzZXJFZGl0KHJvd0l0ZW06IFRkRWxlbWVudCwgaXRlbTogYW55LCBjb2x1bW5JbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGR5bk1vZGUgPSB0aGlzLkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbj8ubGVuZ3RoID4gMDtcclxuICAgICAgICBsZXQgcm93SXRtID0gZHluTW9kZSA/ICgoPEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbj48YW55PnJvd0l0ZW0pLmVkaXRzW2l0ZW0uX2hhc2hdKSA6ICg8YW55PnJvd0l0ZW0pO1xyXG4gICAgICAgIHJvd0l0bS5fZWRpdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgb2xkID0gcm93SXRtLm9sZF92YWx1ZTtcclxuICAgICAgICBsZXQgbml1ID0gZHluTW9kZSA/IGl0ZW0ucHJvcGVydGllc1tyb3dJdGVtLlByb3BlcnR5TmFtZV0gOiBpdGVtW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXTtcclxuXHJcbiAgICAgICAgbGV0IG9sZGRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG9sZCk7XHJcbiAgICAgICAgbGV0IG5pdWRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG5pdSk7XHJcbiAgICAgICAgaWYgKChvbGRkYXRlICYmIG5pdWRhdGUgJiYgb2xkZGF0ZS5pc1NhbWUgJiYgb2xkZGF0ZS5pc1NhbWUobml1ZGF0ZSkpIHx8IG9sZCA9PT0gbml1KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZS5lbWl0KFtuZXcgRXNUYWJsZU1vZGVsQ2hhbmdlKGl0ZW0sIHJvd0l0ZW0uSUQsIHJvd0l0ZW0uUHJvcGVydHlOYW1lLCBvbGQsIG5pdSldKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXVtjb2x1bW5JbmRleF0udmFsX3NldHRlcihuaXUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdGVkKHNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSwgdmFsdWU6IHN0cmluZyk6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc291cmNlW2ldLmlkID09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVtpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaWQ6IFwiXCIsIGRlc2NyaXB0aW9uOiBcIlwiIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmFuZ2Ugc2VsZWN0aW9uIEV4cGVyaW1lbnRhbHNcclxuXHJcbiAgICBwcml2YXRlIG1vdXNlSXNEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGZpcnN0Q29vcmRpbmF0ZXM6IHtyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXJ9ID0gbnVsbDtcclxuXHJcbiAgICBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0l0ZW06IGFueSwgaXRlbTogYW55KSB7XHJcbiAgICAgICAgLy8gVGFzdG8gZGl2ZXJzbyBkYWwgY2xpY2sgc2luaXN0cm8gLT4gY2lhbyDDqCBzdGF0byBiZWxsbyBlIGludGVuc29cclxuICAgICAgICBpZihldmVudC5idXR0b25zICE9IDEgfHwgIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gVHV0dGkgaSBjbGljayBzdSB1bmEgY2VsbGEgZ2nDoCBpbiBlZGl0IG5vbiBkZXZvbm8gZWZmZXR0dWFyZSBsYSBzZWxlemlvbmUgZGVsbGEgcmlnYVxyXG4gICAgICAgIGlmICgodGhpcy5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24/Lmxlbmd0aCA+IDAgJiYgKDxFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24+PGFueT5yb3dJdGVtKS5lZGl0cyAmJiAoPEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbj48YW55PnJvd0l0ZW0pLmVkaXRzW2l0ZW0uX2hhc2hdPy5fZWRpdGluZykgfHxcclxuICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGlkID0gKDxIVE1MRWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS5pZDtcclxuICAgICAgICB0aGlzLm1vdXNlSXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMgPSB7IHJvdzogcGFyc2VJbnQoaWQuc3BsaXQoJ18nKVswXSksIGNvbHVtbjogcGFyc2VJbnQoaWQuc3BsaXQoJ18nKVsxXSkgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guc2luZ2xlQ2VsbFNlbGVjdGlvbih7IHZpZXc6IGV2ZW50LnZpZXcsIHNoaWZ0S2V5OiBmYWxzZSB9LCB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMucm93LCB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMuY29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWVudGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbnMgPT0gMClcclxuICAgICAgICAgICAgdGhpcy5tb3VzZUlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb3VzZUlzRG93biAmJiB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gKDxIVE1MRWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS5pZDtcclxuICAgICAgICAgICAgdmFyIG5ld0Nvb3JkcyA9IHsgcm93OiBwYXJzZUludChpZC5zcGxpdCgnXycpWzBdKSwgY29sdW1uOiBwYXJzZUludChpZC5zcGxpdCgnXycpWzFdKSB9XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guc2luZ2xlQ2VsbFNlbGVjdGlvbih7IHZpZXc6IGV2ZW50LnZpZXcsIHNoaWZ0S2V5OiB0cnVlIH0sIG5ld0Nvb3Jkcy5yb3csIG5ld0Nvb3Jkcy5jb2x1bW4sIHRoaXMuZmlyc3RDb29yZGluYXRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAoZXZlbnQ6IGFueSl7XHJcbiAgICAgICAgaWYoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5tb3VzZUlzRG93biA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vKiBQaWFuZ29cclxuICAgIHByaXZhdGUgRXNUZHNMaXN0OiBFc1RkUmVmZXJlbmNlW10gPSBbXTtcclxuICAgIGdldENlbGxSZWZlcmVuY2Uob2JqZWN0OiBhbnksIGNvbHVtbjogc3RyaW5nKTogRXNUZCB7XHJcbiAgICAgICAgbGV0IGZrVGhpc1NoaXRJbU91dCA9IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUob2JqZWN0KTtcclxuICAgICAgICB0aGlzLnV0aWxpdGllc19ILmNhbGN1bGF0ZUhhc2goW2ZrVGhpc1NoaXRJbU91dF0pO1xyXG4gICAgICAgIGxldCBwcm9wID0gY29sdW1uO1xyXG4gICAgICAgIGxldCBoYXNoID0gZmtUaGlzU2hpdEltT3V0Ll9oYXNoO1xyXG5cclxuICAgICAgICBsZXQgdG9SZXQgPSB0aGlzLkVzVGRzTGlzdC5maW5kKGYgPT4gZi5pZCA9PSBwcm9wICYmIGYuaGFzaCA9PSBoYXNoKT8uc2VsZjtcclxuICAgICAgICByZXR1cm4gdG9SZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDZWxsKGV2ZW50OiBFc1RkUmVmZXJlbmNlKSB7XHJcbiAgICAgICAgdGhpcy5Fc1Rkc0xpc3QucHVzaChldmVudCk7XHJcbiAgICB9XHJcbiAgICAvLyogUGlhbmdvIGFuY29yYVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXNUZFJlZmVyZW5jZSB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgaGFzaDogc3RyaW5nOyBcclxuICAgIHNlbGY6IEVzVGQ7XHJcbn0iXX0=
1561
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsVUFBVTtBQUNWLE9BQU8sRUFDSCxTQUFTLEVBQUUsZUFBZSxFQUFhLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFDeEYsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsRUFBYyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFlLE1BQU0sRUFDOUksTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSzNELGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFVdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVuRiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxh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QUs7K0JBT0wsS0FBSztxQkFFTCxLQUFLO3lCQUVMLEtBQUs7eUJBRUwsS0FBSzt5QkFFTCxLQUFLOzhCQUVMLEtBQUs7Z0NBRUwsS0FBSzswQkFFTCxLQUFLOzZCQUVMLEtBQUs7eUJBRUwsS0FBSzs2QkFPTCxLQUFLOzZCQUVMLEtBQUs7c0NBRUwsS0FBSzsyQkFFTCxLQUFLO3lCQUVMLEtBQUs7Z0NBTUwsS0FBSzs4QkFNTCxLQUFLOytCQUVMLEtBQUs7NEJBRUwsS0FBSzt5Q0FFTCxLQUFLOzRCQUVMLEtBQUs7OEJBRUwsS0FBSzt5QkFFTCxLQUFLO3dCQUVMLEtBQUs7aUNBRUwsS0FBSzswQ0FFTCxLQUFLO2dDQUVMLEtBQUs7d0JBRUwsS0FBSzt3QkFFTCxLQUFLO3FCQUVMLEtBQUs7NkJBRUwsS0FBSzs4QkFFTCxLQUFLOzBCQUdMLEtBQUs7cUNBRUwsS0FBSztpQ0FFTCxLQUFLO2dDQUVMLEtBQUs7b0NBRUwsS0FBSzt1QkFFTCxLQUFLOzZCQUVMLEtBQUs7NkJBRUwsS0FBSzs2QkFFTCxNQUFNOzhCQVdOLE1BQU07aUNBRU4sTUFBTTt3QkFFTixNQUFNOzZCQUVOLE1BQU07NEJBRU4sTUFBTTs2QkFHTixNQUFNO2lDQUVOLE1BQU07K0JBT04sU0FBUyxTQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs2QkFFL0MsU0FBUyxTQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7b0NBVXZDLEtBQUs7O0FBeXlDVixNQUFNLE9BQU8sYUFBYTtDQUl6QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIENoYW5nZURldGVjdG9yUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsXHJcbiAgICBFdmVudEVtaXR0ZXIsIE91dHB1dCwgQ29udGVudENoaWxkLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIE9wdGlvbmFsLCBTZWxmLCBUZW1wbGF0ZVJlZiwgSW5qZWN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSwgRXhwb3J0U2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIERhdGVTZXJ2aWNlLCBDc3ZIZWFkZXJzLCBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL2V4dGVuc2lvbnMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL2xvY2FsaXphdGlvbnMnO1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICdAZXNmYWVuemEvcHJlZmVyZW5jZXMnO1xyXG5cclxuLy8gUGx1Z2luc1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJ0Blc2ZhZW56YS9uZ3gtY29udGV4dG1lbnUnO1xyXG5cclxuLy8gTW9kZWxsaSAvIFRpcGlcclxuaW1wb3J0IHsgQXBwU2VhcmNoIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0FwcFNlYXJjaFwiO1xyXG5pbXBvcnQgeyBBcHBPcmRlcmluZyB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBPcmRlcmluZ1wiO1xyXG5pbXBvcnQgeyBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9Fc1RhYmxlQ29sdW1uc0RlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgQ29ybmVyTWVudU9wdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0Nvcm5lck1lbnVPcHRpb25cIjtcclxuaW1wb3J0IHsgRXNUYWJsZU9wZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9Fc1RhYmxlT3BlcmF0aW9uRGVmaW5pdGlvblwiO1xyXG5pbXBvcnQgeyBFc1RhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvRXNUYWJsZUNvbHVtblwiO1xyXG5pbXBvcnQgeyBHcm91cFBhZ2VyIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvR3JvdXBQYWdlclwiO1xyXG5pbXBvcnQgeyBHcm91cFJvdXRlRnJhZ21lbnQgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9Hcm91cFJvdXRlRnJhZ21lbnRcIjtcclxuaW1wb3J0IHsgVGhFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvVGhFbGVtZW50XCI7XHJcbmltcG9ydCB7IFRkRWxlbWVudCB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL1RkRWxlbWVudFwiO1xyXG5pbXBvcnQgeyBJdGVtc1NlbGVjdGlvbiB9IGZyb20gJy4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0l0ZW1zU2VsZWN0aW9uJztcclxuaW1wb3J0IHsgR3JvdXBPckFnZ3JlZ2F0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0dyb3VwT3JBZ2dyZWdhdGlvblwiO1xyXG5pbXBvcnQgeyBHcm91cEZpbHRlciB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9Hcm91cEZpbHRlclwiO1xyXG5pbXBvcnQgeyBHcm91cCB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9Hcm91cFwiO1xyXG5pbXBvcnQgeyBFc1RhYmxlTW9kZWxDaGFuZ2UgfSBmcm9tICcuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0VzVGFibGVNb2RlbENoYW5nZSc7XHJcbmltcG9ydCB7IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgfSBmcm9tICcuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0l0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UnO1xyXG5pbXBvcnQgeyBFc1RhYmxlRGVmYXVsdGFibGUgfSBmcm9tICcuLi8uLi9kb21haW4vY29uZmlndXJhdGlvbi9Fc1RhYmxlRGVmYXVsdGFibGUnO1xyXG5cclxuLy8gQ29tcG9uZW50aSBlIExvY2FsaXp6YXppb25lXHJcbmltcG9ydCB7IEVzVGREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2VzX3RkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEVzVGhEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2VzX3RoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEVzVGRFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2VzX3RkX2VkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBJRXNUYWJsZVRlbXBsYXRlV3JhcHBlciB9IGZyb20gJy4uL2VzLXRhYmxlLXRlbXBsYXRlL2VzX3RhYmxlX3RlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVzVGFibGVMb2MgfSBmcm9tICcuL2VzX3RhYmxlLmNvbXBvbmVudC5sb2MnO1xyXG5cclxuaW1wb3J0IHsgRVNUX0RFRkFVTFRTLCBFU1RfTE9DQUxFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IEV4cG9ydEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9FeHBvcnRIYW5kbGVyXCI7XHJcbmltcG9ydCB7IENvbHVtbk1ldGFkYXRhSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9EeW5hbWljTW9kZUhhbmRsZXJcIjtcclxuaW1wb3J0IHsgSGllcmFyY2h5TW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9IaWVyYXJjaHlNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBJdGVtc0hhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9JdGVtc0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgUmVwb3J0TW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9SZXBvcnRNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBSb3dHcm91cGluZ0hhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9Sb3dHcm91cGluZ0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgU2VsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1NlbGVjdGlvbkhhbmRsZXJcIjtcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgQ29weVBhc3RlRGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL0NvcHlQYXN0ZURldGVjdG9yJztcclxuXHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFc1RkIH0gZnJvbSAnLi4vZXMtdGQvZXNfdGQuY29tcG9uZW50JztcclxuXHJcbi8qKiBDb21wb25lbnRlIGNoZSBwZXJtZXR0ZSBkaSByYXBwcmVzZW50YXJlIHVuYSBncmlnbGlhIGRpIHZhbG9yaSAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnZXMtdGFibGUnLFxyXG4gICAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEVzVGFibGVMb2MgfV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9lc190YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VzX3RhYmxlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRXNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMge1xyXG5cclxuICAgIC8vIENvbXBvbmVudGkgcGVyIGxhIGdlc3Rpb25lIGRlbGxlIHZhcmllIGZ1bnppb25hbGl0w6AgZGVsbCdlcy10YWJsZVxyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIGV4cG9ydF9IOiBFeHBvcnRIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIGNvbHVtbk1ldGFkYXRhX0g6IENvbHVtbk1ldGFkYXRhSGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBkeW5hbWljTW9kZV9IOiBEeW5hbWljTW9kZUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgaGllcmFyY2h5TW9kZV9IOiBIaWVyYXJjaHlNb2RlSGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBpdGVtc19IOiBJdGVtc0hhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgcmVwb3J0TW9kZV9IOiBSZXBvcnRNb2RlSGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyByb3dHcm91cGluZ19IOiBSb3dHcm91cGluZ0hhbmRsZXJcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBzZWxlY3Rpb25fSDogU2VsZWN0aW9uSGFuZGxlcjtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmVycyBwZXIgZ2xpIGV2ZW50aSBkaSBjb3BpYSBlIGluY29sbGFcclxuICAgIC8qKiBAaWdub3JlICovIHByaXZhdGUgY29weVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJpdmF0ZSBwYXN0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHByZWZTZXJ2aWNlOiBQcmVmZXJlbmNlc1NlcnZpY2UsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChFU1RfREVGQVVMVFMpIHByaXZhdGUgZGVhZnVsdHM6IEVzVGFibGVEZWZhdWx0YWJsZSxcclxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVTVF9MT0NBTEUpIHB1YmxpYyBsb2NhbGU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsaXRpZXNfSDogVXRpbGl0aWVzSGFuZGxlcixcclxuICAgICAgICBwdWJsaWMgdXRpRXh0czogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBleHBFeHRzOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkYXRlRXh0czogRGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtc2dFeHRzOiBNZXNzYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvcHlQYXN0ZURldGVjdG9yOiBDb3B5UGFzdGVEZXRlY3RvcixcclxuICAgICAgICBwcml2YXRlIGNsaXBib2FyZFNlcnZpY2U6IENsaXBib2FyZFNlcnZpY2UpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jb3B5U3Vic2NyaXB0aW9uID0gdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5PbkNvcHkuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5oYW5kbGVDb3B5KCk7IH0pO1xyXG4gICAgICAgIHRoaXMucGFzdGVTdWJzY3JpcHRpb24gPSB0aGlzLmNvcHlQYXN0ZURldGVjdG9yLk9uUGFzdGUuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5oYW5kbGVQYXN0ZSgpOyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5leHBvcnRfSCA9IG5ldyBFeHBvcnRIYW5kbGVyKHRoaXMsIHRoaXMuZXhwRXh0cywgdGhpcy5tc2dFeHRzLCB0aGlzLnV0aUV4dHMsIHRoaXMuZGF0ZUV4dHMpO1xyXG4gICAgICAgIHRoaXMucm93R3JvdXBpbmdfSCA9IG5ldyBSb3dHcm91cGluZ0hhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCwgdGhpcy5kYXRlRXh0cyk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9IID0gbmV3IENvbHVtbk1ldGFkYXRhSGFuZGxlcih0aGlzLCB0aGlzLnV0aWxpdGllc19ILCB0aGlzLnV0aUV4dHMsIHRoaXMucHJlZlNlcnZpY2UsIHRoaXMucm93R3JvdXBpbmdfSCk7XHJcbiAgICAgICAgdGhpcy5keW5hbWljTW9kZV9IID0gbmV3IER5bmFtaWNNb2RlSGFuZGxlcih0aGlzKTtcclxuICAgICAgICB0aGlzLmhpZXJhcmNoeU1vZGVfSCA9IG5ldyBIaWVyYXJjaHlNb2RlSGFuZGxlcih0aGlzKTtcclxuICAgICAgICB0aGlzLml0ZW1zX0ggPSBuZXcgSXRlbXNIYW5kbGVyKHRoaXMsIHRoaXMudXRpbGl0aWVzX0gpO1xyXG4gICAgICAgIHRoaXMucmVwb3J0TW9kZV9IID0gbmV3IFJlcG9ydE1vZGVIYW5kbGVyKHRoaXMsIHRoaXMudXRpbGl0aWVzX0gpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0ggPSBuZXcgU2VsZWN0aW9uSGFuZGxlcih0aGlzLCB0aGlzLnJvd0dyb3VwaW5nX0gpO1xyXG5cclxuICAgICAgICBpZiAobmdDb250cm9sKVxyXG4gICAgICAgICAgICBuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIEFzc2VnbmF6aW9uZSBwZXIgdHV0dGkgZ2xpIElucHV0IGRpIGRlZmF1bHRcclxuICAgICAgICB0aGlzLkNvbHVtbnNSZXNpemFibGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29sdW1uc1Jlc2l6YWJsZSwgdGhpcy5kZWFmdWx0cz8uQ29sdW1uc1Jlc2l6YWJsZSk7XHJcbiAgICAgICAgdGhpcy5BdXRvVXBkYXRlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkF1dG9VcGRhdGUsIHRoaXMuZGVhZnVsdHM/LkF1dG9VcGRhdGUpO1xyXG4gICAgICAgIHRoaXMuQWxsU2VhcmNoID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkFsbFNlYXJjaCwgdGhpcy5kZWFmdWx0cz8uQWxsU2VhcmNoLCB0cnVlKTtcclxuICAgICAgICB0aGlzLkV4cG9ydCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5FeHBvcnQsIHRoaXMuZGVhZnVsdHM/LkV4cG9ydCk7XHJcbiAgICAgICAgdGhpcy5IaWRlUGFnaW5nID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkhpZGVQYWdpbmcsIHRoaXMuZGVhZnVsdHM/LkhpZGVQYWdpbmcsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLkhpZGVQYWdpbmdDb3VudCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5IaWRlUGFnaW5nQ291bnQsIHRoaXMuZGVhZnVsdHM/LkhpZGVQYWdpbmdDb3VudCk7XHJcbiAgICAgICAgdGhpcy5IaWRlUGFnaW5nQnV0dG9ucyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5IaWRlUGFnaW5nQnV0dG9ucywgdGhpcy5kZWFmdWx0cz8uSGlkZVBhZ2luZ0J1dHRvbnMpO1xyXG4gICAgICAgIHRoaXMuQ29udGFpbmVyQ2xhc3MgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29udGFpbmVyQ2xhc3MsIHRoaXMuZGVhZnVsdHM/LkNvbnRhaW5lckNsYXNzLCAnJyk7XHJcbiAgICAgICAgdGhpcy5UYWJsZUNsYXNzID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlRhYmxlQ2xhc3MsIHRoaXMuZGVhZnVsdHM/LlRhYmxlQ2xhc3MsICd0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtJyk7XHJcbiAgICAgICAgdGhpcy5TZWxlY3Rpb24gPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuU2VsZWN0aW9uLCB0aGlzLmRlYWZ1bHRzPy5TZWxlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuU2F2ZVByZWZlcmVuY2VzID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlNhdmVQcmVmZXJlbmNlcywgdGhpcy5kZWFmdWx0cz8uU2F2ZVByZWZlcmVuY2VzKTtcclxuICAgICAgICB0aGlzLlBhZ2luZ1N0eWxlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlBhZ2luZ1N0eWxlLCB0aGlzLmRlYWZ1bHRzPy5QYWdpbmdTdHlsZSwgJ2JvdHRvbScpO1xyXG4gICAgICAgIHRoaXMuUm93R3JvdXBpbmdQYWdpbmdTdHlsZSA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlLCB0aGlzLmRlYWZ1bHRzPy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlLCAnbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUsIHRoaXMuZGVhZnVsdHM/LlVzZVNlbGVjdGlvbkNhY2hlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLlNob3dJdGVtR3JvdXBzQ29sdW1ucyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5TaG93SXRlbUdyb3Vwc0NvbHVtbnMsIHRoaXMuZGVhZnVsdHM/LlNob3dJdGVtR3JvdXBzQ29sdW1ucywgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkFycmF5bW9kZUl0ZW1zUGVyUGFnZSwgdGhpcy5kZWFmdWx0cz8uQXJyYXltb2RlSXRlbXNQZXJQYWdlLCAxNSk7XHJcbiAgICAgICAgdGhpcy5Db2x1bW5zUGlubmFibGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29sdW1uc1Bpbm5hYmxlLCB0aGlzLmRlYWZ1bHRzPy5Db2x1bW5zUGlubmFibGUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTdWJqZWN0IHV0aWxpenphdG8gaW50ZXJuYW1lbnRlIGxhdG8gRXNUYWJsZSBwZXIgY2F1c2FyZSBpbCBGb2N1cyBsYXRvIGNvbXBvbmVudGUgZGkgSW5wdXQgKi9cclxuICAgIHB1YmxpYyBGb2N1c1N1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpXHJcbiAgICAvKiogVGltZXIgY2hlIHZlcnLDoCBpbXBvc3RhdG8gYSAqKmRvdWJsZUNsaWNrQnVmZmVyTXMqKiBwZXIgY2FwaXJlIHNlIMOoIHN0YXRvIGVmZmV0dHVhdG8gdW4gY2xpY2sgc2luZ29sbyBvIHVuIGRvdWJsZWNsaWNrICovXHJcbiAgICBwcml2YXRlIGNlbGxEYkNsaWNrVGltZXI6IGFueTtcclxuICAgIC8qKiBTZSB2ZW5nb25vIGVmZmV0dHVhdGkgMiBjbGljayBhIGRpc3RhbnphIGluZmVyaW9yZSBhIHF1ZXN0aSBNaWxsaXNlY29uZGkgdmllbmUgY29uc2lkZXJhdG8gdW4gZG9wcGlvIGNsaWNrICovXHJcbiAgICBwcml2YXRlIGRvdWJsZUNsaWNrQnVmZmVyTXM6IG51bWJlciA9IDIwMDtcclxuICAgIC8qKiBWaWV3IGZpbmFsZSBzdSBjdWkgYmluZGFyc2kgbGF0byBGcm9udGVuZCwgaWwgdGlwbyBwdcOyIGVzc2VyZSBJQXBwU2VhcmNoPGFueT4gKHBlciBsYSAqKnZpZXdNb2RlKiopLCBhbnlbXSAocGVyIGwnKiphcnJheU1vZGUqKikgKi9cclxuICAgIHB1YmxpYyBWaWV3OiBhbnkgPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gZGEgY3VpIGwnZXMtdGFibGUgbW9zdHJhIGkgcHVsc2FudGkgZGkgcGFnaW5hemlvbmUgaW4gYmFzc28gYSBkZXN0cmEgKi9cclxuICAgIHB1YmxpYyBhcnJheVB1bHNhbnRpOiBhbnk7XHJcbiAgICAvKiogSW5kaWNhIHNlIGwnZXMtdGFibGUgZGV2ZSBtb3N0cmFyZSBpbCBjaGVjayBnbG9iYWxlIG5lbGwnaGVhZGVyIHBlciBmYXJlIGlsIFwic2VsZXppb25hIHR1dHRvXCIgKi9cclxuICAgIHB1YmxpYyBnbG9iYWxDaGVjayA9IGZhbHNlO1xyXG4gICAgLyoqIFRpZW5lIGRhIGNvbnRvIGwndWx0aW1vIGVsZW1lbnRvIHNlbGV6aW9uYXRvIGluIG1vZG8gZGEgcG90ZXIgZWZmZXR0dWFyZSBpbCBTSElGVCtDTElDSyAqL1xyXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWQ6IGFueSA9IG51bGw7XHJcbiAgICAvKiogQ29udGVnZ2lvIGludGVybm8gcGVyIGlsIG51bWVybyBkaSBlbGVtZW50aSBzZWxlemlvbmF0aSAqL1xyXG4gICAgcHVibGljIHNlbGVjdGVkT2JqZWN0cyA9IDA7XHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBzZWxlemlvbmUgbWFzc2l2YSAqL1xyXG4gICAgcHVibGljIGNhblNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIHN0YSBnZXN0ZW5kbyB1biBJQXBwU2VhcmNoPGFueT4gKi9cclxuICAgIHB1YmxpYyB2aWV3TW9kZSA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIHN0YSBnZXN0ZW5kbyB1biBhbnlbXSAqL1xyXG4gICAgcHVibGljIGFycmF5TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGVuaXRvcmUgZGVnbGkgZWxlbWVudGkgZGEgbGlzdGFyZSBsYXRvIGludGVyZmFjY2lhIGRvcG8gdHV0dGUgbGUgZWxhYm9yYXppb25pIGRlbCBjYXNvLFxyXG4gICAgICogZ2VuZXJhbG1lbnRlIG5vbiBzb25vIGFsdHJvIGNoZSB0dXR0aSBnbGkgb2dnZXR0aSBkYSBwcmVzZW50YXJlIGNvbiBpbiBwacO5IGwnaGFzaCBjYWxjb2xhdG8gcGVyIGlkZW50aWZpY2FyZSAxIG9nZ2V0dG8gY29uIGxhIHByb3ByaWEgcmlnYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYm91bmRTb3VyY2U6IGFueVtdID0gW107XHJcbiAgICAvKiogU3Rlc3NhIGNvc2EgZGVsbGEgKipib3VuZFNvdXJjZSoqLCB1dGlsaXp6YXRhIGNvbWUgYXBwb2dnaW8gdGVtcG9yYW5lbyBpbnRlcm5vICovXHJcbiAgICBwdWJsaWMgVE1QQm91bmRTb3VyY2U6IGFueVtdID0gW107XHJcbiAgICAvKiogXCJGZXR0YVwiIGRpIG9nZ2V0dGkgdXRpbGl6emF0YSBuZWxsJ2VuZGxlc3Mgc2Nyb2xsLCBvZ25pIGVsZW1lbnRvIGRpIHF1ZXN0byBhcnJheSDDqCB1biBibG9jY2hldHRvIGRpIDEwMCBlbGVtZW50aSAqL1xyXG4gICAgcHVibGljIGJvdW5kU3ViU291cmNlczogYW55W10gPSBbXTtcclxuICAgIC8qKiBRdWVzdGEgZnVuZ2UgZGEgaW5kaWNhdG9yZSBwZXIgZ2xpIHNsaWNlIGluc2VyaXRpLCBsYSBsdW5naGV6emEgZG92cmViYmUgZXNzZXJlIGNvcnJpc3BvbmRlbnRlIGEgKipib3VuZFN1YlNvdXJjZXMqKiAqL1xyXG4gICAgcHVibGljIGFkZGVkU2xpY2VzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgLyoqIFZhcmlhYmlsZSBjaGUgaWRlbnRpZmljYSBpbCB2YWxvcmUgZGVsIFwic2VsZXppb25hIFR1dHRvXCIgbmVsbGEgcGFnaW5hemlvbmUgKi9cclxuICAgIHB1YmxpYyBkZWZhdWx0QWxsUGFnZU92ZXJyaWRlID0gOTk5OTk5O1xyXG4gICAgLyoqIFNlcnZlIHBlciB0ZW5lcmUgaW4gbWVtb3JpYSBpbCBjb250ZWdnaW8gcHJlY2VkZW50ZSBlIHJlY3VwZXJhcmxvIGluIGNhc28gZGl2ZW50aSAtMiAodmVyaWZpY2FyZSBjb24gQWxlIHBlcmNow6kgbGEgbG9naWNhIGRlbCAtMikgKi9cclxuICAgIHB1YmxpYyBwcmV2aW91c0NvdW50OiBudW1iZXI7XHJcbiAgICAvKiogSW5kaWNhIHNlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBhdXRvdXBkYXRlLCBjaW/DqCB1biB0cmlnZ2VyIHRpbWUtaXp6YXRvIGluIGFsdG8gYSBkZXN0cmEgZGVsbGEgdGFiZWxsYSBjaGUgcmlwZXRlIGxlIHJpY2VyY2hlIG9nbmkgWCAqKnNlY29uZHMqKiAqL1xyXG4gICAgcHVibGljIGF1dG9VcGRhdGUgPSBmYWxzZTtcclxuICAgIC8qKiBOdW1lcm8gZGkgc2Vjb25kaSBkYSBmYXJlIHRyYXNjb3JyZXJlIGZyYSB1bmEgcmljZXJjYSBlIGwnYWx0cmEgKi9cclxuICAgIHB1YmxpYyBzZWNvbmRzID0gJzEwJztcclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnSW50ZXJ2YWwgY2hlIHZpZW5lIGdlbmVyYXRvIHNlICoqYXV0b1VwZGF0ZSoqIMOoIGltcG9zdGF0YSBhIHRydWUgaW4gbW9kbyBkYSBwb3RlcmxvIHJpcHVsaXJlICovXHJcbiAgICBwdWJsaWMgdXBkYXRlVGltZXI6IGFueTtcclxuICAgIC8qKiBJbXBvc3RhdGEgYSB0cnVlIG9nbmkgdm9sdGEgY2hlIHZpZW5lIGF2dmlhdGEgdW5hIHJpY2VyY2EsIGUgYSBmYWxzZSBvZ25pIHZvbHRhIGNoZSB1biBudW92byB2YWxvcmUgdmllbmUgcmljZXZ1dG8gKi9cclxuICAgIHB1YmxpYyByZXNlYXJjaEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBNb2RlbGxvIHJhcHByZXNlbnRhbnRlIHVuIGRpemlvbmFyaW8gZGkgcmlnaGUgZGVsbGEgdGFiZWxsYSwgY29uIGNoaWF2ZSBsJ2hhc2ggZSB2YWxvcmUgbGEgbGlzdGEgZGkgY2VsbGUgKi9cclxuICAgIHB1YmxpYyBSb3dURHM6IHsgW2NvbnRleHQ6IHN0cmluZ106IFRkRWxlbWVudFtdIH0gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSAqKlJvd1REcyoqIMOoIHVuIG9nZ2V0dG8gdnVvdG8gbyBtZW5vICovXHJcbiAgICBwdWJsaWMgRW1wdHlSb3dUZHM6IGJvb2xlYW47XHJcbiAgICAvKiogTW9kZWxsbyBkaSBhcHBvZ2dpbyB0ZW1wb3JhbmVvIHBlciBpICoqUm93VERzKiogKi9cclxuICAgIHB1YmxpYyBUTVBSb3dURHM6IHsgW2NvbnRleHQ6IHN0cmluZ106IFRkRWxlbWVudFtdIH0gPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGFudGUgdW4gc2luZ29sbyB0aCBkZWxsYSB0YWJlbGxhLCBnZW5lcmF0byBpbiBiYXNlIGFsbGUgY29uZmlndXJhemlvbmkgZSBhZ2xpIG9nZ2V0dGkgcmljZXZ1dGkgKi9cclxuICAgIHB1YmxpYyBSb3dUSHM6IFRoRWxlbWVudFtdID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dUSHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1RIczogVGhFbGVtZW50W10gPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gZGkgYXBwb2dnaW8gdGVtcG9yYW5lbyBwZXIgaSAqKlJvd1RoR3JvdXBzKiogKi9cclxuICAgIHB1YmxpYyBUTVBSb3dUaEdyb3VwczogeyBTcGFuOiBudW1iZXIsIFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH1bXVtdID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIHJhcHByZXNlbnRhbnRlIHVuIHNpbmdvbG8gaGVhZGVyIGdyb3VwIGRlbGxhIHRhYmVsbGEuIFF1ZXN0YSBsaXN0YSDDqCBnacOgIG9yZGluYXRhIGUgcHJvbnRhIHBlciBlc3NlcmUgdXRpbGl6emF0YSBpbiBuZ0ZvciAqL1xyXG4gICAgcHVibGljIFJvd1RoR3JvdXBzOiB7IFNwYW46IG51bWJlciwgVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfVtdW10gPSBudWxsO1xyXG4gICAgLyoqIENhY2hlIHBlciBpIHJvdXRlckxpbmsgZ2VuZXJhdGkgbmVsbGUgdGFiZWxsZSBkaW5hbWljaGUgKi9cclxuICAgIHB1YmxpYyBEeW5hbWljVGFibGVSb3V0ZXJMaW5rQ2FjaGU6IHt9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0YSBkZWkgY29udGVzdGkuIFVuIGNvbnRlc3RvIG5vbiDDqCBhbHRybyBjaGUgdW4gaGFzaCBwYXJ0aWNvbGFyZSBjYWxjb2xhdG8gc3UgdW4gb2dnZXR0byBjaGUgaWRlbnRpZmljYSB1bml2b2NhbWVudGUgdGFsZSBvZ2dldHRvLlxyXG4gICAgICpcclxuICAgICAqIE9nbnVubyBkaSBxdWVzdGkgY29udGVzdGkgcmFwcHJlc2VudGVyw6AgYSBzdWEgdm9sdGEsIHVuaXZvY2FtZW50ZSwgdW5hIHJpZ2EgYWxsJ2ludGVybm8gZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgUm93Q29udGV4dHM6IGFueVtdID0gW107XHJcbiAgICAvKiogRGlyZXR0aXZlIGRpIG9yZGluYW1lbnRvIGRlbGxlIGNvbG9ubmUgKG5vbiBvcmRpbmFtZW50byBkZWkgZGF0aSBtYSBkZWxsZSBjb2xvbm5lIGluIHNlKSAqL1xyXG4gICAgcHVibGljIE9yZGVyRGlyZWN0aXZlczogc3RyaW5nW10gPSBbXTtcclxuICAgIC8qKiBDb2RpY2UgZGVsbCd1bHRpbW8gb2dnZXR0byBzb2xlemlvbmF0byAqL1xyXG4gICAgcHVibGljIGxhc3RTZWxlY3RlZEl0ZW1JRCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2Ugb2x0cmUgYWxsZSBjb2xvbm5lIGRpbmFtaWNoZSBzcGVjaWZpY2hlIGRpIHVuIHRpcG8gZGkgb2dnZXR0byBjaSBzb25vIGFuY2hlIGNvbG9ubmUgZGluYW1pY2hlIGFnZ2l1bnRlIGRhbGwndXRlbnRlXHJcbiAgICAgKlxyXG4gICAgICogRXMuIHVuYSBjb2xvbm5hIGluIGN1aSBtb3N0cmFyZSBzZW1wcmUgdW4gaWNvbmNpbmFcclxuICAgICAqL1xyXG4gICAgcHVibGljIFVzZXJEZWZpbmVkRHluYW1pY0NvbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBJbmRpY2EgY2hlIHF1ZXN0byDDqCBpbCBwcmltbyBCaW5kIGRlbGxhIHRhYmVsbGEsIHZpZW5lIHNldHRhdG8gYSBmYWxzZSBub24gYXBwZW5hIGlsIHByaW1vIGJpbmQgdmllbmUgdGVybWluYXRvIGNvbiBzdWNjZXNzbyAqL1xyXG4gICAgcHVibGljIEZpcnN0QmluZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAvKiogTGlzdGEgZGkgY29sb25uZSBjaGUgc2kgcG9zc29ubyB2aXN1YWxpenphcmUvb3JkaW5hcmUgZnJhIGRpIGxvcm8gKi9cclxuICAgIHB1YmxpYyBDb2x1bW5zTGlzdDogRXNUYWJsZUNvbHVtbltdID0gW107XHJcbiAgICAvKiogVmFyaWFiaWxlIGQnYXBwb2dnaW8gdXNhdGEgZGFsbGEgZGlhbG9nIGRpIHNlbGV6aW9uZS9uYXNjb25kaW1lbnRvLCBwZXIgZXZpdGFyZSBkaSBkYW5uZWdnaWFyZSAqKkNvbHVtbnNMaXN0KiogaW4gY2FzbyBkaSBtb2RpZmljaGUgcG9pIGFubnVsbGF0ZSAqL1xyXG4gICAgcHVibGljIFRNUENvbHVtbnNMaXN0OiBFc1RhYmxlQ29sdW1uW10gPSBbXTtcclxuICAgIC8qKiBWYWxvcmUgZGVsIGNoZWNrIGdsb2JhbGUgZGkgdmlzaWJpbGl0w6AgdmFsaWRvIHBlciB0dXR0ZSBsZSBjb2xvbm5lIGluICoqQ29sdW1uc0xpc3QqKiAqL1xyXG4gICAgcHVibGljIGdsb2JhbENvbFZpc0NoZWNrID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIHR1dHRlIGxlIGRpcmV0dGl2ZSBwZXIgZ2xpIGVkaXRvciBjdXN0b20gZGVsbGUgY2VsbGUgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRXNUZEVkaXRvckRpcmVjdGl2ZSkgRXNUZEVkaXRvckRpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxFc1RkRWRpdG9yRGlyZWN0aXZlPjtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSB0dXR0ZSBsZSBudW92ZSBkaXJldHRpdmUgIGFzc2VnbmF0aSBhIGRpcmV0dGl2YSAoUGVyIGxhIG1vZGFsaXTDoCBkaW5hbWljYSBkZWxsJ2VzLXRhYmxlKSAqL1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihFc1RkRGlyZWN0aXZlKSBFc1Rkc0RpcmVjdGl2ZTogUXVlcnlMaXN0PEVzVGREaXJlY3RpdmU+O1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIHR1dHRpIGdsaSBlcy10ZCBhc3NlZ25hdGkgYSBkaXJldHRpdmEgKFBlciBsYSBtb2RhbGl0w6AgZGluYW1pY2EgZGVsbCdlcy10YWJsZSkgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRXNUaERpcmVjdGl2ZSkgRXNUaHNEaXJlY3RpdmU6IFF1ZXJ5TGlzdDxFc1RoRGlyZWN0aXZlPjtcclxuICAgIC8qKiBJbnB1dCBjb2xsZWdhdG8gYSB1biB0ZW1wbGF0ZSBjaGUgY29udGllbmUgbGUgZGlyZXR0aXZlIHBlciByZW5kZXJpenphcmUgcXVlc3RhIHRhYmVsbGEuIHNlIGNpIHNvbm8gKipFc1Rkc0RpcmVjdGl2ZSoqIGUgKipFc1Roc0RpcmVjdGl2ZSoqIHF1ZXN0aSBoYW5ubyBsYSBwcmlvcml0w6AgKi9cclxuICAgIEBJbnB1dCgpIEVzVGFibGVUZW1wbGF0ZTogSUVzVGFibGVUZW1wbGF0ZVdyYXBwZXI7XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgbGUgaW5mb3JtYXppb25pIGRlbCBib2R5IChwdW50byBkZWxsYSB0YWJlbGxhIGRvdmUgdmVuZ29ubyBtb3N0cmF0ZSBsZSByaWdoZSkgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGJvZHlSZWY6IGFueTtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSBsZSBpbmZvcm1hemlvbmkgZGVsbCdoZWFkZXIgKHB1bnRvIGRlbGxhIHRhYmVsbGEgZG92ZSB2ZW5nb25vIG1vc3RyYXRlIGxlIGludGVzdGF6aW9uaSBkZWxsZSByaWdoZSkgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgaGVhZGVyUmVmOiBhbnk7XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgbGUgaW5mb3JtYXppb25pIHN1bCByYWdncnVwcGFtZW50byBkZWdsaSBoZWFkZXIgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ2hlYWRlckdyb3VwJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBoZWFkZXJHcm91cFJlZjogYW55O1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGxlIGluZm9ybWF6aW9uaSBzdWwgcmFnZ3J1cHBhbWVudG8gZGkgc2Vjb25kbyBsaXZlbGxvIGRlZ2xpIGhlYWRlciAqL1xyXG4gICAgQENvbnRlbnRDaGlsZCgnc2Vjb25kYXJ5SGVhZGVyR3JvdXAnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIHNlY29uZGFyeUhlYWRlckdyb3VwUmVmOiBhbnk7XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgaWwgY2FtcG8gZGkgSW5wdXQgYXR0dWFsZS4gRG9wbyB1biBkb3BwaW8gY2xpY2sgbG8gYmVjY28gZSBsbyBmb2N1c3NvIGFwcGVuYSB0ZXJtaW5hIGxhIGNoYWduZSBkZXRlY3Rpb24gKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBpbnB1dEZpZWxkOiBFbGVtZW50UmVmO1xyXG4gICAgLyoqIE9wemlvbmkgZXh0cmEgY2hlIGRldm9ubyBhcHBhcmlyZSBuZWwgTWVuw7kgY29udGVzdHVhbGUgaW4gYWx0byBhIGRlc3RyYSwgcmljaGlhbWF0byBkYWkgMyBwYWxsaW5pIHZlcnRpY2FsaSAqL1xyXG4gICAgQElucHV0KCkgQ29ybmVyTWVudU9wdGlvbnM6IENvcm5lck1lbnVPcHRpb25bXSA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIGRldidlc3NlcmUgcG9zc2liaWxlIGVmZmV0dHVhcmUgaWwgcmVzaXplIGRlbGxlIGNvbG9ubmUgKi9cclxuICAgIEBJbnB1dCgpIENvbHVtbnNSZXNpemFibGU6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBkZXYnZXNzZXJlIHBvc3NpYmlsZSBlZmZldHR1YXJlIGlsIHBpbm5pbmcgZGVsbGUgY29sb25uZSAqL1xyXG4gICAgQElucHV0KCkgQ29sdW1uc1Bpbm5hYmxlOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgZGV2J2Vzc2VyZSBkaXNwb25pYmlsZSBpbCBzaXN0ZW1hIGRpIGFnZ2lvcm5hbWVudG8gYXV0b21hdGljbyAqL1xyXG4gICAgQElucHV0KCkgQXV0b1VwZGF0ZTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogXHJcbiAgICAgKiBAZXhwZXJpbWVudGFsIEluZGljYSBzZSBkZXYnZXNzZXJlIGwnZXN0YWJsZSBhIGdlc3RpcmUgbGEgcmljZXJjYSwgYW5jaGUgbGEgcHJpbWEuIFxyXG4gICAgICogXHJcbiAgICAgKiAqKkFUVEVOWklPTkU6IFJJQ0hJRURFIE1PRElGSUNIRSBOT04gVFJJVklBTEkgQUxMQSBQQUdJTkEgREkgUklDRVJDQSBDSEUgVVRJTElaWkEgUVVFU1RPIFRJUE8gREkgRVMtVEFCTEUuIE5PTiBVVElMSVpaQVJFIFNFIE5PTiBTSSBTQSBDSU8nIENIRSBTSSBTVEEgRkFDRU5ETyoqXHJcbiAgICAgKiovXHJcbiAgICBASW5wdXQoKSBFc1RhYmxlSGFuZGxlZFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjaWRlIHNlIHV0aWxpenphcmUgbyBtZW5vIGxlIEN1c3RvbUNlbGxzLiBJbXBvc3RhbmRvbG8gYSAqKnRydWUqKiBsJ2VzLXRhYmxlIGRpdmVudGEgaW4gZ3JhZG8gZGkgZ2VzdGlyZSBuYXRpdmFtZW50ZTpcclxuICAgICAqXHJcbiAgICAgKiAxKSBPcmRpbmFtZW50byBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmVcclxuICAgICAqXHJcbiAgICAgKiAyKSBPcmRpbmFtZW50byBkZWkgZGF0aVxyXG4gICAgICpcclxuICAgICAqIDMpIE1vZGFsaXTDoCBHZXJhcmNoaWNhXHJcbiAgICAgKlxyXG4gICAgICogZWNjLi4uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIFVzZUN1c3RvbUNlbGxzOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBpbXBvc3RhcmUgbCdhbHRlenphIG1hc3NpbWEgZGVsbGEgdGFiZWxsYS4gU2UgbnVsbCBsYSBkaW1lbnNpb25lIHNpIGFkYXR0YSBhbCBudW1lcm8gZGkgZWxlbWVudGkgYXR0dWFsbWVudGUgaW4gdmlzdWFsaXp6YXppb25lICovXHJcbiAgICBASW5wdXQoKSBNYXhIZWlnaHQ6IG51bWJlciA9IG51bGw7XHJcbiAgICAvKiogQ2xhc3NpIGRhIGFwcGxpY2FyZSBhbCBjb250ZW5pdG9yZSBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBDb250YWluZXJDbGFzcyA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgbyBtZW5vIGwnZXhwb3J0IGluIGZvcm1hdG8gWExTWCAqL1xyXG4gICAgQElucHV0KCkgWExTWEV4cG9ydDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgbyBtZW5vIGwnZXhwb3J0IGluIGZvcm1hdG8gQ1NWICovXHJcbiAgICBASW5wdXQoKSBDU1ZFeHBvcnQgPSB0cnVlO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHZpc3VhbGl6emFyZSBvIG1lbm8gbCdvcHppb25lIGRpIHBhZ2luYXppb25lIFwiVHV0dGlcIiAqL1xyXG4gICAgQElucHV0KCkgQWxsU2VhcmNoID0gbnVsbDtcclxuICAgIC8qKiBEaW1pbnVpc2NlIGdsaSBzcGF6aSBmcmEgdW5hIGNlbGxhIGUgbCdhbHRyYSwgZSBpbnRlcm5hbWVudGUgaWwgcGFkZGluZyBkZWwgZm9udCBpbiBtb2RvIGRhIHByZXNlbnRhcmUgbW9sdGkgcGnDuSBkYXRpIGluIHVuJ3VuaWNhIHBhZ2luYSAqL1xyXG4gICAgQElucHV0KCkgSGlnaENlbGxEZW5zaXR5OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBBYmlsaXRhIG8gbWVubyBsYSBwb3NzaWJpbGl0w6AgZGkgc2VsZXppb25hcmUgb2dnZXR0aSAqL1xyXG4gICAgQElucHV0KCkgU2VsZWN0aW9uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBNb3N0cmEgbyBtZW5vIHVuIG1lc3NhZ2dpbyBkaSBMb2FkaW5nIGFsIHByaW1vIGNhcmljYW1lbnRvIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIFNob3dMb2FkaW5nT25Cb290c3RyYXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFNlIGltcG9zdGF0byBhICoqdHJ1ZSoqIGFnZ2l1bmdlIHVuYSBjb2xvbm5hIGNvbiBwdWxzYW50ZSBkaSBlbGltaW5hemlvbmUgcGVyIGVmZmV0dHVhcmUgbCdlbGltaW5hIGRlbGwnb2dnZXR0byByZWxhdGl2byAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25kaXppb25lIGNoZSBuYXNjb25kZSBsJ2ljb25hIGRpIGVsaW1pbmF6aW9uZSBpbnNlcml0YSBpbXBvc3RhbmRvICoqUmVtb3ZhbCoqIGEgdHJ1ZSBxdWFsb3JhIGxhIGNvbmRpemlvbmUgbm9uIHZlbmlzc2UgcmlzcGV0dGF0YVxyXG4gICAgICpcclxuICAgICAqIENvbWUgY29uZGl6aW9uZSBzaSBjb25zaWRlcmEgdW4gc2VtcGxpY2UgY2FtcG8gc3UgY3VpIGVmZmV0dHVhcmUgdW4gY29udHJvbGxvIGJvb2xlYW5vLCBjb21lIGFkIGVzZW1waW8gXCJjYW5yZW1vdmVcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsQ29uZGl0aW9uID0gJyc7XHJcbiAgICAvKiogSW5kaWNhIHNlIGFiaWxpdGFyZSBsYSBwb3NzaWJpbGl0w6AgZGkgZXNwb3J0YXJlIGxhIHZpc3RhIGRhdGkgYXR0dWFsZSAqL1xyXG4gICAgQElucHV0KCkgRXhwb3J0OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgcGVybWV0dGVyZSBsYSBzZWxlemlvbmUgbXVsdGlwbGEgV2luZG93cy1saWtlIGNsaWNjYW5kbyB1biBvZ2dldHRvIGUgZmFjZW5kbyBwb2kgU2hpZnQgKyBjbGljayBzdSB1biBvZ2dldHRvIHN1Y2Nlc3Npdm8gKi9cclxuICAgIEBJbnB1dCgpIFNoaWZ0Q2xpY2s6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBpbCB0ZXN0byBjaGUgdmEgYSBzb3N0aXR1aXJlIFwiT2dnZXR0aSBWaXN1YWxpenphdGlcIiBpbiBjYXNvIHNpIHN0aWEgZmFjZW5kbyBxdWFsY29zYSBkaSBjdXN0b20gKi9cclxuICAgIEBJbnB1dCgpIENvdW50TGFiZWw6IHN0cmluZyA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIG5hc2NvbmRlcmUgbyBtb3N0cmFyZSBpbCBjb21wb25lbnRlIGRpIHBhZ2luYXppb25lICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBvIG1vc3RyYXJlIGlsIGNvbnRlZ2dpbyBkZWdsaSBlbGVtZW50aSB0cm92YXRpICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nQ291bnQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIG8gbW9zdHJhcmUgaSBwdWxzYW50aSBkaSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgSGlkZVBhZ2luZ0J1dHRvbnM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFJpZmVyaW1lbnRvIGFsIENvbnRleHRNZW51IChuZ3gtY29udGV4dG1lbnUpIGFzc29jaWF0byBhbCBjbGljayBkZXN0cm8gZGkgdW5vIG8gcGnDuSBlbGVtZW50aSBzZWxlemlvbmF0aSBuZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBDb250ZXh0TWVudTogQ29udGV4dE1lbnVDb21wb25lbnQgPSBudWxsO1xyXG4gICAgLyoqIE5vbWUgZGVsbCdlc3BvcnRhemlvbmUgZ2VuZXJhdGEgZGEgcXVlc3RhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEV4cG9ydEZpbGVOYW1lID0gJ0V4cG9ydC5jc3YnO1xyXG4gICAgLyoqIENsYXNzZSAoSFRNTCkgZGkgZGVmYXVsdCBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBUYWJsZUNsYXNzID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIGRhIHV0aWxpenphcmUgaW4gZXNwb3J0YXppb25lLiBOZWwgZm9ybWF0byBcIlJlcG9ydFwiIGF2csOgIHVuIHVuaWNvIHBhcmFtZXRybyBcIkZvcm1hdG9cIiBlIG5lc3N1biB2YWxvcmUgZGkgcml0b3Juby5cclxuICAgICAqXHJcbiAgICAgKiBOZWwgZm9ybWF0byBcIlZpZXdcIiBoYSBjb21lIHBhcmFtZXRybyB1bmEgY2FsbGJhY2sgY29uIGkgZGF0aSBjb21wbGV0aSBkYSBlc3BvcnRhcmUgKGRhdG8gY2hlIGRpIGRlZmF1bHQgbGEgcmljZXJjYSDDqCBwYWdpbmF0YSlcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgRXhwb3J0RnVuY3Rpb246IGFueTtcclxuICAgIC8qKiBJbmRpY2EgbGEgcHJlc2VuemEgZGkgcmFnZ3J1cHBhbWVudGkgYSBsaXZlbGxvIGRpIGhlYWRlciAqL1xyXG4gICAgQElucHV0KCkgSGFzSGVhZGVyR3JvdXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBsYSBwcmVzZW56YSBkaSByYWdncnVwcGFtZW50aSBhIGxpdmVsbG8gZGVsIHJhZ2dydXBwYW1lbnRvIHByZWNlZGVudGVtZW50ZSBlc2lzdGVudGUsIGNoaWFyYW1lbnRlIMOoIGluc2Vuc2F0YSBzZW56YSAqKkhhc0hlYWRlckdyb3VwKiogKi9cclxuICAgIEBJbnB1dCgpIEhhc1NlY29uZGFyeUhlYWRlckdyb3VwOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBnbGkgSGVhZGVyIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEhlYWRlckhpZGRlbjogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIG5hc2NvbmRlcmUgaWwgQm9keSBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBCb2R5SGlkZGVuOiBib29sZWFuID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBzZSBsYSBzZWxlemlvbmUgw6ggdGVtcG9yYW5lYW1lbnRlIGRpc2FiaWxpdGF0YS4gUmlzcGV0dG8gYWxsJ0lucHV0ICoqU2VsZWN0aW9uKiogY2hlIHZpc2l2YW1lbnRlIGdlc3Rpc2NlIHNlIGNpIHNvbm8gbyBubyBnbGkgaW5wdXQgZGkgc2VsZXppb25lLFxyXG4gICAgICogcXVlc3RvIElucHV0IGdlc3Rpc2NlIHNlIHF1ZXN0aSBpbnB1dCBzb25vIGFiaWxpdGF0aSBvIG1lbm9cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgU2VsZWN0aW9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGZvcnphcmUgaWwgc2lzdGVtYSBkaSBzZWxlemlvbmUgYSBnZXN0aXJlIHVuIGVsZW1lbnRvIHBlciB2b2x0YS5cclxuICAgICAqIFNlbGV6aW9uYXJlIHVuJ2FsdHJhIHJpZ2EgY29uIHVuYSBnacOgIHNlbGV6aW9uYXRhIGFwcGxpY2hlcsOgIGxhIHNlbGV6aW9uZSBhbGxhIG51b3ZhIHJpZ2EsIHJpbXVvdmVuZG9sYSBkYWxsJ2F0dHVhbGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgU2luZ2xlU2VsZWN0aW9uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBDYWxsYmFjayBjaGUgZGF0byB1biBvZ2dldHRvIHJlc2l0dWlzY2UgbCdldmVudHVhbGUgY2xhc3NlIGRhIGFwcGxpY2FyZSBhbGxhIHJpZ2EgY29sbGVnYXRhIGFsbCdvZ2dldHRvICovXHJcbiAgICBASW5wdXQoKSBSb3dDbGFzc0Fzc2lnbmVyOiBhbnkgPSBudWxsO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIG9yZGluYXJlIGkgZGF0aSBpbiBtYW5pZXJhIGRpc2NlbmRlbnRlIG8gYXNjZW5kZW50ZSAqL1xyXG4gICAgQElucHV0KCkgT3JkZXJCeUNvbHVtbjogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgYXZlcmUgcGnDuSBkaXJldHRpdmUgZGkgb3JkaW5hbWVudG8gZGVpIGRhdGkgKi9cclxuICAgIEBJbnB1dCgpIE11bHRpcGxlT3JkZXJpbmdEaXJlY3RpdmVzID0gdHJ1ZTtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBuYXNjb25kZXJlIGxlIGNvbG9ubmUgaW4gYmFzZSBhbGxlIHNlbGV6aW9uaSBlZmZldHR1YXRlIGRhbCBNZW7DuSBjb250ZXN0dWFsZSBpbiBhbHRvIGEgZGVzdHJhICovXHJcbiAgICBASW5wdXQoKSBIaWRkZW5Db2x1bW5zOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSByaW9yZGluYXJlIGxlIGNvbG9ubmUgaW4gYmFzZSBhbGxlIGltcG9zdGF6aW9uaSBlZmZldHR1YXRlIGRhbCBNZW7DuSBjb250ZXN0dWFsZSBpbiBhbHRvIGEgZGVzdHJhICovXHJcbiAgICBASW5wdXQoKSBDb2x1bW5zT3JkZXJpbmc6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEV2ZW50dWFsZSBzdXBwb3J0byBhbGxlIHJpY2VyY2hlIGFwcGxpY2F0ZSBhbGxhIG1vZGFsaXTDoCBBcnJheSAqL1xyXG4gICAgQElucHV0KCkgU2VhcmNoVmlldyA9IG51bGwgYXMgQXBwU2VhcmNoPGFueT47XHJcbiAgICAvKiogQWJpbGl0YSBvIGRpc2FiaWxpdGEgaWwgc2lzdGVtYSBjaGUgcGVybWV0dGUgZGkgc2VsZXppb25hcmUgdHV0dGkgZ2xpIGVsZW1lbnRpIG5lbGxhIHZpc3RhICovXHJcbiAgICBASW5wdXQoKSBTZWxlY3RBbGw6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFNpbXVsYSBsYSBwYWdpbmF6aW9uZSBhbmNoZSBwZXIgbGUgdGFiZWxsZSBjaGUgZnVuemlvbmFubyBpbiBtb2RhbGl0w6AgQXJyYXkgKi9cclxuICAgIEBJbnB1dCgpIFVzZUFycmF5TW9kZVBhZ2luZyA9IHRydWU7XHJcbiAgICAvKiogRGVmaW5pemlvbmUgZGkgY29sb25uZSBkaW5hbWNoZSBwZXIgbGEgbW9kYWxpdMOgLCBhcHB1bnRvLCBkaW5hbWljYSAqL1xyXG4gICAgQElucHV0KCkgRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uOiBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb25bXSA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIG9wZXJhemlvbmkgZGluYW1pY2hlIGdlbmVyaWNoZSBjaGUgcG9zc29ubyBlc3NlcmUgZWZmZXR0dWF0ZSBwZXIgcmlnYS4gQXBwYWlvbm8gY29tZSBjb2xvbm5lIGV4dHJhIHN1bCBsYXRvIHNpbmlzdHJvIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIER5bmFtaWNPcGVyYXRpb25zOiBFc1RhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbltdID0gW107XHJcbiAgICAvKiogSW5kaWNhIHNlIHZpc3VhbGl6emFyZSBpIGRhdGkgaW4gbWFuaWVyYSBnZXJhcmNoaWNhICovXHJcbiAgICBASW5wdXQoKSBIaWVyYXJjaHk6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBjaGUgY29udGllbmUgbCdJRCBkZWwgcGFkcmUuIERhIHV0aWxpenphcmUgc2UgKipIaWVyYXJjaHkqKiDDqCBpbXBvc3RhdG8gKi9cclxuICAgIEBJbnB1dCgpIFBhcmVudEtleSA9ICcnO1xyXG4gICAgLyoqIE5vbWUgZGVsbGEgcHJvcHJpZXTDoCBjaGUgY29udGllbmUgbCdJRCBkZWxsJ29nZ2V0dG8gYXR0dWFsZS4gRGEgdXRpbGl6emFyZSBzZSAqKkhpZXJhcmNoeSoqIMOoIGltcG9zdGF0byAqL1xyXG4gICAgQElucHV0KCkgT3duS2V5ID0gJyc7XHJcbiAgICAvKiogSW5kaWNhIHNlIHBhcnRpcmUgY29uIHVuIGFsYmVybyBlc3BhbnNvLiBEYSB1dGlsaXp6YXJlIHNlICoqSGllcmFyY2h5Kiogw6ggaW1wb3N0YXRvICovXHJcbiAgICBASW5wdXQoKSBTdGFydHNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAvKiogSW5kaWNhIHNlIGVmZmV0dHVhcmUgaWwgc2FsdmF0YWdnaW8gZGVsbGUgcHJlZmVyZW56ZSBkaSByaWNlcmNhICovXHJcbiAgICBASW5wdXQoKSBTYXZlUHJlZmVyZW5jZXM6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgZG92ZSB2aXN1YWxpenphcmUgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lLCBzZSBzb3ByYSwgc290dG8gbyBpbiBlbnRyYW1iaSAqL1xyXG4gICAgQElucHV0KCkgUGFnaW5nU3R5bGU6ICdib3RoJyB8ICd0b3AnIHwgJ2JvdHRvbScgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBkb3ZlIHZpc3VhbGl6emFyZSBsZSBpbmZvcm1hemlvbmkgZGkgcGFnaW5hemlvbmUsIHNlIHNvcHJhLCBzb3R0byBvIGluIGVudHJhbWJpICovXHJcbiAgICBASW5wdXQoKSBSb3dHcm91cGluZ1BhZ2luZ1N0eWxlOiAnbGVmdCcgfCAncmlnaHQnID0gbnVsbDtcclxuICAgIC8qKiBRdWFsb3JhIHBlciBxdWFsc2lhc2kgbW90aXZvIG5vbiB2ZW5pc3NlIHVzYXRvICoqaXRlbXMqKiBkZWxsJ0FwcFNlYXJjaCBxdWVzdG8gSW5wdXQgaW5kaWNhIHF1YWwgw6ggaWwgbm9tZSBkZWxsYSBwcm9wcmlldMOgIGRhIHV0aWxpenphcmUgKi9cclxuICAgIEBJbnB1dCgpIEl0ZW1Tb3VyY2VQcm9wZXJ0eTogc3RyaW5nID0gXCJcIjtcclxuICAgIC8qKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBsYSBjYWNoZSBkaSBzZWxlemlvbmUgY2hlIHBlcm1ldHRlIGRpIG1hbnRlbmVyZSBnbGkgc3RhdGkgZGkgc2VsZXppb25lIGRlaSB2YXJpIG9nZ2V0dGkgbmF2aWdhbmRvIGRhIHVuYSBwYWdpbmEgYWxsJ2FsdHJhICovXHJcbiAgICBASW5wdXQoKSBVc2VTZWxlY3Rpb25DYWNoZSA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgZGVjaWRlcmUgc2UsIGluIG1vZGFsaXTDoCByYWdncnVwcGFtZW50bywgbW9zdHJhcmUgbyBtZW5vIGlsIHZhbG9yZSBkZWxsZSBjb2xvbm5lIGRpIGdydXBwbyBuZWdsaSBvZ2dldHRpIGZpbmFsaS4gRGkgZGVmYXVsdCBzb25vIG5hc2Nvc3RpICovXHJcbiAgICBASW5wdXQoKSBTaG93SXRlbUdyb3Vwc0NvbHVtbnMgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBjaGUgdHV0dGkgaSBjYW1waSBjaGUgZGVmaW5pc2Nvbm8gbGUgbW9kYWxpdMOgIGRpIG1vZGlmaWNhIGNhbXBvIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkgaW4gYmFzZSBhbGxlIGltcG9zdGF6aW9uaSAqL1xyXG4gICAgQElucHV0KCkgRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggcG9zc2liaWxlIGVmZmV0dHVhcmUgc2VsZXppb25pIGEgcmFuZ2UgcGVyIHBvaSBmYXJjaSBldmVudHVhbG1lbnRlIGNvcGlhIGluY29sbGEgKi9cclxuICAgIEBJbnB1dCgpIFJhbmdlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGlsIG51bWVybyBkaSBtaWxsaXNlY29uZGkgcGVyIGN1aSBkZWJvdW5jYXJlIGlsIHdyaXRlVmFsdWUgcGVyIGxhIG1vZGFsaXTDoCAqKkVzVGFibGVIYW5kbGVkU2VhcmNoKiogKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaFRocm90dGxlOiBudW1iZXIgPSA1MDtcclxuICAgIC8qKiBFdmVudG8gY2hlIHZpZW5lIHJpY2hpYW1hdG8gYWwgY2FtYmlvIGRpIG9yaWRuYW1lbnRvIGRpIHVuYSBjb2xvbm5hICovXHJcbiAgICBAT3V0cHV0KCkgb25PcmRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcHBPcmRlcmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFwcE9yZGVyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGNoZSB2aWVuZSByaWNoaWFtYXRvIHF1YW5kbyBsJ2VzLXRhYmxlIHJpdGllbmUgc2lhIG5lY2Vzc2FyaW8gcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhLlxyXG4gICAgICogSWwgYm9vbGVhbm8gZGVsbCdldmVudG8gaW5kaWNhIHNlIHZpZW5lIHN1Z2dlcml0byBkaSByZXNldHRhcmUgbGEgcGFnaW5hIG8gbWVuby5cclxuICAgICAqIFxyXG4gICAgICogU29sbyBpbiBjYXNvIHZlbmdhIHV0aWxpenphdGEgbGEgbW9kYWxpdMOgIGEgcmFnZ3J1cHBhbWVudGkgZGkgcmlnaGUgcHXDsiBzdWNjZWRlcmUgY2hlIGwnZXMtdGFibGUgcGFzc2kgdW4gaW50ZXJvIEFwcFNlYXJjaCBjb21lIHBhcmFtZXRybyBkaSByaWNlcmNhLFxyXG4gICAgICogaW4gcXVlbCBjYXNvIGwnYXBwbGljYXppb25lIHJpY2V2ZW50ZSBkb3Zyw6Agb25vcmFyZSBsYSByaWNoaWVzdGEgc3BlZGVuZG8gYWwgYmFja2FuZCBsJ29nZ2V0dG8gZGkgcmljZXJjYSBBUy1JU1xyXG4gICAgICogXHJcbiAgICAgKiBpbCB0aXBvIGRlbGwnRW1pdHRlciBpbnZlY2UgZGkgZXNzZXJlIFtib29sZWFuIHwgQXBwU2VhcmNoPGFueT5dIMOoIHN0YXRvIGltcG9zdGF0byBhIFwiYW55XCIgcGVyIGV2aXRhcmUgcHJvYmxlbWkgZGkgcmV0cm9jb21wYXRpYmlsaXTDoFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25TZWFyY2hSZXF1ZXN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgLyoqIEV2ZW50byBjaGUgcGFydGUgYWQgb2duaSBtb2RpZmljYSBkaSBcImNoZWNrYWdnaW9cIiBpbiBmb3JtYSBkaSBjb21vZG8gYXJyYXkuIEVzcG9uZSBsJ29nZ2V0dG8gY29uIGxvIHN0YXRvIGRpIGNoZWNrIGF0dHVhbGUgKi9cclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJdGVtc1NlbGVjdGlvbjxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SXRlbXNTZWxlY3Rpb248YW55Pj4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGwnZWxpbWluYXppb25lIGRpIHVuIG9nZ2V0dG8gKi9cclxuICAgIEBPdXRwdXQoKSBvblJlbW92YWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gYWxsJ2FubnVsbGFtZW50byBkaSB1bidlbGltaW5hemlvbmUgKi9cclxuICAgIEBPdXRwdXQoKSBvbkFib3J0UmVtb3ZhbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlaSBtb2RlbGxpIGJpbmRhdGkgKi9cclxuICAgIEBPdXRwdXQoKSBvbk1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXNUYWJsZU1vZGVsQ2hhbmdlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxFc1RhYmxlTW9kZWxDaGFuZ2VbXT4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqQ29ybmVyTWVudU9wdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uQ29ybmVyQWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nLCBlc3RhYmxlOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgZXN0YWJsZTogYW55IH0+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqRHluYW1pY09wZXJhdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uRHluYW1pY09wZXJhdGlvbjogRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgaXRlbTogYW55IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBzdHJpbmcsIGl0ZW06IGFueSB9PigpO1xyXG5cclxuICAgIC8qKiBEYXRpIGVzcG9ydGF0aSBkYSBuZ3gtY3N2ICovXHJcbiAgICBwdWJsaWMgZGF0YTogYW55W107XHJcbiAgICAvKiogSGVhZGVyIGRlaSBkYXRpIGVzcG9ydGF0aSBkYSBuZ3gtY3N2ICovXHJcbiAgICBwdWJsaWMgaGVhZGVyczogQ3N2SGVhZGVyc1tdO1xyXG4gICAgLyoqIEVsZW1lbnRvIEhUTUwgZGEgY2xpY2NhcmUgcGVyIGwnZXNwb3J0YXppb25lICovXHJcbiAgICBAVmlld0NoaWxkKCdleHBvcnREb3dubG9hZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBleHBvcnREb3dubG9hZGVyOiBFbGVtZW50UmVmO1xyXG4gICAgLyoqIFBsYWNlaG9sZGVyIGRpIG1lbsO5IGNvbnRlc3R1YWxlIHBlciBxdWFuZG8gbm9uIGNpIHNvbm8gb3B6aW9uaSBuZWwgcGxhY2Vob2xkZXIgXCJWZXJvXCIgICovXHJcbiAgICBAVmlld0NoaWxkKCdlbXB0eU1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgdGFibGVFbXB0eU1lbnU6IENvbnRleHRNZW51Q29tcG9uZW50O1xyXG5cclxuICAgIC8qKiBTdWJzY3JpcHRpb24gc3VsbCdhcGVydHVyYSBkZWwgY29udGV4dCBtZW51IGRhIHJpcHVsaXJlIGFsIGRlc3Ryb3kgZGVsbGEgY2xhc3NlICovXHJcbiAgICBwcml2YXRlIGN0eE1lbnVTdWJzY3JpcHRpb246IGFueTtcclxuXHJcbiAgICAvKiogUGFnaW5hIGluIHZpc3VhbGl6emF6aW9uZSAoZHVyYW50ZSBsYSBwYWdpbmF6aW9uZSBpbiBtb2RhbGl0w6AgQXJyYXkpICovXHJcbiAgICBwdWJsaWMgYXJyYXltb2RlUGFnZSA9IDE7XHJcbiAgICAvKiogTnVtZXJvIGRpIHBhZ2luZSAoZHVyYW50ZSBsYSBwYWdpbmF6aW9uZSBpbiBtb2RhbGl0w6AgQXJyYXkpICovXHJcbiAgICBwdWJsaWMgYXJyYXltb2RlUGFnZXMgPSAxO1xyXG4gICAgLyoqIE9nZ2V0dGkgcGVyIG9nbmkgcGFnaW5hIChkdXJhbnRlIGxhIHBhZ2luYXppb25lIGluIG1vZGFsaXTDoCBBcnJheSkgKi9cclxuICAgIEBJbnB1dCgpIEFycmF5bW9kZUl0ZW1zUGVyUGFnZSA9IG51bGw7XHJcbiAgICAvKiogT2dnZXR0byBkaSBzZWxlemlvbmUgcGVyIGxhIG1vZGFsaXTDoCBBcnJheSwgY2hlIGRldmUgY29tcG9ydGFyc2kgY29tZSBsYSBjb250cm9wYXJ0ZSBpbiBtb2RhbGl0w6AgVmlldyAqL1xyXG4gICAgcHVibGljIGFycmF5bW9kZVNlbGVjdGlvbjogSXRlbXNTZWxlY3Rpb248YW55PjtcclxuICAgIC8qKiBDb2xvbm5lIGRhIHZpc3VhbGl6emFyZSBpbiBtb2RhbGl0w6AgYXJyYXkgKi9cclxuICAgIHB1YmxpYyBhcnJheUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAvKiogT3JkaW5lIGRlbGxlIGNvbG9ubmUgZGEgdmlzdWFsaXp6YXJlIGluIG1vZGFsaXTDoCBhcnJheSAqL1xyXG4gICAgcHVibGljIGFycmF5Q29sdW1uT3JkZXJpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICAvKiogT3JkaW5hbWVudGkgQVNDLURFU0Mgc3VsbGUgY29sb25uZSBpbiBtb2RhbGl0w6AgYXJyYXkgKi9cclxuICAgIHB1YmxpYyBhcnJheU9yZGVyczogQXBwT3JkZXJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFyaWFiaWxlIGNoZSBzZXJ2ZSBhIGdlc3RpcmUgaWwgbW9tZW50byBpbiBjdWkgbCdlcy10YWJsZSBhZ2dpb3JuYSBsYSBwYWdpbmF6aW9uZSAocHVsc2FudGkgZWNjKS5cclxuICAgICAqIEVzc2VuZG8gb3BlcmF6aW9uaSBjb211bnF1ZSBjb3N0b3NlIGxlIGVmZmV0dHVvIHNvbG8gc3UgYmluZGluZyBlc3Rlcm5pLCBub24gc3UgcmV3cml0ZSBnZW5lcmF0aSBpbnRlcm5hbWVudGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbFdyaXRlQ2FsbCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgY2hlIGNvbnRlcnLDoCB0dXR0ZSBsZSByaWNlcmNoZSBlZmZldHR1YXRlIHN1IGdydXBwaSBkaXZlcnNpIGRhbCBwcmltbyBlIHN1IGVsZW1lbnRpIGNvbnRlbnV0aSBuZWkgZ3J1cHBpLlxyXG4gICAgICogSW4gY2FzbyBkaSBjYW1iaSBkaSBvcmRpbmFtZW50byBkZWxsZSBjb2xvbm5lIGRpdmVyc2UgZGFsbGEgcHJpbWEgdHV0dGUgbGUgY2hpYW1hdGUgZmF0dGUgZGFsIHNlY29uZG8gbGl2ZWxsbyBpbiBwb2kgZGV2b25vIGVzc2VyZSByaWVzZWd1aXRlIHNlY29uZG8gbGEgc2VndWVudGUgbG9naWNhOlxyXG4gICAgICogXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2FtYmlvIG9yZGluYW1lbnRvIHN1bCBwcmltbyBncnVwcG8qKjogcmVsb2FkIGNvbXBsZXRvLCBub24gbWkgb2NjdXBvIGRpIHJpcHVsaXJlIGdsaSBlbGVtZW50aSBiaW5kYXRpIGluIGFsY3VuIG1vZG9cclxuICAgICAqIFxyXG4gICAgICogKipDYW1iaW8gb3JkaW5hbWVudG8gc3VsbGEgY29sb25uYSByZWxhdGl2YSBhbGwnTi1lc2ltbyBncnVwcG8qKjogcmVsb2FkIGNvbXBsZXRvIGRlbCBjb250ZW51dG8gZGVpIGdydXBwaSBwcmVjZWRlbnRpLCByaXB1bGVuZG8gcHJlY2VkZW50ZW1lbnRlIFxyXG4gICAgICogdHV0dGkgZ2xpIGVsZW1lbnRpIGNvbiAqKl9ncm91cGxldmVsKiogPSBOXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2FtYmlvIG9yZGluYW1lbnRvIHN1IHVuYSBjb2xvbm5hIG5vbiByYWdncnVwcGF0YSoqOiByZWxvYWQgY29tcGxldG8gcGVyIHR1dHRpIGkgZ3J1cHBpIGZpbmFsaSBhcGVydGksIGRldm8gcHJlY2VkZW50ZW1lbnRlIHJpcHVsaXJlIHR1dHRpIGdsaSBlbGVtZW50aSBjb24gKipfaXRlbSoqID0gdHJ1ZVxyXG4gICAgICogXHJcbiAgICAgKiBBbHRyaSBldmVudGkgbm9uIGRvdnJlYmJlcm8gcmFwcHJlc2VudGFyZSBwcm9ibGVtaTpcclxuICAgICAqIC0gU2VsZXppb25lOiBub24gY2FtYmlhIG51bGxhXHJcbiAgICAgKiAtIFBhZ2luYXppb25lOiBjYW1iaWEgYSBsaXZlbGxvIHJvb3QgcXVpbmRpIHZpZW5lIHJpY2FyaWNhdG8gdHV0dG8gY29tdW5xdWUsIHN0ZXNzbyB2YWxlIHBlciBsZSBwYWdpbmF6aW9uaSBpbnRlcm5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGU6IHsgcGF0aDogc3RyaW5nLCByb3V0ZTogR3JvdXBSb3V0ZUZyYWdtZW50W10sIHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBncm91cF9jb2x1bW46IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogVmFyaWFiaWxlIGQnYXBwb2dnaW8gcGVyIGNhcGlyZSBzZSBjJ8OoIGJpc29nbm8gZGkgcmktZWZmZXR0dWFyZSB1bmEgcmljZXJjYSBvIG1lbm8gKi9cclxuICAgIHByaXZhdGUgUmVzZWFyY2hOZWVkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBDb2xvbm5lIHZpc2liaWxpIGRlbGxhIHZpc3RhIGF0dHVhbGUuIFZhbG9yaXp6YXRvIGRpIGRlZmF1bHQgYWwgbnVtZXJvIG1hc3NpbW8gZGkgY29sb25uZSBzdXBwb3J0YXRlIGRhbGxhIHRhYmVsbGEgcGVyIGxlIGNhc2lzdGljaGUgaW4gYXNzZW56YSBkaSBjdXN0b20gY2VsbHMgKi9cclxuICAgIHB1YmxpYyBDb2x1bW5zOiB7IFZpc2liaWxlOiBudW1iZXIsIFZpc2libGVVbnBpbm5lZDogbnVtYmVyLCBHbG9iYWw6IG51bWJlciB9ID0geyBWaXNpYmlsZTogMTAwLCBWaXNpYmxlVW5waW5uZWQ6IDEwMCwgR2xvYmFsOiAxMDAgfTtcclxuICAgIC8qKiBJbiBjYXNvIGRpIFJvdyBHcm91cGluZyBxdWkgdmllbmUgc2FsdmF0YSBsYSB2aXN0YSBwcmluY2lwYWxlIGRlaSBncnVwcGkgYmFzZSAqL1xyXG4gICAgcHVibGljIE1haW5Hcm91cFZpZXc6IEFwcFNlYXJjaDxhbnk+ID0gbnVsbDtcclxuICAgIC8qKiBDb250ZWdnaW8gYmFzZSBkZWdsaSBvZ2dldHRpLiBJbiBtb2RhbGl0w6Agbm9ybWFsZSB2aWVuZSByZXNldHRhdG8gYWQgb2duaSBudW92YSBWaWV3IGluc2VyaXRhLCBpbiBtb2RhbGl0w6AgUm93R3JvdXBpbmcgdmllbmUgcmVzZXR0YXRvIHNvbG8gYWQgdW5hIG51b3ZhIFZpZXcgZGkgbGl2ZWxsbyBcIjBcIiAqL1xyXG4gICAgcHVibGljIEJhc2VJdGVtc0NvdW50ID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgY2kgc29ubyBkZWxsZSBjb2xvbm5lIHBpbm5hdGUgZSB2aXNpYmlsaS4gU2VydmUgcGVyIHBvdGVyIHNldHRhcmUgdHV0dGUgbGUgY29sb25uZSBwcmltYSBjaGUgYXJyaXZpbm8gZGF0aSBhIHBpbm5lZCovXHJcbiAgICBwdWJsaWMgSGFzUGlubmVkQ29sdW1uczogYm9vbGVhblxyXG4gICAgLyoqIExhcmdoZXp6YSBjYWxjb2xhdGEgZGVsIGNvbnRhaW5lciBkZWxsZSBjb2xvbm5lIHBpbm5hdGUgKi9cclxuICAgIHB1YmxpYyBQaW5uZWRDb250YWluZXJXaWR0aDogbnVtYmVyO1xyXG4gICAgLyoqIEluZGljYSBzZSBub25vc3RhbnRlIHNpYW1vIGluIG1vZGFsaXTDoCBhcnJheSBzb25vIHN0YXRpIGluZGl2aWR1YXRpIGRlaSBncnVwcGkuIEluIHRhbCBjYXNvIGVzLXRhYmxlIHNpIGNvbXBvcnRhIGRhIHBzZXVkbyBiYWNrZW5kIGVkIGVmZmV0dHVhIGxlIGFnZ3JlZ2F6aW9uaSBlIHJhZ2dydXBwYW1lbnRpIGNvbXBsZXRhbWVudGUgbGF0byBjbGllbnQgKi9cclxuICAgIHB1YmxpYyBBcnJheUdyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGNoZSBsJ2VzLXRhYmxlIMOoIGJhc2F0YSBzdWxsZSBkaXJldHRpdmUgKG51b3ZhIG1vZGFsaXTDoCkgKi9cclxuICAgIHB1YmxpYyBEaXJlY3RpdmVzQmFzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBJbmRpY2EgbG8gc3RhdG8gZGkgc2VsZXppb25lIHBlciBzaW5nb2xhIGNlbGxhICovXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uU3RhdHVzOiB7IFtpbmRleDogbnVtYmVyXTogeyBbaW5kZXg6IG51bWJlcl06IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgfSB9ID0ge307XHJcbiAgICAvKiogQ2hpYW1hdGEgcmVhbGUgYWwgd3JpdGVWYWx1ZSBkb3BvIGlsIHBhc3NhZ2dpbyBkaSAqKlNlYXJjaFRocm90dGxlKiogbWlsbGlzZWNvbmRpLiBTb2xvIG1vZGFsaXTDoCBFc1RhYmxlSGFuZGxlZFNlYXJjaCAqL1xyXG4gICAgcHJpdmF0ZSBjYWxsVGltZW91dCA6IGFueSA9IG51bGw7XHJcblxyXG4gICAgLyoqIE9wemlvbmkgZGkgcGFnaW5hemlvbmUgKi9cclxuICAgIHB1YmxpYyBQYWdlck9wdGlvbnM6IHsgUGFnZXJDb3VudDogbnVtYmVyLCBTaG93Q291bnQ6IGJvb2xlYW4sIFNob3dQYWdpbmc6IGJvb2xlYW4sIFVzZXNWaWV3OiBib29sZWFuLCBTaG93QnV0dG9uczogYm9vbGVhbiwgU2hvd1BhZ2luZ09wdGlvbnM6IGJvb2xlYW4sIFZpZXc6IGFueSwgUmVhZHk6IGJvb2xlYW4sIFNlYXJjaGVzOiAnaXRlbXMnIHwgJ2dyb3VwcycgfSA9XHJcbiAgICAgICAgeyBQYWdlckNvdW50OiBudWxsLCBTaG93Q291bnQ6IHRydWUsIFNob3dQYWdpbmc6IHRydWUsIFNob3dCdXR0b25zOiB0cnVlLCBTaG93UGFnaW5nT3B0aW9uczogdHJ1ZSwgVXNlc1ZpZXc6IHRydWUsIFZpZXc6IG51bGwsIFJlYWR5OiBmYWxzZSwgU2VhcmNoZXM6ICdpdGVtcycgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIGNsaWNrIGRlc3RybyBzdSB1bmEgcmlnYSBjb24gc2VsZXppb25lIGF0dGl2YTogVGlybyBmdW9yaSBpbCBjb250ZXh0IG1lbnUgZSBzZWxlemlvbmUgbCdlbGVtZW50byBjb3JyZW50ZVxyXG4gICAgICAgIHRoaXMuY3R4TWVudVN1YnNjcmlwdGlvbiA9ICh0aGlzLkNvbnRleHRNZW51IHx8IHRoaXMudGFibGVFbXB0eU1lbnUpLm9wZW4uc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAvLyBHcnVwcGkgdmEgYmVuZSwgb2dnZXR0aSBwdXJlLCBtYSBzZXBhcmF0b3JpIGZyYSBncnVwcGkgcHJvcHJpbyBuby4uLlxyXG4gICAgICAgICAgICBpZiAodC5pdGVtLl9zZXApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaG91bGRFbWl0ID0gIXQuaXRlbS5fc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgICAgICB0Lml0ZW0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1cygpO1xyXG4gICAgICAgICAgICB2YXIgaXRlbVNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uX0guaGFuZGxlSXRlbXNTZWxlY3Rpb24oW3QuaXRlbV0pO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG91bGRFbWl0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChpdGVtU2VsZWN0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICAvLyBTZSB1dGlsaXp6byBsYSBuZXcgc3BpY3kgbW9kZSBkZWR1Y28gdHV0dGkgaSBwYXJhbWV0cmkgZGkgbGF2b3JvIHBvc3NpYmlsaSBhbCBjYXJpY2FtZW50byBkZWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gVmVuZ29ubyBzb3ZyYXNjcml0dGUgc29sbyBsZSBwcm9wcmlldMOgIG5vbiBpbXBvc3RhdGUgZGFsbCd1dGVudGVcclxuICAgICAgICBsZXQgdGRzRCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUubGVuZ3RoID09IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGRzRGlyZWN0aXZlPy5sZW5ndGggPiAwID8gdGhpcy5Fc1RhYmxlVGVtcGxhdGU/LlRlbXBsYXRlPy5Fc1Rkc0RpcmVjdGl2ZSA6IHRoaXMuRXNUZHNEaXJlY3RpdmUgOiB0aGlzLkVzVGRzRGlyZWN0aXZlO1xyXG4gICAgICAgIGxldCB0aHNEID0gdGhpcy5Fc1Roc0RpcmVjdGl2ZS5sZW5ndGggPT0gMCA/IHRoaXMuRXNUYWJsZVRlbXBsYXRlPy5UZW1wbGF0ZT8uRXNUaHNEaXJlY3RpdmU/Lmxlbmd0aCA+IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGhzRGlyZWN0aXZlIDogdGhpcy5Fc1Roc0RpcmVjdGl2ZSA6IHRoaXMuRXNUaHNEaXJlY3RpdmU7XHJcbiAgICAgICAgbGV0IHVzZXNUaHNBbmRUZHNEaXJlY3RpdmVzID0gdGRzRCAmJiB0ZHNELmxlbmd0aCA+IDAgJiYgdGhzRCAmJiB0aHNELmxlbmd0aCA+IDA7XHJcbiAgICAgICAgbGV0IGhhc05vQ29udGVudFByb2plY3Rpb24gPSAhdGhpcy5ib2R5UmVmICYmICF0aGlzLmhlYWRlclJlZiAmJiAhdGhpcy5oZWFkZXJHcm91cFJlZiAmJiAhdGhpcy5zZWNvbmRhcnlIZWFkZXJHcm91cFJlZjtcclxuXHJcbiAgICAgICAgaWYgKHVzZXNUaHNBbmRUZHNEaXJlY3RpdmVzIHx8IGhhc05vQ29udGVudFByb2plY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuVXNlQ3VzdG9tQ2VsbHMgPT0gbnVsbCkgdGhpcy5Vc2VDdXN0b21DZWxscyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkhpZGRlbkNvbHVtbnMgPT0gbnVsbCAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB0aGlzLkhpZGRlbkNvbHVtbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Db2x1bW5zT3JkZXJpbmcgPT0gbnVsbCAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB0aGlzLkNvbHVtbnNPcmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLk9yZGVyQnlDb2x1bW4gPT0gbnVsbCAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB0aGlzLk9yZGVyQnlDb2x1bW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TZWxlY3RBbGwgPT0gbnVsbCAmJiB0aGlzLlNlbGVjdGlvbikgdGhpcy5TZWxlY3RBbGwgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TaGlmdENsaWNrID09IG51bGwgJiYgdGhpcy5TZWxlY3Rpb24pIHRoaXMuU2hpZnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuRGlyZWN0aXZlc0Jhc2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vUGVyIHBvdGVyIGNhbWJpYXJlIGlsIGxheW91dCBpbiBiYXNlIGFsIGxpdmVsbG8gZ2VyYXJjaGljbyBpbCBjb21wb25lbnRlIGRldmEgYXZlcmUgaWwgcGllbm8gY29udHJvbGxvIGRpIG9nbmkgY2VsbGEsXHJcbiAgICAgICAgLy9jaGUgY29uIHNvbG8gbGEgcHJvaWV6aW9uZSAoc2VuemEgY2VsbGUgY3Vzb3RtKSBub24gw6ggZGlzcG9uaWJpbGVcclxuICAgICAgICBpZiAodGhpcy5IaWVyYXJjaHkgJiYgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpXHJcbiAgICAgICAgICAgIHRocm93IFwiRXMtdGFibGUgZXJyb3I6IFBlciBwb3RlciB1dGlsaXp6YXJlIGwnZXMtdGFibGUgY29uIFtIaWVyYXJjaHldPVxcXCJ0cnVlXFxcIiDDqCByaWNoaWVzdG8gYW5jaGUgW1VzZUN1c3RvbUNlbGxzXT1cXFwidHJ1ZVxcXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvcHlTdWJzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY29weVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wYXN0ZVN1YnNjcmlwdGlvbilcclxuICAgICAgICAgICAgdGhpcy5wYXN0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdHhNZW51U3Vic2NyaXB0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLmN0eE1lbnVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBsZXQgbmV3U2VhcmNoVmlldyA9IGNoYW5nZXNbJ1NlYXJjaFZpZXcnXTtcclxuICAgICAgICBpZiAobmV3U2VhcmNoVmlldyAmJiB0aGlzLlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlQdWxzYW50aSA9IHRoaXMudXRpbGl0aWVzX0guZ2V0UGFnZXNBcnJheSg2LCB0aGlzLlNlYXJjaFZpZXcucGFnZSwgdGhpcy5TZWFyY2hWaWV3LnBhZ2VzIHx8IDEsIHRoaXMuU2VhcmNoVmlldy5vYmplY3Rjb3VudCwgdGhpcy5TZWFyY2hWaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm4pOiB2b2lkIHsgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjsgfVxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbik6IHZvaWQgeyB9XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIGNoYW5nZWQoY2xlYXJJdGVtczogYm9vbGVhbiA9IGZhbHNlKSB7IFxyXG4gICAgICAgIGlmKGNsZWFySXRlbXMgJiYgdGhpcy52aWV3TW9kZSlcclxuICAgICAgICAgICAgKDxBcHBTZWFyY2g8YW55Pj50aGlzLlZpZXcpLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuVmlldyk7IFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZShvYmo6IGFueSwgdGhyb3R0bGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5WaWV3ID0gb2JqID8gb2JqIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuRXNUYWJsZUhhbmRsZWRTZWFyY2ggJiYgdGhyb3R0bGUpIHtcclxuICAgICAgICAgICAgaWYodGhpcy5jYWxsVGltZW91dClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNhbGxUaW1lb3V0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy53cml0ZVZhbHVlKG9iaiwgZmFsc2UpOyB9LCB0aGlzLlNlYXJjaFRocm90dGxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICAvLyBNaSDDqCBhcnJpdmF0YSBsJ0FwcFNlYXJjaCBxdWluZGkgZGkgc2ljdXJvIG5vbiBobyB1bmEgcmljZXJjYSBpbiBwcm9ncmVzc1xyXG4gICAgICAgIHRoaXMucmVzZWFyY2hJblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5WaWV3ICYmICF0aGlzLlNlYXJjaFZpZXcpIHtcclxuICAgICAgICAgICAgLy8gU3UgdmlldyBudWxsYSBldml0byBkaSBmYXJlIHByZXNzb2Now6kgcXVhbHNpYXNpIGNvc2EuIFNlIGFycml2YSB1biBudWxsIGRldm8gYW5jaGUgYXNzaWN1cmFybWkgZGkgbm9uIG1vc3RyYXJlIG51bGxhXHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRTb3VyY2UgPSB0aGlzLlRNUEJvdW5kU291cmNlIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUGVyIGVzc2VyZSBzaWN1cm8gY2hlIGRvcG8gdW4gYmluZCBkaSBvZ2dldHRpIGxhIGVzLXRhYmxlIGFnZ2lvcm5pIGxhIGdyYWZpY2FcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlIHBlciBzYmFnbGlvIGwnb2dnZXR0byBjaGUgbWkgYXJyaXZhIG5vbiDDqCB0aXBpenphdG8gKGluc3RhbmNlb2YgQXBwU2VhcmNoIHJlc3RpdHVpc2NlIGZhbHNlIGFuY2hlIHNlIMOoIGRlbCB0aXBvIGdpdXN0bylcclxuICAgICAgICAvLyBsbyBjb3JyZWdnby0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgaWYgKHRoaXMuVmlldyAmJiB0eXBlb2YgKHRoaXMuVmlldyBhcyBhbnkpLml0ZW1zcGVycGFnZW92ZXJyaWRlICE9ICd1bmRlZmluZWQnICYmICEodGhpcy5WaWV3IGluc3RhbmNlb2YgQXBwU2VhcmNoKSlcclxuICAgICAgICAgICAgKHRoaXMuVmlldyBhcyBhbnkpLl9fcHJvdG9fXyA9IG5ldyBBcHBTZWFyY2goKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLlNlYXJjaFZpZXcgJiYgdHlwZW9mICh0aGlzLlNlYXJjaFZpZXcgYXMgYW55KS5pdGVtc3BlcnBhZ2VvdmVycmlkZSAhPSAndW5kZWZpbmVkJyAmJiAhKHRoaXMuU2VhcmNoVmlldyBpbnN0YW5jZW9mIEFwcFNlYXJjaCkpXHJcbiAgICAgICAgICAgICh0aGlzLlNlYXJjaFZpZXcgYXMgYW55KS5fX3Byb3RvX18gPSBuZXcgQXBwU2VhcmNoKCk7XHJcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgICAgICBpZiAodGhpcy5WaWV3ICYmIHRoaXMuVmlldyBpbnN0YW5jZW9mIEFwcFNlYXJjaCkge1xyXG4gICAgICAgICAgICAvLyBTZSBjYW1iaWEgbCdvZ2dldHRvIGludGVybyBzaWduaWZpY2EgY2hlIGhvIHJpbWFuZGF0byBsYSByaWNlcmNhXHJcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgndmlldycpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGZpcnN0SXRlbUdyb3VwT3JOb0dyb3VwaW5nID0gKHRoaXMuVmlldy5yZXF1ZXN0ZWRncm91cHM/Lmxlbmd0aCB8fCAwKSA9PSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgdmVuZ28gZGEgdW5hIHJpY2VyY2EgaW50ZXJuYSBtYW50ZW5nbyBsbyBzdGF0byBkaSBzZWxlemlvbmUgcHJlY2VkZW50ZSAocXVpbmRpIHN1IGNhbWJpbyBwYWdpbmEsIGNhbWJpbyBpcHAsIGVjYy4uLilcclxuICAgICAgICAgICAgLy8gc2UgaW52ZWNlIGwndXRlbnRlIGhhIGZhdHRvIHVuYSByaWNlcmNhIGx1aSAocXVpbmRpIGNhbWJpYW5kbyBmaWx0cmkpLCBzZWNjbyBsZSBpbmZvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuVmlldy5zZWxlY3Rpb24gfHwgKCF0aGlzLlZpZXcuaW50ZXJuYWxzZWFyY2hyZXF1ZXN0ICYmIGZpcnN0SXRlbUdyb3VwT3JOb0dyb3VwaW5nKSB8fCAhdGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5WaWV3LnNlbGVjdGlvbiA9IG5ldyBJdGVtc1NlbGVjdGlvbihbXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHRoaXMuVmlldy5zZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLlZpZXcuaW50ZXJuYWxzZWFyY2hyZXF1ZXN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvLyBSZWN1cGVybyBQcmVmZXJlbmNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNhdmVQcmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbC5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb24gcG9zc28gdXRpbGl6emFyZSBsZSBwcmVmZXJlbmNlIHNlbnphIGF2ZXJlIHVuICduYW1lJyBwZXIgcXVlc3RhIHRhYmVsbGFcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5wcmVmU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBjaGUgaWwgcGFjY2hldHRvIEBlc2ZhZW56YS9wcmVmZXJlbmNlcyBzaWEgaW5zdGFsbGF0b1wiKTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmVmcyA9IGF3YWl0IHRoaXMucHJlZlNlcnZpY2UuZ2V0SXRlbTx7IGNvbHVtbnM6IHN0cmluZ1tdLCBjb2x1bW5fb3JkZXJpbmc6IHN0cmluZ1tdLCBvcmRlcnM6IEFwcE9yZGVyaW5nW10gfT4oPHN0cmluZz50aGlzLm5nQ29udHJvbC5uYW1lKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNpIGxhIGdlbnRlIHNpIG1ldHRhIGEgc3BhbW1hcmUgcmVmcmVzaCBjb24gbmdpZiBzdHJhbmkgc3VsbCdlc3RhYmxlIGNyZWFuZG9sYSBlIGRpc3RydWdnZW5kb2xhIE4gdm9sdGUgYWwgc2Vjb25kbyBuZWwgdGVtcG8gY2hlIGNpIG1ldHRlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYSB0aXJhcmUgc3UgbGUgcHJlZmVyZW5jZSBkYSBxdWkgc29wcmEgbGEgVmlldyBwb3RyZWJiZSBlc3NlcmUgY2FtYmlhdGFcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5WaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xzID0gcHJlZnM/LmNvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkUHJlZnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVwb3NpdG9yeTogc3RyaW5nW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2U6IHN0cmluZ1tdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSA9IHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucy5tYXAodCA9PiB0LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gY29scztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMuVmlldy5jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgcmVwb3J0IGRldm8gY29udHJvbGxhcmUgY2hlIHR1dHRlIGxlIGNvbG9ubmUgc2FsdmF0ZSBmYWNjaWFubyBwYXJ0ZSBkZWxsYSB2aXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agbm9ybWFsZSBpbnZlY2Ugc2UgbGUgcHJlZmVyZW56ZSBmYW5ubyByaWZlcmltZW50byBhIGRlbGxlIGNvbG9ubmUgY2hlIGlvIG5vbiBobyBuZWxsYSBWaWV3IGF0dHVhbGUgc2lnbmlmaWNhIGNoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG8gZmFjZW5kbyByaWZlcmltZW50byBhIHVuYSB2ZXJzaW9uZSB2ZWNjaGlhIGRlbGwnZXMtdGFibGUsIHF1aW5kaSBub24gZm9jY2lvIG9wZXJhemlvbmlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBvc2l0b3J5LmluZGV4T2Yoc291cmNlW2ldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQcmVmcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcuY29sdW1ucyA9IHByZWZzPy5jb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3LmNvbHVtbl9vcmRlcmluZyA9IHByZWZzPy5jb2x1bW5fb3JkZXJpbmcgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcub3JkZXJzID0gcHJlZnM/Lm9yZGVycyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTGEgcGFnaW5hemlvbmUgZGV2byBmYXJsYSBzb2xhbWVudGUgcXVhbmRvIHJpY2hpZWRvIG8gdW4gZ3J1cHBvIHByaW5jaXBhbGUgKHNlIHNvbm8gaW4gcm93IGdyb3VwaW5nKSBvIHNlIG5vbiByaWNoaWVkbyBncnVwcGkgKGluIHR1dHRpIGxnaSBhbHRyaSBjYXNpKVxyXG4gICAgICAgICAgICBpZiAoZmlyc3RJdGVtR3JvdXBPck5vR3JvdXBpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgdGhpcy5WaWV3LnBhZ2UsIHRoaXMuVmlldy5wYWdlcyB8fCAxLCB0aGlzLlZpZXcuaXRlbXMubGVuZ3RoLCB0aGlzLlZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlZpZXcgJiYgKHRoaXMuVmlldy5sZW5ndGggIT0gbnVsbCAmJiB0aGlzLlZpZXcubGVuZ3RoICE9IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdhcnJheScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLlVzZVNlbGVjdGlvbkNhY2hlIHx8ICF0aGlzLmFycmF5bW9kZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcnJheW1vZGVTZWxlY3Rpb24gPSBuZXcgSXRlbXNTZWxlY3Rpb24oW10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh0aGlzLmFycmF5bW9kZVNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFJlY3VwZXJvIFByZWZlcmVuY2VcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2F2ZVByZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgYXZlcmUgdW4gJ25hbWUnIHBlciBxdWVzdGEgdGFiZWxsYVwiKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnByZWZTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb24gcG9zc28gdXRpbGl6emFyZSBsZSBwcmVmZXJlbmNlIHNlbnphIGNoZSBpbCBwYWNjaGV0dG8gQGVzZmFlbnphL3ByZWZlcmVuY2VzIHNpYSBpbnN0YWxsYXRvXCIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZzID0gYXdhaXQgdGhpcy5wcmVmU2VydmljZS5nZXRJdGVtPHsgY29sdW1uczogc3RyaW5nW10sIGNvbHVtbl9vcmRlcmluZzogc3RyaW5nW10sIG9yZGVyczogQXBwT3JkZXJpbmdbXSB9Pig8c3RyaW5nPnRoaXMubmdDb250cm9sLm5hbWUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xzID0gcHJlZnM/LmNvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVwZGF0ZWRQcmVmcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcG9zaXRvcnk6IHN0cmluZ1tdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2U6IHN0cmluZ1tdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5WaWV3LnJlcG9ydF9jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPSB0aGlzLlZpZXcucmVwb3J0X2NvbHVtbnMubWFwKHQgPT4gdC5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gY29scztcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gdGhpcy5WaWV3LmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgcmVwb3J0IGRldm8gY29udHJvbGxhcmUgY2hlIHR1dHRlIGxlIGNvbG9ubmUgc2FsdmF0ZSBmYWNjaWFubyBwYXJ0ZSBkZWxsYSB2aXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCBub3JtYWxlIGludmVjZSBzZSBsZSBwcmVmZXJlbnplIGZhbm5vIHJpZmVyaW1lbnRvIGEgZGVsbGUgY29sb25uZSBjaGUgaW8gbm9uIGhvIG5lbGxhIFZpZXcgYXR0dWFsZSBzaWduaWZpY2EgY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvIGZhY2VuZG8gcmlmZXJpbWVudG8gYSB1bmEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ2VzLXRhYmxlLCBxdWluZGkgbm9uIGZvY2NpbyBvcGVyYXppb25pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9zaXRvcnkuaW5kZXhPZihzb3VyY2VbaV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUHJlZnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5zID0gcHJlZnM/LmNvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5fb3JkZXJpbmcgPSBwcmVmcz8uY29sdW1uX29yZGVyaW5nIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcub3JkZXJzID0gcHJlZnM/Lm9yZGVycyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgdGhpcy5TZWFyY2hWaWV3LnBhZ2UsIHRoaXMuU2VhcmNoVmlldy5wYWdlcyB8fCAxLCB0aGlzLlNlYXJjaFZpZXcuaXRlbXMubGVuZ3RoLCB0aGlzLlNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZUNvbnRleHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3N0Qm91bmRTb3VyY2VDYWxjdWxhdGlvbigpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5WaWV3ICYmICF0aGlzLlZpZXcuc2VsZnNlYXJjaCAmJiB0aGlzLkVzVGFibGVIYW5kbGVkU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVmlldy5zZWxmc2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3LnNlbGZzZWFyY2ggJiYgdGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHRyYWNrYnkgcGVyIGlsIGJvZHkgY2hlIGRvdnJlYmJlIGV2aXRhcmUgaWwgOTAlIGRlbGxlIGNoYW5nZSBkZXRlY3Rpb24gKi9cclxuICAgIHB1YmxpYyBib2R5VHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0uX2hhc2g7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWNjZXNzaXZhbWVudGUgYWwgYmluZCBkZWwgbnVvdm8gaW5wdXQgcXVlc3RhIGZ1bnppb25lIHNpIG9jY3VwYSBkaSBmaW5hbGl6emFyZSB0dXR0aSBpIHBhcmFtZXRyaSBkaSBmdW56aW9uYW1lbnRvIGRlbGwnZXMtdGFibGUgXHJcbiAgICAgKiBpbiBiYXNlIGEgSW5wdXQgLSBNb2RlbGxvLCBlIHF1YWxzaWFzaSBhbHRyYSBjb3NhIHBvc3NhIHNlcnZpcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZUNvbnRleHQoKSB7XHJcbiAgICAgICAgbGV0IHZpZXdDYXN0ZWQgPSB0aGlzLlZpZXcgYXMgQXBwU2VhcmNoPGFueT47XHJcblxyXG4gICAgICAgIGxldCBoYXNSb3dHcm91cHMgPSB2aWV3Q2FzdGVkICYmICh2aWV3Q2FzdGVkLmdyb3VwaW5ncyAmJiB2aWV3Q2FzdGVkLmdyb3VwaW5ncy5maWx0ZXIodCA9PiAhdC5hZ2dyZWdhdGlvbikubGVuZ3RoID4gMCkgfHwgKHRoaXMuYXJyYXlNb2RlICYmIHRoaXMuRXNUaHNEaXJlY3RpdmUuc29tZSh0ID0+IHQudGhHcm91cCkpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyBkZWkgZ3J1cHBpIGluIG1vZGFsaXTDoCBhcnJheSBkZXZvIHNpc3RlbWFyZSB1biBwbycgZGkgdmFyaWFiaWxpIGNoZSBkaXZlbnRhbm8gaW5zZW5zYXRlXHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlICYmIGhhc1Jvd0dyb3VwcylcclxuICAgICAgICAgICAgdGhpcy5Vc2VBcnJheU1vZGVQYWdpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gUmllbXBpbWVudG8gZGVsbGEgVE1QQm91bmRTb3VyY2UgY29uIGdsaSBvZ2dldHRpIGNoZSB2ZXJyYW5ubyBwb2kgbW9zdHJhdGkgYWQgaW50ZXJmYWNjaWFcclxuICAgICAgICB0aGlzLlRNUEJvdW5kU291cmNlID0gdGhpcy5pdGVtc19ILmdldEl0ZW1zQnlNb2RlKGZhbHNlLCAhdGhpcy5pbnRlcm5hbFdyaXRlQ2FsbCk7XHJcblxyXG4gICAgICAgIC8vIFNlIGhvIHVuYSBnZXJhcmNoaWEsIGFzc2Vnbm8gaSBsaXZlbGxpIGdlcmFyY2hpY2kgYWxsYSBUTVBCb3VuZFNvdXJjZVxyXG4gICAgICAgIGlmICh0aGlzLkhpZXJhcmNoeSAmJiAhaGFzUm93R3JvdXBzKVxyXG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoeU1vZGVfSC5hc3NpZ25IaWVyYXJjaHlMZXZlbHModGhpcy5UTVBCb3VuZFNvdXJjZSk7XHJcblxyXG4gICAgICAgIC8vIEwnaGFzaGluZyBkZWdsaSBvZ2dldHRpIGxvIGZhY2NpbyBhIHByZXNjaW5kZXJlXHJcbiAgICAgICAgdGhpcy51dGlsaXRpZXNfSC5jYWxjdWxhdGVIYXNoKHRoaXMuVE1QQm91bmRTb3VyY2UpO1xyXG5cclxuICAgICAgICAvLyBBc3NlZ25vIGEgdW5hIHZhcmlhYmlsZSBtaWEgbCdldmVudHVhbGUgb3ZlcnJpZGUgcGVyIGxhIGNsYXNzZSBkZWxsYSByaWdhXHJcbiAgICAgICAgLy8gU2UgcG9pIHNvbm8gaW4gbW9kYWxpdMOgIGdlcmFyY2hpY2EgaW5pZXR0byBhbmNoZSBsYSBjbGFzc2UgcGVyIGxhIGNvbmZpZ3VyYXppb25lIGRlbCBsaXZlbGxvIGRlbGxhIHJpZ2FcclxuICAgICAgICBpZiAoKHRoaXMuVE1QQm91bmRTb3VyY2UgJiYgdGhpcy5Sb3dDbGFzc0Fzc2lnbmVyKSB8fCB0aGlzLkhpZXJhcmNoeSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuVE1QQm91bmRTb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5UTVBCb3VuZFNvdXJjZVtpXTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX3Jvd0NsYXNzID0gdGhpcy5Sb3dDbGFzc0Fzc2lnbmVyID8gdGhpcy5Sb3dDbGFzc0Fzc2lnbmVyKGl0ZW0pIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX3Jvd0NsYXNzICs9IHRoaXMuSGllcmFyY2h5ID8gXCIgZXN0LXJvdy1sdmwtXCIgKyBpdGVtLl9sZXZlbCA6IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdlbmVyYSBsZSBpbmZvcm16aW9uaSBkaSBwYWdpbmF6aW9uZSBwZXIgbGEgdmlzdGEgZ2xvYmFsZSBkZWxsJ2VzLXRhYmxlICovXHJcbiAgICBwcml2YXRlIHNldHVwUGFnaW5nSW5mb3JtYXRpb25zKCkge1xyXG5cclxuICAgICAgICAvLyBEZWZhdWx0IGNoZSB2YWxnb25vIGRpIGJhc2UsIHBvaSBldmVudHVhbG1lbnRlIG1vZGRhdGkgZGFsbGUgZnVuemlvbmkgc290dG9cclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgPSAhdGhpcy5IaWRlUGFnaW5nQ291bnQ7XHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSAhdGhpcy5IaWRlUGFnaW5nQnV0dG9ucztcclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nID0gIXRoaXMuSGlkZVBhZ2luZ1xyXG4gICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlVzZXNWaWV3ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlICYmIHRoaXMuVXNlQXJyYXlNb2RlUGFnaW5nICYmICF0aGlzLlNlYXJjaFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9ICg8YW55W10+dGhpcy5WaWV3KS5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyAmJiB0aGlzLlZpZXcubGVuZ3RoID4gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlZpZXcgPSB0aGlzLlZpZXc7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlVzZXNWaWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dQYWdpbmdPcHRpb25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYXJyYXlNb2RlICYmICghdGhpcy5Vc2VBcnJheU1vZGVQYWdpbmcgfHwgdGhpcy5TZWFyY2hWaWV3KSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3ID0gdGhpcy5TZWFyY2hWaWV3XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5QYWdlckNvdW50ID0gdGhpcy5TZWFyY2hWaWV3Lm9iamVjdGNvdW50IHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9ICg8YW55W10+dGhpcy5WaWV3KS5sZW5ndGggfHwgMFxyXG5cclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyAmJiAodGhpcy5WaWV3Lmxlbmd0aCA+IDEwIHx8ICh0aGlzLlNlYXJjaFZpZXc/Lm9iamVjdGNvdW50IHx8IDApID4gMTApO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgfHwgKHRoaXMuVmlldyAmJiB0aGlzLlZpZXcubGVuZ3RoKSB8fCAodGhpcy5TZWFyY2hWaWV3ICYmIHRoaXMuU2VhcmNoVmlldy5vYmplY3Rjb3VudCAmJiB0aGlzLlNlYXJjaFZpZXcub2JqZWN0Y291bnQgIT0gLTEpO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgfHwgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXdNb2RlKSB7XHJcbiAgICAgICAgICAgIGxldCB0bXBWaWV3ID0gdGhpcy5NYWluR3JvdXBWaWV3IHx8IHRoaXMuVmlldztcclxuICAgICAgICAgICAgbGV0IGNvdW50ID0gdG1wVmlldz8uZ3JvdXBjb3VudCB8fCB0bXBWaWV3Py5vYmplY3Rjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2VhcmNoZXMgPSB0bXBWaWV3Py5ncm91cGNvdW50ICE9IG51bGwgJiYgdG1wVmlldz8uZ3JvdXBjb3VudCAhPSB1bmRlZmluZWQgPyAnZ3JvdXBzJyA6ICdpdGVtcyc7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPSBjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3ID0gdG1wVmlldztcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50ID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50IHx8ICh0bXBWaWV3ICYmIGNvdW50ICYmIGNvdW50ICE9IC0xKTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyAmJiAodG1wVmlldy5wYWdpbmdhdmFpbGFibGUgfHwgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd1BhZ2luZ09wdGlvbnMgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gbGFuY2lhdG8gZG9wbyBjaGUgbGEgc29yZ2VudGUgZGF0aSDDqCBzdGF0YSBjb3JyZXR0YW1lbnRlIGJpbmRhdGEsIHNpIG9jY3VwYSBkaSByaWNhbGNvbGFyZSB0dXR0byBjacOyIGNoZSBzZXJ2ZVxyXG4gICAgICogYWxsJ2VzLXRhYmxlIHBlciByZW5kZXJpenphcmUgaSB2YWxvcmkgZGEgbW9zdHJhcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwb3N0Qm91bmRTb3VyY2VDYWxjdWxhdGlvbigpIHtcclxuICAgICAgICAvLyBSZXNldHRvIHR1dHRvIHRyYW5uZSBSb3dURHMgZSBSb3dUSHMgcGVyIGV2aXRhcmUgZmxpY2tlcmluZy4gUm93VERzIGUgUm93VEhzIHNhcmFubm8gbW9kaWZpY2F0ZSBhbGwnaW50ZXJubyBkZWwgcHJvc3NpbW8gY2ljbG8gZGkgQ0RcclxuICAgICAgICB0aGlzLlJvd0NvbnRleHRzID0gW107XHJcbiAgICAgICAgdGhpcy5PcmRlckRpcmVjdGl2ZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEl0ZW1JRCA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxQb3N0Qm91bmRTb3VyY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUGVyIHBvdGVyIGRpc3Rpbmd1ZXJlIGxlIGNoaWFtYXRlIGEgcXVlc3RvIG1ldG9kbzogRG9wbyBpbCBzZXRUaW1lb3V0IHNlIHVzbyBnbGkgRXNUZC9Fc1RoIHZlY2NoaSwgc2VuemEgaWwgc2V0VGltZW91dCBzZSB1c28gbGUgbnVvdmUgZGlyZXR0aXZlICovXHJcbiAgICBwcml2YXRlIGludGVybmFsUG9zdEJvdW5kU291cmNlKCkge1xyXG4gICAgICAgIGxldCBWaWV3ID0gdGhpcy5WaWV3O1xyXG5cclxuICAgICAgICBsZXQgdGRzRCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUubGVuZ3RoID09IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGRzRGlyZWN0aXZlPy5sZW5ndGggPiAwID8gdGhpcy5Fc1RhYmxlVGVtcGxhdGU/LlRlbXBsYXRlPy5Fc1Rkc0RpcmVjdGl2ZSA6IHRoaXMuRXNUZHNEaXJlY3RpdmUgOiB0aGlzLkVzVGRzRGlyZWN0aXZlO1xyXG4gICAgICAgIGxldCB0aHNEID0gdGhpcy5Fc1Roc0RpcmVjdGl2ZS5sZW5ndGggPT0gMCA/IHRoaXMuRXNUYWJsZVRlbXBsYXRlPy5UZW1wbGF0ZT8uRXNUaHNEaXJlY3RpdmU/Lmxlbmd0aCA+IDAgPyB0aGlzLkVzVGFibGVUZW1wbGF0ZT8uVGVtcGxhdGU/LkVzVGhzRGlyZWN0aXZlIDogdGhpcy5Fc1Roc0RpcmVjdGl2ZSA6IHRoaXMuRXNUaHNEaXJlY3RpdmU7XHJcblxyXG4gICAgICAgIGxldCB0aHMgPSB0aHNEICYmIHRoc0QubGVuZ3RoID4gMCA/IHRoc0QudG9BcnJheSgpIDogW107XHJcbiAgICAgICAgbGV0IHRkcyA9IHRkc0QgJiYgdGRzRC5sZW5ndGggPiAwID8gdGRzRC50b0FycmF5KCkgOiBbXTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIGNvbG9ubmUgZGluYW1pY2hlIG1hIHNvbm8gaW4gbW9kYWxpdMOgIGRpbmFtaWNhIChsbyBjYXBpc2NvIHBlcmNow6kgYyfDqCB1bmEgdmlldyBwaWVuYSBkaSBnZW5lcmljaXRlbSkgbWV0dG8gaWwgZGVmYXVsdCBkZWxsZSBjb2xvbm5lXHJcbiAgICAgICAgdGhpcy5keW5hbWljTW9kZV9ILmV2ZW50dWFsbHlSZXZpZXdEeW5hbWljQ29sdW1ucygpO1xyXG4gICAgICAgIHRoaXMuYmluZERpc3BsYXlUb0xvYWRlZEl0ZW1zT3JHcm91cHMoVmlldyk7XHJcblxyXG4gICAgICAgIC8vIFF1ZXN0byBkZXYnZXNzZXJlIHBlciBmb3J6YSBsYW5jaWF0byBkb3BvICoqYmluZERpc3BsYXlUb0xvYWRlZEl0ZW1zT3JHcm91cHMqKiBkYXRvIGNoZSDDqCBsw6wgY2hlIGFsY3VuZSBjb3NlIHZlbmdvbm8gdmFsb3JpenphdGVcclxuICAgICAgICB0aGlzLnNldHVwUGFnaW5nSW5mb3JtYXRpb25zKCk7XHJcblxyXG4gICAgICAgIC8vIE1vbHRlIGNvc2Ugc29ubyBvdnZpYW1lbnRlIGRpc3BvbmliaWxpIHNvbG8gaW4gbW9kYWxpdMOgIFZpZXdcclxuICAgICAgICBpZiAoKHRoaXMudmlld01vZGUgfHwgdGhpcy5hcnJheU1vZGUpICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgbGV0IHZpZXcgPSB0aGlzLnZpZXdNb2RlID8gVmlldyBhcyBBcHBTZWFyY2g8YW55PiA6IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBpdGVtc0FuZEdyb3VwcyA9IHRoaXMudmlld01vZGUgPyBbLi4uKHZpZXcuaXRlbXMgfHwgW10pLCAuLi4odmlldy5ncm91cHMgfHwgW10pXSA6IFZpZXcgYXMgYW55W107XHJcbiAgICAgICAgICAgIGxldCBzaSA9IHRoaXMudmlld01vZGUgPyB2aWV3LnNlbGVjdGlvbiA6IHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAvLyBOLkI6IFJpc3BldHRhcmUgbCdvcmRpbmUgZGkgcXVlc3RlIDMgbWFjcm9jYXRlZ29yaWUgw6ggVklUQUxFXHJcblxyXG4gICAgICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgICBTaXN0ZW1hemlvbmkgZGkgVEgsIFRELCBlIHZpc2liaWxpdMOgIHZhcmllICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAgICAgICAgICAgLy8gRXNwYW5kbyBpIHRoIGUgaSB0ZCBtdWx0aXBsaSBkdXBsaWNhbmRvbGlcclxuICAgICAgICAgICAgbGV0IHJldCA9IHRoaXMuY29sdW1uTWV0YWRhdGFfSC5leHBhbmRNdWx0aVRoc0FuZFRkcyh0aHMsIHRkcywgaXRlbXNBbmRHcm91cHMpO1xyXG4gICAgICAgICAgICB0aHMgPSByZXQuZXhwVGhzO1xyXG4gICAgICAgICAgICB0ZHMgPSByZXQuZXhwVGRzO1xyXG5cclxuICAgICAgICAgICAgLy8gR2VzdGlvbmUgZGVsbGUgdmlldyBpbiBtb2RhbGl0w6AgcmVwb3J0LCBpIHRoIGUgaSB0ZCB2ZW5nb25vIHJpZ2VuZXJhdGkgZGFsbGUgY29uZmlndXJhemlvbmkgZGVsbGEgdmlld1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXJyYXlNb2RlICYmIHZpZXcucmVwb3J0X2NvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXQgPSB0aGlzLnJlcG9ydE1vZGVfSC5nZW5lcmF0ZVRoc0FuZFRkc0Zyb21WaWV3KHZpZXcpO1xyXG4gICAgICAgICAgICAgICAgdGhzID0gcmV0LnRocztcclxuICAgICAgICAgICAgICAgIHRkcyA9IHJldC50ZHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByZXBhc3NhZ2dpbyBwZXIgdGlyYXJlIGZ1b3JpIHR1dHRlIGxlIGluZm8gdXRpbGkgc3VnbGkgaGVhZGVycyBpbiBtb2RvIGRhIG5vbiByaWNhY29sYXJzZWxpIHNlbXByZSBkb3BvXHJcbiAgICAgICAgICAgIGxldCBoSSA9IHRoaXMuY29sdW1uTWV0YWRhdGFfSC5ldmFsdWF0ZUhlYWRlcnNHcm91cGluZ0luZm9zKHRocyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgYXJyYXkgbm9uIGhvIHVuIGJhY2tlbmQuLi5cclxuICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBpbmdfSC5hcnJheU1vZGVSZXZpZXdHcm91cGluZ3MoaEkubGVhZnMpOyAgLy8gLi4uIGkgcmFnZ3J1cHBhbWVudGkgbGkgZGV2byBmYXJlIGxhdG8gY2xpZW50XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmV2aWV3Q29sdW1uc0xpc3QoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQWdnaW9ybmEgbGEgbGlzdGEgZGVsbGUgY29sb25uZSBkYSBtb3N0cmFyZSBuZWxsYSBkaWFsb2cgcGVyIG9yZGluYW1lbnRvIGVjY1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guYWxpZ25Db2x1bW5zSWZMb2FkZWRWaWV3KHZpZXcpOyAgICAgICAgICAgICAgICAgICAgLy8gU2Ugc3RvIGNhcmljYW5kbyB1bmEgVmlldyBkYSBob3Rwb3RhdG8gKHF1aW5kaSBjb24gc2F2ZWRzdGF0ZSA9IHRydWUpIHJpYWxsaW5lbyBsYSB2aXNpYmlsaXTDoCBkZWxsZSBjb2xvbm5lIGUgaWwgbG9ybyBvcmRpbmUuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5tb3ZlRml4ZWRDb2x1bW5zQXRUaGVCZWdpbm5pbmcoaEkubGVhZnMsIHRkcyk7ICAgICAvLyBTcG9zdG8gdHV0dGUgbGUgY29zZSBmaXhlZCBhbGwnaW5pemlvIGluIG1vZG8gY2hlIGxhIGNyZWF6aW9uZSBkaSB0aCBlIHRkIHNpYSBwacO5IHNuZWxsYSAoVXRpbGl6emEgbGUgQ29sdW1uc0xpc3QsIHF1aW5kaSBkZXYnZXNzZXJlIHJpY2hpYW1hdGEgUElSTUEgZGkgcmV2aWV3Q29sdW1uc0xpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5hbGlnbkhlYWRlcnNPcmRlcmluZyhoSS5sZWFmcywgdmlldyk7ICAgICAgICAgICAgICAvLyBBbGxpbmVvIGdsaSBvcmRpbmFtZW50aSBhZ2xpIGhlYWRlclxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KGhJLmxlYWZzLCB0ZHMsIHZpZXcpOyAgICAgLy8gTGF2b3JvIHN1aSBUSCBlZCBldmVudHVhbG1lbnRlIG1vZGlmaWNvIGxhIHZpc2liaWxpdMOgIGFuY2hlIGRlaSBURC5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmV2YWx1YXRlUGlubmVkQ29sdW1uc1dpZHRoKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIHNvbm8gcHJlc2VudGkgY29sb25uZSBwaW5uYXRlIHZhbHV0YSBsYSBkaW1lbnNpb25lIGRlbCBjb250ZW5pdG9yZVxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guZ2VuZXJhdGVEZWZhdWx0T3JkZXIoaEkubGVhZnMsIHZpZXcpOyAgICAgICAgICAgICAgLy8gR2VuZXJvIGxlIGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50bywgY2hlIHNpYW5vIGRlZmF1bHQgbyBkZXJpdmFudGkgZGFsbGEgQXBwU2VhcmNoXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5ldmFsdWF0ZUhlYWRlckdyb3VwcyhoSSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWx1dG8gaSByYWdncnVwcGFtZW50aSBkZWdsaSBoZWFkZXIgc2UgcHJlc2VudGlcclxuXHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgIEdlbmVyYXppb25lIGJpbmRpbmcgcGVyIHJpZ2hlIGUgY29sb25uZSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVSb3dUaHMoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhY2NvbGdvIGkgVEhcclxuICAgICAgICAgICAgdGhpcy5ldmFsdWF0ZVJvd1RkcyhoSS5sZWFmcywgdGRzKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFjY29sZ28gaSBURCBpbiBjb250ZXN0aSBzZXBhcmF0aSwgdW4gY29udGVzdG8gcGVyIG9nbmkgaXRlbSBvIGdydXBwb1xyXG5cclxuICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgVWx0aW1pIGFnZ2l1c3RtYWVudGkgZGVpIGJpbmRpbmcgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmFwcGx5T3JkZXJpbmcodmlldywgdHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbGljbyBsJ29yZGluYW1lbnRvIHN1bGxlIGNvbG9ubmUgKG5vbiBBU0MgREVTQywgbWEgXCJwcmltYSBxdWVzdGEgbyBxdWVsbGEgY29sb25uYVwiKVxyXG4gICAgICAgICAgICB0aGlzLk1vdmVUZW1wb3JhcnlWYXJpYWJsZXNUb1JlYWxPbmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb2xsZWdvIFRIIGUgVEQgYWdnaXVzdGF0aSBmaW5vIGFkIG9yYSBhbGxlIHZhcmlhYmlsaSBkaSBCaW5kaW5nIEhUTUxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNlbGVjdGlvbihpdGVtc0FuZEdyb3Vwcywgc2kpOyAgICAgICAgICAgICAgICAgLy8gUmlhbGxpbmVvIGxlIGluZm8gZGkgc2VsZXppb25lIGRlZ2xpIGVsZW1lbnRpIGRlbGxhIFZpZXdcclxuXHJcbiAgICAgICAgICAgIC8vIFZhbHV0YSBsbyBzdGF0byBpbml6aWFsZSBkaSBzZWxlemlvbmUgYSByYW5nZVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmV2YWx1YXRlU2luZ2xlQ2VsbFNlbGVjdGlvbihpdGVtc0FuZEdyb3VwcywgaEkubGVhZnMsIHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlJlc2VhcmNoTmVlZGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5SZXNlYXJjaE5lZWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCh0aGlzLnZpZXdNb2RlIHx8IHRoaXMuYXJyYXlNb2RlKSAmJiAhdGhpcy5Vc2VDdXN0b21DZWxscykge1xyXG4gICAgICAgICAgICAvLyBSaWFsbGluZW8gbGUgaW5mbyBkaSBzZWxlemlvbmUgZGVnbGkgZWxlbWVudGkgZGVsbGEgVmlld1xyXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLnZpZXdNb2RlID8gKFZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLml0ZW1zIDogVmlldyBhcyBhbnlbXTtcclxuICAgICAgICAgICAgbGV0IHNpID0gdGhpcy52aWV3TW9kZSA/IChWaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5zZWxlY3Rpb24gOiB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNlbGVjdGlvbihpdGVtcywgc2kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUGVyIGVzc2VyZSBzaWN1cm8gY2hlIGRvcG8gdW4gYmluZCBkaSBvZ2dldHRpIGxhIGVzLXRhYmxlIGFnZ2lvcm5pIGxhIGdyYWZpY2FcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLkZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgaWwgYmluZGluZyBkZWdsaSBvZ2dldHRpIHBlcnZlbnV0aSBkYSBxdWVzdGEgY2hpYW1hdGEgY29uIGdsaSBvZ2dldHRpIGVmZmV0dGl2YW1lbnRlIGRhIGdyYWZpY2FyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmlldyBWaWV3IGRhIGN1aSBzb25vIGFycml2YXRpIGdsaSBvZ2dldHRpLiBQdcOyIGVzc2VyZSBvIHVuIGFycmF5IHNlIHNvbm8gaW4gKiphcnJheU1vZGUqKiBvIHVuYSBBcHBTZWFyY2g8VD4gc2Ugc29ubyBpbiAqKnZpZXdNb2RlKipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kRGlzcGxheVRvTG9hZGVkSXRlbXNPckdyb3Vwcyh2aWV3OiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuVE1QQm91bmRTb3VyY2UgfHwgdGhpcy5UTVBCb3VuZFNvdXJjZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLkJhc2VJdGVtc0NvdW50ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUgfHwgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMuQmFzZUl0ZW1zQ291bnQgPSB2aWV3Py5vYmplY3Rjb3VudCB8fCB2aWV3Py5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGdyb3VwaW5nS2V5cyA9IHZpZXc/Lmdyb3VwaW5ncz8uZmlsdGVyKHQgPT4gIXQuYWdncmVnYXRpb24pPy5sZW5ndGggfHwgMDtcclxuICAgICAgICBpZiAoZ3JvdXBpbmdLZXlzID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMuQmFzZUl0ZW1zQ291bnQgPSB2aWV3Py5vYmplY3Rjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvd0dyb3VwaW5nX0guaGFuZGxlTmV3RGF0YU9uUm93R3JvdXBpbmcodmlldywgZ3JvdXBpbmdLZXlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gc29sbyBxdWFuZG8gKipUTVBSb3dURHMqKiBlICoqVE1QUm93VEhzKiogc29ubyBjb21wbGV0YW1lbnRlIGdlbmVyYXRpIGVkIGFnZ2l1c3RhdGkuIFNlcnZlIHBlciBjb2xsZWdhcmxpIGFsbGUgdmFyaWFiaWxpIHVzYXRlIGxhdG8gYmluZGluZyBIVE1MICovXHJcbiAgICBwcml2YXRlIE1vdmVUZW1wb3JhcnlWYXJpYWJsZXNUb1JlYWxPbmVzKCkge1xyXG5cclxuICAgICAgICB0aGlzLlJvd1REcyA9IHRoaXMuVE1QUm93VERzO1xyXG4gICAgICAgIHRoaXMuUm93VEhzID0gdGhpcy5UTVBSb3dUSHM7XHJcbiAgICAgICAgdGhpcy5Sb3dUaEdyb3VwcyA9IHRoaXMuVE1QUm93VGhHcm91cHMgPyB0aGlzLlRNUFJvd1RoR3JvdXBzLnJldmVyc2UoKSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5FbXB0eVJvd1RkcyA9IHRoaXMuaXNFbXB0eSh0aGlzLlJvd1REcyk7XHJcblxyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5WaXNpYmlsZSA9IHRoaXMuUm93VEhzLmZpbHRlcih0ID0+IHQuVmlzaWJsZSkubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgPSB0aGlzLlJvd1RIcy5maWx0ZXIodCA9PiB0LlZpc2libGUgJiYgIXQuUGlubmVkKS5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5Db2x1bW5zLkdsb2JhbCA9IHRoaXMuQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgKyAodGhpcy5IYXNQaW5uZWRDb2x1bW5zID8gMSA6IDApICsgKHRoaXMuU2VsZWN0aW9uID8gMSA6IDApICsgKHRoaXMuUmVtb3ZhbCA/IDEgOiAwKSArICh0aGlzLkV4cG9ydCB8fCB0aGlzLkhpZGRlbkNvbHVtbnMgfHwgdGhpcy5Db2x1bW5zT3JkZXJpbmcgfHwgdGhpcy5Db3JuZXJNZW51T3B0aW9ucyA/IDEgOiAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIE1ldG9kbyBwZXIgY2FwaXJlIHNlIHVuIG9nZ2V0dG8gw6ggY29tcGxldGFtZW50ZSB2dW90byBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRhIGNvbnRyb2xsYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29nZ2V0dG8gw6ggdnVvdG8sICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHkob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IgKHZhciBfIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZSBpbiBtYW5pZXJhIGFyYml0cmFyaWEgZGVnbGkgb2dnZXR0aVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3QgKip0cnVlKiogcGVyIHNlbGV6aW9uYXJsaSwgKipmYWxzZSoqIHBlciBub24gdG9jY2FybGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFNlbGVjdGlvblN0YXR1cyhpdGVtczogYW55W10sIGFsbDogYm9vbGVhbiwgc2VsZWN0OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGFsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuU2VsZWN0QWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW1wb3NzaWJpbGUgaW1wb3N0YXJlIGxhIHNlbGV6aW9uZSBjb24gbCdhbGwgc2VsZWN0aW9uIHF1YW5kbyBsJ0lucHV0IFNlbGVjdEFsbCDDqCBmYWxzZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHNpID0gKHRoaXMuVmlldyBhcyBBcHBTZWFyY2g8YW55Pik/LnNlbGVjdGlvbiB8fCB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuICAgICAgICAgICAgLy9zZSBkZXNlbGV6aW9ubyBjb24gYXR0dWFsZSBzZWxlemlvbmUgYWQgYWxsIG8gc2Ugc2VsZXppb25vIGNvbiBhdHR1YWxlIHNlbGV6aW9uZSBtYW51YWxlIGRldm8gcmljaGlhbWFyZSBsYSAqKnNlbGVjdEFsbE9yUmVzZXRTZWxlY3Rpb24qKlxyXG4gICAgICAgICAgICBpZiAoKHNpLmFsbCAmJiAhc2VsZWN0KSB8fCAoIXNpLmFsbCAmJiBzZWxlY3QpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5zZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtcywgc2VsZWN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGdlc3Rpc2NlIGlsIGNhbWJpbyBkaSBPcmRpbmFtZW50byBkaSB1bmEgY29sb25uYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBkZWxsYSBjb2xvbm5hIGlsIGN1aSBvcmlkbmFtZW50byDDqCBjYW1iaWF0b1xyXG4gICAgICogQHBhcmFtIHsnREVTQycgfCAnQVNDJ30gb3JkZXIgTnVvdm8gb3JkaW5lIHNlbGV6aW9uYXRvIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aE9yZGVyQ2hhbmdlZChpZDogc3RyaW5nLCBvcmRlcj86ICdERVNDJyB8ICdBU0MnKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdNb2RlICYmICF0aGlzLmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ09yZGVyIGNoYW5nZWQgb24gYSB0YWJsZSBub3QgaW4gdmlld01vZGUgb3IgQXJyYXkgbW9kZS4gT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLk9yZGVyQnlDb2x1bW4pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmhhbmRsZVRIT3JkZXJDaGFuZ2UoaWQsIG9yZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBkYSBjaGlhbWFyZSBvZ25pIHZvbHRhIGNoZSBzaSB2dW9sZSBkYXJlIGV2aWRlbnphIGFsbCdlc3Rlcm5vIGRlbCBiaXNvZ25vIGRpIHJpZWZmZXR0dWFyZSBsYSByaWNlcmNhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzZXRzUGFnZSBJbmRpY2EgYWwgbGlzdGVuZXIgY2hlIGRldmUgcmVzZXR0YXJlIGlsIG51bWVybyBkaSBwYWdpbmFcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXdPdmVycmlkZSBPdmVycmlkZSBkZWxsYSB2aWV3IGRhIGVtZXR0ZXJlIHBlciBxdWVzdGEgcmljZXJjYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW1pdFNlYXJjaFJlcXVlc3QocmVzZXRzUGFnZTogYm9vbGVhbiwgdmlld092ZXJyaWRlPzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBpZiAodGhpcy52aWV3TW9kZSAmJiAhdmlld092ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgICh0aGlzLlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLmludGVybmFsc2VhcmNocmVxdWVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpZXdPdmVycmlkZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzZXRzUGFnZSlcclxuICAgICAgICAgICAgICAgIHZpZXdPdmVycmlkZS5wYWdlID0gMTtcclxuICAgICAgICAgICAgdmlld092ZXJyaWRlLmludGVybmFsc2VhcmNocmVxdWVzdCA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZWFyY2hJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KHZpZXdPdmVycmlkZSA/IHZpZXdPdmVycmlkZSA6IHJlc2V0c1BhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFydGVuZG8gZGFnbGkgKipFc1RkcyoqIGJpbmRhdGkgZ2VuZXJhLCBhbGwnaW50ZXJubyBkZWwgZGl6aW9uYXJpbyAqKlRNUFJvd1REcyoqIHR1dHRpIGkgY29udGVzdGkgZGVpIHZhcmkgb2dnZXR0aS5cclxuICAgICAqXHJcbiAgICAgKiBWZW5nb25vIGVzY2x1c2kgaSBURCBcIkludGVybmlcIiBpbiBxdWFudG8gdmVuZ29ubyBnZW5lcmF0aSBkYWdsaSBvcmlnaW5hbGkgcXVpbmRpIGluY2x1ZGVybGkgdm9ycmViYmUgZGlyZSByaWVmZmV0dHVhcmUgbGUgb3BlcmF6aW9uaSBkdWUgdm9sdGVcclxuICAgICAqXHJcbiAgICAgKiBDb3N0bzogMiBzY2FuIEVzVGhzLCAxIHNjYW4gRXNUZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICogQHBhcmFtIHtFc1RkRGlyZWN0aXZlW119IHRkcyBDZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVSb3dUZHModGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgaWYgKHRkcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgdGhzQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RoRGlyZWN0aXZlIH0gPSB7fTtcclxuICAgICAgICBsZXQgY29sdW1uc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbiB9ID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNvbGkgPSAwOyBjb2xpIDwgdGhpcy5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgIHRoc0NhY2hlW3RoLnRoXSA9IHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5UTVBSb3dURHMgPSB7fTtcclxuICAgICAgICAvLyBWYXJpYWJpbGUgZCdhcHBvZ2dpbyBwZXIgcGVybWV0dGVybWkgZGkgaW5zZXJpcmUgdHV0dGUgbGUgY29sb25uZSBcIkZpeGVkXCIgZGF2YW50aVxyXG4gICAgICAgIGxldCBjb250ZXh0Rml4ZWRzOiB7IFtjb250ZXh0OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZFNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmJvdW5kU291cmNlW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGQudGQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aHNDYWNoZVt0ZC50ZF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGgpXHJcbiAgICAgICAgICAgICAgICAgICAgdGguX3JlZmVyZW5jZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNraXBwYXJlIHNlbnphIHRoIChjYXNpc3RpY2EgdGFiZWxsYSBkaW5hbWljYSlcclxuICAgICAgICAgICAgICAgIGlmICh0aCAmJiAodGQudGRJZiB8fCB0aC50aEdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aENhc3RlZCA9IDxFc1RoRGlyZWN0aXZlPnRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc0ZpeGVkID0gdGgudGhGaXhlZCB8fCB0aC50aEdyb3VwIHx8IHRoLnRoUGlubmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtVG9BZGQgPSBpdGVtLl9pdGVtID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRkRWxlbWVudD57IExlZnRCb3JkZXI6ICg8YW55PnRoQ2FzdGVkKS5fbGJvcmQsIFJpZ2h0Qm9yZGVyOiAoPGFueT50aENhc3RlZCkuX3Jib3JkLCBJRDoga2V5LCBQaW5uZWQ6IGNvbHVtbnNDYWNoZVt0ZC50ZF0ucGlubmVkLCBQaW5uZWRXaWR0aDogdGhDYXN0ZWQudGhQaW5uZWRXaWR0aCwgR3JvdXBIZWFkZXI6IGZhbHNlLCBHcm91cEFnZ3JlZ2F0aW9uOiBmYWxzZSwgVmlzaWJsZTogY29sdW1uc0NhY2hlW3RkLnRkXS52aXNpYmxlLCBXcmFwczogZmFsc2UsIENsYXNzOiB0ZC50ZENsYXNzLCBUZW1wbGF0ZTogdGhDYXN0ZWQudGhHcm91cCAmJiAhdGhpcy5TaG93SXRlbUdyb3Vwc0NvbHVtbnMgPyBudWxsIDogdGQuVGVtcGxhdGUsIE11bHRpOiB0ZC5fbXVsdGksIE11bHRpUHJvcDogdGQuX211bHRpID8gdGQudGQuc3BsaXQoJ18nKVswXSA6IG51bGwsIE11bHRpSW5kZXg6IHRkLl9tdWx0aSA/IHRkLnRkLnNwbGl0KCdfJylbMV0gOiBudWxsLCBQcm9wZXJ0eU5hbWU6IHRoLnRoUHJvcGVydHksIFByb3BlcnR5VHlwZTogdGgudGhUeXBlLCBQcm9wZXJ0eVNvdXJjZTogdGgudGhTb3VyY2UsIFByb3BBY2Nlc3NvcjogdGQudGRQcm9wZXJ0eUFjY2Vzc29yIH0gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGRFbGVtZW50PnsgTGVmdEJvcmRlcjogKDxhbnk+dGhDYXN0ZWQpLl9sYm9yZCwgUmlnaHRCb3JkZXI6ICg8YW55PnRoQ2FzdGVkKS5fcmJvcmQsIElEOiBrZXksIFBpbm5lZDogY29sdW1uc0NhY2hlW3RkLnRkXS5waW5uZWQsIFBpbm5lZFdpZHRoOiB0aENhc3RlZC50aFBpbm5lZFdpZHRoLCBHcm91cEhlYWRlcjogdGhDYXN0ZWQudGhHcm91cCwgR3JvdXBBZ2dyZWdhdGlvbjogISF0aENhc3RlZC50aEFnZ3JlZ2F0aW9uLCBWaXNpYmxlOiBjb2x1bW5zQ2FjaGVbdGQudGRdLnZpc2libGUsIFdyYXBzOiBmYWxzZSwgQ2xhc3M6IHRoQ2FzdGVkLnRoR3JvdXBDbGFzcyB8fCAnJywgQ29udGVudDogdGhpcy5yb3dHcm91cGluZ19ILmdldEdyb3VwQ2VsbERpc3BsYXkoPEdyb3VwPml0ZW0sIGtleSwgPEVzVGhEaXJlY3RpdmU+dGgpIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlRNUFJvd1REc1tjdHhdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVE1QUm93VERzW2N0eF0ucHVzaChpdGVtVG9BZGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Sb3dDb250ZXh0cy5wdXNoKGN0eCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVE1QUm93VERzW2N0eF0gPSBbaXRlbVRvQWRkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dEZpeGVkc1tjdHhdID0gaXNGaXhlZCA/IDEgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIG9nZ2V0dGkgw6ggaW51dGlsZSBjaGUgY29udHJvbGxvIGdsaSBlcnJvcmksIGRhdG8gY2hlIGdsaSBlcy10ZCBub24gZXNpc3RlcmFubm8gZGkgY2VydG8gZSBkaSBjb25zZWd1ZW56YSBnbGkgZXMtdGggbm9uIHNhcmFubm8gcmVmZXJlbnppYXRpXHJcbiAgICAgICAgaWYgKHRoaXMuVE1QQm91bmRTb3VyY2UubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGVycnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoLl9yZWZlcmVuY2VkKVxyXG4gICAgICAgICAgICAgICAgZXJycy5wdXNoKHRoLnRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGVycklkcyA9IGVycnMuam9pbignLCAnKTtcclxuICAgICAgICAgICAgdGhyb3cgXCJMJ0lEIGRpIHVubyBvIHBpw7kgRXNUaCBub24gaGFubm8gYWxjdW4gRXNUZCBhc3NvY2lhdG86IFwiICsgZXJySWRzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRlbmRvIGRhZ2xpICoqRXNUaHMqKiBiaW5kYXRpIGdlbmVyYSwgYWxsJ2ludGVybm8gZGVsIGRpemlvbmFyaW8gKipUTVBSb3dUSHMqKiB0dXR0aSBpIGNvbnRlc3RpIGRlaSB2YXJpIG9nZ2V0dGkuXHJcbiAgICAgKlxyXG4gICAgICogVmVuZ29ubyBlc2NsdXNpIGkgVEggXCJJbnRlcm5pXCIgaW4gcXVhbnRvIHZlbmdvbm8gZ2VuZXJhdGkgZGFnbGkgb3JpZ2luYWxpIHF1aW5kaSBpbmNsdWRlcmxpIHZvcnJlYmJlIGRpcmUgcmllZmZldHR1YXJlIGxlIG9wZXJhemlvbmkgZHVlIHZvbHRlXHJcbiAgICAgKlxyXG4gICAgICogQ29zdG86IDEgc2NhbiBFc1RocyArIDEgc2NhbiBDb2x1bW5zTGlzdFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZVtdfSB0aHMgQ29sb25uZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVSb3dUaHModGhzOiBFc1RoRGlyZWN0aXZlW10pIHtcclxuICAgICAgICBpZiAodGhzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBjb2x1bW5zTGlzdENhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbiB9ID0ge307XHJcbiAgICAgICAgbGV0IGNhc3RlZFZpZXcgPSA8QXBwU2VhcmNoPGFueT4+dGhpcy5WaWV3O1xyXG4gICAgICAgIGxldCBncm91cGluZ3NVbmRlZmluZWQgPSB0aGlzLnZpZXdNb2RlICYmIChjYXN0ZWRWaWV3ICYmICFjYXN0ZWRWaWV3Lmdyb3VwaW5ncyB8fCBjYXN0ZWRWaWV3Lmdyb3VwaW5ncy5sZW5ndGggPT0gMCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5Db2x1bW5zTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRtID0gdGhpcy5Db2x1bW5zTGlzdFtpXTtcclxuICAgICAgICAgICAgY29sdW1uc0xpc3RDYWNoZVtpdG0uaWRdID0gaXRtXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLlRNUFJvd1RIcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuICAgICAgICAgICAgbGV0IHRvQWRkOiBUaEVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGgudGhJZiB8fCB0aC50aEdyb3VwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRoQ2xhc3MgPSAodGgudGhDbGFzcyB8fCAnJykgKyAodGgudGhHcm91cCA/IFwiIGVzdC1jb2wtbWluXCIgOiBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHRvQWRkID0geyBQaW5uZWQ6IGNvbHVtbnNMaXN0Q2FjaGVbdGgudGhdLnBpbm5lZCwgRml4ZWQ6IHRoLnRoRml4ZWQsIFBpbm5lZFdpZHRoOiB0aC50aFBpbm5lZFdpZHRoLCBJRDogdGgudGgsIFZpc2libGU6IHRoLnRoVmlzaWJsZSwgQ2xhc3M6IHRoQ2xhc3MsIE9yZGVyOiB0aC50aE9yZGVyLCBPcmRlcmFibGU6IHRoLnRoT3JkZXJhYmxlLCBUZW1wbGF0ZTogdGguVGVtcGxhdGUsIENvbnRlbnQ6IHRoLnRoU3RhdGljQ29udGVudCwgV3JhcDogdGgudGhXcmFwLCBMZWZ0Qm9yZGVyOiAoPGFueT50aCkuX2xib3JkLCBSaWdodEJvcmRlcjogKDxhbnk+dGgpLl9yYm9yZCwgTXVsdGk6IHRoLl9tdWx0aSwgTXVsdGlDb250ZW50OiB0aC5fbXVsdGlfY29udGVudCB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5UTVBSb3dUSHMucHVzaCh0b0FkZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2UgaG8gdW4gbW9kZWxsbyBjaGUgZGV2ZSBmdW56aW9uYXJlIGEgcm93Z3JvdXBpbmcgbWEgbm9uIMOoIGFuY29yYSBzdGF0YSBlZmZldHR1YXRhIG5lc3N1bmEgcmljZXJjYSBzdWkgZ3J1cHBpIHByaW5jaXBhbGkgKGdyb3VwaW5nc1VuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgIC8vIGxpIGdlbmVybyBlIG1hbmRvIGxhIHByaW1hIHJpY2VyY2EgY2hlIGRldidlc3NlcmUgc3BlZGl0YSBhbCBiYWNrZW5kIHBlciBpbCBwcmltbyBjYXJpY2FtZW50byBkZWkgZ3J1cHBpXHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmdzVW5kZWZpbmVkICYmICh0aC50aEFnZ3JlZ2F0aW9uIHx8IHRoLnRoR3JvdXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwQWdncmVnYXRpb25zOiBHcm91cE9yQWdncmVnYXRpb25bXSA9IHRoaXMucm93R3JvdXBpbmdfSC5nZXRHcm91cEFnZ3JlZ2F0aW9ucyh0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWaWV3Lmdyb3VwaW5ncylcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzdGVkVmlldy5ncm91cGluZ3MgPSBncm91cEFnZ3JlZ2F0aW9ucztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc3RlZFZpZXcuZ3JvdXBpbmdzLnB1c2goLi4uZ3JvdXBBZ2dyZWdhdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlJlc2VhcmNoTmVlZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGRpIHVuYSBwYWdpbmEgaW4gYXZhbnRpIChvIGluZGlldHJvKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE51bWVybyBkaSBwYWdpbmUgZGEgYWdnaXVuZ2VyZSAobyBzb3R0cmFycmUsIHNlIG5lZ2F0aXZvKSBhbGxhIHBhZ2luYSBhdHR1YWxlXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gcGFnZXIgRWxlbWVudG8gZGkgc2VwYXJhemlvbmUgc3UgY3VpIMOoIGVmZmV0dHVhdGEgbGEgcmljZXJjYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkVG9QYWdlR3JvdXAocGFnZTogbnVtYmVyLCBwYWdlcjogR3JvdXBQYWdlcikge1xyXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2VHcm91cChwYWdlci52aWV3LnBhZ2UgKyBwYWdlLCBwYWdlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcG9zdGEgbGEgcmljZXJjYSBhbGxhIHBhZ2luYSBzcGVjaWZpY2F0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIFBhZ2luYSBhIGN1aSBuYXZpZ2FyZVxyXG4gICAgICogQHBhcmFtIHthbnl9IHBhZ2VyIEVsZW1lbnRvIGRpIHNlcGFyYXppb25lIHN1IGN1aSDDqCBlZmZldHR1YXRhIGxhIHJpY2VyY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvVG9QYWdlR3JvdXAocGFnZTogbnVtYmVyLCBwYWdlcjogR3JvdXBQYWdlcikge1xyXG5cclxuICAgICAgICBsZXQgYXBwU2VhcmNoRWxlbWVudCA9IHBhZ2VyLnZpZXc7XHJcbiAgICAgICAgaWYgKHBhZ2UgPT09IDAgfHwgKHBhZ2UgPiBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzICYmIGFwcFNlYXJjaEVsZW1lbnQucGFnZXMgPiAwKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBhcHBTZWFyY2hFbGVtZW50LnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIHBhZ2VyLmJ1dHRvbnMgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgYXBwU2VhcmNoRWxlbWVudC5wYWdlLCBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdChmYWxzZSwgYXBwU2VhcmNoRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFRPRE8gU3Bvc3RhcmUgaW4gU2VsZWN0aW9uSGFuZGxlclxyXG4gICAgICogXHJcbiAgICAgKiBHZXN0aXNjZSBpIGNsaWNrIHN1bGxhIHRhYmVsbGEgc29sbyBwZXIgbGUgcmlnaGUgYSBncnVwcG8uIFxyXG4gICAgICogTyByaW11b3ZlIGdsaSBlbGVtZW50aSBhdHR1YWxtZW50ZSBwcmVzZW50aSBvIGNhcmljYSBpbCBjb250ZW51dG8gZGVsIGdydXBwb1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gYmluZGF0byBzdSBjdWkgc2kgw6ggZWZmZXR0dWF0byBpbCBjbGlja1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29wZXJhaXpvbmUgw6ggYW5kYXRhIGEgYnVvbiBmaW5lLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlR3JvdXBDbGljayhncm91cDogR3JvdXApOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgY2FzdGVkID0gdGhpcy5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+O1xyXG4gICAgICAgIGxldCBhbnlHID0gKDxhbnk+Z3JvdXApO1xyXG4gICAgICAgIGFueUcuX2V4cGFuZGVkID0gIWFueUcuX2V4cGFuZGVkO1xyXG5cclxuICAgICAgICAvLyBTb25vIGluIG1vZGFsaXTDoCByYWdncnVwcGFtZW50byB2aXJ0dWFsZSBkYSBhcnJheTogRXNwYW5kZXJlIHNpZ25pZmljYSByZW5kZXJlIHZpc2liaWxpIHR1dHRpIGdsaSBvZ2dldHRpIHJlbGF0aXZpIGEgcXVlc3RvIGdydXBwbywgdmljZXZlcnNhIGlsIGNvbnRyYXJyZVxyXG4gICAgICAgIGlmICh0aGlzLkFycmF5R3JvdXBpbmcpIHtcclxuICAgICAgICAgICAgbGV0IGFsbFJlbGF0aXZlcyA9IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT5cclxuICAgICAgICAgICAgICAgICh0Ll9ncm91cCAmJiAoKGFueUcuX2V4cGFuZGVkICYmIHQuX3BhcmVudCA9PSBhbnlHLl90aGlzS2V5KSB8fCAoIWFueUcuX2V4cGFuZGVkICYmIHQuX3BhcmVudCAmJiB0Ll9wYXJlbnQuc3RhcnRzV2l0aChhbnlHLl90aGlzS2V5KSkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKHQuX2l0ZW0gJiYgKChhbnlHLl9leHBhbmRlZCAmJiB0Ll90aGlzS2V5ID09IGFueUcuX3RoaXNLZXkpIHx8ICghYW55Ry5fZXhwYW5kZWQgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGFueUcuX3RoaXNLZXkpKSkpKVxyXG4gICAgICAgICAgICBhbGxSZWxhdGl2ZXMuZm9yRWFjaCh0ID0+IHsgdC5fdmlzaWJsZSA9IGFueUcuX2V4cGFuZGVkOyBpZiAodC5fZ3JvdXApIHQuX2V4cGFuZGVkID0gZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhbnlHLl9leHBhbmRlZCkge1xyXG4gICAgICAgICAgICAvLyBSZXNldHRvIGlwcFxyXG4gICAgICAgICAgICBjYXN0ZWQuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICAgICAgaWYgKCFjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzKVxyXG4gICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3VwcyA9IFtuZXcgR3JvdXBGaWx0ZXIoZ3JvdXAuY29sdW1uLCBncm91cC52YWx1ZSldO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBsZXZlbCA9IGFueUcuX2dyb3VwbGV2ZWw7XHJcbiAgICAgICAgICAgICAgICAvLyBzZSBpbCBncnVwcG8gY2xpY2NhdG8gbm9uIGhhIHVuIGxpdmVsbG8gw6ggaWwgcHJpbW8gZ3J1cHBvLCBxdWluZGkgb3JkaW5hbWVudG8gdW5pY29cclxuICAgICAgICAgICAgICAgIC8vIGFsdHJpbWVudGkgZGV2byByaW11b3ZlcmUgdHV0dGkgaSBmaWx0cmkgc3UgbGl2ZWxsaSBzdXBlcmlvcmkgYWwgbGV2ZWwgY2xpY2NhdG8gZSBhZ2dpdW5nZXJlIGlsIGxldmVsIGNsaWNjYXRvXHJcbiAgICAgICAgICAgICAgICBpZiAoIWxldmVsKVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMgPSBbbmV3IEdyb3VwRmlsdGVyKGdyb3VwLmNvbHVtbiwgZ3JvdXAudmFsdWUpXTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBhbnlHLl9wYXJlbnRSb3V0ZS5mb3JFYWNoKChzdGVwOiBHcm91cFJvdXRlRnJhZ21lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3Vwcy5wdXNoKG5ldyBHcm91cEZpbHRlcihzdGVwLmNvbHVtbiwgc3RlcC52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMucHVzaChuZXcgR3JvdXBGaWx0ZXIoZ3JvdXAuY29sdW1uLCBncm91cC52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoID0gKGFueUcuX3BhcmVudCB8fCAnJykgKyBncm91cC52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGhvIGNoaXVzbyB1biBncnVwcG8gbm9uIG1pIHNlcnZlIHJpZWZmZXR0dWFyZSByaWNlcmNlLCBtaSBiYXN0YSBlbGltaW5hcmUgZGFnbGkgb2dnZXR0aSBiaW5kYXRpIHR1dHRpIGdsaSBlbGVtZW50aSBzb3R0b3N0YW50aSBhIHF1ZWwgZ3J1cHBvXHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRTb3VyY2UgPSB0aGlzLmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9wYXJlbnQgfHwgIXQuX3BhcmVudC5zdGFydHNXaXRoKHBhdGgpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGRldm8gcGVyw7IgYW5jaGUgcmltdW92ZXJlIGV2ZW50dWFsaSBjYWNoZSByZWxhdGl2ZVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZSA9IHRoaXMuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmZpbHRlcih0ID0+IHQucGF0aCAhPSBwYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlc3Rpc2NlIGxhIHNlbGV6aW9uZSBnbG9iYWxlIGRlZ2xpIG9nZ2V0dGksIHNpYSBwZXIgcGFnaW5hIGNoZSBhIGxpdmVsbG8gZGkgKipTZWxlY3RBbGwqKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VkVmFsIFZhbG9yZSBmb3J6YXRvIGRpIGNoZWNrIGRhIGFzc2VnbmFyZSBhZ2xpIG9nZ2V0dGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdsb2JhbENoZWNrQ2hhbmdlZChmb3JjZWRWYWw6IGJvb2xlYW4gPSBudWxsKSB7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXMoKTtcclxuXHJcbiAgICAgICAgLy8gUHJlbmRvIHR1dHRpIGdsaSBlbGVtZW50aSBwcmVzZW50aSBpbiBxdWVzdGEgdmlzdGEuIFNlIGhvIGdydXBwaSBwcmVuZG8gc29sbyBpIGdydXBwaSBhIGxpdmVsbG8gMCwgYWx0cmltZW50aSBwcmVuZG8gdHV0dGkgZ2xpIG9nZ2V0dGkgcGVyIHNlbGV6aW9uYXJsaVxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuYm91bmRTb3VyY2UuZmluZCh0ID0+IHQuX2dyb3VwKSA/IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgJiYgIXQuX3BhcmVudCkgOiB0aGlzLmJvdW5kU291cmNlO1xyXG4gICAgICAgIHZhciBpdGVtU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtcywgZm9yY2VkVmFsLCB0aGlzLmdsb2JhbENoZWNrKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChpdGVtU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogR2VzdGlzY2UgaSBjbGljayBzdWxsYSB0YWJlbGxhLCBnZXN0ZW5kbyBldmVudHVhbG1lbnRlIGFuY2hlIGdsaSBTaGlmdCArIENsaWNrIHBlciBzZWxlemlvbmFyZSB1biByYW5nZSBkaSBvZ2dldHRpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBuYXRpdm8gSFRNTCBkZWwgY2xpY2tcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gYmluZGF0byBzdSBjdWkgc2kgw6ggZWZmZXR0dWF0byBpbCBjbGlja1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29wZXJhaXpvbmUgw6ggYW5kYXRhIGEgYnVvbiBmaW5lLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2xpY2soZXZlbnQ6IGFueSwgaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclRleHRTZWxlY3Rpb24oZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXMoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkaXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuU2hpZnRDbGljayAmJiAhdGhpcy5TaW5nbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0U2VsZWN0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9ncm91cCAmJiAhdC5fc2VwKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHQgPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChzdGFydFNlbGVjdGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZGl0ZW1zLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKHQgPT0gaXRlbSB8fCB0ID09IHRoaXMubGFzdFNlbGVjdGVkKSAmJiAhc3RhcnRTZWxlY3RpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5fc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkaXRlbXMucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHQgPT0gaXRlbSB8fCB0ID09IHRoaXMubGFzdFNlbGVjdGVkKSAmJiBzdGFydFNlbGVjdGluZylcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSAhaXRlbS5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gaXRlbTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGl0ZW1TZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbl9ILmhhbmRsZUl0ZW1zU2VsZWN0aW9uKHNlbGVjdGVkaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG5cclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KGl0ZW1TZWxlY3Rpb24pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGRpIHVuYSBwYWdpbmEgaW4gYXZhbnRpIChvIGluZGVpdHJvKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE51bWVybyBkaSBwYWdpbmUgZGEgYWdnaXVuZ2VyZSAobyBzb3R0cmFycmUsIHNlIG5lZ2F0aXZvKSBhbGxhIHBhZ2luYSBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRUb1BhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLk1haW5Hcm91cFZpZXcgPyB0aGlzLk1haW5Hcm91cFZpZXcgOiB0aGlzLlZpZXc7XHJcblxyXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoKCh0aGlzLlNlYXJjaFZpZXcgfHwgdmlldyk/LnBhZ2UgfHwgMCkgKyBwYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGFsbGEgcGFnaW5hIHNwZWNpZmljYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgUGFnaW5hIGEgY3VpIG5hdmlnYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnb1RvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdmlldyA9IHRoaXMuTWFpbkdyb3VwVmlldyA/IHRoaXMuTWFpbkdyb3VwVmlldyA6ICh0aGlzLmFycmF5TW9kZSA/IHRoaXMuU2VhcmNoVmlldyA6IHRoaXMuVmlldyk7XHJcbiAgICAgICAgaWYgKCF2aWV3LnBhZ2UgfHwgIXZpZXcucGFnZXMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGFwcFNlYXJjaEVsZW1lbnQgPSB0aGlzLlNlYXJjaFZpZXcgfHwgdmlldztcclxuICAgICAgICBpZiAocGFnZSA9PT0gMCB8fCAocGFnZSA+IGFwcFNlYXJjaEVsZW1lbnQucGFnZXMgJiYgYXBwU2VhcmNoRWxlbWVudC5wYWdlcyA+IDApKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGFwcFNlYXJjaEVsZW1lbnQucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gKHZpZXcuaXRlbXMubGVuZ3RoIHx8IHZpZXcuZ3JvdXBzPy5sZW5ndGggfHwgMCk7XHJcbiAgICAgICAgbGV0IGlwcCA9IHZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgfHwgMTU7XHJcbiAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIGFwcFNlYXJjaEVsZW1lbnQucGFnZSwgYXBwU2VhcmNoRWxlbWVudC5wYWdlcywgY291bnQsIGlwcCk7XHJcblxyXG4gICAgICAgIGxldCBoYXNHcm91cGluZ3MgPSAhIXRoaXMuTWFpbkdyb3VwVmlldztcclxuICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlLCBoYXNHcm91cGluZ3MgPyB2aWV3IDogdGhpcy5TZWFyY2hWaWV3ID8gdGhpcy5TZWFyY2hWaWV3IDogbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gcmljaGlhbWF0byBzdWwgY2FtYmlvIGRlbGxhIHBhZ2luYXppb25lLiBWZXJyw6AgcmljaGlhbWF0byBsJ2V2ZW50byAqKmVtaXRTZWFyY2hSZXF1ZXN0KipcclxuICAgICAqIHBlciBjb211bmljYXJlIGFsIGNvbXBvbmVudGUgY2hlIHV0aWxpenphIHF1ZXN0YSB0YWJlbGxhIGNoZSBpIGRhdGkgc29ubyBkYSBhZ2dpb3JuYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkl0ZW1zUGVyUGFnZUNoYW5nZWQobmV3SXBwKSB7XHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuVmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZSA9IG5ld0lwcDtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICBpZiAodGhpcy5NYWluR3JvdXBWaWV3KVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuTWFpbkdyb3VwVmlldyk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgIC8vIFF1ZXN0byBzZWNvbmRvIG1lIHNpIHB1w7IgcG9ydGFyZSBhIGxpdmVsbG8gdW4gcG8nIHBpw7kgYWx0b1xyXG4gICAgICAgICAgICB0aGlzLlNlYXJjaFZpZXcucGFnZSA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSwgdGhpcy5TZWFyY2hWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBzdWwgY2FtYmlvIGRlbGxhIHBhZ2luYXppb25lLiBWZXJyw6AgcmljaGlhbWF0byBsJ2V2ZW50byAqKmVtaXRTZWFyY2hSZXF1ZXN0KiogY29uIGxhIHZpc3RhIGRlbCBzZXBhcmF0b3JlICovXHJcbiAgICBwdWJsaWMgb25Hcm91cEl0ZW1zUGVyUGFnZUNoYW5nZWQocGFnZXI6IEdyb3VwUGFnZXIsIG5ld0lwcDogbnVtYmVyKSB7XHJcbiAgICAgICAgcGFnZXIudmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZSA9IG5ld0lwcDtcclxuICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHBhZ2VyLnZpZXcpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiogTWV0b2RvIGNoZSBnZXN0aXNjZSBsYSBtb2RpZmljYSBkZWwgdGVtcG8gc3BlY2lmaWNhdG8gcGVyIGwnYWdnaW9ybmFtZW50byBhdXRvbWF0aWNvICovXHJcbiAgICBwdWJsaWMgYXV0b1VwZGF0ZUNoYW5nZWQoKSB7XHJcbiAgICAgICAgaWYgKCEvXlsxLTldXFxkKiQvLnRlc3QodGhpcy5zZWNvbmRzKSlcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmRzID0gJzEwJztcclxuXHJcbiAgICAgICAgbGV0IHNlY29uZHNJbk1zID0gcGFyc2VJbnQodGhpcy5zZWNvbmRzLCBudWxsKSAqIDEwMDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGUpXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UpOyB9LCBzZWNvbmRzSW5Ncyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlVGltZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoaWFtYXRvIGRhbCBjbGljayBzdSB1bmEgZGVsbGUgY29sb25uZSBnZW5lcmF0ZSBkYWxsJ0lucHV0ICoqRHluYW1pY09wZXJhdGlvbnMqKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIEwnb2dnZXR0byBzdSBjdWkgdmEgZWZmZXR0dWF0YSBsJ29wZXJhemlvbmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcGlkIENvZGljZSBpZGVudGlmaWNhdGl2byBkZWxsJ29wZXJhemlvbmUgZGEgZWZmZXR0dWFyc2lcclxuICAgICAqL1xyXG4gICAgcHVibGljIGR5bmFtaWNPcGVyYXRpb24oaXRlbTogYW55LCBvcGlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm9uRHluYW1pY09wZXJhdGlvbi5lbWl0KHsgaWQ6IG9waWQsIGl0ZW06IGl0ZW0gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIGNvbnRlbnV0byBkZWxsJ0VzVGQgZGEgdXRpbGl6emFyZSBwZXIgbGEgY29sb25uYSBzcGVjaWZpY2F0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uIENvbG9ubmEgcGVyIGN1aSBjZXJjYXJlIGxhIGNlbGxhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOb21lIGRpcmV0dG8gcGVyIGNlcmNhcmUgaWwgVEQgY29uIGwnSUQuIFF1ZXN0YSB2YXJpYWJpbGUgaGEgcHJpb3JpdMOgIHJpc3BldHRvIGEgKipjb2x1bW4qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7VGVtcGxhdGVSZWY8YW55Pn0gVGVtcGxhdGUgZGEgdXNhcmUgcGVyIGxhIGNvbG9ubmFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmRFc1RkKGNvbHVtbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgdmFyIEVzVGQgPSB0aGlzLkVzVGRzRGlyZWN0aXZlLmZpbmQoKGl0ZW0pID0+IG5hbWUgPyBpdGVtLnRkID09PSBuYW1lIDogaXRlbS50ZEZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIC8vIE5hbWUgbm9uIHRyb3ZhdG8sIGZhbGxiYWNrIGFsIG5vbWUgZGVsbGEgY29sb25uYVxyXG4gICAgICAgIGlmIChuYW1lICYmIGNvbHVtbiAmJiAhRXNUZClcclxuICAgICAgICAgICAgRXNUZCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUuZmluZCgoaXRlbSkgPT4gaXRlbS50ZEZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIHJldHVybiBFc1RkID8gRXNUZC5UZW1wbGF0ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIGNvbnRlbnV0byBkZWxsJ2VkaXRvciBFc1RkIGRhIHV0aWxpenphcmUgcGVyIGxhIGNvbG9ubmEgc3BlY2lmaWNhdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbiBDb2xvbm5hIHBlciBjdWkgY2VyY2FyZSBsJ2VkaXRvclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9tZSBkaXJldHRvIHBlciBjZXJjYXJlIGwnRWRpdG9yIGNvbiBsJ0lELiBRdWVzdGEgdmFyaWFiaWxlIGhhIHByaW9yaXTDoCByaXNwZXR0byBhICoqY29sdW1uKipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1RlbXBsYXRlUmVmPGFueT59IFRlbXBsYXRlIGRhIHVzYXJlIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5kRWRpdG9yKGNvbHVtbjogc3RyaW5nLCBuYW1lOiBzdHJpbmcgPSBudWxsKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICAgICAgdmFyIEVkaXRvciA9IHRoaXMuRXNUZEVkaXRvckRpcmVjdGl2ZXMuZmluZCgoaXRlbSkgPT4gbmFtZSA/IGl0ZW0uZWRpdG9yID09PSBuYW1lIDogaXRlbS5lZGl0b3JGb3JQcm9wZXJ0eSA9PT0gY29sdW1uKTtcclxuICAgICAgICAvLyBOYW1lIG5vbiB0cm92YXRvLCBmYWxsYmFjayBhbCBub21lIGRlbGxhIGNvbG9ubmFcclxuICAgICAgICBpZiAobmFtZSAmJiBjb2x1bW4gJiYgIUVkaXRvcilcclxuICAgICAgICAgICAgRWRpdG9yID0gdGhpcy5Fc1RkRWRpdG9yRGlyZWN0aXZlcy5maW5kKChpdGVtKSA9PiBpdGVtLmVkaXRvckZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIHJldHVybiBFZGl0b3IgPyBFZGl0b3IuVGVtcGxhdGUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXF1aXZhbGVudGUgZGVsIG1ldG9kbyAqKmFkZFRvUGFnZSoqIHJpYWRhdHRhdG8gcGVyIGxhIG1vZGFsaXTDoCBhcnJheVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIE51bWVybyBkaSBwYWdpbmUgZGEgYWdnaXVuZ2VyZSAobyBzb3R0cmFycmUsIHNlIG5lZ2F0aXZvKSBhbGxhIHBhZ2luYSBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcnJheUFkZFRvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmFycmF5R29Ub1BhZ2UodGhpcy5hcnJheW1vZGVQYWdlICsgcGFnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVxdWl2YWxlbnRlIGRlbCBtZXRvZG8gKipnb1RvUGFnZSoqIHJpYWRhdHRhdG8gcGVyIGxhIG1vZGFsaXTDoCBhcnJheVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIFBhZ2luYSBhIGN1aSBuYXZpZ2FyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJyYXlHb1RvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAocGFnZSA9PT0gMCB8fCBwYWdlID4gdGhpcy5hcnJheW1vZGVQYWdlcylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYXJyYXltb2RlUGFnZSA9IHBhZ2U7XHJcblxyXG4gICAgICAgIC8vIFJpZm9yem8gaWwgd3JpdGV2YWx1ZSBpbiBtb2RvIGNoZSBpbCBjb2RpY2UgcGFzc2kgZGFsbGEgZ2VzdGlvbmUgY29tZSBzZSBmb3NzZSBmYXR0YSByaXBhcnRpcmUgdW5hIHJpY2VyY2FcclxuICAgICAgICB0aGlzLmludGVybmFsV3JpdGVWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VzdGlvbmUgZGVpIGNsaWNrIHN1bGxlIG9wemlvbmkgZGVsIG1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgZ2VuZXJhdG8gZGFsbCdJbnB1dCAqKkNvcm5lck1lbnVPcHRpb25zKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29ybmVyaWQgQ29kaWNlIGRlbGwnb3BlcmF6aW9uZSBzZWxlemlvbmF0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29ybmVyQWN0aW9uQ2xpY2tlZChjb3JuZXJpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5vbkNvcm5lckFjdGlvbi5lbWl0KHsgaWQ6IGNvcm5lcmlkLCBlc3RhYmxlOiB0aGlzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIEltcG9zdGF6aW9uZSBtb2RhbGl0w6AgZGVsbCdFc1RhYmxlIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geydhcnJheScgfCAndmlldycgfCAncmVwb3J0J30gbW9kZSBNb2RhbGl0w6AgZGEgaW1wb3N0YXJlXHJcbiAgICAgKiovXHJcbiAgICBwcml2YXRlIHNldE1vZGUobW9kZTogJ2FycmF5JyB8ICd2aWV3Jykge1xyXG4gICAgICAgIHRoaXMudmlld01vZGUgPSBtb2RlID09ICd2aWV3JztcclxuICAgICAgICB0aGlzLmFycmF5TW9kZSA9IG1vZGUgPT0gJ2FycmF5JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZWZmZXR0dWFyZSBjaGlhbWF0ZSBpbnRlcm5lIGRpIGFsbGluZWFtZW50byBhbGxhIGZ1bnppb25lICoqd3JpdGVWYWx1ZSoqLCBcclxuICAgICAqIGltcG9zdGFuZG8gcHJpbWEgKippbnRlcm5hbFdyaXRlQ2FsbCoqIGluIG1vZG8gZGEgbm9uIGVmZmV0dHVhcmUgb3BlcmF6aW9uaSBpbnV0aWxpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbFdyaXRlVmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFdyaXRlQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuVmlldyk7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFdyaXRlQ2FsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gZXZlbnR1YWxtZW50ZSByaWNoaWFtYWJpbGUgYW5jaGUgZGFsIGNvbXBvbmVudGUgZXN0ZXJubyBjaGUgcGVybWV0dGUgZGkgZm9yemFyZSB1biByZWZyZXNoIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIHB1YmxpYyBmb3JjZVJlZnJlc2goKSB7XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIFZpZXcgdmllbmUgbWFudGVudXRvIGluIGF1dG9tYXRpY28gaWwgbnVtZXJvIGRpIHBhZ2luYSwgbWEgcGVyIGxhIG1vZGFsaXTDoCBhcnJheSBkZXZvIHByZW5kZXJlIGxlIGluZm8gZGkgcGFnaW5hemlvbmUgcHJpbWEgZSByaWFwcGxpY2FybGUgZG9wb1xyXG4gICAgICAgIGxldCBhcnJheVBhZ2U6IG51bWJlcjtcclxuICAgICAgICBsZXQgYXJyYXlJcHA6IG51bWJlcjtcclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgYXJyYXlQYWdlID0gdGhpcy5hcnJheW1vZGVQYWdlO1xyXG4gICAgICAgICAgICBhcnJheUlwcCA9IHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuVmlldyk7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5BcnJheW1vZGVJdGVtc1BlclBhZ2UgPSBhcnJheUlwcDtcclxuICAgICAgICAgICAgdGhpcy5hcnJheUdvVG9QYWdlKGFycmF5UGFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgY2hlIGluIGJhc2UgYWkgY2xpY2sgc3UgdW5hIGNlbGxhIGNhcGlzY2Ugc2Ugc3RvIGVmZmV0dHVhbmRvIHVuJ29wZXJhemlvbmUgZGkgc2VsZXppb25lIG8gc2Ugc3RvIGVudHJhbmRvIG5lbGwnZWRpdCBkaSB1bmEgY2VsbGEgY29uIHVuIGRvcHBpbyBjbGlja1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gJGV2ZW50IEV2ZW50byBuYXRpdm8gamF2YXNjcmlwdFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gUmlmZXJpbWVudG8gYSBiaW5kZXIgZGVsbGEgcmlnYVxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gSXRlbSBjaGUgcmFwcHJlc2VudGEgaWwgY29udGVzdG8gc3UgY3VpIMOoIHN0YXRvIGVmZmV0dHVhdG8gdW4gY2xpY2tcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dJbmRleCBJbmRpY2UgZGVsbGEgcmlnYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGJDbGlja0VkaXRPclNpbmdsZUNsaWNrUm93U2VsZWN0aW9uKCRldmVudDogYW55LCByb3dJdGVtOiBUZEVsZW1lbnQsIGl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgICAgICAvLyBNb2RhbGl0w6AgRWRpdGFibGUsIGdlc3Rpc2NvIGkgZG9wcGkgY2xpY2sgc2VuemEgcGVyw7IgcmFsbGVudGFyZSBsYSBtb2RhbGl0w6AgZGkgc2VsZXppb25lIGEgcmFuZ2VcclxuICAgICAgICBpZiAodGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAvLyBTZWNvbmRvIGNsaWNrOiBzZSBpbCB0aW1lciBub24gw6ggc2NhZHV0byDDqCB1biBkb3BwaW8gY2xpY2sgZWQgZXNlZ3VvIGlsIHJlc3RvXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxEYkNsaWNrVGltZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dJdGVtLlByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVwVXNlckVkaXQocm93SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2VsbENsaWNrVGltZXIoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHJpbW8gY2xpY2s6IG5vbiBmYSBuaWVudGUgZSBzZSBpbCB0ZW1wbyBwZXIgaWwgc2Vjb25kbyBjbGljayBzY2FkZSByZXNldHRhIHR1dHRvXHJcbiAgICAgICAgICAgIHRoaXMuY2VsbERiQ2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckNlbGxDbGlja1RpbWVyKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0sIHRoaXMuU2VsZWN0aW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgfSwgdGhpcy5kb3VibGVDbGlja0J1ZmZlck1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluIG1vZGFsaXTDoCBhIHJhbmdlIGxhIGNyZWF6aW9uZSBkZWwgcmFuZ2Ugw6ggZ2VzdGl0YSBkYWkgbW91c2Vkb3duLCBtb3ZlIGVkIHVwLi4uXHJcbiAgICAgICAgLy8gTGEgc2VsZXppb25lIGRlbGxlIHJpZ2hlIGludmVjZSDDqCBnZXN0aXRhIGRhbGxlIGNhc2VsbGluZSBhIHNpbmlzdHJhXHJcbiAgICAgICAgaWYgKHRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZmF0dG8gY2xpY2sgY29sIGNvbnRyb2wgYXR0YWNjYXRvIGVzY28gc3ViaXRvIGRhdG8gY2hlIGRldmUgc29sbyBwZXJtZXR0ZXJlIGxhIG5hdmlnYXppb25lIGRlaSBsaW5rXHJcbiAgICAgICAgaWYgKCRldmVudC5jdHJsS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFR1dHRpIGkgY2xpY2sgc3UgdW5hIGNlbGxhIGdpw6AgaW4gZWRpdCBub24gZGV2b25vIGVmZmV0dHVhcmUgbGEgc2VsZXppb25lIGRlbGxhIHJpZ2FcclxuICAgICAgICBpZiAoKHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uPy5sZW5ndGggPiAwICYmICg8RXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uPjxhbnk+cm93SXRlbSkuZWRpdHMgJiYgKDxFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24+PGFueT5yb3dJdGVtKS5lZGl0c1tpdGVtLl9oYXNoXT8uX2VkaXRpbmcpIHx8XHJcbiAgICAgICAgICAgICg8YW55PnJvd0l0ZW0pLl9lZGl0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFBlciBldml0YXJlIGRpIHJhbGxlbnRhcmUgYSBwcmVzY2luZGVyZVxyXG4gICAgICAgIGlmICghdGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKCRldmVudCwgaXRlbSwgdGhpcy5TZWxlY3Rpb24sIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGdlc3Rpc2NlIGlsIGNvbWFuZG8gXCJDb3BpYVwiIGJ1dHRhbmRvIGkgdmFsb3JpIHNlbGV6aW9uYXRpIG5lbGxhIGNsaXBib2FyZCBpbiBiYXNlIGFsIGxvcm8gdGlwbyAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVDb3B5KCkge1xyXG4gICAgICAgIGlmKCF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGV0IHNlbCA9IHRoaXMuc2VsZWN0aW9uX0guZ2V0U2VsZWN0aW9uU3RhdHVzU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKHNlbC5sZW5ndGggPiAwICYmIHNlbFswXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5zZWxlY3Rpb25fSC5nZXRDbGlwYmFyZFRleHRGcm9tU2VsZWN0aW9uKHNlbCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkU2VydmljZS5jb3B5VGV4dFRvQ2xpcGJvYXJkKHNlbGVjdGlvblRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlSW5mbyh0aGlzLmxjLmxvYyhcIlZhbHVlcyBjb3BpZWQgaW4gdGhlIGNsaXBib2FyZFwiKSwgXCJ0b2FzdHJcIiwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGdlc3Rpc2NlIGlsIGNvbWFuZG8gXCJJbmNvbGxhXCIgcHJlbmRlbmRvIGkgZGF0aSBkZWxsYSBjbGlwYm9hcmQgZSBhcHBsaWNhbmRvbGkgYWwgcmFuZ2UgZGkgc2VsZXppb25lIGF0dHVhbGUgaW4gYmFzZSBhbCB0aXBvIGRlbGxlIGNlbGxlIHNvdHRvICovXHJcbiAgICBoYW5kbGVQYXN0ZSgpIHtcclxuICAgICAgICBpZighdGhpcy5SYW5nZVNlbGVjdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGxldCBzZWwgPSB0aGlzLnNlbGVjdGlvbl9ILmdldFNlbGVjdGlvblN0YXR1c1NlbGVjdGlvbigpO1xyXG4gICAgICAgIGlmIChzZWwubGVuZ3RoID4gMCAmJiBzZWxbMF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZFNlcnZpY2UuZ2V0Q2xpcGJvYXJkKFwibWF0cml4XCIsICh2YWx1ZXM6IHN0cmluZ1tdW10pID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEZpeCBjbGlwYm9hcmQgc2VydmljZSBjaGUgcGFyZSB1biBwbycgc3Ryb256YSwgcmltdW92byBsJ3VsdGltbyBhcnJheSBzZSBtaSBhY2NvcmdvIGNoZSDDqCB1biBzaW5nb2xvIGFycmF5IGNvbiB1biBzb2xvIGVsZW1lbnRvIHZ1b3RvXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDAgJiYgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXS5sZW5ndGggPT0gMSAmJiB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdWzBdID09ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UodmFsdWVzLmxlbmd0aCAtIDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXNbMF0ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBzZSBsYSBtb2RpZmljYSDDqCBhYmlsaXRhdGFcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tc2dFeHRzLnNpbXBsZVdhcm5pbmcodGhpcy5sYy5sb2MoXCJEYXRhIGZvciB0aGlzIHRhYmxlIGNhbm5vdCBiZSBlZGl0ZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb250cm9sbG8gY2hlIHF1ZWxsbyBjaGUgc3RvIGNvcGlhbmRvIHNpYSBkZWxsYSBzdGVzc2EgZGltZW5zaW9uZSBkZWxsYSBzZWxlemlvbmUgc3VsbCdlcy10YWJsZSwgdHJhbm5lIG5lbCBjYXNvIGhvIHVuIHNpbmdvbG8gdmFsb3JlIGRhIGNvcGlhcmVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHNlbC5sZW5ndGggIT0gdmFsdWVzLmxlbmd0aCB8fCBzZWxbMF0ubGVuZ3RoICE9IHZhbHVlc1swXS5sZW5ndGgpICYmICh2YWx1ZXMubGVuZ3RoICE9IDEgfHwgdmFsdWVzWzBdLmxlbmd0aCAhPSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlV2FybmluZyh0aGlzLmxjLmxvYyhcIlNpemUgb2YgY29waWVkIGRhdGEgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2YgdGhlIHNlbGVjdGlvblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIGxlIGRpbWVuc2lvbmkgY29pbmNpZG9ubyBjb3BpbyBkYSB1bmEgcGFydGUgYWxsJ2FsdHJhXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoYW5nZXM6IEVzVGFibGVNb2RlbENoYW5nZVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCBzZWwubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHNlbFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsID0gcm93W2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2UgaG8gdW4gc2luZ29sbyB2YWxvcmUgbG8gYXBwbGljbyBhIHR1dHRhIGxhIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzLmxlbmd0aCA9PSAxICYmIHZhbHVlc1swXS5sZW5ndGggPT0gMSA/IHZhbHVlc1swXVswXSA6IHZhbHVlc1tyXVtjXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9sZCA9IGNlbGwudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbml1ID0gY2VsbC52YWxfc2V0dGVyKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2xkZGF0ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24ob2xkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuaXVkYXRlID0gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbihuaXUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGRkYXRlICYmIG5pdWRhdGUgJiYgb2xkZGF0ZS5pc1NhbWUgJiYgb2xkZGF0ZS5pc1NhbWUobml1ZGF0ZSkpIHx8IG9sZCA9PT0gbml1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChuZXcgRXNUYWJsZU1vZGVsQ2hhbmdlKGNlbGwuaXRlbSwgY2VsbC5oZWFkZXIsIGNlbGwucHJvcGVydHksIG9sZCwgbml1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZS5lbWl0KGNoYW5nZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJpcHVsaXNjZSBpbCB0aW1lciB1dGlsaXp6YXRvIHBlciBjYXBpcmUgc2Ugw6ggc3RhdG8gZWZmZXR0dWF0byB1biBkb3BwaW8gY2xpY2sgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIGNsZWFyQ2VsbENsaWNrVGltZXIoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2VsbERiQ2xpY2tUaW1lcilcclxuICAgICAgICB0aGlzLmNlbGxEYkNsaWNrVGltZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlciBjbGljayBzaW5nb2xvIHN1IHVuYSByaWdhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSAkZXZlbnQgRXZlbnRvIG5hdGl2byBqYXZhc2NyaXB0XHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBJdGVtIGNoZSByYXBwcmVzZW50YSBpbCBjb250ZXN0byBzdSBjdWkgw6ggc3RhdG8gZWZmZXR0dWF0byB1biBjbGlja1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3Rpb24gSW5kaWNhIHNlIGxhIHNlbGV6aW9uZSDDqCBhdHRpdmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW50ZXJuYWxDYWxsIEluZGljYSBzZSBsYSBjaGlhbWF0YSBhIHF1ZXN0YSBmdW56aW9uZSDDqCBpbnRlcm5hOiBwZXJtZXR0ZSBkaSBza2lwcGFyZSBpIGNoZWNrIHN1bGxlIEN1c3RvbUNlbGxzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVSb3dDbGljaygkZXZlbnQ6IGFueSwgaXRlbTogYW55LCBzZWxlY3Rpb246IGJvb2xlYW4sIGludGVybmFsQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgLy8gU2UgaG8gdW4gY3RybCBwcmVtdXRvIGVzY28gY29uIHRydWUgaW4gbW9kbyBkYSBmYXJlIGJ1YmJsaW5nIGRlbGwnZXZlbnRvIGUgbGFzY2lhcmxvIGdlc3RpcmUgYWwgYnJvd3NlciAobGluayBlY2MuLi4pXHJcbiAgICAgICAgLy8gU3Rlc3NhIGNvc2Egc2UgaG8gY3VzdG9tIGNlbGwgZGF0byBjaGUgbGEgZ2VzdGlvbmUgZGVpIGNsaWNrIHZpZW5lIGFmZmlkYXRhIGFpIHNpbmdvbGkgVERcclxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgKHRoaXMuVXNlQ3VzdG9tQ2VsbHMgJiYgIWludGVybmFsQ2FsbCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uICYmICFpdGVtLmxvY2tlZCAmJiAhaXRlbS5fc2VwICYmICFpdGVtLl9ncm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1cygpO1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUdyb3VwQ2xpY2soaXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPcmEgY2hlIG5vbiDDqCBhdHRhY2NhdG8gZGlyZXR0YW1lbnRlIGFsbCdodG1sIGRldm8gZmFyZSB1biBtYXJrZm9yY2hlY2sgZmluaXRlIGxlIG9wZXJhemlvbmkgc3VpIGdyb3VwaW5nXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYSBtb2RpZmljYSBkZWxsJ3V0ZW50ZSDDqCBpbml6aWF0YS4gU2kgaW1wb3N0YSBsYSB2YXJpYWJpbGUgcmVsYXRpdmEgYSBcInRydWVcIiBpbiBtb2RvIGRhIG1vc3RyYXJlIGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqIFxyXG4gICAgICogRG9wbyBjaGUgbCdpbnB1dCDDqCBhcHBhcnNvLCBkb3BvIHVuIGNpY2xvIGRpIENoYW5nZSBEZXRlY3Rpb24gdmllbmUgYXR0aXZhdG8gaWwgU3ViamVjdCBjb2xsZWdhdG8gYWxsJ2lucHV0IGNoZSBzZXJ2aXLDoCBhIGVmZmV0dHVhcmUgaWwgZm9jdXNcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gRWxlbWVudG8gZGkgcmlnYSBzdSBjdWkgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gc29wcmEgaWwgcXVhbGUgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldHVwVXNlckVkaXQocm93SXRlbTogVGRFbGVtZW50LCBpdGVtOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuRWRpdGFibGUgJiYgcm93SXRlbS5Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAoPEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbj48YW55PnJvd0l0ZW0pLmVkaXRzW2l0ZW0uX2hhc2hdID0geyBfZWRpdGluZzogdHJ1ZSwgb2xkX3ZhbHVlOiBpdGVtW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkub2xkX3ZhbHVlID0gaXRlbVtyb3dJdGVtLlByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5Gb2N1c1N1YmplY3QubmV4dCgpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExhIG1vZGlmaWNhIGRlbGwndXRlbnRlIMOoIHRlcm1pbmF0YS4gU2kgcmVpbXBvc3RhIGxhIHZhcmlhYmlsZSByZWxhdGl2YSBhIFwiZmFsc2VcIiBpbiBtb2RvIGRhIG5hc2NvbmRlcmUgbCdpbnB1dCBkaSB0ZXN0byBlIHNpIGVtZXR0ZSBsYSBtb2RpZmljYSBkZWwgdmFsb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7VGRFbGVtZW50fSByb3dJdGVtIEVsZW1lbnRvIGRpIHJpZ2Egc3UgY3VpIMOoIHN0YXRhIGF0dGl2YXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIHNvcHJhIGlsIHF1YWxlIMOoIHN0YXRhIGF0dGl2YXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggSW5kaWNlIGRlbGxhIGNvbG9ubmEgc3UgY3VpIMOoIGF2dmVudXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5hbGl6ZVVzZXJFZGl0KHJvd0l0ZW06IFRkRWxlbWVudCwgaXRlbTogYW55LCBjb2x1bW5JbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGR5bk1vZGUgPSB0aGlzLkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbj8ubGVuZ3RoID4gMDtcclxuICAgICAgICBsZXQgcm93SXRtID0gZHluTW9kZSA/ICgoPEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbj48YW55PnJvd0l0ZW0pLmVkaXRzW2l0ZW0uX2hhc2hdKSA6ICg8YW55PnJvd0l0ZW0pO1xyXG4gICAgICAgIHJvd0l0bS5fZWRpdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgb2xkID0gcm93SXRtLm9sZF92YWx1ZTtcclxuICAgICAgICBsZXQgbml1ID0gZHluTW9kZSA/IGl0ZW0ucHJvcGVydGllc1tyb3dJdGVtLlByb3BlcnR5TmFtZV0gOiBpdGVtW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXTtcclxuXHJcbiAgICAgICAgbGV0IG9sZGRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG9sZCk7XHJcbiAgICAgICAgbGV0IG5pdWRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG5pdSk7XHJcbiAgICAgICAgaWYgKChvbGRkYXRlICYmIG5pdWRhdGUgJiYgb2xkZGF0ZS5pc1NhbWUgJiYgb2xkZGF0ZS5pc1NhbWUobml1ZGF0ZSkpIHx8IG9sZCA9PT0gbml1KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZS5lbWl0KFtuZXcgRXNUYWJsZU1vZGVsQ2hhbmdlKGl0ZW0sIHJvd0l0ZW0uSUQsIHJvd0l0ZW0uUHJvcGVydHlOYW1lLCBvbGQsIG5pdSldKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXVtjb2x1bW5JbmRleF0udmFsX3NldHRlcihuaXUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdGVkKHNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSwgdmFsdWU6IHN0cmluZyk6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoc291cmNlW2ldLmlkID09IHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVtpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaWQ6IFwiXCIsIGRlc2NyaXB0aW9uOiBcIlwiIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmFuZ2Ugc2VsZWN0aW9uIEV4cGVyaW1lbnRhbHNcclxuXHJcbiAgICBwcml2YXRlIG1vdXNlSXNEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGZpcnN0Q29vcmRpbmF0ZXM6IHtyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXJ9ID0gbnVsbDtcclxuXHJcbiAgICBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0l0ZW06IGFueSwgaXRlbTogYW55KSB7XHJcbiAgICAgICAgLy8gVGFzdG8gZGl2ZXJzbyBkYWwgY2xpY2sgc2luaXN0cm8gLT4gY2lhbyDDqCBzdGF0byBiZWxsbyBlIGludGVuc29cclxuICAgICAgICBpZihldmVudC5idXR0b25zICE9IDEgfHwgIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gVHV0dGkgaSBjbGljayBzdSB1bmEgY2VsbGEgZ2nDoCBpbiBlZGl0IG5vbiBkZXZvbm8gZWZmZXR0dWFyZSBsYSBzZWxlemlvbmUgZGVsbGEgcmlnYVxyXG4gICAgICAgIGlmICgodGhpcy5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24/Lmxlbmd0aCA+IDAgJiYgKDxFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24+PGFueT5yb3dJdGVtKS5lZGl0cyAmJiAoPEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbj48YW55PnJvd0l0ZW0pLmVkaXRzW2l0ZW0uX2hhc2hdPy5fZWRpdGluZykgfHxcclxuICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdmFyIGlkID0gKDxIVE1MRWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS5pZDtcclxuICAgICAgICB0aGlzLm1vdXNlSXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMgPSB7IHJvdzogcGFyc2VJbnQoaWQuc3BsaXQoJ18nKVswXSksIGNvbHVtbjogcGFyc2VJbnQoaWQuc3BsaXQoJ18nKVsxXSkgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guc2luZ2xlQ2VsbFNlbGVjdGlvbih7IHZpZXc6IGV2ZW50LnZpZXcsIHNoaWZ0S2V5OiBmYWxzZSB9LCB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMucm93LCB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMuY29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWVudGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbnMgPT0gMClcclxuICAgICAgICAgICAgdGhpcy5tb3VzZUlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb3VzZUlzRG93biAmJiB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gKDxIVE1MRWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS5pZDtcclxuICAgICAgICAgICAgdmFyIG5ld0Nvb3JkcyA9IHsgcm93OiBwYXJzZUludChpZC5zcGxpdCgnXycpWzBdKSwgY29sdW1uOiBwYXJzZUludChpZC5zcGxpdCgnXycpWzFdKSB9XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guc2luZ2xlQ2VsbFNlbGVjdGlvbih7IHZpZXc6IGV2ZW50LnZpZXcsIHNoaWZ0S2V5OiB0cnVlIH0sIG5ld0Nvb3Jkcy5yb3csIG5ld0Nvb3Jkcy5jb2x1bW4sIHRoaXMuZmlyc3RDb29yZGluYXRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1vdXNldXAoZXZlbnQ6IGFueSl7XHJcbiAgICAgICAgaWYoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5tb3VzZUlzRG93biA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vKiBQaWFuZ29cclxuICAgIHByaXZhdGUgRXNUZHNMaXN0OiBFc1RkUmVmZXJlbmNlW10gPSBbXTtcclxuICAgIGdldENlbGxSZWZlcmVuY2Uob2JqZWN0OiBhbnksIGNvbHVtbjogc3RyaW5nKTogRXNUZCB7XHJcbiAgICAgICAgbGV0IGZrVGhpc1NoaXRJbU91dCA9IHRoaXMudXRpRXh0cy5kZWVwQ2xvbmUob2JqZWN0KTtcclxuICAgICAgICB0aGlzLnV0aWxpdGllc19ILmNhbGN1bGF0ZUhhc2goW2ZrVGhpc1NoaXRJbU91dF0pO1xyXG4gICAgICAgIGxldCBwcm9wID0gY29sdW1uO1xyXG4gICAgICAgIGxldCBoYXNoID0gZmtUaGlzU2hpdEltT3V0Ll9oYXNoO1xyXG5cclxuICAgICAgICBsZXQgdG9SZXQgPSB0aGlzLkVzVGRzTGlzdC5maW5kKGYgPT4gZi5pZCA9PSBwcm9wICYmIGYuaGFzaCA9PSBoYXNoKT8uc2VsZjtcclxuICAgICAgICByZXR1cm4gdG9SZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDZWxsKGV2ZW50OiBFc1RkUmVmZXJlbmNlKSB7XHJcbiAgICAgICAgdGhpcy5Fc1Rkc0xpc3QucHVzaChldmVudCk7XHJcbiAgICB9XHJcbiAgICAvLyogUGlhbmdvIGFuY29yYVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRXNUZFJlZmVyZW5jZSB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgaGFzaDogc3RyaW5nOyBcclxuICAgIHNlbGY6IEVzVGQ7XHJcbn0iXX0=