@universis/ngx-tables 6.13.0 → 6.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash'), require('@ngx-translate/core'), require('@angular/common'), require('iso-639-1/build'), require('@angular/router'), require('@angular/core'), require('@universis/common'), require('@angular/forms'), require('@universis/common/routing'), require('ngx-bootstrap/modal'), require('rxjs'), require('rxjs/operators'), require('@themost/angular'), require('@themost/client'), require('jquery'), require('datatables.net'), require('datatables.net-rowgroup'), require('datatables.net-scroller'), require('datatables.net-colreorder'), require('datatables.net-buttons'), require('datatables.net-fixedcolumns'), require('@angular/common/http'), require('rxjs/add/observable/combineLatest'), require('@universis/forms'), require('@ngrx/store'), require('angular-formio'), require('ngx-bootstrap/progressbar'), require('ngx-pipes')) :
3
- typeof define === 'function' && define.amd ? define('@universis/ngx-tables', ['exports', 'lodash', '@ngx-translate/core', '@angular/common', 'iso-639-1/build', '@angular/router', '@angular/core', '@universis/common', '@angular/forms', '@universis/common/routing', 'ngx-bootstrap/modal', 'rxjs', 'rxjs/operators', '@themost/angular', '@themost/client', 'jquery', 'datatables.net', 'datatables.net-rowgroup', 'datatables.net-scroller', 'datatables.net-colreorder', 'datatables.net-buttons', 'datatables.net-fixedcolumns', '@angular/common/http', 'rxjs/add/observable/combineLatest', '@universis/forms', '@ngrx/store', 'angular-formio', 'ngx-bootstrap/progressbar', 'ngx-pipes'], factory) :
4
- (factory((global.universis = global.universis || {}, global.universis['ngx-tables'] = {}),global.lodash,global.core,global.ng.common,global.ISO6391,global.ng.router,global.ng.core,global.i2,global.ng.forms,global.routing,global.modal,global.rxjs,global.rxjs.operators,global.i1$1,global.client,global.jQuery_,null,null,null,null,null,null,global.ng.common.http,global.rxjs['add/observable/combineLatest'],global.forms$1,global.store,global.angularFormio,global.progressbar,global.ngxPipes));
5
- }(this, (function (exports,lodash,core,common,ISO6391,i1,i0,i2,forms,routing,modal,rxjs,operators,i1$1,client,jQuery_,datatables_net,datatables_netRowgroup,datatables_netScroller,datatables_netColreorder,datatables_netButtons,datatables_netFixedcolumns,http,combineLatest,forms$1,store,angularFormio,progressbar,ngxPipes) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('iso-639-1/build'), require('jquery'), require('datatables.net'), require('datatables.net-rowgroup'), require('datatables.net-scroller'), require('datatables.net-colreorder'), require('datatables.net-buttons'), require('datatables.net-fixedcolumns'), require('rxjs'), require('rxjs/add/observable/combineLatest'), require('@angular/common/http'), require('@themost/client'), require('@themost/angular'), require('@angular/common'), require('@ngx-translate/core'), require('@angular/forms'), require('@universis/common'), require('@universis/common/routing'), require('@universis/forms'), require('angular-formio'), require('ngx-bootstrap/modal'), require('ngx-bootstrap/progressbar'), require('ngx-pipes'), require('lodash'), require('@angular/core'), require('@angular/router'), require('@ngrx/store'), require('rxjs/operators')) :
3
+ typeof define === 'function' && define.amd ? define('@universis/ngx-tables', ['exports', 'iso-639-1/build', 'jquery', 'datatables.net', 'datatables.net-rowgroup', 'datatables.net-scroller', 'datatables.net-colreorder', 'datatables.net-buttons', 'datatables.net-fixedcolumns', 'rxjs', 'rxjs/add/observable/combineLatest', '@angular/common/http', '@themost/client', '@themost/angular', '@angular/common', '@ngx-translate/core', '@angular/forms', '@universis/common', '@universis/common/routing', '@universis/forms', 'angular-formio', 'ngx-bootstrap/modal', 'ngx-bootstrap/progressbar', 'ngx-pipes', 'lodash', '@angular/core', '@angular/router', '@ngrx/store', 'rxjs/operators'], factory) :
4
+ (factory((global.universis = global.universis || {}, global.universis['ngx-tables'] = {}),global.ISO6391,global.jQuery_,null,null,null,null,null,null,global.rxjs,global.rxjs['add/observable/combineLatest'],global.ng.common.http,global.client,global.i1,global.ng.common,global.core,global.ng.forms,global.i2,global.routing,global.forms$1,global.angularFormio,global.modal,global.progressbar,global.ngxPipes,global.lodash,global.ng.core,global.ng.router,global.store,global.rxjs.operators));
5
+ }(this, (function (exports,ISO6391,jQuery_,datatables_net,datatables_netRowgroup,datatables_netScroller,datatables_netColreorder,datatables_netButtons,datatables_netFixedcolumns,rxjs,combineLatest,http,client,i1,common,core,forms,i2,routing,forms$1,angularFormio,modal,progressbar,ngxPipes,lodash,i0,i1$1,store,operators) { 'use strict';
6
6
 
7
7
  /*! *****************************************************************************
8
8
  Copyright (c) Microsoft Corporation. All rights reserved.
@@ -209,9 +209,9 @@
209
209
  function (data, options) {
210
210
  if (Array.isArray(options.commands) && this.injector) {
211
211
  /** @type {?} */
212
- var activatedRoute = this.injector.get(i1.ActivatedRoute);
212
+ var activatedRoute = this.injector.get(i1$1.ActivatedRoute);
213
213
  /** @type {?} */
214
- var router = this.injector.get(i1.Router);
214
+ var router = this.injector.get(i1$1.Router);
215
215
  /** @type {?} */
216
216
  var commands = options.commands.map(function (command) {
217
217
  if (typeof command === 'string') {
@@ -1387,8 +1387,8 @@
1387
1387
  /** @nocollapse */
1388
1388
  ColumnSelectorComponent.ctorParameters = function () {
1389
1389
  return [
1390
- { type: i1.Router },
1391
- { type: i1.ActivatedRoute },
1390
+ { type: i1$1.Router },
1391
+ { type: i1$1.ActivatedRoute },
1392
1392
  { type: modal.BsModalRef },
1393
1393
  { type: i0.ChangeDetectorRef }
1394
1394
  ];
@@ -1483,7 +1483,7 @@
1483
1483
  */
1484
1484
  this.nextActiveTable = this.lastActiveTable.pipe(operators.skip(1));
1485
1485
  _router.events.forEach(function (event) {
1486
- if (event instanceof i1.NavigationStart) {
1486
+ if (event instanceof i1$1.NavigationStart) {
1487
1487
  if (_this._activeTable) {
1488
1488
  _this.activeTable = undefined;
1489
1489
  }
@@ -1515,11 +1515,11 @@
1515
1515
  /** @nocollapse */
1516
1516
  ActivatedTableService.ctorParameters = function () {
1517
1517
  return [
1518
- { type: i1.Router },
1519
- { type: i1.ActivatedRoute }
1518
+ { type: i1$1.Router },
1519
+ { type: i1$1.ActivatedRoute }
1520
1520
  ];
1521
1521
  };
1522
- /** @nocollapse */ ActivatedTableService.ngInjectableDef = i0.defineInjectable({ factory: function ActivatedTableService_Factory() { return new ActivatedTableService(i0.inject(i1.Router), i0.inject(i1.ActivatedRoute)); }, token: ActivatedTableService, providedIn: "root" });
1522
+ /** @nocollapse */ ActivatedTableService.ngInjectableDef = i0.defineInjectable({ factory: function ActivatedTableService_Factory() { return new ActivatedTableService(i0.inject(i1$1.Router), i0.inject(i1$1.ActivatedRoute)); }, token: ActivatedTableService, providedIn: "root" });
1523
1523
  return ActivatedTableService;
1524
1524
  }());
1525
1525
 
@@ -1890,7 +1890,7 @@
1890
1890
  BtnExpDirective.ctorParameters = function () {
1891
1891
  return [
1892
1892
  { type: ActivatedTableService },
1893
- { type: i1$1.AngularDataContext },
1893
+ { type: i1.AngularDataContext },
1894
1894
  { type: i2.ConfigurationService },
1895
1895
  { type: core.TranslateService },
1896
1896
  { type: i2.LoadingService },
@@ -3873,15 +3873,15 @@
3873
3873
  selector: 'app-advanced-table',
3874
3874
  template: "\n <table #table class=\"dataTable\">\n </table>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n </div>\n </div>\n <div #errorTemplate class=\"d-none error-message\">\n <div class=\"text-center\">\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-danger border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-secondary\" [translate]=\"'Tables.DataError.Title'\"></h4>\n <p class=\"font-lg text-secondary mb-1\" [translate]=\"'Tables.DataError.Message'\"></p>\n <p class=\"font-lg text-secondary error-inner-message\">\n <small></small>\n </p>\n </div>\n </div>\n </div>\n ",
3875
3875
  encapsulation: i0.ViewEncapsulation.None,
3876
- styles: ["table.dataTable thead .sorting{background-image:none}table.dataTable thead .sorting_asc{background-position:95% 60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAEtJREFUKJFjYBgywAOKMQALFjE/BgaGTCibjYGBYRM+kz0ZGBh2MTAw8DAwMHAxMDBsY2BgCCBGMQzg1IRNMV5NuVAJXIALqmYwAgBBkAlPRCLcLwAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc{background-position:95% 60%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAArzAAAK8wHvFRX1AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAFNJREFUKJHVzTEKgDAQRNGHZfBg2sSTeDMLKwXPYuVJbBKQQEyrH6bZ+cPyWWaElz4kR5cOJ1b0FXnBVRYjjmIUsGGqvX6OmnImYk+JLTkzpPyBGwrtCvfBe56nAAAAAElFTkSuQmCC)}table.dataTable thead th{color:#73818e;font-size:.75rem;font-weight:600;padding-top:16px;padding-bottom:4px;border-bottom:none;padding-left:8px}table.dataTable tbody tr:first-child td:first-child{border-radius:6px 0}table.dataTable tbody tr:first-child td:last-child{border-radius:0 6px}table.dataTable tbody tr{border-radius:6px}table.dataTable tbody tr td:first-child{border-left:1px solid #c2cfd6}table.dataTable tbody tr td:last-child{border-right:1px solid #c2cfd6}table.dataTable tbody tr td{padding-top:8px;padding-bottom:8px;border-top:1px solid #c2cfd6}table.dataTable tbody tr:last-child td:first-child{border-radius:0 0 0 6px}table.dataTable tbody tr:last-child td:last-child{border-radius:0 0 6px}table.dataTable tbody tr:last-child td{border-bottom:1px solid #c2cfd6}table.dataTable tbody tr.dtrg-group.dtrg-start th{border:2px solid #c2cfd6;border-bottom:1px solid #c2cfd6;color:#3e515b;background-color:#f0f3f5}table.dataTable tbody tr.dtrg-group.dtrg-end th{border-top:2px solid #c2cfd6;border-right:2px solid #c2cfd6;border-left:2px solid #c2cfd6;color:#3e515b;background-color:#f0f3f5}table.dataTable tbody tr:nth-last-child(1) th{border-bottom:2px solid #c2cfd6}table.dataTable td.dataTables_empty{border:none!important}table.dataTable .error-inner-message>small{overflow-wrap:break-word}table.dataTable.no-footer{border-bottom:none}.dataTables_paginate .btn.previous{margin-right:8px}.dataTables_paginate .btn.next{margin-left:8px}.dataTables_info,.dataTables_paginate{margin-top:1rem}.dataTables_paginate span .btn{border-radius:1.5rem}.dataTables_filter{display:none}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:0;overflow:auto}.dataTables_paginate{display:none}.dataTable.processing{opacity:15%}.dataTables_wrapper .dataTables_processing{background:0 0;position:absolute;display:inline-block;top:25%;z-index:5;color:#73818e}.text-decoration-line-through{text-decoration:line-through!important}tr.removed .checkbox+label{visibility:hidden}"]
3876
+ styles: ["div.dataTables_processing>div:last-child>div{background-color:var(--secondary)}table.dataTable thead .sorting{background-image:none}table.dataTable thead tr th{border-bottom:none;font-weight:500;font-size:.75rem}table.dataTable thead th{color:#73818e;font-size:.75rem;font-weight:600;padding-top:16px;padding-bottom:4px;border-bottom:none;padding-left:8px}table.dataTable tbody tr:first-child td:first-child{border-radius:6px 0}table.dataTable tbody tr:first-child td:last-child{border-radius:0 6px}table.dataTable tbody tr{border-radius:6px}table.dataTable tbody tr td:first-child{border-left:1px solid #c2cfd6}table.dataTable tbody tr td:last-child{border-right:1px solid #c2cfd6}table.dataTable tbody tr td{padding-top:8px;padding-bottom:8px;border-top:1px solid #c2cfd6}table.dataTable tbody tr:last-child td:first-child{border-radius:0 0 0 6px}table.dataTable tbody tr:last-child td:last-child{border-radius:0 0 6px}table.dataTable tbody tr:last-child td{border-bottom:1px solid #c2cfd6}table.dataTable tbody tr.dtrg-group.dtrg-start th{border:2px solid #c2cfd6;border-bottom:1px solid #c2cfd6;color:#3e515b;background-color:#f0f3f5}table.dataTable tbody tr.dtrg-group.dtrg-end th{border-top:2px solid #c2cfd6;border-right:2px solid #c2cfd6;border-left:2px solid #c2cfd6;color:#3e515b;background-color:#f0f3f5}table.dataTable tbody tr:nth-last-child(1) th{border-bottom:2px solid #c2cfd6}table.dataTable td.dataTables_empty{border:none!important}table.dataTable .error-inner-message>small{overflow-wrap:break-word}table.dataTable.no-footer{border-bottom:none}.dataTables_paginate .btn.previous{margin-right:8px}.dataTables_paginate .btn.next{margin-left:8px}.dataTables_info,.dataTables_paginate{margin-top:1rem}.dataTables_paginate span .btn{border-radius:1.5rem}.dataTables_filter{display:none}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:0;overflow:auto}.dataTables_paginate{display:none}.dataTable.processing{opacity:15%}.dataTables_wrapper .dataTables_processing{background:0 0;position:absolute;display:inline-block;top:25%;z-index:5;color:#73818e}.text-decoration-line-through{text-decoration:line-through!important}tr.removed .checkbox+label{visibility:hidden}"]
3877
3877
  }] }
3878
3878
  ];
3879
3879
  /** @nocollapse */
3880
3880
  AdvancedTableComponent.ctorParameters = function () {
3881
3881
  return [
3882
- { type: i1$1.AngularDataContext },
3882
+ { type: i1.AngularDataContext },
3883
3883
  { type: undefined, decorators: [{ type: i0.Inject, args: [COLUMN_FORMATTERS,] }] },
3884
- { type: i1.ActivatedRoute },
3884
+ { type: i1$1.ActivatedRoute },
3885
3885
  { type: core.TranslateService },
3886
3886
  { type: i0.Injector },
3887
3887
  { type: AdvancedFilterValueProvider },
@@ -4153,9 +4153,9 @@
4153
4153
  /** @nocollapse */
4154
4154
  AdvancedListComponent.ctorParameters = function () {
4155
4155
  return [
4156
- { type: i1$1.AngularDataContext },
4156
+ { type: i1.AngularDataContext },
4157
4157
  { type: core.TranslateService },
4158
- { type: i1.ActivatedRoute },
4158
+ { type: i1$1.ActivatedRoute },
4159
4159
  { type: i2.ErrorService },
4160
4160
  { type: i2.ToastService },
4161
4161
  { type: i2.ModalService },
@@ -4387,8 +4387,8 @@
4387
4387
  /** @nocollapse */
4388
4388
  AdvancedRowActionComponent.ctorParameters = function () {
4389
4389
  return [
4390
- { type: i1.Router },
4391
- { type: i1.ActivatedRoute },
4390
+ { type: i1$1.Router },
4391
+ { type: i1$1.ActivatedRoute },
4392
4392
  { type: core.TranslateService },
4393
4393
  { type: i2.ModalService }
4394
4394
  ];
@@ -4653,9 +4653,9 @@
4653
4653
  /** @nocollapse */
4654
4654
  AdvancedSearchFormComponent.ctorParameters = function () {
4655
4655
  return [
4656
- { type: i1$1.AngularDataContext },
4656
+ { type: i1.AngularDataContext },
4657
4657
  { type: core.TranslateService },
4658
- { type: i1.ActivatedRoute },
4658
+ { type: i1$1.ActivatedRoute },
4659
4659
  { type: http.HttpClient }
4660
4660
  ];
4661
4661
  };
@@ -5133,9 +5133,9 @@
5133
5133
  /** @nocollapse */
5134
5134
  AdvancedTableModalBaseComponent.ctorParameters = function () {
5135
5135
  return [
5136
- { type: i1.Router },
5137
- { type: i1.ActivatedRoute },
5138
- { type: i1$1.AngularDataContext },
5136
+ { type: i1$1.Router },
5137
+ { type: i1$1.ActivatedRoute },
5138
+ { type: i1.AngularDataContext },
5139
5139
  { type: AdvancedFilterValueProvider },
5140
5140
  { type: common.DatePipe }
5141
5141
  ];
@@ -5226,9 +5226,9 @@
5226
5226
  /** @nocollapse */
5227
5227
  AdvancedSelectComponent.ctorParameters = function () {
5228
5228
  return [
5229
- { type: i1.Router },
5230
- { type: i1.ActivatedRoute },
5231
- { type: i1$1.AngularDataContext },
5229
+ { type: i1$1.Router },
5230
+ { type: i1$1.ActivatedRoute },
5231
+ { type: i1.AngularDataContext },
5232
5232
  { type: AdvancedFilterValueProvider },
5233
5233
  { type: common.DatePipe },
5234
5234
  { type: modal.BsModalRef },
@@ -5523,8 +5523,8 @@
5523
5523
  /** @nocollapse */
5524
5524
  AdvancedTableSettingsComponent.ctorParameters = function () {
5525
5525
  return [
5526
- { type: i1$1.AngularDataContext },
5527
- { type: i1.ActivatedRoute },
5526
+ { type: i1.AngularDataContext },
5527
+ { type: i1$1.ActivatedRoute },
5528
5528
  { type: modal.BsModalService },
5529
5529
  { type: i2.UserStorageService },
5530
5530
  { type: forms.FormBuilder },
@@ -6265,15 +6265,15 @@
6265
6265
  /** @nocollapse */
6266
6266
  AdvancedTableSearchComponent.ctorParameters = function () {
6267
6267
  return [
6268
- { type: i1$1.AngularDataContext },
6269
- { type: i1.ActivatedRoute },
6268
+ { type: i1.AngularDataContext },
6269
+ { type: i1$1.ActivatedRoute },
6270
6270
  { type: common.DatePipe },
6271
6271
  { type: modal.BsModalService },
6272
6272
  { type: i2.UserStorageService },
6273
6273
  { type: core.TranslateService },
6274
6274
  { type: AdvancedFilterValueProvider },
6275
6275
  { type: i2.TemplatePipe },
6276
- { type: i1.Router },
6276
+ { type: i1$1.Router },
6277
6277
  { type: i2.ModalService }
6278
6278
  ];
6279
6279
  };
@@ -6817,11 +6817,11 @@
6817
6817
  /** @nocollapse */
6818
6818
  AdvancedAggregatorService.ctorParameters = function () {
6819
6819
  return [
6820
- { type: i1$1.AngularDataContext },
6820
+ { type: i1.AngularDataContext },
6821
6821
  { type: i2.TemplatePipe }
6822
6822
  ];
6823
6823
  };
6824
- /** @nocollapse */ AdvancedAggregatorService.ngInjectableDef = i0.defineInjectable({ factory: function AdvancedAggregatorService_Factory() { return new AdvancedAggregatorService(i0.inject(i1$1.AngularDataContext), i0.inject(i2.TemplatePipe)); }, token: AdvancedAggregatorService, providedIn: "root" });
6824
+ /** @nocollapse */ AdvancedAggregatorService.ngInjectableDef = i0.defineInjectable({ factory: function AdvancedAggregatorService_Factory() { return new AdvancedAggregatorService(i0.inject(i1.AngularDataContext), i0.inject(i2.TemplatePipe)); }, token: AdvancedAggregatorService, providedIn: "root" });
6825
6825
  return AdvancedAggregatorService;
6826
6826
  }());
6827
6827
 
@@ -7318,8 +7318,8 @@
7318
7318
  /** @nocollapse */
7319
7319
  AddItemsComponent.ctorParameters = function () {
7320
7320
  return [
7321
- { type: i1.Router },
7322
- { type: i1.ActivatedRoute },
7321
+ { type: i1$1.Router },
7322
+ { type: i1$1.ActivatedRoute },
7323
7323
  { type: i2.ModalService },
7324
7324
  { type: i2.LoadingService }
7325
7325
  ];
@@ -8044,10 +8044,10 @@
8044
8044
  // set search state dynamically according to route
8045
8045
  // set search state dynamically according to route
8046
8046
  _this._routerSubscription = _this._router.events
8047
- .pipe(operators.filter(function (event) { return event instanceof i1.NavigationStart || event instanceof i1.NavigationEnd; }))
8047
+ .pipe(operators.filter(function (event) { return event instanceof i1$1.NavigationStart || event instanceof i1$1.NavigationEnd; }))
8048
8048
  .subscribe(function (event) {
8049
8049
  // capture urls regarding tab changing while the component is active
8050
- if (event instanceof i1.NavigationStart && !_this._enteringState) {
8050
+ if (event instanceof i1$1.NavigationStart && !_this._enteringState) {
8051
8051
  try {
8052
8052
  // set search state
8053
8053
  // set search state
@@ -8064,7 +8064,7 @@
8064
8064
  _this._applyState = true;
8065
8065
  }
8066
8066
  // capture url of the first activation of the component (e.g. coming from another route)
8067
- if (event instanceof i1.NavigationEnd && _this._enteringState) {
8067
+ if (event instanceof i1$1.NavigationEnd && _this._enteringState) {
8068
8068
  try {
8069
8069
  // set search state
8070
8070
  // set search state
@@ -8113,7 +8113,7 @@
8113
8113
  return [
8114
8114
  { type: AdvancedTableSearchComponent },
8115
8115
  { type: store.Store, decorators: [{ type: i0.Optional }] },
8116
- { type: i1.Router }
8116
+ { type: i1$1.Router }
8117
8117
  ];
8118
8118
  };
8119
8119
  return AdvancedSearchRouterState;
@@ -8155,7 +8155,7 @@
8155
8155
  core.TranslateModule,
8156
8156
  forms.FormsModule,
8157
8157
  forms.ReactiveFormsModule,
8158
- i1.RouterModule,
8158
+ i1$1.RouterModule,
8159
8159
  routing.RouterModalModule,
8160
8160
  angularFormio.FormioModule,
8161
8161
  forms$1.AdvancedFormsModule,
@@ -8313,4 +8313,4 @@
8313
8313
 
8314
8314
  })));
8315
8315
 
8316
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5zZXJ2aWNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtcm93LWFjdGlvbi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VhcmNoLWZvcm0vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3Quc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXJlc29sdmVycy50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL3RhYmxlLXNpbXBsZS1oZWFkZXIvdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlZC10YWJsZS1lZGl0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWRkLWl0ZW1zL2FkZC1pdGVtcy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcGlwZXMvYWR2YW5jZWQtYWdncmVnYXRvci5waXBlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuc2VkLWFnZ3JlZ2F0b3ItbGlzdC10aXRsZS1wYXJzZS5waXBlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2kxOG4vdGFibGVzLmVsLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2kxOG4vdGFibGVzLmVuLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2FjdGlvbnMvdGFibGUuYWN0aW9ucy50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9yZWR1Y2Vycy9pbmRleC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvdGFibGVzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IHlbb3BbMF0gJiAyID8gXCJyZXR1cm5cIiA6IG9wWzBdID8gXCJ0aHJvd1wiIDogXCJuZXh0XCJdKSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFswLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgZXhwb3J0cykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAoIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyAgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKG9bbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH07IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwteGwgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1yb3dncm91cCc7IC8vIHRoaXMgcGx1Z2luIGltcG9ydCBsaW5lIG11c3QgY29tZSBiZWZvcmUgdGhlIGZvbGxvd2luZyBkYXRhdGFibGVzIHBsdWdpbiBpbXBvcnRzXG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LXNjcm9sbGVyJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtY29scmVvcmRlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWJ1dHRvbnMnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1maXhlZGNvbHVtbnMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbHVtblNlbGVjdG9yU2VydmljZSB9IGZyb20gJy4uL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24sIE1BWF9FWFBPUlRfSVRFTVMgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUnO1xuXG4vLyByZXN0b3JlIGpxdWVyeSBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuY29uc3QgalF1ZXJ5ID0galF1ZXJ5XztcbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQge1xuICByZWNvcmRzVG90YWw6IG51bWJlcjtcbiAgcmVjb3Jkc0ZpbHRlcmVkOiBudW1iZXI7XG4gIGRhdGE6IEFycmF5PGFueT47XG59XG5cbmNvbnN0IERhdGFUYWJsZXNBcGk6IGFueSA9IGpRdWVyeS5mbi5kYXRhVGFibGUuQXBpO1xuRGF0YVRhYmxlc0FwaS5yZWdpc3RlciggJ3Byb2Nlc3NpbmcoKScsIGZ1bmN0aW9uKCBzaG93OiBhbnkgKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlcmF0b3IoJ3RhYmxlJywgKCBjdHg6IGFueSApID0+IHtcbiAgICAgICAgY3R4Lm9BcGkuX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIGN0eCwgc2hvdyApO1xuICAgIH0gKTtcbn0pO1xuXG5jb25zdCBFTVBUWV9EQVRBU0VUID0ge1xuICByZWNvcmRzVG90YWw6IDAsXG4gIHJlY29yZHNGaWx0ZXJlZDogMCxcbiAgZGF0YTogW10sXG59O1xuXG5jbGFzcyBUYWJsZVRyYW5zbGF0aW9uQ2hhbmdlRGV0ZWN0b3IgZXh0ZW5kcyBDaGFuZ2VEZXRlY3RvclJlZiB7XG4gIHB1YmxpYyBjaGVja05vQ2hhbmdlcygpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBkZXRhY2goKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBtYXJrRm9yQ2hlY2soKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgcmVhdHRhY2goKTogdm9pZCB7XG4gIH1cblxufVxuXG5leHBvcnQgbGV0IENPTFVNTl9GT1JNQVRURVJTID0gbmV3IEluamVjdGlvblRva2VuKCdjb2x1bW4uZm9ybWF0dGVycycpO1xuXG5leHBvcnQgY2xhc3MgRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yIGV4dGVuZHMgUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdFeHBvcnRMaW1pdEV4Y2VlZGVkRXJyb3InO1xuICB9XG59XG5cbmNsYXNzIENvbHVtbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY2xhc3M/OiBzdHJpbmc7XG4gIHB1YmxpYyBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBkZWZhdWx0Q29udGVudD86IHN0cmluZztcbiAgcHVibGljIGZvcm1hdFN0cmluZz86IHN0cmluZztcbiAgcHVibGljIGZvcm1hdHRlcj86IHN0cmluZztcbiAgcHVibGljIGhpZGRlbj86IGJvb2xlYW47XG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgb3JkZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9wZXJ0eT86IHN0cmluZztcbiAgcHVibGljIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgcHVibGljIHRpdGxlID0gJyc7XG5cbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IGFueSwgcm93OiBhbnksIG1ldGE6IGFueSkge1xuICAgIC8vXG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VDYXN0PFQ+KGlucHV0OiBhbnkpOiBUIHtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24ge1xuICBwdWJsaWMgc3RhdGljIGNhc3QoaW5wdXQ6IGFueSwgY2xvbmU/OiBib29sZWFuKTogVGFibGVDb25maWd1cmF0aW9uIHtcbiAgICBpZiAoY2xvbmUpIHtcbiAgICAgIHJldHVybiBmb3JjZUNhc3Q8VGFibGVDb25maWd1cmF0aW9uPihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGlucHV0KSkpO1xuICAgIH1cbiAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oaW5wdXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJhbmRvbUlkZW50aWZpZXIoKSB7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKSlcbiAgKS50b1N0cmluZygzNik7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHRhYmxlICN0YWJsZSBjbGFzcz1cImRhdGFUYWJsZVwiPlxuICAgIDwvdGFibGU+XG4gICAgPGRpdiAjZW1wdHlUYWJsZSBjbGFzcz1cImQtbm9uZVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZ3JheS0zMDAgYm9yZGVyLWdyYXktMTAwXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtM3hsIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVNZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNlcnJvclRlbXBsYXRlIGNsYXNzPVwiZC1ub25lIGVycm9yLW1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1kYW5nZXIgYm9yZGVyLWdyYXktMTAwXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtM3hsIHRleHQtc2Vjb25kYXJ5XCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkRhdGFFcnJvci5UaXRsZSdcIj48L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1sZyB0ZXh0LXNlY29uZGFyeSBtYi0xXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkRhdGFFcnJvci5NZXNzYWdlJ1wiPjwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgZXJyb3ItaW5uZXItbWVzc2FnZVwiPlxuICAgICAgICAgICAgPHNtYWxsPjwvc21hbGw+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBfcXVlcnk/OiBDbGllbnREYXRhUXVlcnlhYmxlO1xuICBwcml2YXRlIF9jb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX2ZpcnN0TG9hZCA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dGb290ZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2hvd0hlYWRlciA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dQYWdpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaWQgPSBnZXRSYW5kb21JZGVudGlmaWVyKCk7XG4gIHB1YmxpYyBzbWFydFNlbGVjdCA9IGZhbHNlO1xuICBwdWJsaWMgY29uZmlnQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBAVmlld0NoaWxkKCd0YWJsZScpIHB1YmxpYyB0YWJsZT86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2VtcHR5VGFibGUnKSBwdWJsaWMgZW1wdHlUYWJsZT86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Vycm9yVGVtcGxhdGUnKSBwdWJsaWMgZXJyb3JUZW1wbGF0ZT86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xvYWRpbmdUYWJsZScpIHB1YmxpYyBsb2FkaW5nVGFibGU/OiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0ID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0FjdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQgPSB0cnVlO1xuICBAT3V0cHV0KCdsb2FkJykgcHVibGljIGxvYWQ6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0PigpO1xuICBAT3V0cHV0KCdpbml0JykgcHVibGljIGluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgncmVsb2FkJykgcHVibGljIHJlbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0JykgcHVibGljIHNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnZHJhdycpIHB1YmxpYyBkcmF3OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdwYWdlJykgcHVibGljIHBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ29yZGVyJykgcHVibGljIG9yZGVyOiBFdmVudEVtaXR0ZXI8YW55W11bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdW10+KCk7XG4gIEBPdXRwdXQoJ3Njcm9sbCcpIHB1YmxpYyBzY3JvbGw6IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCdzZWxlY3RlZEl0ZW1zJykgcHVibGljIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2xvYWRpbmcnKSBwdWJsaWMgbG9hZGluZzogRXZlbnRFbWl0dGVyPHtcbiAgICB0YXJnZXQ6IEFkdmFuY2VkVGFibGVDb21wb25lbnRcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB0YXJnZXQ6IEFkdmFuY2VkVGFibGVDb21wb25lbnRcbiAgfT4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2ZXJTaWRlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGxlbmd0aE1lbnUgPSBbNTAsIDEwMCwgMjAwLCA1MDBdO1xuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2VMZW5ndGggPSAyNTtcbiAgQElucHV0KCkgcHVibGljIGNvbHVtbk9yZGVyaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmUgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlTG9hZENhbGxiYWNrPzogKHNldHRpbmdzOiBhbnksIGNhbGxiYWNrOiAoc3RhdGU6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlU2F2ZUNhbGxiYWNrPzogKHNldHRpbmdzOiBhbnksIHN0YXRlOiBhbnkpID0+IHZvaWQ7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbFkgPSA4MDA7XG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxYID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcm93IHNlbGVjdGlvbi4gVGhlIGRlZmF1bHIgdmFsdWUgaXMgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGUgbXVsdGlwbGUgc2VsZWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZVNlbGVjdDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIGN1c3RvbSBzZWxlY3Rpb24gYW5kIGhpZGVzIHNlbGVjdCBjb2x1bW4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzICBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGN1c3RvbVNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IGFueVtdID0gW107XG4gIHB1YmxpYyB1bnNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgVVJMIHRvIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnU3JjPzogc3RyaW5nO1xuICBwdWJsaWMgbGFzdEVycm9yOiBhbnk7XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgYXJyYXkgb2YgcHJvcGVydGllcyBhcyByb3cgZ3JvdXAgZmFjdG9ycyBhbmQgZGlzcGxheXMgZ3JvdXBlZCB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIHJvd0dyb3VwOiAgc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0Um93R3JvdXBPcmRlcj86IHsgY29sdW1uOiBudW1iZXI7IGRpcmVjdGlvbjogc3RyaW5nOyB9IHwgbnVsbDtcblxuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnaGVhZGVyJykgaGVhZGVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZm9vdGVyJykgZm9vdGVyPzogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IFRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xuICAgIC8vIHJhaXNlIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuY29uZmlnQ2hhbmdlcy5uZXh0KHRoaXMuX2NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFzdFF1ZXJ5VG90YWxJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0YWJsZSBmb290ZXIgd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KCdzaG93Rm9vdGVyJylcbiAgcHVibGljIHNldCBzaG93Rm9vdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0Zvb3RlciA9IHZhbHVlO1xuICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0Zvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0Zvb3RlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0YWJsZSBmb290ZXIgd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgIEBJbnB1dCgnc2hvd0hlYWRlcicpXG4gICBwdWJsaWMgc2V0IHNob3dIZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgdGhpcy5fc2hvd0hlYWRlciA9IHZhbHVlO1xuICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgIH1cbiAgICAgICBjb25zdCBkYXRhVGFibGUgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgIGlmIChkYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgICAgIC8vIGFkZCB0b3AgbWFyZ2luXG4gICAgICAgICBkYXRhVGFibGUuY2xhc3NMaXN0LnJlbW92ZSgnbXQtMicpO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gcmVtb3ZlIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgfVxuICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgc2hvd0hlYWRlcigpIHtcbiAgICAgcmV0dXJuIHRoaXMuX3Nob3dIZWFkZXI7XG4gICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHBhZ2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dQYWdpbmcnKVxuICBwdWJsaWMgc2V0IHNob3dQYWdpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93UGFnaW5nID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfcGFnaW5hdGUnKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5zaG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqUXVlcnkoZWxlbWVudCkuaGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd1BhZ2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gYWN0aXZlIHF1ZXJ5IGZvciB0aGlzIHRhYmxlXG4gICAqL1xuICBASW5wdXQoJ3F1ZXJ5JylcbiAgcHVibGljIHNldCBxdWVyeSh2YWx1ZTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3F1ZXJ5ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeSBhcyBDbGllbnREYXRhUXVlcnlhYmxlO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0b3I6IFRyYW5zbGF0ZVBpcGU7XG4gIHB1YmxpYyBkYXRhVGFibGU6IGFueTtcbiAgcHVibGljIGR0T3B0aW9uczogYW55O1xuICBwcml2YXRlIGxhc3RRdWVyeVBhcmFtcz86IERhdGFTZXJ2aWNlUXVlcnlQYXJhbXM7XG4gIHByaXZhdGUgX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICBwcml2YXRlIHJlbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9hZGluZzogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbHVtblNlbGVjdG9yOiBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9leHBvcnRTcHJlYWRzaGVldDogRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5kZWZhdWx0Q29udGVudCAhPSBudWxsID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgKGNvbHVtbi5mb3JtYXR0ZXJzIGFzIGFueVtdKS5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW4uZm9ybWF0dGVyXTtcbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsOiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbkRlZmluaXRpb247XG4gICAgICAgIH0pO1xuICAgICAgLy8gZ2V0IHRhYmxlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IGpRdWVyeSh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XG4gICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgICAgdGFibGVFbGVtZW50Lm9uKCdwcm9jZXNzaW5nLmR0JywgKGV2ZW50LCBzZXR0aW5ncywgcHJvY2Vzc2luZykgPT4ge1xuICAgICAgICBpZiAocHJvY2Vzc2luZykge1xuICAgICAgICAgIC8vIGNsZWFyIGVtcHR5IHRhYmxlIGVsZW1lbnRcbiAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnLmRhdGFUYWJsZXNfZW1wdHknKS5odG1sKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5hZGRDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LnJlbW92ZUNsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGRyYXdJbmRleCA9IDE7XG4gICAgICB0YWJsZUVsZW1lbnQub24oJ29yZGVyLmR0JywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmRhdGFUYWJsZS5vcmRlcigpO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZUNvbHVtbnM7XG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlci5lbWl0KG9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKCdkcmF3LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZHJhdy5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGluZm86IHsgcGFnZTogbnVtYmVyOyBwYWdlczogbnVtYmVyIH0gPSB0aGlzLmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgICAgICB0aGlzLnBhZ2UuZW1pdChpbmZvKTtcbiAgICAgICAgICBpZiAoZHJhd0luZGV4ID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZHJhd0luZGV4Kys7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpOyB9LCAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGFkanVzdGluZyB0YWJsZSBjb2x1bW5zJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gYWxsb3cgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4gKGFzIHJvdyBwcmltYXJ5IGtleSlcbiAgICAgICAgLy8gdG9kbzo6YWxsb3cgcm93IHByaW1hcnkga2V5IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZmlyc3RDb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdO1xuICAgICAgICAvLyBhZGQgc2VsZWN0IGNvbHVtblxuICAgICAgICBjb25zdCBzZWxlY3RDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RleHQtY2VudGVyIHBsLTQgcHItMCcsXG4gICAgICAgICAgZGF0YTogZmlyc3RDb2x1bW4ucHJvcGVydHkgfHwgZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgICBkZWZhdWx0Q29udGVudDogJycsXG4gICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jdXN0b21TZWxlY3QsXG4gICAgICAgICAgbmFtZTogZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYXNzaWduIHJlbmRlcmVyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgIHJlbmRlcjogdGhpcy5fcmVuZGVyU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBhZGQgY29sdW1uXG4gICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KHNlbGVjdENvbHVtbkRlZmluaXRpb24pO1xuICAgICAgICAvLyB1c2VyIGludGVyZmFjZSBhZGRpdGlvbnNcbiAgICAgICAgLy8gaGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50IChhIHRyaWNrIGZvciBmaXJpbmcgZHJhdy5kdCBldmVudHMpXG4gICAgICAgIHRhYmxlRWxlbWVudFxuICAgICAgICAgIC8vIGhhbmRsZSBkcmF3IGV2ZW50c1xuICAgICAgICAgIC5vbignZHJhdy5kdCcsICgpID0+IHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIGVuYWJsZSByb3cgc2VsZWN0aW9uIGV2ZW50XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCd0Ym9keScpLm9uKCdjbGljaycsICd0cicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBzZWxmLmRhdGFUYWJsZS5yb3codGhpcyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHJvd1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0LmVtaXQocm93KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dC5zLXJvdycpO1xuICAgICAgICAgICAgZWxlbWVudHMub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBtYWtlIHNlbGVjdGlvbiBvbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGVudW1lcmF0ZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHJvdyBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtW2tleV07XG4gICAgICAgICAgICAgICAgLy8gaWYgaWRlbnRpZmllciBpcyBkZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBmaW5kIGNoZWNrIGVsZW1lbnQgd2l0aCB0aGlzIGlkZW50aWZpZXIgaW4gYXR0cmlidXRlIGRhdGEtaWRcbiAgICAgICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKGBpbnB1dFtkYXRhLWlkPScke2lkfSddYCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyB0aGF0IGFyZSBub3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgLy8gYW5kIGRvIG5vdCBpbmNsdWRlZCBpbiB1bnNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGF0YSBpZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PSBqUXVlcnkoZWxlbWVudCkuYXR0cignZGF0YS1pZCcpO1xuICAgICAgICAgICAgICAgIH0pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3codGhpcy5kYXRhVGFibGUucm93KGluZGV4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIC8vIHNldCBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhNZW51OiBbNSwgMTAsIDUwLCAxMDAsIDIwMCwgNTAwXSxcbiAgICAgICAgLy8gaGlkZSBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAvLyBlbmFibGUgc2VhcmNoIGJ1dCBoaWRlIHNlYXJjaCBib3ggKGNzcylcbiAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZGF0YSBwcm9jZXNzaW5nXG4gICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBnZXR0aW5nIHNlcnZlciBzaWRlIGRhdGFcbiAgICAgICAgc2VydmVyU2lkZTogdGhpcy5zZXJ2ZXJTaWRlLFxuICAgICAgICAvLyBlbnVtZXJhdGUgdGFibGUgY29sdW1uc1xuICAgICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbFJlb3JkZXI6ICB0aGlzLmNvbHVtbk9yZGVyaW5nLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVzZXQgZXJyb3JcbiAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKCk7XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGxldCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzIChyb3dHcm91cCBhbmQgb3JkZXIpIGlmIHRoZXJlIGlzIHJvdyBncm91cCBpbnB1dFxuICAgICAgICAgIGxldCByb3dHcm91cE9yZGVyOiBhbnlbXSA9IFtdO1xuICAgICAgICAgIGlmIChzZWxmLnJvd0dyb3VwICYmIHNlbGYucm93R3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY29sT3JkZXIgPSBbXTtcblxuICAgICAgICAgICAgLy8gZmluZCBpbmRleCBvZiB0aGUgcm93R3JvdXAgY29sdW1uXG4gICAgICAgICAgICBsZXQgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICAgICAgLy8gZmluZCBuZXcgaW5kZXggb2YgdGhlIHJvd0dyb3VwIGNvbHVtbiBpbiBjYXNlIG9mIHRhYmxlIG9mZmVycyB0aGUgY29sdW1uIHJlb3JkZXJpbmcgY2FwYWJpbGl0eVxuICAgICAgICAgICAgLy8gaS5lLiBzZXR0aW5ncy5jb2xSZW9yZGVyID09PSBmYWxzZSAoY29sdW1uT3JkZXJpbmcgPT09IGZhbHNlKVxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YVRhYmxlICYmIHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIgJiYgdGhpcy5jb2x1bW5PcmRlcmluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBjb2xPcmRlciA9IHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAgICAgICAgICAgY29scyA9IGNvbHMubWFwKCAoY29sOiBhbnkpID0+IGNvbE9yZGVyLmluZGV4T2YoY29sIGFzIG5ldmVyKSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID4gLTEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29sdW1uID0gLTE7XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uID0gJ2FzYyc7XG5cbiAgICAgICAgICAgIC8vIHNldCBjb2x1bW4gYW5kIG9yZGVyIGRpcmVjdGlvblxuICAgICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW4gPSBvcmRlclswXS5jb2x1bW47XG4gICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG9yZGVyWzBdLmRpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0dyb3VwT3JkZXIgPSBjb2xzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gb3JkZXIgaGFzIGJlZW4gY2hhbmdlZFxuICAgICAgICAgICAgICAvLyBhbmQgZmluZCB0aGUgbmV3IGluZGV4IChjb2x1bW4taW5kZXgpIG9mIHRoZSByb3cgZ3JvdXAgY29sdW1uXG4gICAgICAgICAgICAgIGlmICh4ICE9IGNvbHVtbiAmJiBzZWxmLmxhc3RSb3dHcm91cE9yZGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCA9PT0gc2VsZi5sYXN0Um93R3JvdXBPcmRlci5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gc2VsZi5sYXN0Um93R3JvdXBPcmRlci5kaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiB4LFxuICAgICAgICAgICAgICAgIGRpcjogeCA9PT0gY29sdW1uID8gZGlyZWN0aW9uIDogJ2FzYydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvcmRlciA9IG9yZGVyIHx8IFtdO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSByb3cgZ3JvdXAgY29sdW1uIHF1ZXJ5IHBhcmFtIGFsd2F5cyBmaXJzdCBhbmQgYmVmb3JlIHRhYmxlIG9yZGVyaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgb3JkZXIudW5zaGlmdCguLi5yb3dHcm91cE9yZGVyKTtcblxuICAgICAgICAgICAgLy8gc2F2ZSBvcmRlcmluZyBjb2x1bW4gYW5kIGRpcmVjdGlvbiAocmVnYXJkbGVzcyByb3dHcm91cGluZylcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPiAtMSkge1xuICAgICAgICAgICAgICBzZWxmLmxhc3RSb3dHcm91cE9yZGVyID0geyBjb2x1bW4sIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBseSBvcmRlciBwYXJhbXNcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZXQgb3JkZXIgcXVlcnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgY29uc3Qgb3JkZXJCeVN0ciA9IG9yZGVyLm1hcCgoZXhwcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleDogbnVtYmVyO1xuICAgICAgICAgICAgICBpZiAoc2VsZi5jb2x1bW5PcmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZGF0YVRhYmxlICYmIHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWUgKyAnICcgKyBleHByLmRpciB8fCAnYXNjJztcbiAgICAgICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBvcmRlclxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBvcmRlckJ5U3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrID0gKChfLCBjYWxsYmFjaykgID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sobnVsbCwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVDb2x1bW5zLmZpbmRJbmRleCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5jb2x1bW5zW2luZGV4XS52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLnNlbGVjdC5hcHBseShxLCBzZWxlY3QpO1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSBmaWx0ZXJcbiAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIgXTtcbiAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHJvdXRlICRleHBhbmRcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmV4cGFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGdyb3VwYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbG9nIGVycm9yIHRvIGNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gICAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcy52YWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IGl0ZW1zLnRvdGFsO1xuICAgICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVtaXQgbG9hZCBldmVudFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZGF0YVNldCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAvLyBieSByZXR1cm5pbmcgZW1wdHkgZGF0YXNldFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2U6IE9iamVjdC5hc3NpZ24oeyB9LCBzZWxmLnRyYW5zbGF0b3IudHJhbnNmb3JtKCdUYWJsZXMuRGF0YVRhYmxlJyksXG4gICAgICAgICAge2VtcHR5VGFibGU6ICcgJyB9KSxcbiAgICAgIH07XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIHJvd0dyb3VwIGlucHV0IGFuZCBhc3NpZ24gaXQgdG8gdGFibGVcbiAgICAgIGlmIChzZWxmLnJvd0dyb3VwLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2xzID0gc2VsZi5yb3dHcm91cC5tYXAoeCA9PiB0YWJsZUNvbHVtbnMuZmluZEluZGV4KHRhYmxlQ29sdW1uID0+IHRhYmxlQ29sdW1uLmRhdGEgPT09IHgpKS5maWx0ZXIoaW5kZXggPT4gaW5kZXggPj0gMCk7XG4gICAgICAgIGNvbnN0IGRhdGFTcmMgPSBjb2xzLm1hcCh4ID0+IHRhYmxlQ29sdW1uc1t4XS5kYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZW5kZXIgPSBmdW5jdGlvbiAocm93czogRGF0YVRhYmxlcy5BcGksIGdyb3VwOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJWaWV3UmVmID0gc2VsZi5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoXG4gICAgICAgICAgICAgIHNlbGYuaGVhZGVyVGVtcGxhdGUgYXMgYW55LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICBsZXZlbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaGVhZGVyVmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBpZiAoaGVhZGVyVmlld1JlZi5yb290Tm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hlYWRlclRlbXBsYXRlIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IG5vZGUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJWaWV3UmVmLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmRSZW5kZXIgcHJvcGVydHlcbiAgICAgICAgY29uc3QgZW5kUmVuZGVyID0gZnVuY3Rpb24gKHJvd3M6IERhdGFUYWJsZXMuQXBpLCBncm91cDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgZm9vdGVyVmlld1JlZiA9IHNlbGYuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICBzZWxmLmZvb3RlclRlbXBsYXRlIGFzIGFueSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgbGV2ZWxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvb3RlclZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaWYgKGZvb3RlclZpZXdSZWYucm9vdE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb290ZXJUZW1wbGF0ZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9vdCBub2RlLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm9vdGVyVmlld1JlZi5yb290Tm9kZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywgeyByb3dHcm91cDogeyBkYXRhU3JjLCBlbmRSZW5kZXIsIHN0YXJ0UmVuZGVyIH0gfSwge30pO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZi5jb25maWcuZml4ZWRDb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBzZWxmLmNvbmZpZy5maXhlZENvbHVtbnMubGVmdCB8fCAwO1xuICAgICAgICBjb25zdCByaWdodCA9IHNlbGYuY29uZmlnLmZpeGVkQ29sdW1ucy5yaWdodCB8fCAwO1xuICAgICAgICBjb25zdCBmaXhlZENvbHVtbnMgPSB7XG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgICByaWdodFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgZml4ZWRDb2x1bW5zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiBBcnJheS5pc0FycmF5KHRoaXMucm93R3JvdXApICYmIHRoaXMucm93R3JvdXAubGVuZ3RoID4gMCA/IDEwMCA6IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxuICAgICAgICAgIHBhZ2VMZW5ndGg6IHRoaXMucGFnZUxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG5cbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBpbml0LmR0IGV2ZW50IGFuZCBlbWl0IGxvY2FsIGV2ZW50XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IHRhYmxlRWxlbWVudC5vbignaW5pdC5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IGpRdWVyeShldmVudC50YXJnZXQpLnBhcmVudCgpO1xuICAgICAgICAvLyBoYW5kbGUgc2Nyb2xsaW5nXG4gICAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCAoc2Nyb2xsRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBqUXVlcnkoc2Nyb2xsRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSB0YXJnZXQuc2Nyb2xsVG9wKCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmVtaXQoe1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGxlZnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KS5EYXRhVGFibGUoc2V0dGluZ3MpO1xuICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgIC8vIHNob3cgb3IgaGlkZSBoZWFkZXJcbiAgICAgIGlmICghdGhpcy5zaG93SGVhZGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGhpZGVTZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICAgaWYgKGhpZGVTZWxlY3Rvcikge1xuICAgICAgICAgIGhpZGVTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGp1c3RTZWxlY3RvciA9ICAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgIGlmIChhZGp1c3RTZWxlY3Rvcikge1xuICAgICAgICAgIGFkanVzdFNlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIgJiYgdGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5mb1NlbGVjdG9yID0gKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgICBpZiAoaW5mb1NlbGVjdG9yKSB7XG4gICAgICAgICAgaW5mb1NlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgcGFnZXJcbiAgICAgIGlmICh0aGlzLnNob3dQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93UGFnaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gIH1cblxuICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsVG9wKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbExlZnQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXN0UXVlcnkoKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5sYXN0UXVlcnlQYXJhbXMpLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgIHEuc2V0UGFyYW0oa2V5LCB0aGlzLmxhc3RRdWVyeVBhcmFtcyAmJiB0aGlzLmxhc3RRdWVyeVBhcmFtc1trZXldKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gcXVlcnlcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCB1cGRhdGVzIGEgc2luZ2xlIHJvd1xuICAgKiBAcGFyYW0gZmluZCAtIEFueSBvYmplY3Qgd2hpY2ggaXMgYmVpbmcgY29udmVydGVkIHRvIGEgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmZXRjaE9uZShmaW5kOiBhbnkpIHtcbiAgICBpZiAoZmluZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZ2V0IHJvd3NcbiAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgLy8gZmluZCByZXN1bHRcbiAgICAgIGNvbnN0IGZpbmRLZXlzID0gT2JqZWN0LmtleXMoZmluZCk7XG4gICAgICBpZiAoZmluZEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZmluZCByb3cgaW5kZXggYnkgc2VhcmNoaW5nIGVhY2ggcHJvcGVydHlcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kS2V5cy5tYXAoIChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm93W2tleV0gPT09IGZpbmRba2V5XTtcbiAgICAgICAgfSkuZmlsdGVyKCAocmVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcyA9PT0gZmFsc2U7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGhhcyBiZWVuIGZvdW5kXG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIC8vIHNlbGVjdCBhdHRyaWJ1dGVzXG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0JywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJHNlbGVjdCk7XG4gICAgICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKSB7XG4gICAgICAgICAgLy8gYXBwbHkgZXhwYW5kIGF0dHJpYnV0ZXNcbiAgICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJGV4cGFuZCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlciBmb3Igcm93XG4gICAgICAgIGZpbmRLZXlzLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoIChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucHJvcGVydHkgPT09IGtleSB8fCBjb2wubmFtZSA9PT0ga2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0eSBvciBuYW1lXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChwcm9wZXJ0eSBhcyBzdHJpbmcpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChrZXkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgZ2V0IGl0ZW1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldEl0ZW0oKS50aGVuKCAoaXRlbSkgPT4ge1xuICAgICAgICAgIC8vIGlmIGl0ZW0gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KTtcbiAgICAgICAgICBjb25zdCBjaGVja2VkID0galF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgLy8gcmVkcmF3IHJvd1xuICAgICAgICAgICAgcm93LmRhdGEoaXRlbSk7XG4gICAgICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94Jykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpZiByb3cgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICogQHBhcmFtICRldmVudFxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gICRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBleGVjUmVnZXggPSAvLShcXGQrKSQvZy5leGVjKGlucHV0LmlkKTtcbiAgICAvLyBnZXQgcm93IGZyb20gaWRcbiAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KChleGVjUmVnZXggJiYgZXhlY1JlZ2V4WzFdKSBhcyBzdHJpbmcsIDEwKTtcbiAgICAvLyBnZXQgcm93XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KS5kYXRhKCk7XG4gICAgLy8gZ2V0IHJvdyBpZGVudGlmaWVyXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCAnJztcbiAgICAgIGNvbnN0IGlkID0gcm93W2tleV07XG4gICAgICBsZXQgZmluZEl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBhZGQgcm93IHRvIHNlbGVjdGVkIHJvd3NcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBpdGVtXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEl0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgIC8vIGFkZCByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgICBmaW5kSXRlbUluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFbXB0eVRhYmxlKCkge1xuICAgIC8vIHRoaXMgb3BlcmF0aW9uIGlzIGltcG9ydGFudFxuICAgIC8vIGR1ZSB0byBuZyBkYXRhIGJpbmRpbmdcbiAgICAvLyBlbXB0eSB0YWJsZSB0ZW1wbGF0ZSBoYXMgbm8gdHJhbnNsYXRlZCB0ZXh0IGR1cmluZyBuZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZW1wdHlUYWJsZSAmJiB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVFcnJvcihlcnI/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICh0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgbGV0IGlubmVyTWVzc2FnZTogYW55O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaW5uZXJNZXNzYWdlID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc21hbGwnKS5pdGVtKDApO1xuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSBlcnIuZXJyb3IgJiYgZXJyLmVycm9yLm1lc3NhZ2UgPyBlcnIuZXJyb3IubWVzc2FnZSA6IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRW1wdHlUYWJsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmR0LWJ1dHRvbnMgLmJ1dHRvbnMtZXhjZWwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBlbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ29sdW1ucyhjb2x1bW5zVG9TaG93KSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmRhdGFUYWJsZTtcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgaWYgKCFjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgIGlmIChjb2x1bW5zVG9TaG93LmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnY29uZmlnU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZ1NyYyAhPSBudWxsKSB7XG4gICAgICAgIC8vIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBvbiBjaGFuZ2VcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB0cmlwbGUtZXF1YWxzXG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgJiYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmNvbmZpZ1NyYy5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSkudG9Qcm9taXNlKCkudGhlbigoY29uZmlnOiBUYWJsZUNvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgLy8gZmV0Y2ggYW5kIHJlZHJhd1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQobG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuYXV0b0xvYWQgPSAhIWxvYWQ7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucygpIHtcbiAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzAsIDQsIDEsIDIsIDNdXG4gICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgIC8vIGdldCBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5kYXRhVGFibGUuc2V0dGluZ3MoKS5pbml0KCkuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uRGVmcy5tYXAoKFxuICAgICAgY29sdW1uRGVmOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2aXNpYmxlOiBib29sZWFuLFxuICAgICAgICBzb3J0YWJsZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlciB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGBjb2x1bW4tJHtpfWA7XG4gICAgICBsZXQgdGl0bGUgPSBjb2x1bW5EZWYudGl0bGU7XG4gICAgICAvLyBnZXQgY29sdW1uIGluZGV4XG4gICAgICBjb25zdCBpbmRleCA9ICBjb2x1bW5PcmRlci5pbmRleE9mKGkpO1xuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpO1xuICAgICAgLy8gc2V0IHRpdGxlIGZvciBzZWxlY3QgY29sdW1uXG4gICAgICBpZiAoaSA9PT0gMCAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5TZWxlY3RDb2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIC8vIGdldCBjb2x1bW4gdGl0bGVcbiAgICAgIGlmICh0aXRsZSAhPSBudWxsICYmIHRpdGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aXRsZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIGNvbHVtbiBwbGFjZWhvbGRlclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2kgLSAxXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2ldLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGxhY2Vob2xkZXIpICsgJz4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlVua25vd25Db2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHZpc2libGUsXG4gICAgICAgIGluZGV4XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtblNlbGVjdG9yLnNlbGVjdENvbHVtbnMoY29sdW1ucykudGhlbigoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5yZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pXG4gICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGNvbC5rZXksXG4gICAgICAgICAgICAgIGluZGV4OiBjb2wuaW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzMsIDEsIDIsIDAsIDRdXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBzb3J0ZWRcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSkuZmluZEluZGV4KChuZXh0KSA9PiBpdGVtLmtleSA9PT0gbmV4dC5rZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVzZXQgY29sdW1uIHZpc2liaWx0eVxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSlbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1uT3JkZXIuaW5kZXhPZihpbmRleCk7XG4gICAgICAgICAgLy8gc2V0IHZpc2liaWx0eSB3aXRoIHJlZHJhdyAoPXRydWUpXG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1uKGNvbEluZGV4KS52aXNpYmxlKGVsZW1lbnQudmlzaWJsZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWxseSBhcHBseSBjb2x1bW4gb3JkZXJcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihpbmRleGVzLCB0cnVlKTtcbiAgICAgICAgLy8gc2ltcGx5IHJlZHJhdyB0aGUgdGFibGVcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIHRvIHBhc3MgYW4gZXJyb3JIYW5kbGVyIGNhbGxiYWNrLCBpZiBkZXNpcmVkXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleHBvcnRWaWV3KG9wdGlvbnM/OiB7ZXJyb3JIYW5kbGVyPzogKHJlYXNvbj86IGFueSkgPT4gYW55fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9sb2FkaW5nLnNob3dMb2FkaW5nKCk7XG4gICAgICAvLyB2YWxpZGF0ZSBxdWVyeSBpdGVtcyBhbmQgY29uZmlnXG4gICAgICBpZiAoISh0aGlzLmxhc3RRdWVyeSAmJiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCBleHBvcnQgc2V0dGluZ3NcbiAgICAgIGNvbnN0IGV4cG9ydFNldHRpbmdzID0gdGhpcy5fY29uZmlndXJhdGlvbi5zZXR0aW5ncyBhcyBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb247XG4gICAgICAvLyBhbmQgZXhwb3J0IGxpbWl0XG4gICAgICBjb25zdCBleHBvcnRMaW1pdCA9XG4gICAgICAgIChleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0ICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA+IDApXG4gICAgICAgID8gZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0IDogTUFYX0VYUE9SVF9JVEVNUztcbiAgICAgIC8vIGFuZCB2YWxpZGF0ZSBpdFxuICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPiBleHBvcnRMaW1pdCkge1xuICAgICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gcHJvdmlkZSBhIHJlY29nbml6aWJsZSBlcnJvciB0eXBlXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIobmV3IEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvcignRXhwb3J0IGxpbWl0IGV4Y2VlZGVkJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvciBzaG93IHdhcm5pbmcgbW9kYWwgYW5kIGV4aXRcbiAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpc3QnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaW1pdEV4Y2VlZGVkJyxcbiAgICAgICAgICAgIHtkYXRhTGVuZ3RoOiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zLCBleHBvcnRMaW1pdH0pLCBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0b3RhbCBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgIGNvbnN0IHRvdGFsRGlzcGxheWVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KS5sZW5ndGg7XG4gICAgICAvLyBpZiB0aGV5IGFscmVhZHkgc2F0aXNmeSB0aGUgbGFzdCBxdWVyeSB0b3RhbFxuICAgICAgaWYgKHRvdGFsRGlzcGxheWVkSXRlbXMgPT09IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMpIHtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhIGltbWVkaWF0ZWx5XG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRoZW0gdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbW9yZSBkYXRhIG5lZWQgdG8gYmUgZmV0Y2hlZFxuICAgICAgICAvLyBob2xkIHByZXZpb3VzIGRhdGEgc3RhdGVcbiAgICAgICAgY29uc3QgcHJldmlvdXNEYXRhU3RhdGUgPSB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gZ2V0IHRhcmdldCBkYXRhIHN0YXRlIGJ5IGV4ZWN1dGluZyB0aGUgbGFzdCBxdWVyeVxuICAgICAgICAvLyBub3RlOiB0YWtpbmcgdGhlIGV4cG9ydExpbWl0IGFtb3VudCBvZiBpdGVtcyB3aWxsIGFsd2F5cyBzYXRpc2Z5IHRoZSByZXN1bHRzLFxuICAgICAgICAvLyBiZWNhdXNlIGl0IGhhcyBiZWVuIHZhbGlkYXRlZFxuICAgICAgICBjb25zdCB0YXJnZXREYXRhU3RhdGUgPSBhd2FpdCB0aGlzLmxhc3RRdWVyeS50YWtlKGV4cG9ydExpbWl0KS5za2lwKDApLmdldEl0ZW1zKCk7XG4gICAgICAgIC8vIGNoYW5nZSB0YWJsZSBkYXRhIG9uIHRoZSBmbHksIGJ1dCBkbyBub3QgcmVkcmF3XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCkucm93cy5hZGQodGFyZ2V0RGF0YVN0YXRlKTtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhXG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyByZXNldCB0YWJsZSBkYXRhXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNsZWFyKCkucm93cy5hZGQocHJldmlvdXNEYXRhU3RhdGUpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRhcmdldCBkYXRhIHRvIGV4Y2VsXG4gICAgICAgIHRoaXMuX2V4cG9ydFNwcmVhZHNoZWV0LmV4cG9ydChib2R5LCBgJHt0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcudGl0bGUgfHwgJ1RhYmxlcy5FeHBvcnRSZXN1bHRzJyl9Lnhsc3hgLCB7XG4gICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICBza2lwSGVhZGVyOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4aXRcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIGxvZyBlcnJvclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgLy8gY2FsbCBlcnJvciBoYW5kbGVyLCBpZiBkZWZpbmVkXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVycm9ySGFuZGxlcikge1xuICAgICAgICBvcHRpb25zLmVycm9ySGFuZGxlcihlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIGRlZmF1bHQgZXJyb3Igc2VydmljZVxuICAgICAgICB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVyciwge1xuICAgICAgICAgIGNvbnRpbnVlTGluazogJy4nXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkaW5nLmhpZGVMb2FkaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEV4cG9ydGFibGVEYXRhKCk6IHtib2R5OiBhbnlbXSwgaGVhZGVyOiBhbnlbXX0ge1xuICAgIGlmICghKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnNcbiAgICAgICYmIHR5cGVvZiB0aGlzLmRhdGFUYWJsZS5idXR0b25zLmV4cG9ydERhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5jb25maWcpKSB7XG4gICAgICByZXR1cm4ge2JvZHk6IFtdLCBoZWFkZXI6IFtdfTtcbiAgICB9XG4gICAgLy8gZmV0Y2ggZXhwb3J0YWJsZSBleGNlbCBkYXRhXG4gICAgbGV0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhKCk7XG4gICAgY29uc3QgY2xlYW51cEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgLy8gY2xlYW4gdXAgaGVhZGVyc1xuICAgIGhlYWRlciA9IGhlYWRlci5maWx0ZXIoKGhlYWRlckl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gZXhjbHVkZSBlbXB0eSBoZWFkZXJzXG4gICAgICBpZiAoaGVhZGVySXRlbS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBleGNsdWRlIGhpZGRlbiBjb2x1bW5zXG4gICAgICAvLyBub3RlOiB1c2UgdGhlIGRhdGF0YWJsZSB2aXNpYmxlKCkgZnVuY3Rpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgdGhlIGhpZGRlbiBjb25maWcgcHJvcGVydHksIHRvIHNhdGlzZnkgdGhlIGNvbHVtbiBzZWxlY3RvclxuICAgICAgaWYgKCF0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKSkge1xuICAgICAgICBjbGVhbnVwSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgLy8gY2xlYW4gdXAgYm9keVxuICAgIGJvZHkgPSBib2R5Lm1hcCgocm93OiBhbnkgW10pID0+IHtcbiAgICAgIHJldHVybiByb3cuZmlsdGVyKChfLCByb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwSW5kZXhlcy5pbmRleE9mKHJvd0luZGV4KSA9PT0gLTE7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge2JvZHksIGhlYWRlcn07XG4gIH1cbn1cblxuLy8gY29uc3QgZW5kUmVuZGVyID0gZnVuY3Rpb24gKHJvd3MsIGdyb3VwKSB7IHZhciBjb3VudCA9IHJvd3MuZGF0YSgpOyByb3dzLmNvdW50KCk7XG4vLyAgIHJldHVybiAoYDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93R3JvdXBUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGRhdGE6ICR7Z3JvdXB9IH1cIj48L25nLWNvbnRhaW5lcj5gKTsgfTtcbi8vIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93R3JvdXBUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGRhdGE6ICB9XCI+PC9uZy1jb250YWluZXI+XG4vLyByZXR1cm4gKCc8c3BhbiBhbGlnbj1cImxlZnRcIlwiPjxzdHJvbmc+JysgZ3JvdXAgKyAnICcgKyBgKCR7dG90YWxIZWFkZXJ9IGAgICsgY291bnQubGVuZ3RoICsgJyk8L3N0cm9uZz48L3NwYW4+Jyk7IH07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0LCBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBNb2RhbFNlcnZpY2UsIFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBSZXNwb25zZUVycm9yIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVjb3Jkc1RvdGFsOiBudW1iZXIgPSBOYU47XG4gIHB1YmxpYyBjb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRhdGFTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoJ2VudGl0eVNldCcpIGVudGl0eVNldD86IHN0cmluZztcbiAgQElucHV0KCdjYXRlZ29yeScpIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBASW5wdXQoJ2Rlc2NyaXB0aW9uJykgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbG9uZ0Rlc2NyaXB0aW9uJykgbG9uZ0Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoJ3RhYmxlQ29uZmlndXJhdGlvbicpIHRhYmxlQ29uZmlndXJhdGlvbjogYW55O1xuICBASW5wdXQoJ3NlYXJjaENvbmZpZ3VyYXRpb24nKSBzZWFyY2hDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBASW5wdXQoJ2FsbG93U2F2ZU9wdGlvbicpIGFsbG93U2F2ZU9wdGlvbiA9IHRydWU7XG4gIEBJbnB1dCgncmVhZG9ubHknKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIF91c2VyQWN0aXZpdHlTZXJ2aWNlOiBVc2VyQWN0aXZpdHlTZXJ2aWNlXG4gICAgKSB7IH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICAgIC8vIGdldCBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLl9jb250ZXh0LmdldE1ldGFkYXRhKCk7XG4gICAgICAvLyBnZXQgcm91dGUgZGF0YVxuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoIHJvdXRlRGF0YSA9PiB7XG4gICAgICAgIC8vIGdldCBlbnRpdHlUeXBlXG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7cm91dGVEYXRhLm1vZGVsfSRgLCAnaWcnKTtcbiAgICAgICAgY29uc3QgZW50aXR5U2V0ID0gbWV0YWRhdGEuRW50aXR5Q29udGFpbmVyLkVudGl0eVNldC5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4gcmUudGVzdCh4Lk5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgZW50aXR5IHR5cGUgaXMgbnVsbFxuICAgICAgICBpZiAoZW50aXR5U2V0ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBlcnJvclxuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlTZXQgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IGVudGl0eSB0eXBlXG4gICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBtZXRhZGF0YS5FbnRpdHlUeXBlLmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiB4Lk5hbWUgPT09IGVudGl0eVNldC5FbnRpdHlUeXBlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlUeXBlIE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24sICdhbGxvd1NhdmUnKSkge1xuICAgICAgICAgICAgdGhpcy5hbGxvd1NhdmVPcHRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbi5hbGxvd1NhdmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmxvbmdEZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmNhdGVnb3J5KSB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuY2F0ZWdvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocm91dGVEYXRhLCAncmVhZG9ubHknKSkge1xuICAgICAgICAgIHRoaXMucmVhZG9ubHkgPSByb3V0ZURhdGEucmVhZG9ubHk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvbmUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWd1cmF0aW9uID0gQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24uY2FzdCh0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiwgdHJ1ZSk7XG4gICAgICAgIC8vIGNvcnJlY3QgZWRpdCBidXR0b24gbGlua1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoIGNvbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5mb3JtYXR0ZXIgPT09ICdCdXR0b25Gb3JtYXR0ZXInICYmIGNvbC5mb3JtYXRTdHJpbmcgPT09ICcobW9kYWw6ZWRpdCknO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIGNvbnN0IHVybDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhdGhGcm9tUm9vdC5mb3JFYWNoKCByb3V0ZSA9PiB7XG4gICAgICAgICAgICB1cmwucHVzaC5hcHBseSh1cmwsIHJvdXRlLnVybCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGAjLyR7dXJsLmpvaW4oJy8nKX0vKG1vZGFsOlxcJFxce2lkXFx9L2VkaXQpYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgbGlzdCBjb25maWd1cmF0aW9uIGJ5IGFzc2lnbmluZyBsaXN0IGVudGl0eSBzZXRcbiAgICAgICAgY29uc3Qgc2V0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgbW9kZWw6IGVudGl0eVNldC5OYW1lXG4gICAgICAgIH0sIGRlZmF1bHRDb25maWd1cmF0aW9uKTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXRDb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgICBzZXRDb25maWcuc2VsZWN0YWJsZSA9ICF0aGlzLnJlYWRvbmx5O1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlLmNvbmZpZyA9IHNldENvbmZpZztcbiAgICAgICAgLy8gZmV0Y2ggZGF0YVxuICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgLy8gZG8gcmVsb2FkIGJ5IHVzaW5nIGhpZGRlbiBmcmFnbWVudCBlLmcuIC9jbGFzc2VzI3JlbG9hZFxuICAgICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLmZyYWdtZW50LnN1YnNjcmliZShmcmFnbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50ID09PSAncmVsb2FkJykge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coXG4gICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NldHRpbmdzLk9wZXJhdGlvbkNvbXBsZXRlZCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZmluYWxseSBhZGQgdXNlciBhY3Rpdml0eVxuICAgICAgICB0aGlzLl91c2VyQWN0aXZpdHlTZXJ2aWNlLnNldEl0ZW0oe1xuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3J5IGFzIHN0cmluZyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgZGF0ZUNyZWF0ZWQ6IG5ldyBEYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIERhdGEgbG9hZCBldmVudCBoYW5kbGVyIG9mIGFkdmFuY2VkIHRhYmxlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zXG4gICAqL1xuICByZW1vdmUoKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgIGlmICh0YWJsZSAmJiB0YWJsZS5zZWxlY3RlZCAmJiB0YWJsZS5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIC8vIGdldCBpdGVtcyB0byByZW1vdmVcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGFibGUuc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc1RpdGxlJyksXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zTWVzc2FnZScpLFxuICAgICAgICBESUFMT0dfQlVUVE9OUy5Pa0NhbmNlbCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubW9kZWwodGFibGUuY29uZmlnLm1vZGVsKS5yZW1vdmUoaXRlbXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICsgJzonICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UudGl0bGUnKSxcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoKGl0ZW1zLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLm9uZScgOiAnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLm1hbnknKVxuICAgICAgICAgICAgICAgICAgLCB7IHZhbHVlOiBpdGVtcy5sZW5ndGggfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVyciwge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlTGluazogJy4nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBBZnRlclZpZXdJbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCB7TW9kYWxTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1JvdXRlck1vZGFsT2tDYW5jZWx9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1Db21wb25lbnR9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NiYXJDb21wb25lbnQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Byb2dyZXNzYmFyJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXJvdy1hY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAuZmEtMV81eCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgfVxuICAgICAgICAuZm9ybS1jb250cm9sOmRpc2FibGVkLCAuZm9ybS1jb250cm9sW3JlYWRvbmx5XSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWNoZWNrLmNoZWNrYm94IHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgfVxuICAgICAgICBgXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBpbnZhbGlkU3Vic2NyaXB0aW9uOiBhbnk7XG5cblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBhbnk7XG4gICAgQElucHV0KCkgbW9kYWxJY29uID0gJ2ZhcyBmYS1wcm9qZWN0LWRpYWdyYW0nO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZvcm1UZW1wbGF0ZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBwcm9ncmVzc1R5cGUgPSAnaW5kaWdvJztcbiAgICBAT3V0cHV0KCkgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpIGFkZGl0aW9uYWxNZXNzYWdlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVycm9yTWVzc2FnZSA9ICdUYWJsZXMuQWN0aW9ucy5Db21wbGV0ZWRXaXRoRXJyb3JzJztcbiAgICBwdWJsaWMgbGFzdEVycm9yOiBhbnk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzcycpIHByb2dyZXNzQ29tcG9uZW50PzogUHJvZ3Jlc3NiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgncHJvZ3Jlc3NDb250YWluZXInKSBwcm9ncmVzc0NvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZm9ybUNvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBBZHZhbmNlZEZvcm1Db21wb25lbnQ7XG4gICAgQElucHV0KCkgcmVmcmVzaDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQElucHV0KCkgZXhlY3V0ZT86IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHJlZnJlc2hTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBleGVjdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIC8vIHNldCBtb2RhbCBzaXplXG4gICAgICAgIHRoaXMubW9kYWxDbGFzcyA9ICdtb2RhbC1sZyc7XG4gICAgICAgIC8vIHNldCBtb2RhbCB0aXRsZVxuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSAnVGFibGVzLkFjdGlvbnMuTGFiZWwnO1xuICAgICAgICAvLyBkaXNhYmxlIG9rIGJ1dHRvblxuICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gc2V0IGJ1dHRvbiB0ZXh0XG4gICAgICAgIHRoaXMub2tCdXR0b25UZXh0ID0gJ1RhYmxlcy5BY3Rpb25zLlN0YXJ0JztcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlZnJlc2guc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5wcm9ncmVzcyA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHZhbHVlLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29tcG9uZW50LnZhbHVlID0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtKSB7XG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgJ2lzVmFsaWQnKSAmJiAoZXZlbnQuY2hhbmdlZCAhPSBudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSAhZXZlbnQuaXNWYWxpZDtcbiAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsb3NlXG4gICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pbyAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIHNldCBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyBhY3Rpb25cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDEwMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZXJyb3JzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzaG93IG1lc3NhZ2UgZm9yIHBhcnRpYWwgc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBuZXcgRXJyb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JNZXNzYWdlfS5EZXNjcmlwdGlvbi5PbmVgKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JNZXNzYWdlfS5EZXNjcmlwdGlvbi5NYW55YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UHJvZ3Jlc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2UoJ2ludmlzaWJsZScsICd2aXNpYmxlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlUHJvZ3Jlc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2UoJ3Zpc2libGUnLCAnaW52aXNpYmxlJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlOiAnJ1xuICB9KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIF9maWx0ZXI6IGFueTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgIGZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG5cbiAgICBzZXQgZmlsdGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIG9uS2V5RW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5fZmlsdGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvcmNlZFNlYXJjaChzZWFyY2g/OiBib29sZWFuKSB7XG4gICAgICAgIGlmKHNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLl9maWx0ZXIpOyBcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9Db21wb25lbnQsIEZvcm1pb0Zvcm19IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7QW5ndWxhckRhdGFDb250ZXh0fSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1NlcnZpY2VVcmxQcmVQcm9jZXNzb3IsIFRyYW5zbGF0ZVByZVByb2Nlc3Nvcn0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VhcmNoLWZvcm0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwLTRcIj5cbiAgICAgIDxmb3JtaW8gI2Zvcm1pb0NvbXBvbmVudCBjbGFzcz1cImZvcm1pby1zZWFyY2hcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleUVudGVyKCRldmVudClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiAoZm9ybUxvYWQpPVwib25Gb3JtTG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaEZvcm1cIiBbc3VibWlzc2lvbl09XCJzdWJtaXNzaW9uXCIgW2Zvcm1dPVwiZm9ybVwiPjwvZm9ybWlvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC1zZWFyY2gtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cblxuICBAVmlld0NoaWxkKCdmb3JtaW9Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogRm9ybWlvQ29tcG9uZW50O1xuICBASW5wdXQoKSBmb3JtOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgZm9ybVNyYz86IHN0cmluZztcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRhcmdldDogQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50fT4oKTtcbiAgc3VibWlzc2lvbjogYW55ID0geyBkYXRhOiB7fSB9O1xuICBwcml2YXRlIGZpbHRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNvbXBvbmVudExvYWRpbmcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZm9ybScpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5mb3JtICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybS5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgIGNoYW5nZXMuZm9ybS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZm9ybVNyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgIGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtU3JjLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmZvcm1TcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgZm9ybVxuICAgICAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICAgICAgICAgIC8vIGFuZCBpbml0XG4gICAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyBzZWFyY2ggY29uZmlndXJhdGlvbicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2ZpbHRlcicpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5maWx0ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGNoYW5nZXMuZmlsdGVyLmN1cnJlbnRWYWx1ZSB8fCB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgbmV3IFNlcnZpY2VVcmxQcmVQcm9jZXNzb3IodGhpcy5fY29udGV4dCkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIG5ldyBUcmFuc2xhdGVQcmVQcm9jZXNzb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZSkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbiA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5maWx0ZXJcbiAgICAgIH07XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtOiB0aGlzLmZvcm1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnRMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSggZmlsdGVyID0+IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uLmRhdGEgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgc3VibWlzc2lvbjogdGhpcy5zdWJtaXNzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQ6IG9iamVjdCkge1xuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb3JtQ29tcG9uZW50ID0gdGhpcy5mb3JtQ29tcG9uZW50O1xuICAgIE9iamVjdC5rZXlzKGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGFba2V5XTtcbiAgICAgICAgLy8gdGhlIGZpbHRlciB3aXRoIHR5cGUgaXMgYSBzdHJpbmcgYW5kIGlzIG5vdCBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5U3RyaW5nID0gIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBkbyBub3QgaW5jbHVkZSBlbXB0eSBvYmplY3RzIGluIGZpbHRlclxuICAgICAgICBjb25zdCBpc0VtcHR5T2JqZWN0ID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBtYWtlIGlzRW1wdHlTdHJpbmcsIGlzRW1wdHlPYmplY3QgbXV0ZXhcbiAgICAgICAgaWYgKCFpc0VtcHR5U3RyaW5nICYmICFpc0VtcHR5T2JqZWN0KSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuZmlsdGVyLCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZSA6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkZvcm1Mb2FkKGZvcm06IEZvcm1pb0Zvcm0pIHtcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtaW8uaTE4bmV4dC5vcHRpb25zLnJlc291cmNlc1tjdXJyZW50TGFuZ10gPSB7IHRyYW5zbGF0aW9uIDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBGb3Jtc2ApIH07XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5sYW5ndWFnZSA9IGN1cnJlbnRMYW5nO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciB9IGZyb20gJy4vLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFBhZ2VJbmZvIHtcbiAgcGFnZTogbnVtYmVyO1xuICBwYWdlczogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRGlzcGxheTogbnVtYmVyO1xuICBzZXJ2ZXJTaWRlPzogYm9vbGVhbjtcbn1cblxuLy8gaW1wb3J0YW50OiBleHBvcnQgdGhpcyBjb25zdCBkdWUgdG8gQU9UIGNvbXBpbGF0aW9uIGVycm9yc1xuLy8gc2VlIG1vcmUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2FvdC1tZXRhZGF0YS1lcnJvcnMjb25seS1pbml0aWFsaXplZC12YXJpYWJsZXNcbmV4cG9ydCBjb25zdCBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlVGVtcGxhdGUgPSBgXG48ZGl2PlxuICAgIDwhLS0gc2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgIDxpbnB1dCBzcGVsbGNoZWNrPVwiZmFsc2VcIiB0eXBlPVwidGV4dFwiICNzZWFyY2hFbGVtZW50XG4gICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBiZy1ncmF5LTEwMCBib3JkZXItMFwiXG4gICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3snVGFibGVzLlNlYXJjaFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19XCIgYXJpYS1sYWJlbD1cIlNlYXJjaFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJiYXNpYy1hZGRvbjJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJnLWdyYXktMTAwIGJvcmRlci0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtc2Vjb25kYXJ5XCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICNlbXB0eVRhYmxlIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1ncmF5LTMwMCBib3JkZXItZ3JheS0xMDBcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC0zeGwgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVUaXRsZSdcIj48L2g0PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLWxnLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDBcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2xpZGVycy1oIHByLTIgdGV4dC1zZWNvbmRhcnlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+e3snVGFibGVzLkZpbHRlcnMnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2ICNkcm9wZG93bkZpbHRlciBjbGFzcz1cImRyb3Bkb3duIG1sLTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBpZD1cImRyb3Bkb3duRGVmYXVsdEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgZHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICAgIHt7IHRoaXMuZGVmYXVsdEZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGRlZmF1bHRGaWx0ZXJzXCIgKGNsaWNrKT1cIm9uRmlsdGVyU2VsZWN0KGZpbHRlcilcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXIubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCB0ZXh0LWxnLXJpZ2h0IG10LTMgbXQtbGctMCBkLW5vbmVcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGNsYXNzPVwiYnRuIHJvdW5kZWQtcGlsbCBidG4tb3V0bGluZS10aGVtZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMiBmb250LWxnXCI+Kzwvc3Bhbj48c3BhbiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuQWRkSXRlbSdcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtuZ0NsYXNzXT1cInsgJ2NvbXBvbmVudC1sb2FkaW5nJzogbG9hZGluZ31cIj5cbiAgICAgICAgPGFwcC1hZHZhbmNlZC10YWJsZSAjYWR2YW5jZWRUYWJsZSAoaW5pdCk9XCJvblRhYmxlSW5pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkRhdGFMb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsWF09XCJmYWxzZVwiIFtzY3JvbGxZXT1cIjMyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VMZW5ndGhdPVwicGFnZUxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZmFsc2VcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBY3Rpb25zXT1cImZhbHNlXCIgW2xlbmd0aE1lbnVdPVwibGVuZ3RoTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiIFtjb25maWdTcmNdPVwidGFibGVDb25maWdTcmNcIj48L2FwcC1hZHZhbmNlZC10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMyB0YWJsZS1jdXN0b20tcGFnZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4XCIgKm5nSWY9XCJyZWNvcmRzVG90YWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgbWwtYXV0byBtci0zIHRleHQtc2Vjb25kYXJ5XCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLlJlY29yZHNQZXJQYWdlJ1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICNkcm9wZG93bkxlbmd0aCBjbGFzcz1cImRyb3Bkb3duIG1yLTNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMCBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25QYWdlU2l6ZVwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICB7e3BhZ2VMZW5ndGh9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25QYWdlU2l6ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0TGVuZ3RoKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGRyb3Bkb3duLWl0ZW0tdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVuZ3RoTWVudVwiPnt7aXRlbX19PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtci0yXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLlBhZ2VJbmZvJ1wiIFt0cmFuc2xhdGVQYXJhbXNdPVwicGFnZUluZm9cIj48L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZSA9PT0gMFwiIGNsYXNzPVwiYnRuIHRleHQtbm93cmFwXCIgKGNsaWNrKT1cImZpcnN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PTBcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09cGFnZUluZm8ucGFnZXMtMVwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cIm5leHRQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tcmlnaHQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwibGFzdFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbmA7XG5cbi8qKlxuICpcbiAqIEEgc3BlY2lmaWMgdmFsdWUgZm9yIGEgY3JpdGVyaW9uXG4gKlxuICovXG5pbnRlcmZhY2UgU2VhcmNoSXRlbSB7XG4gIGZpbHRlcjogYW55O1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1tb2RhbCcsXG4gIHRlbXBsYXRlOiBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlVGVtcGxhdGUsXG4gIHN0eWxlczogW1xuICAgIGBcblxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRWxlbWVudCAmJiB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BTExfRklMVEVSID0ge1xuICAgIG5hbWU6ICdUYWJsZXMuQWxsJyxcbiAgICBmaWx0ZXI6IG51bGxcbiAgfTtcblxuICBAVmlld0NoaWxkKCdhZHZhbmNlZFRhYmxlJykgYWR2YW5jZWRUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2VtcHR5VGFibGUnKSBlbXB0eVRhYmxlPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25GaWx0ZXInKSBkcm9wZG93bkZpbHRlcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTGVuZ3RoJykgZHJvcGRvd25MZW5ndGg/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogYW55O1xuICBASW5wdXQoJ3RhYmxlQ29uZmlnJykgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIEBJbnB1dCgndGFibGVDb25maWdTcmMnKSB0YWJsZUNvbmZpZ1NyYz86IHN0cmluZztcbiAgQElucHV0KCdwYWdlTGVuZ3RoJykgcGFnZUxlbmd0aCA9IDI1O1xuICBASW5wdXQoJ3NlYXJjaFRleHQnKSBzZWFyY2hUZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoJ2xlbmd0aE1lbnUnKSBsZW5ndGhNZW51OiBBcnJheTxudW1iZXI+ID0gWzUsIDEwLCAyNSwgNTAsIDEwMF07XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVjb3Jkc1RvdGFsID0gMDtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHJlY29yZHNGaWx0ZXJlZCA9IDA7XG4gIHB1YmxpYyBkZWZhdWx0RmlsdGVyczogQXJyYXk8YW55PiA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gIEBJbnB1dCgnZGVmYXVsdEZpbHRlcicpIGRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcblxuXG4gIHB1YmxpYyBwYWdlSW5mbyA9IDxQYWdlSW5mbz57XG4gICAgc2VydmVyU2lkZTogdHJ1ZVxuICB9O1xuICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlO1xuICBjb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByb3RlY3RlZCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHN1cGVyKF9yb3V0ZXIsIF9hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLXhsIG1vZGFsLXRhYmxlJztcbiAgICB0aGlzLl90ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZVBpcGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldElucHV0cyhjb21wb25lbnRUeXBlKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgcHJvcHMgPSBjb21wb25lbnRUeXBlLl9fcHJvcF9fbWV0YWRhdGFfXztcbiAgICBjb25zdCBpbnB1dHM6IGFueVtdID0gW107XG4gICAgaWYgKHByb3BzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgY29uc3QgbWVtYmVyID0gcHJvcHNbcHJvcF1bMF07XG4gICAgICBpZiAobWVtYmVyLm5nTWV0YWRhdGFOYW1lID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGlucHV0cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnB1dHMuc29ydCgpO1xuICB9XG5cbiAgcHVibGljIGhhc0lucHV0cygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMub2tCdXR0b25UZXh0ID0gJ1RhYmxlcy5BcHBseSc7XG4gICAgdGhpcy5jYW5jZWxCdXR0b25UZXh0ID0gJ1RhYmxlcy5DYW5jZWwnO1xuICAgIC8vIGdldCByb3V0ZSBkYXRhXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgLy8gc2V0IG1vZGFsIHRpdGxlIGlmIGFueVxuICAgICAgaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgICAgdGhpcy5tb2RhbFRpdGxlID0gZGF0YS50aXRsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY29uZmlnKSB7XG4gICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMucHVzaC5hcHBseSh0aGlzLmRlZmF1bHRGaWx0ZXJzLCB0aGlzLnRhYmxlQ29uZmlnLnNlYXJjaGVzKTtcbiAgICAgIH1cbiAgICAgIC8vIGltcG9ydGFudDogdXNlIGhhc0lucHV0cyBkdWUgdG8gQU9UIGNvbXBpbGF0aW9uLiBNZXRhZGF0YSBwcm9wZXJ0aWVzIGNhbm5vdCBiZSB1c2VkIChlLmcuIEBJbnB1dCgpKVxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgZW1wdHkgZHVyaW5nIHJ1bnRpbWVcbiAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZGVmaW5lIG1hbnVhbGx5IGlucHV0IHByb3BlcnRpZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgYmluZCB0aHJvdWdoIHRoaXMgcHJvY2Vzc1xuICAgICAgLy8gYmluZCBhbGwgaW5wdXRzXG4gICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmhhc0lucHV0cygpO1xuICAgICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGlucHV0KSkge1xuICAgICAgICAgIHRoaXNbaW5wdXRdID0gZGF0YVtpbnB1dF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgICAgICAvLyByZXNldCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVI7XG4gICAgICAgICAgICAvLyBpbml0IGZpbHRlclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gICAgICAgICAgICAvLyBhZGQgZXh0cmEgZmlsdGVyc1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0YUxvYWQoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpIHtcbiAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgIHRoaXMucmVjb3Jkc0ZpbHRlcmVkID0gZGF0YS5yZWNvcmRzRmlsdGVyZWQ7XG4gICAgLy8gZ2V0IGZpcnN0IHBhZ2UgaW5mbyAoYmVjYXVzZSBwYWdlIGlzIG5vdCBnb2luZyB0byBiZSBmaXJlZCBmb3IgZmlyc3QgcGFnZSlcbiAgICBpZiAoZGF0YS5yZWNvcmRzVG90YWwgPiAwICYmIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID09PSAwKSB7XG4gICAgICB0aGlzLnBhZ2VJbmZvLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgIH1cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgfVxuXG4gIHByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBuZXh0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ3ByZXZpb3VzJykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbmV4dCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBvblRhYmxlSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBkYXRhVGFibGUgPSBzZWxmLmFkdmFuY2VkVGFibGUgJiYgc2VsZi5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZTtcbiAgICAvLyBnZXQgaW5pdGlhbCBwYWdlIGluZm9cbiAgICBjb25zdCBpbml0aWFsUGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgIGluaXRpYWxQYWdlSW5mby5zdGFydCArPSAxO1xuICAgIHNlbGYucGFnZUluZm8gPSBpbml0aWFsUGFnZUluZm87XG4gICAgLy8gY2hhbmdlIGVtcHR5VGFibGVNZXNzYWdlXG4gICAgZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5lbXB0eVRhYmxlICYmIHRoaXMuZW1wdHlUYWJsZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAvLyBiaW5kIHBhZ2UgY2hhbmdlIGV2ZW50XG4gICAgZGF0YVRhYmxlLm9uKCdwYWdlLmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgcGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICAgIHNlbGYucGFnZUluZm8gPSBwYWdlSW5mbztcbiAgICB9KTtcbiAgICAvLyBiaW5kIGRyYXcgY2hhbmdlIGV2ZW50XG4gICAgZGF0YVRhYmxlLm9uKCdkcmF3LmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZm9yIGZ1dHVyZSB1c2VcbiAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgcGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgcGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICAgIHNlbGYucGFnZUluZm8gPSBwYWdlSW5mbztcbiAgICB9KTtcbiAgfVxuXG4gIGZpcnN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBmaXJzdCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdmaXJzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBsYXN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBsYXN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2xhc3QnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICB0aGlzLnBhZ2VMZW5ndGggPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZS5sZW4odmFsdWUpLmRyYXcoKTtcbiAgICB9XG4gIH1cblxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdSZXR1cm4nKSB7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIC8vIGxvYWRpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gbG9hZGluZ1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmVhZHMgdGhlIG1vZGFsIHRhYmxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmaWx0ZXJzIHRvIHVzZSBpbiB0aGUgdGFibGVcbiAgICogcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUNvbmZpZyB7b2JqZWN0fSBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tIGpzb24gZmlsZVxuICAgKiBAcGFyYW0gZGVmYXVsdEZpbHRlclZhbHVlcyB7b2JqZWN0fSBBIGxpc3Qgb2YgZGVmYXVsdCBmaWx0ZXJzXG4gICAqIEBwYXJhbSBzZWFyY2hJdGVtIFRoZSBzZWFyY2hJdGVtIHRvIHVzZVxuICAgKlxuICAgKi9cbiAgZ2V0RmlsdGVycyhcbiAgICB0YWJsZUNvbmZpZzogYW55LFxuICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fSxcbiAgICBzZWFyY2hJdGVtOiBhbnlcbiAgKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgLy8gRG8gbm90aGluZyBpbiBhYnNlbmNlIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgaWYgKCF0YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0YWJsZUNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoSXRlbS5maWx0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZWRDcml0ZXJpb24gPSB0YWJsZUNvbmZpZy5jcml0ZXJpYS5maW5kKGNyaXRlcmlvbiA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlYXJjaEl0ZW0uZmlsdGVyLCBjcml0ZXJpb24ubmFtZSlcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRDcml0ZXJpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc2VhcmNoSXRlbS5maWx0ZXJbbWF0Y2hlZENyaXRlcmlvbi5uYW1lXTtcblxuICAgIGNvbnN0IGNyaXRlcmlvblNhZmVOYW1lID0gbWF0Y2hlZENyaXRlcmlvbi5uYW1lICE9PSBudWxsXG4gICAgICA/IG1hdGNoZWRDcml0ZXJpb24ubmFtZS50b1N0cmluZygpXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IGFwcGxpY2FibGVGaWx0ZXI6IHN0cmluZztcblxuICAgIC8vIFJhdyBkYXRlcyBzaG91bGQgYmUgdHJhbnNmb3JtZWQgdG8gYSBzcGVjaWZpYyBmb3JtYXRcbiAgICBpZiAoY3JpdGVyaW9uU2FmZU5hbWUuaW5jbHVkZXMoJ0dNVCcpKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY3JpdGVyaW9uU2FmZU5hbWUsICdNTS9kZC95eXl5Jyk7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCB7XG4gICAgICAgIHZhbHVlOiBuZXdEYXRlXG4gICAgICB9KTtcblxuICAgIH0gZWxzZSBpZiAoY3JpdGVyaW9uU2FmZU5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShtYXRjaGVkQ3JpdGVyaW9uLmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSwgZGVmYXVsdEZpbHRlclZhbHVlcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBbYXBwbGljYWJsZUZpbHRlcl07XG4gIH1cblxuICBvbkZpbHRlclNlbGVjdCh2YWx1ZTogeyBmaWx0ZXI6IGFueTsgbmFtZTogc3RyaW5nIH0gfCBhbnkpIHtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSdW5zIGEgZmlsdGVyIGFnYWluc3QgdGhlIG1vZGFsIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byB1c2UgaW4gdGhlIHNlYXJjaFxuICAgKlxuICAgKi9cbiAgYXN5bmMgYWR2YW5jZWRTZWFyY2goZmlsdGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcgfHwgIUFycmF5LmlzQXJyYXkodGhpcy50YWJsZUNvbmZpZy5jcml0ZXJpYSkgfHwgIXRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgY29uc29sZS53YXJuKCdObyB0YWJsZSBjb25maWd1cmF0aW9uIGF2YWlsYWJsZScsIHRoaXMudGFibGVDb25maWcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFuIGFkdmFuY2VkIHRhYmxlIGhhcyBzb21lIGZpbHRlcnMgYnkgZGVmYXVsdFxuICAgIGxldCBkZWZhdWx0RmlsdGVyVmFsdWVzO1xuICAgIHRyeSB7XG4gICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0gYXdhaXQgdGhpcy5hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIuZ2V0VmFsdWVzKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgZXhwcmVzc2lvbnM6IGFueVtdID0gW107XG4gICAgbGV0IHByZWRlZmluZWRDcml0ZXJpYTtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICBwcmVkZWZpbmVkQ3JpdGVyaWEgPSB0aGlzLmdldEZpbHRlcnMoXG4gICAgICAgIHRoaXMudGFibGVDb25maWcsXG4gICAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMsXG4gICAgICAgIGZpbHRlclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW1wdHkgYSBmYWxzeSBmaWx0ZXIgcmVzZXRzIHRoZSByZXN1bHRzXG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggZmlsdGVyIGlzIGFwcGxpZWQgc2VwYXJhdGVseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgaGVyZS5cbiAgICBleHByZXNzaW9ucy5wdXNoKHByZWRlZmluZWRDcml0ZXJpYSk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5hZHZhbmNlZFRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSkucHJlcGFyZSgpO1xuICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5mZXRjaCgpO1xuICB9XG59XG5cbiIsImltcG9ydCB7IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgLm1vZGFsLXRhYmxlIC5kYXRhVGFibGVzX3dyYXBwZXIge1xuICAgICAgaGVpZ2h0OiA1MHZoO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgYCxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHVibGljIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBjb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgX21vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlLCBjb250ZXh0LCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsIGRhdGVQaXBlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEVsZW1lbnQgJiYgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvaygpIHtcbiAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FuY2VsKCkge1xuICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLmRpc21pc3MuZW1pdCgnY2FuY2VsJyk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VsZWN0U2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSkge1xuICAgIC8vXG4gIH1cblxuICBzZWxlY3QoaW5pdGlhbFN0YXRlOiBhbnkpOiBQcm9taXNlPHtyZXN1bHQ6IHN0cmluZywgaXRlbXM6IEFycmF5PGFueT59PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5fbW9kYWwub3Blbk1vZGFsQ29tcG9uZW50KEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC10YWJsZScsXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCA9IG1vZGFsUmVmLmNvbnRlbnQ7XG4gICAgICAgIGNvbXBvbmVudFJlZi5kaXNtaXNzLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICBpdGVtczogKGNvbXBvbmVudFJlZi5hZHZhbmNlZFRhYmxlICYmIGNvbXBvbmVudFJlZi5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkKSBhcyBhbnlbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXIgaW1wbGVtZW50cyBSZXNvbHZlPHN0cmluZz4ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQpIHt9XG4gICAgcmVzb2x2ZShcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICAgKTogUHJvbWlzZTxhbnk+fGFueSB7XG4gICAgICAgIC8vIGdldCBsaXN0XG4gICAgICAgIGNvbnN0IGxpc3QgPSByb3V0ZS5kYXRhLmxpc3QgfHwgcm91dGUucGFyYW1zLmxpc3Q7XG4gICAgICAgIC8vIGdldCBtb2RlbFxuICAgICAgICBjb25zdCBtb2RlbCA9IHJvdXRlLmRhdGEubW9kZWwgfHwgcm91dGUucGFyYW1zLm1vZGVsO1xuICAgICAgICAvLyBnZXQgY29uZmlndXJhdGlvblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQoYGFzc2V0cy9saXN0cy8ke21vZGVsfS8ke2xpc3R9Lmpzb25gKS50b1Byb21pc2UoKTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlciBpbXBsZW1lbnRzIFJlc29sdmU8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge31cbiAgICByZXNvbHZlKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgICApOiBQcm9taXNlPGFueT58YW55IHtcbiAgICAgICAgLy8gZ2V0IGxpc3RcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdXRlLmRhdGEubGlzdCB8fCByb3V0ZS5wYXJhbXMubGlzdDtcbiAgICAgICAgLy8gZ2V0IG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm91dGUuZGF0YS5tb2RlbCB8fCByb3V0ZS5wYXJhbXMubW9kZWw7XG4gICAgICAgIC8vIGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgYXNzZXRzL2xpc3RzLyR7bW9kZWx9L3NlYXJjaC4ke2xpc3R9Lmpzb25gKS50b1Byb21pc2UoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNldHRpbmdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxfc2V0dGluZ3NfdGVtcGxhdGUnKSBtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZT86IEVsZW1lbnRSZWY7XHJcbiAgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xyXG4gIHN0b3JhZ2VLZXk6IGFueTtcclxuICBwYXJhbXM6IGFueSA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnBhcmFtcztcclxuICBwcml2YXRlIHNhdmVkVGFibGVTZXR0aW5nczogYW55O1xyXG4gIGZvcm0/OiBGb3JtR3JvdXA7XHJcbiAgY29sdW1uczogYW55W10gPSBbXTtcclxuICB0YWJsZUNvbHVtbnM6IGFueTtcclxuICBhY3RpdmVUYWJsZUNvbmZpZzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVGFibGVDb25maWcgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSAmJiB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5nZXRDb25maWcoKTtcclxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICdyZWdpc3RyYXIvc2V0dGluZ3MvJyArIHRoaXMuYWN0aXZlVGFibGVDb25maWcudGl0bGUgKyAnL3RhYmxlL2NvbHVtbnMnO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7Y29sdW1uczogbmV3IEZvcm1BcnJheShbXSwgdGhpcy5taW5TZWxlY3RlZENvbHVtbnMoMSkpfSk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnModGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkQ2hlY2tib3hlcygpIHtcclxuICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpO1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0ge1xyXG4gICAgICAgICAgaWQ6IGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgbmFtZTogY29sdW1uLnRpdGxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2ggKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncy5pbmNsdWRlcyhjb2x1bW4uaWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChjb2x1bW4uY2hlY2spO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgICh0aGlzLmZvcm0uY29udHJvbHMuY29sdW1ucyBhcyBGb3JtQXJyYXkpLnB1c2goY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5UYWJsZVNldHRpbmdzKHRhYmxlX3NldHRpbmdzX21vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0YWJsZV9zZXR0aW5nc19tb2RhbCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFibGVTZXR0aW5ncygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnNJZHMgPSB0aGlzLmZvcm0udmFsdWUuY29sdW1uc1xyXG4gICAgICAubWFwKCh2LCBpKSA9PiB2ID8gdGhpcy5jb2x1bW5zW2ldLmlkIDogbnVsbClcclxuICAgICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xyXG4gICAgdGhpcy51c2VyU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xyXG4gICAgICB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5oYW5kbGVDb2x1bW5zKHNlbGVjdGVkQ29sdW1uc0lkcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc21pc3MoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1pblNlbGVjdGVkQ29sdW1ucyhtaW4gPSAxKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGZvcm1BcnJheTogRm9ybUFycmF5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBmb3JtQXJyYXkuY29udHJvbHNcclxuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZSlcclxuICAgICAgICAucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBuZXh0ID8gcHJldiArIG5leHQgOiBwcmV2LCAwKTtcclxuXHJcbiAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkID49IG1pbiA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgVGVtcGxhdGVSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFVzZXJTdG9yYWdlU2VydmljZSwgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUyB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcn0gZnJvbSAnLi9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUtc2VhcmNoLWJhc2UnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGV4dFV0aWxzIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXMge1xuICBhZHZhbmNlZFZpZXc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRTZWFyY2hMaXN0IHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgIHtcblxuICBwcml2YXRlIHF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCkgcHVibGljIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1NhdmUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd01vcmUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgbWVyZ2VRdWVyeVBhcmFtcyA9IGZhbHNlO1xuICBAVmlld0NoaWxkKCdzZWFyY2hUZXh0JykgcHVibGljIHNlYXJjaFRleHQ6IGFueTtcbiAgQE91dHB1dCgndmlld0NoYW5nZScpIHB1YmxpYyB2aWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPigpO1xuICBAT3V0cHV0KCdsaXN0Q2hhbmdlJykgcHVibGljIGxpc3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaExpc3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaExpc3Q+KCk7XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSkgYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIG1vZGFsUmVmPzogQnNNb2RhbFJlZjtcbiAgcHVibGljIHN0b3JhZ2VLZXk6IGFueTtcbiAgcHVibGljIHN0b3JhZ2VWYWx1ZTogYW55O1xuICBwdWJsaWMgdXNlclNlYXJjaExpc3Q6IGFueSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRMaXN0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCBwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF91c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbDogTW9kYWxTZXJ2aWNlKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlLmNvbmZpZ0NoYW5nZXMuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvYWQgdXNlciBzZWFyY2hlc1xuICAgICAgICB0aGlzLmxvYWRVc2VyU2VhcmNoTGlzdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHNlYXJjaCBjb21wb25lbnQgbWVyZ2VzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgIC8vICh1c2VzIHF1ZXJ5UGFyYW1zIHRvIGFwcGx5IGZpbHRlcilcbiAgICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBxdWVyeSBnaXZlbiBieSB0aGUgcXVlcnlQYXJhbXMgb2YgdGhlIGFjdGl2YXRlZCByb3V0ZVxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCAncScpKSB7XG4gICAgICAvLyBzZXQgY29sbGFwc2VkXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAvLyBzZWFyY2ggdGV4dFxuICAgICAgdGhpcy50ZXh0ID0gcXVlcnlQYXJhbXMucTtcbiAgICAgIHJldHVybiB0YWJsZS5zZWFyY2godGhpcy50ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlclBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5UGFyYW1zKTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdzJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAvLyBmaW5kIHVzZXIgc2VhcmNoIGJ5IG5hbWVcbiAgICAgIGlmICh0aGlzLnVzZXJTZWFyY2hMaXN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gcXVlcnlQYXJhbXMucztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGlzdCkge1xuICAgICAgICAgIGZpbHRlclBhcmFtcyA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZmlsdGVyUGFyYW1zKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgLy8gc2VhcmNoIGNyaXRlcmlhXG4gICAgICBpZiAodGFibGUuY29uZmlnICYmIHRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICByZXR1cm4gdGFibGUuY29uZmlnLmNyaXRlcmlhLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZmlsdGVyUGFyYW1zW2tleV07XG4gICAgICBpZiAoVGV4dFV0aWxzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQoZmlsdGVyUGFyYW1zW2tleV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIC8vIHNldCB2YWx1ZVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbHRlcltrZXldICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGNhbGwgZmlsdGVyQ2hhbmdlIGV2ZW50IHRvIGFwcGx5IGNoYW5nZSB0byBhZHZhbmNlZCBzZWFyY2ggY2hpbGRyZW5cbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAvLyBhcHBseSBxdWVyeVxuICAgIHRoaXMuZ2V0UXVlcnkoKS50aGVuKChxdWVyeSkgPT4ge1xuICAgICAgLy8gaWYgdGFibGUgcXVlcnkgaXMgbnVsbFxuICAgICAgaWYgKHRhYmxlLnF1ZXJ5ID09IG51bGwpIHtcbiAgICAgICAgLy8gc2V0IHF1ZXJ5XG4gICAgICAgIHRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocXVlcnkgIT0gbnVsbCAmJiBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCBmaWx0ZXIgcGFyYW1zXG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBwYXJhbXMuJGZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYW5kIGZpbmFsbHkgZmV0Y2ggZGF0YVxuICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaEtleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAvLyBnZXQgc2VhcmNoIHRleHRcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSAoIGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgIC8vIG1lcmdlIHF1ZXJ5IHBhcmFtcyA/XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIHE6IHNlYXJjaFRleHQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmNvbmZpZyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyeSB0byBhcHBseSBmaWx0ZXIgYnkgYXBwZW5kaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgcTogc2VhcmNoVGV4dFxuICAgICAgfSk7XG4gICAgICAvLyBvdGhlcndpc2UgZG8gc2VhcmNoXG4gICAgICB0aGlzLnRhYmxlLnNlYXJjaChzZWFyY2hUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtRGF0ZShkYXRlKSB7XG4gICAgZGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdNTS9kZC95eXl5Jyk7IC8vIHdoYXRldmVyIGZvcm1hdCB5b3UgbmVlZC5cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9TdHJpbmcobmFtZUZpbHRlcikge1xuICAgIGxldCBuYW1lID0gJyc7XG4gICAgaWYgKG5hbWVGaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IG5hbWVGaWx0ZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuLy8gIExvYWQgc2F2ZWQgY3JpdGVyaWEgc2VhcmNoZXMgdXNlciBoYXMgc3RvcmVkIGJlZm9yZVxuICBwcml2YXRlIGxvYWRVc2VyU2VhcmNoTGlzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICd0YWJsZXMvJyArIHRoaXMudGFibGUuY29uZmlnLm1vZGVsICsgJy9zZWFyY2hlcyc7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZGF0YS52YWx1ZSB8fCBbXTtcbiAgICAgIC8vIGlmIHRhYmxlIGNvbmZpZ3VyYXRpb24gaGFzIHByZS1kZWZpbmVkIHNlYXJjaGVzXG4gICAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gYWRkIHByZS1kZWZpbmVkIGxpc3RzXG4gICAgICAgIGxpc3QucHVzaC5hcHBseShsaXN0LCB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5tYXAgKCAoeCkgPT4ge1xuICAgICAgICAgIHgucmVhZE9ubHkgPSB0cnVlOyAvLyBhcyByZWFkb25seVxuICAgICAgICAgIHgubmFtZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHgubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCB1c2VyIHNlYXJjaCBsaXN0XG4gICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gbGlzdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBETyBOT1QgVEhST1cgRVJST1JcbiAgICAgIC8vIHRvZG86IG5vdGlmeSBjb21wb25lbnQgZm9yIHRoaXMgZXJyb3IgaW4gb3JkZXIgdG8gZGlzYWJsZSBzb21lIGFjdGlvbnNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdXNlciBzZWFyY2ggbGlzdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0VXNlclNlYXJjaChldmVudDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QgJiYgdGhpcy50YWJsZSkge1xuICAgICAgY29uc3QgbGlzdEZvdW5kID0gdGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUodGhpcy5zZWxlY3RlZExpc3QubmFtZSk7XG4gICAgICBpZiAobGlzdEZvdW5kKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogdGhpcy5zZWxlY3RlZExpc3QubmFtZSB9O1xuICAgICAgICAgIC8vIGNsZWFyIGNyaXRlcmlhIGlmIGFueVxuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbGlzdEZvdW5kO1xuICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyBzOiBudWxsIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaEluTGlzdEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICggQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJTZWFyY2hMaXN0KSApIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIGxpc3RGb3VuZCApIHtcbiAgICAgICAgcmV0dXJuIGxpc3RGb3VuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0IG5hbWUgcHJvcGVydHkpXG4gIHB1YmxpYyB1cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlOYW1lKCBuYW1lOiBzdHJpbmcsIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpdGVtSW5MaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKCAoeCkgPT4geC5uYW1lID09PSBuYW1lICk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnksIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlclNlYXJjaExpc3QuaW5kZXhPZihpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XSA9IG5ld0l0ZW07XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XTtcbiAgfVxuXG4vLyAgRGVsZXRlIGxpc3QgaXRlbSBmcm9tIGxpc3RcbiAgcHVibGljIGRlbGV0ZUl0ZW1Gcm9tU2F2ZWRTZWFyY2hMaXN0QnlPYmplY3QoIGl0ZW1Jbkxpc3Q6IGFueSkge1xuICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gaXRlbUluTGlzdCk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4gIH1cblxuLy8gIFVzZXIgY2hvc2UgdG8gc2F2ZSBpdHMgYWR2YW5jZWQgZm9ybSBzZWFyY2ggY3JpdGVyaWFcbiAgcHVibGljIHNhdmVTZWFyY2goIHRlbXBsYXRlVG9Mb2FkOiBUZW1wbGF0ZVJlZjxhbnk+LCBuZXdMaXN0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnLm1vZGVsKSB7XG4vLyAgICAgIFNldCB0aGUgY29ycmVzcG9uZGluZyBrZXkgdG8gaXRzIGxpc3QgYW5kIHNob3cgYSBjb25maXJtYXRpb24gbW9kYWwgd2luZG93XG4gICAgICB0aGlzLnN0b3JhZ2VLZXkgPSBgdGFibGVzLyR7dGhpcy50YWJsZS5jb25maWcubW9kZWx9L3NlYXJjaGVzYDtcbiAgICAgIGlmICh0aGlzLmZpbHRlciAmJiBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcikubGVuZ3RoKSB7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhbiBleGlzdGluZyBsaXN0IGZyb20gdGhlIGRyb3Bkb3duXG4gICAgICAgIGlmICggIW5ld0xpc3QgJiYgdGhpcy5zZWxlY3RlZExpc3QgKSB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgbmFtZSA6ICB0aGlzLnNlbGVjdGVkTGlzdC5uYW1lLCBmaWx0ZXIgOiB7IC4uLiB0aGlzLmZpbHRlciB9IH07XG4gICAgICAgICAgdGhpcy51cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlPYmplY3QgKCB0aGlzLnNlbGVjdGVkTGlzdCwgbmV3SXRlbSApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbi8vICAgICAgVXNlciB3YW50cyB0byBzYXZlIGEgbmV3IGxpc3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGVUb0xvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuLy8gICAgICAgIFVzZXIgZGlkIG5vdCBkZWZpbmUgYW55IGNyaXRlcmlhXG4gICAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5FbXB0eUNyaXRlcmlhTGlzdCcpLFxuICAgICAgICAgIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kYWwuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlJyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLk5vTGlzdERlZmluZWQnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgfVxuICB9XG5cbi8vICBVc2VyIEFjY2VwdGVkID0+IFNhdmUgbGlzdCBhbmQgQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNvbmZpcm1Nb2RhbCggc2F2ZUZvcm1OYW1lICk6IHZvaWQge1xuLy8gICAgbmFtZSBnaXZlbiBhbmQgbGlzdCBuYW1lIGlzIHVuaXF1ZVxuICAgIGlmICggc2F2ZUZvcm1OYW1lICYmICEodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4gICAgICBjb25zdCBuZXdJbnNlcnRlZFZhbHVlID0geyBuYW1lIDogIHNhdmVGb3JtTmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgaWYgKCB0aGlzLnVzZXJTZWFyY2hMaXN0ICYmIHRoaXMudXNlclNlYXJjaExpc3QubGVuZ3RoICE9PSAwICkge1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0LnB1c2gobmV3SW5zZXJ0ZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gdGhpcy51c2VyU2VhcmNoTGlzdDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlVmFsdWUgPSBbbmV3SW5zZXJ0ZWRWYWx1ZV07XG4gICAgICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnN0b3JhZ2VWYWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICAgICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcbiAgICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggc2F2ZUZvcm1OYW1lICYmICh0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZShzYXZlRm9ybU5hbWUpKSApIHtcbi8vICAgICAgVXNlciBzaG91bGQgaW5zZXJ0IGEgZGlmZmVyZW50IG5hbWUgY2F1c2UgdGhpcyBvbmUgaXMgYWxyZWFkeSBpbiB1c2VcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkJykpO1xuICAgIH0gZWxzZSB7XG4vLyAgICAgIFVzZXIgZGlkIG5vdCBpbnNlcnQgYW55IHRleHRcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uVXNlckVycm9yJykpO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBkZWNsaW5lZCA9PiBDbG9zZSBtb2RhbFxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICB9XG5cbi8vICBVcGxvYWQgdXNlcidzIGNyaXRlcmlhIG9uIFVzZXIgU3RvcmFnZVxuICBwdWJsaWMgdXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKSB7XG4gICAgdGhpcy5fdXNlclN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKCh4KSA9PiB7XG4gICAgICByZXR1cm4gIXgucmVhZE9ubHk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQuIFVzZSBzZWFyY2goKSBtZXRob2QgaW5zdGVhZC5cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXN5bmNBZHZhbmNlZFNlYXJjaChldmVudD86IGFueSkge1xuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCB0aGlzLmdldFF1ZXJ5KCk7XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgcTogbnVsbCwgczogbnVsbCB9LCB0aGlzLmZpbHRlcik7XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudGFibGUucXVlcnkgJiYgcXVlcnkgJiYgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSkge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAgIHRoaXMudGFibGUuZmV0Y2goKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRRdWVyeSgpIHtcbiAgICAvLyBvbiBzaW1wbGUgc2VhcmNoIHJldHVybiBudWxsXG4gICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnICYmIEFycmF5LmlzQXJyYXkodGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkU2VhcmNoVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlciwgeC5uYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVGaWx0ZXIgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICBpZiAobmFtZUZpbHRlci5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLnRyYW5zZm9ybURhdGUodGhpcy5maWx0ZXJbeC5uYW1lXSk7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwge1xuICAgICAgICAgICAgICB2YWx1ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyW3gubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclt4Lm5hbWVdLFxuICAgICAgICAgICAgfSwgdmFsdWVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBjbGllbnQgcXVlcnlcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMudGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0FkdmFuY2VkU2VhcmNoKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zICYmIHRoaXMudGFibGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogbnVsbCB9O1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgLy8gY2xlYXIgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgICAgLy8gY2xlYXIgbGlzdFxuICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgLy8gcmFpc2UgZmlsdGVyIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpZXcgc3RhdGUgb2Ygc2VhcmNoIGNvbnRyb2xcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld1N0YXRlKCk6IEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkdmFuY2VkVmlldzogIXRoaXMuY29sbGFwc2VkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdmlldyBiZXR3ZWVuIHNpbXBsZSBhbmQgYWR2YW5jZWQgc2VhcmNoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdG9nZ2xlVmlldygpIHtcbiAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDtcbiAgICAvLyBlbWl0IGV2ZW50IGZvciB2aWV3IHN0YXR1cyBjaGFuZ2VcbiAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh0aGlzLnZpZXdTdGF0ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXIsIEJ1dHRvbkZvcm1hdHRlciwgRGF0ZVRpbWVGb3JtYXR0ZXIsIExhbmd1YWdlRm9ybWF0dGVyLFxuICBMaW5rRm9ybWF0dGVyLFxuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlciwgTmdDbGFzc0Zvcm1hdHRlciwgU2VsZWN0Um93Rm9ybWF0dGVyLFxuICBUZW1wbGF0ZUZvcm1hdHRlciwgVHJhbnNsYXRpb25Gb3JtYXR0ZXIsXG4gIFRydWVGYWxzZUZvcm1hdHRlciwgQWN0aW9uQnV0dG9uRm9ybWF0dGVyLCBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcixcbn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyPzogQWN0aW9uTGlua0Zvcm1hdHRlcjtcbiAgQnV0dG9uRm9ybWF0dGVyPzogQnV0dG9uRm9ybWF0dGVyO1xuICBEYXRlVGltZUZvcm1hdHRlcj86IERhdGVUaW1lRm9ybWF0dGVyO1xuICBMYW5ndWFnZUZvcm1hdHRlcj86IExhbmd1YWdlRm9ybWF0dGVyO1xuICBMaW5rRm9ybWF0dGVyPzogTGlua0Zvcm1hdHRlcjtcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI/OiBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjtcbiAgTmdDbGFzc0Zvcm1hdHRlcj86IE5nQ2xhc3NGb3JtYXR0ZXI7XG4gIFNlbGVjdFJvd0Zvcm1hdHRlcj86IFNlbGVjdFJvd0Zvcm1hdHRlcjtcbiAgVGVtcGxhdGVGb3JtYXR0ZXI/OiBUZW1wbGF0ZUZvcm1hdHRlcjtcbiAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI/OiBUcmFuc2xhdGlvbkZvcm1hdHRlcjtcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyPzogVHJ1ZUZhbHNlRm9ybWF0dGVyO1xuICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI7XG4gIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyPzogQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI7XG59XG5leHBvcnQgY29uc3QgRk9STUFUVEVSUzogSUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzID0ge1xuICAgICAgQWN0aW9uTGlua0Zvcm1hdHRlcjogbmV3IEFjdGlvbkxpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIEJ1dHRvbkZvcm1hdHRlcjogbmV3IEJ1dHRvbkZvcm1hdHRlcigpLFxuICAgICAgRGF0ZVRpbWVGb3JtYXR0ZXI6IG5ldyBEYXRlVGltZUZvcm1hdHRlcigpLFxuICAgICAgTGFuZ3VhZ2VGb3JtYXR0ZXI6IG5ldyBMYW5ndWFnZUZvcm1hdHRlcigpLFxuICAgICAgTGlua0Zvcm1hdHRlcjogbmV3IExpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyOiBuZXcgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIoKSxcbiAgICAgIE5nQ2xhc3NGb3JtYXR0ZXI6IG5ldyBOZ0NsYXNzRm9ybWF0dGVyKCksXG4gICAgICBTZWxlY3RSb3dGb3JtYXR0ZXI6IG5ldyBTZWxlY3RSb3dGb3JtYXR0ZXIoKSxcbiAgICAgIFRlbXBsYXRlRm9ybWF0dGVyOiBuZXcgVGVtcGxhdGVGb3JtYXR0ZXIoKSxcbiAgICAgIFRyYW5zbGF0aW9uRm9ybWF0dGVyOiBuZXcgVHJhbnNsYXRpb25Gb3JtYXR0ZXIoKSxcbiAgICAgIFRydWVGYWxzZUZvcm1hdHRlcjogbmV3IFRydWVGYWxzZUZvcm1hdHRlcigpLFxuICAgICAgQWN0aW9uQnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjogbmV3IEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyKCksXG59O1xuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndGFibGUtc2ltcGxlLWhlYWRlci10b29scycsXG4gIHRlbXBsYXRlOiBgXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCB7XG4gIC8vXG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLXRhYmxlLXNpbXBsZS1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRhYmxlKSB7XG4gICAgICBpZiAoY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICBpZiAoY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy50YWJsZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24gPSBjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZS5sb2FkLnN1YnNjcmliZSgoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIHB1YmxpYyByZWNvcmRzVG90YWw/OiBudW1iZXI7XG4gIHB1YmxpYyBkYXRhTG9hZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvL1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIERpcmVjdGl2ZSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBZHZhbmNlZCB0YWJsZSBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKFxuIHtcbiAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICBzZWxlY3RvcjogJ1t0YWJsZUVkaXRvcl0nLFxuIH0sXG4pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSB7XG5cbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlydHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByb3dzIHRvIHRhYmxlIGFuZCBtYXJrIHRoZW0gYXMgYWRkZWQgcm93c1xuICAgKi9cbiAgcHVibGljIGFkZCguLi5hZGRJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBkZWNvcmF0ZSBpdGVtc1xuICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhZGRJdGVtcykge1xuICAgICAgbGV0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgIGlmICh0ci5oYXNDbGFzcygncmVtb3ZlZCcpKSB7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cy5hZGQoW2VsZW1lbnRdKTtcbiAgICAgICAgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgICB0ci50b2dnbGVDbGFzcygnYWRkZWQgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXN1Y2Nlc3MnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgIC8vIGZpbmQgcmVtb3ZlZFxuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBmaW5kIGFkZGVkXG4gICAgY29uc3QgYWRkZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKVswXS5sZW5ndGg7XG4gICAgLy8gYW5kIGVtaXQgZXZlbnRcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyByb3dzIGFzIHJlbW92ZWQgcm93c1xuICAgKi9cbiAgcHVibGljIHJlbW92ZSguLi5yZW1vdmVJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBnZXQga2V5XG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgLy8gbG9vcCBpdGVtc1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmVJdGVtcykge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIC8vIGlmIHJvdyBpcyBtYXJrZWQgYXMgYWRkZWRcbiAgICAgICAgaWYgKHRyLmhhc0NsYXNzKCdhZGRlZCcpKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoaXMgZGlydHkgcm93XG4gICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cyh0cikucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHVubWFya2VkIHJvd1xuICAgICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGlmIGl0ZW0gaXMgc2VsZWN0ZWRcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFibGUuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gZWxlbWVudFtrZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIHJlbW92ZSBpdCBmcm9tIHNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgIHRoaXMudGFibGUuc2VsZWN0ZWQuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyByZS1kcmF3IHRhYmxlXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiB0YWJsZSBpdGVtc1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgcmVtb3ZlZCBpdGVtc1xuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgYWRkZWQgaXRlbXNcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIHJlZnJlc2hcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSAocmVtb3ZlZExlbmd0aCA+IDAgfHwgYWRkZWRMZW5ndGggPiAwKTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgc2V0KGl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGNsZWFyIHJvd3NcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY2xlYXIoKTtcbiAgICAvLyBzZXQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChpdGVtcykuZHJhdygpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmRvIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyB1bmRvKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIHJlc2V0IHJlbW92ZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJykubm9kZXMoKS50byQoKS50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAvLyByZW1vdmUgYWRkZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpLnJlbW92ZSgpO1xuICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgdGhpcy50YWJsZS5zZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgcm93cygpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6bm90KC5yZW1vdmVkKScpLmRhdGEoKSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEZvcm1hdHMgYW5kIGV4ZWN1dGVzIHRoZSBkYXRhIHF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbCBUaGUgdGFyZ2V0IG1vZGVsXG4gICAqIEBwYXJhbSBmaXhlZFBhcmFtcyBQYWlycyBvZiBwYXJhbWV0ZXJzIHRvIGFsd2F5cyBiZSBhcHBsaWVkXG4gICAqIEBwYXJhbSBxdWVyeVN0YXRlbWVudCBUaGUgZGVmYXVsdCBxdWVyeSB0byB1c2UgZm9yIGZldGNoaW5nIHRoZSBkYXRhIChlLmcuIGV4cGFuZHMgZXRjKVxuICAgKiBAcGFyYW0gZmlsdGVycyBBIGxpc3Qgb2YgZmlsdGVyIGV4cHJlc3Npb25zIHRvIGFwcGVuZCBhdCB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHNlYXJjaFRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0byB1c2UgZm9yIHNlYXJjaGluZyBleHByZXNzaW9uc1xuICAgKiBAcGFyYW0gc2VhcmNoVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB1c2VyIHNlYXJjaFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2Ugb2YgdGhlIHF1ZXJ5IGV4ZWN1dGlvblxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBhc3luYyBmZXRjaERhdGEobW9kZWw6IHN0cmluZywgZml4ZWRQYXJhbXM6IG9iamVjdCwgcXVlcnlTdGF0ZW1lbnQ6IHN0cmluZyA9ICcnLCBmaWx0ZXJzOiBzdHJpbmdbXSwgc2VhcmNoVGVtcGxhdGU/OiBzdHJpbmcsIHNlYXJjaFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwobW9kZWwpLmFzUXVlcnlhYmxlKCk7XG5cbiAgICBpZiAoIWZpeGVkUGFyYW1zIHx8IHR5cGVvZiBmaXhlZFBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGZpeGVkUGFyYW1zID0ge307XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlckV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKGZpeGVkUGFyYW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIE9iamVjdC5rZXlzKGZpeGVkUGFyYW1zKSkge1xuICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5wdXNoKGAke3BhcmFtfSBlcSAke2ZpeGVkUGFyYW1zW3BhcmFtXX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycyAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMpKSB7XG4gICAgICBmaWx0ZXJFeHByZXNzaW9ucyA9IFtcbiAgICAgICAgLi4uZmlsdGVyRXhwcmVzc2lvbnMsXG4gICAgICAgIC4uLmZpbHRlcnNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaFRlbXBsYXRlICYmIHNlYXJjaFZhbHVlKSB7XG4gICAgICBsZXQgZXZhbHVhdGVkU2VhcmNoO1xuICAgICAgaWYgKC9eXCIoLio/KVwiJC8udGVzdChzZWFyY2hWYWx1ZSkpIHsgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBldmFsdWF0ZWRTZWFyY2ggPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oc2VhcmNoVGVtcGxhdGUsIHtcbiAgICAgICAgICAuLi5maXhlZFBhcmFtcyxcbiAgICAgICAgICB0ZXh0OiBzZWFyY2hWYWx1ZS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICBjb25zdCB3b3JkcyA9IHNlYXJjaFZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgIGV2YWx1YXRlZFNlYXJjaCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHNlYXJjaFRlbXBsYXRlLCB7XG4gICAgICAgICAgICAuLi5maXhlZFBhcmFtcyxcbiAgICAgICAgICAgIHRleHQ6IHdvcmRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkuam9pbignIGFuZCAnKTtcblxuICAgICAgfVxuICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucHVzaChldmFsdWF0ZWRTZWFyY2gpO1xuICAgIH1cblxuICAgIHF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgZmlsdGVyRXhwcmVzc2lvbnMuam9pbignYW5kJykpO1xuICAgIHJldHVybiBxdWVyeS5leHBhbmQocXVlcnlTdGF0ZW1lbnQpLnRha2UoLTEpLmdldEl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRm9ybWF0cyB0aGUgcmVjZWl2ZWQgZGF0YSB0byB1c2UgZmxhdCBrZXlzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIGFwcGxpZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gZGF0YSBUaGUgcmF3IGRhdGFcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZsYXQta2V5IG9iamVjdCBsaXN0XG4gICAqXG4gICAqL1xuICBmb3JtYXREYXRhKGNvbmZpZywgZGF0YSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGF0YS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5zdWJpdGVtcyAmJiBBcnJheS5pc0FycmF5KGVudHJ5LnN1Yml0ZW1zKSkge1xuICAgICAgICAgIGVudHJ5LnN1Yml0ZW1zID0gdGhpcy5mb3JtYXREYXRhKGNvbmZpZywgZW50cnkuc3ViaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJ5T2JqZWN0ID0ge30gYXMgYW55O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IGNvbmZpZy5jb2x1bW5zW2ldLm5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICBsZXQgaGVscGVyT2JqZWN0ID0gZW50cnlba2V5c1swXV07XG5cbiAgICAgICAgICBpZiAoaGVscGVyT2JqZWN0ICYmIGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGhlbHBlck9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IGhlbHBlck9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhlbHBlck9iamVjdCA9IGhlbHBlck9iamVjdFtrZXlzW2ldXSAhPT0gdW5kZWZpbmVkICYmIGhlbHBlck9iamVjdFtrZXlzW2ldXSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBoZWxwZXJPYmplY3Rba2V5c1tpXV1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50cnlPYmplY3RbY29uZmlnLmNvbHVtbnNbaV0ubmFtZV0gPSBoZWxwZXJPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkuc3ViaXRlbXMpIHtcbiAgICAgICAgICBlbnRyeU9iamVjdC5zdWJpdGVtcyA9IGVudHJ5LnN1Yml0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudHJ5T2JqZWN0O1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZywgQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycyB9IGZyb20gJy4uLy4uL2FkdmFuY2VkLWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbi8qKlxuICpcbiAqIFxuICogIEBjbGFzc2Rlc2MgQW4gYWR2YW5jZWQgbGlzdCB3aXRoIHRoZSBjYXBhYmlsaXR5IG9mIGFnZ3JlZ2F0ZSBkYXRhIGJhc2VkIG9uIGNvbmZpZ3VyYWJsZSBmaWx0ZXJzXG4gKlxuICovXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfY29uZmlnPzogQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnO1xuICBwcml2YXRlIF9hZ2dyZWdhdG9ycztcbiAgcHJpdmF0ZSBfcG9zdFByb2Nlc3NvcnM7XG5cbiAgcHVibGljIGJvZHk7XG4gIHB1YmxpYyBncm91cHM6IGFueVtdID0gW107XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2FnZ3JlZ2F0b3JzJylcbiAgcHVibGljIHNldCBhZ2dyZWdhdG9ycyh2YWx1ZSkge1xuICAgIHRoaXMuX2FnZ3JlZ2F0b3JzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3Bvc3RQcm9jZXNzb3JzJylcbiAgcHVibGljIHNldCBwb3N0UHJvY2Vzc29ycyh2YWx1ZSkge1xuICAgIHRoaXMuX3Bvc3RQcm9jZXNzb3JzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3BhcmFtcycpIHBhcmFtcztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NlbGVjdGVkR3JvdXBzJykgc2VsZWN0ZWRHcm91cHMkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZmlsdGVycycpIGZpbHRlcnMkO1xuICBASW5wdXQoJ3NlYXJjaEV4cHJlc3Npb24nKSBzZWFyY2hFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBldmVudEhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2U6IEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlXG4gICkgeyB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFnZ3JlZ2F0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcG9zdFByb2Nlc3NvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzb3JzO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwcyA9IGRhdGE7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVycyQuc3Vic2NyaWJlKGFzeW5jIChmaWx0ZXJzOiBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoKGZpbHRlcnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5maWx0ZXJzJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJldHJpZXZlcyB0aGUgZGF0YVxuICAgKlxuICAgKi9cbiAgYXN5bmMgZmV0Y2goZmlsdGVyczogQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5zaG93TG9hZGluZygpO1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLl9hZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLmZldGNoRGF0YSh0aGlzLmNvbmZpZy5tb2RlbCxcbiAgICAgICAgdGhpcy5wYXJhbXMsXG4gICAgICAgIHRoaXMuY29uZmlnLnF1ZXJ5LFxuICAgICAgICBmaWx0ZXJzLmZpbHRlcnMsXG4gICAgICAgIHRoaXMuc2VhcmNoRXhwcmVzc2lvbixcbiAgICAgICAgZmlsdGVycy50ZXh0XG4gICAgICApO1xuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICBpZiAodGhpcy5wb3N0UHJvY2Vzc29ycyAmJiBPYmplY3Qua2V5cyh0aGlzLnBvc3RQcm9jZXNzb3JzKS5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzICYmIHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5wb3N0UHJvY2Vzc29ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLnBvc3RQcm9jZXNzb3JzW3RoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzW2ldLm5hbWVdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keSA9IHRoaXMuX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UuZm9ybWF0RGF0YSh0aGlzLmNvbmZpZywgZGF0YSk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIGV2ZW50IGhhbmRsZXIgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBkYXRhXG4gICAqXG4gICAqL1xuICBvbkFjdGlvbkV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5lbnVtIExlbmd0aHMge1xuICBYTD0gJ3hsJyxcbiAgTEc9ICdsZycsXG4gIE1EPSAnbWQnLFxuICBTTT0gJ3NtJyxcbiAgWFM9ICd4cydcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWd9IGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxhbnk+Pn0gYm9keSBUaGUgbGlzdCBvZiBkYXRhIGVudHJpZXMgdG8gc2hvdyBhcyB0aGUgbGlzdCBib2R5XG4gICAqL1xuICBASW5wdXQoKSBib2R5O1xuXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgIHgubGVuZ3RoID0gT2JqZWN0LnZhbHVlcyhMZW5ndGhzKS5pbmNsdWRlcyh4Lmxlbmd0aCkgPyB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oYHNpcy0tbGlzdC1ncm91cC1pdGVtXyR7eC5sZW5ndGh9X2NvbHVtbmAsIHggKSA6XG4gICAgICAgICF4Lmxlbmd0aCA/ICdzaXMtLWxpc3QtZ3JvdXAtaXRlbV9zbV9jb2x1bW4nIDogeC5sZW5ndGggO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRyaWdnZXJzIHRoZSBvdXRwdXQgZXZlbnQgZW1pdHRlclxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgYXMgaXQncyBkZWNsYXJlZCBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gaXRlbSBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbVxuICAgKiB9XG4gICAqL1xuICBjYWxsQ2FsbGJhY2sodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICB0eXBlLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE9rQ2FuY2VsfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1Db21wb25lbnR9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHtMb2FkaW5nU2VydmljZSwgTW9kYWxTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1pdGVtcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtaXRlbXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkZEl0ZW1zQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgbGFzdEVycm9yO1xuICBASW5wdXQoKSBleGVjdXRlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICBASW5wdXQoKSBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSB0YXJnZXQ6IGFueTtcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWQ6IGFueTtcbiAgQElucHV0KCkgdGFibGVDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGZvcm1OYW1lOiBhbnk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBBcnJheTxhbnk+ID0gW107XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogQWR2YW5jZWRGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzZWxlY3RDb21wb25lbnQnKSBzZWxlY3RDb21wb25lbnQ/OiBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50O1xuICBwcml2YXRlIGZvcm1Mb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2VsZWN0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSkge1xuICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgIC8vIHNldCBtb2RhbCBzaXplXG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLWxnJztcbiAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50ICYmIHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkSXRlbXMuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gaXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybU5hbWUgIT0gbnVsbCAmJiB0aGlzLmZvcm1Db21wb25lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgJ2lzVmFsaWQnKSkge1xuICAgICAgICAgIC8vIGVuYWJsZSBvciBkaXNhYmxlIGJ1dHRvbiBiYXNlZCBvbiBmb3JtIHN0YXR1c1xuICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICghZXZlbnQuaXNWYWxpZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5jbGVhck1lc3NhZ2VzKCk7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvLyBjbG9zZVxuICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5mb3JtTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAgIC8vIGdldCBmb3JtIGRhdGFcbiAgcHJpdmF0ZSBleGVjdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBnZXQgZm9ybURhdGEoKTogYW55IHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhO1xuICAgIH1cblxuICAgIG9rKCk6IFByb21pc2U8YW55PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNsZWFyTWVzc2FnZXMoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50ID09IG51bGwgfHwgdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZSA9PSBudWxsIHx8IHRoaXMuZXhlY3V0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIC8vIHNldCBjb3Vyc2VzXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUuc2VsZWN0ZWQ7XG4gICAgICAgICAgLy8gZXhlY3V0ZSBhZGRcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24gPSB0aGlzLmV4ZWN1dGUuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNsb3NlIG1vZGFsXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IGxvYWRpbmcgaXMgaGlkZGVuXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgICAgICAgLy8gc2V0IGxhc3QgZXJyb3JcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSgkZXZlbnQ6IGFueSkge31cblxuICBjbGVhck1lc3NhZ2VzKCkge1xuICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGV2ZW50OiAgeyBuYW1lOiBzdHJpbmcsIGVtaXQ6IGJvb2xlYW4gfSkge31cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKlxuICpcbiAqIEBjbGFzc2Rlc2MgR2l2ZW4gYSBsaXN0IG9mIGl0ZW1zIHJ1bnMgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gYWdhaW5zdCB0aGF0IGxpc3RcbiAqXG4gKi9cblxuQFBpcGUoe1xuICBuYW1lOiAnY2FsbEFnZ3JlZ2F0b3InXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAvKipcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgbGlzdCBvZiBpdGVtcyB0byBydW4gdGhlIGFnZ3JlZ2F0b3IgYWdhaW5zdFxuICAgKiBAcGFyYW0gZnVuY3Rpb25Qb29sIFRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIGxpc3QgY2FsbGVyXG4gICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2hvdyBhdCB0aGUgVUlcbiAgICpcbiAgICovXG4gIHRyYW5zZm9ybShpdGVtczogYW55W10sIGZ1bmN0aW9uUG9vbDogYW55LCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpICYmIGZ1bmN0aW9uTmFtZSAmJiBmdW5jdGlvbk5hbWUgaW4gZnVuY3Rpb25Qb29sKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb25Qb29sW2Z1bmN0aW9uTmFtZV0oaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG4vKipcbiAqXG4gKiBcbiAqIEBjbGFzc2Rlc2MgR2l2ZW4gYSB0aXRsZSBvZiBhbiBhZ2dyZWdhdG9yIGxpc3QsIHRyYW5zbGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcGFyYW1ldGVyIGlmIGFueVxuICpcbiAqL1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdhZ2dyZWdhdG9yTGlzdFRpdGxlJ1xufSlcbmV4cG9ydCBjbGFzcyBQYXJzZVRpdGxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbGlzdFxuICAgKiBAcGFyYW0ga2V5IFRoZSBjdXJyZW50IGxpc3Qga2V5IHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgKlxuICAgKi9cbiAgdHJhbnNmb3JtKHRpdGxlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgfHwga2V5ID09PSAndW5kZWZpbmVkJyB8fCBrZXkgPT09ICdudWxsJykge1xuICAgICAgICBrZXkgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Ob3REZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGl0bGUuc3BsaXQoJyAnKVxuICAgICAgICAubWFwKChwYXJ0KSA9PiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGFydCkpXG4gICAgICAgIC5tYXAoKHBhcnQpID0+IHBhcnQucmVwbGFjZSgnJHtwYXJhbX0nLCBrZXkpKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gdHNsaW50OmRpc2FibGU6IHF1b3RlbWFya1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuZXhwb3J0IGNvbnN0IFRBQkxFU19FTCA9IHtcbiAgICBcIlRhYmxlc1wiOiB7XG4gICAgICAgIFwiRXhwb3J0XCI6IFwizpXOvs6xzrPPic6zzq5cIixcbiAgICAgICAgXCJNb3JlXCI6IFwizqDOtc+BzrnPg8+Dz4zPhM61z4HOsVwiLFxuICAgICAgICBcIlNlYXJjaFwiOiBcIs6Rzr3Osc62zq7PhM63z4POt1wiLFxuICAgICAgICBcIlNlYXJjaFBsYWNlaG9sZGVyXCI6IFwizpHOvc6xzrbOrs+EzrfPg863Li4uXCIsXG4gICAgICAgIFwiR3JvdXBCeVwiOiBcIs6fzrzOsc60zr/PgM6/zq/Ot8+DzrcgzrHOvc6sXCIsXG4gICAgICAgIFwiTm90RGVmaW5lZFwiOiBcIs6czrcgz4DPgc6/z4POtM65zr/Pgc65z4POvM6tzr3Ov1wiLFxuICAgICAgICBcIkRhdGFUYWJsZVwiOiB7XG4gICAgICAgICAgICBcInBhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgICAgICBcImZpcnN0XCI6IFwizqDPgc+Oz4TOtyDPg861zrvOr860zrFcIixcbiAgICAgICAgICAgICAgICBcImxhc3RcIjogXCLOpM61zrvOtc+EzrHOr86xIM+DzrXOu86vzrTOsVwiLFxuICAgICAgICAgICAgICAgIFwibmV4dFwiOiBcIs6Vz4DPjM68zrXOvc63XCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2aW91c1wiOiBcIs6gz4HOv863zrPOv8+NzrzOtc69zrdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiaW5mb1wiOiBcIs6VzrzPhs6szr3Ouc+DzrcgX1NUQVJUXyDOrc+Jz4IgX0VORF8gzrHPgM+MIF9UT1RBTF8gzrXOs86zz4HOsc+Gzq3PglwiLFxuICAgICAgICAgICAgXCJpbmZvRW1wdHlcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOtc6zzrPPgc6xz4bOrc+CXCIsXG4gICAgICAgICAgICBcImxvYWRpbmdcIjogXCLOlc68z4bOrM69zrnPg863IM60zrXOtM6/zrzOrc69z4nOvS4uLlwiLFxuICAgICAgICAgICAgXCJwcm9jZXNzaW5nXCI6IFwizqDOsc+BzrHOu86xzrLOriDOtM61zrTOv868zq3Ovc+Jzr0uLi5cIixcbiAgICAgICAgICAgIFwiZW1wdHlUYWJsZVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsS5cIlxuICAgICAgICB9LFxuICAgICAgXCJDb2x1bW5EaXNwbGF5XCI6IFwizpXPgM65zrvOv86zzq4gzpXOvM+GzqzOvc65z4POt8+CIM+Dz4TOt867z47OvVwiLFxuICAgICAgXCJDb2x1bW5EaXNwbGF5SW5mb1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOuc+CIM+Dz4TOrs67zrXPgiDPgM6/z4UgzrjOrc67zrXPhM61IM69zrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65LlwiLFxuICAgICAgXCJTYXZlXCI6IFwizpXPhs6xz4HOvM6/zrPOrlwiLFxuICAgICAgXCJBcHBseVwiOiBcIs6Vz4bOsc+BzrzOv86zzq5cIixcbiAgICAgIFwiQ2FuY2VsXCI6IFwizpHOus+Nz4HPic+DzrdcIixcbiAgICAgIFwiUmVjb3Jkc1BlclBhZ2VcIjogXCLOlc6zzrPPgc6xz4bOrc+CIM6xzr3OrCDPg861zrvOr860zrFcIixcbiAgICAgIFwiUGFnZUluZm9cIjogXCJ7e3N0YXJ0fX0te3tlbmR9fSDOsc+Az4wge3tyZWNvcmRzVG90YWx9fVwiLFxuICAgICAgXCJTZWFyY2hMaXN0UGxhY2Vob2xkZXJcIjogXCLOkc69zrHOts63z4TOrs+Dz4TOtSDPg8+EzrcgzrvOr8+Dz4TOsS4uLlwiLFxuICAgICAgXCJGaWx0ZXJzXCI6IFwizqbOr867z4TPgc6xXCIsXG4gICAgICBcIkFsbFwiOiBcIs6MzrvOsVwiLFxuICAgICAgICBcIkFkZEl0ZW1cIjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIkVtcHR5VGFibGVUaXRsZVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsS5cIixcbiAgICAgICAgXCJFbXB0eVRhYmxlTWVzc2FnZVwiOiBcIs6gz4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgzqzOu867zrXPgiDOu86tzr7Otc65z4IgzrrOu861zrnOtM65zqwuXCIsXG4gICAgICAgIFwiUmVtb3ZlSXRlbVwiOiBcIs6UzrnOsc6zz4HOsc+Gzq4gz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiSXRlbXNcIjogXCLPg8+Ezr/Ouc+HzrXOr86xXCIsXG4gICAgICAgIFwiSXRlbVwiOiBcIs+Dz4TOv865z4fOtc6vzr9cIixcbiAgICAgICAgXCJBZGRJdGVtTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwizqDPgc6/z4POuM6uzrrOtyDPg8+Ezr/Ouc+HzrXOr8+Jzr1cIixcbiAgICAgICAgICAgIFwib25lXCI6IFwizojOvc6xIM69zq3OvyDPg8+Ezr/Ouc+HzrXOr86/IM+Az4HOv8+Dz4TOrc64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIixcbiAgICAgICAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSDOvc6tzrEgz4PPhM6/zrnPh861zq/OsSDPgM+Bzr/Pg8+Ezq3OuM63zrrOsc69IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgIFwiUmVtb3ZlSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIs6Rz4bOsc6vz4HOtc+Dzrcgz4PPhM6/zrnPh861zq/Pic69XCIsXG4gICAgICAgICAgICBcIm9uZVwiOiBcIs6Izr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM6xz4bOsc65z4HOrc64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIixcbiAgICAgICAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSDPg8+Ezr/Ouc+HzrXOr86xIM6xz4bOsc65z4HOrc64zrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiUmVtb3ZlSXRlbXNUaXRsZVwiOiBcIs6UzrnOsc6zz4HOsc+Gzq4gz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiUmVtb3ZlSXRlbXNNZXNzYWdlXCI6IFwizqDPgc+MzrrOtc65z4TOsc65IM69zrEgzrTOuc6xzrPPgc6sz4jOtc+EzrUgzq3Ovc6xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgz4PPhM6/zrnPh861zq/OsS4gzpjOrc67zrXPhM61IM69zrEgz4DPgc6/z4fPic+Bzq7Pg861z4TOtT9cIixcbiAgICAgICAgXCJTZWxlY3RBbGxcIjogXCLOlc+AzrnOu86/zrPOriDPjM67z4nOvVwiLFxuICAgICAgICBcIkNsZWFyU2VsZWN0aW9uXCI6IFwizpHOvc6xzq/Pgc61z4POtyDOtc+AzrnOu86/zrPOrs+CXCIsXG4gICAgICBcIkFjdGlvbnNcIjoge1xuICAgICAgICBcIkxhYmVsXCI6IFwizpXPgM61zr7Otc+BzrPOsc+Dzq/OsVwiLFxuICAgICAgICBcIlN0YXJ0XCI6IFwizojOvc6xz4HOvs63XCIsXG4gICAgICAgIFwiQWN0aW9uTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJOb25lXCI6IFwizpTOtc69IM6tz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSDOus6xzr3Orc69zrEgz4PPhM6/zrnPh861zq/OvyDPgM6/z4Ugzr3OsSDOsc66zr/Ou86/z4XOuM61zq8gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLlwiLFxuICAgICAgICAgIFwiT25lXCI6IFwizojPh861z4TOtSDOtc+AzrnOu86tzr7Otc65IM6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+Azr/PhSDOsc66zr/Ou86/z4XOuM61zq8gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLiDOoM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/IM6Izr3Osc+Bzr7OtyDOs865zrEgzr3OsSDOvs61zrrOuc69zq7Pg861zrkgzrcgzrTOuc6xzrTOuc66zrHPg86vzrEuXCIsXG4gICAgICAgICAgXCJNYW55XCI6IFwizojPh861z4TOtSDOtc+AzrnOu86tzr7Otc65IHt7bGVuZ3RofX0gz4PPhM6/zrnPh861zq/OsSDPgM6/z4UgzrHOus6/zrvOv8+FzrjOv8+Nzr0gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLiDOoM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/IM6Izr3Osc+Bzr7OtyDOs865zrEgzr3OsSDOvs61zrrOuc69zq7Pg861zrkgzrcgzrTOuc6xzrTOuc66zrHPg86vzrEuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoRXJyb3JzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgz4PPhs6szrvOvM6xz4TOsS5cIixcbiAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwiT25lXCI6IFwizojOvc6xIM+Dz4TOv865z4fOtc6vzr8gzrTOtc69IM6xzr3Osc69zrXPjs64zrfOus61IM67z4zOs8+JIM61zr3PjM+CIM+Dz4bOrM67zrzOsc+Ezr/PgiDPgM6/z4Ugz4PPhc69zq3Oss63IM66zrHPhM6sIM+EzrfOvSDOtc66z4TOrc67zrXPg863IM+EzrfPgiDOtM65zrHOtM65zrrOsc+Dzq/Osc+CLlwiLFxuICAgICAgICAgICAgXCJNYW55XCI6IFwie3tlcnJvcnN9fSDPg8+Ezr/Ouc+HzrXOr86xIM60zrXOvSDOsc69zrHOvc61z47OuM63zrrOsc69IM67z4zOs8+JIM61zr3PjM+CIM+Dz4bOrM67zrzOsc+Ezr/PgiDPgM6/z4Ugz4PPhc69zq3Oss63IM66zrHPhM6sIM+EzrfOvSDOtc66z4TOrc67zrXPg863IM+EzrfPgiDOtM65zrHOtM65zrrOsc+Dzq/Osc+CLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhTdWNjZXNzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJTZWxlY3RDb2x1bW5zXCI6IFwizpXPgM65zrvOv86zzq4gz4PPhM63zrvPjs69XCIsXG4gICAgICBcIk1vdmVVcFwiOiBcIs6Vz4DOrM69z4lcIixcbiAgICAgIFwiTW92ZURvd25cIjogXCLOms6sz4TPiVwiLFxuICAgICAgXCJBZGRDb2x1bW5cIjogXCLOlc+AzrnOu86/zrPOrlwiLFxuICAgICAgXCJSZW1vdmVDb2x1bW5cIjogXCLOkc+GzrHOr8+BzrXPg863XCIsXG4gICAgICBcIlNlbGVjdENvbHVtbkhlbHBcIjogXCLOlc+AzrnOu86tzr7PhM61IM68zq/OsSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc61z4IgzrHPgM+MIM+EzrnPgiDOtM65zrHOuM6tz4POuc68zrXPgiDPg8+Ezq7Ou861z4IgzrrOsc65IM+AzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gJ86Vz4DOuc67zr/Os86uJyDOs865zrEgzr3OsSDPhM65z4IgzrXOvM+GzrHOvc6vz4POtc+EzrUuIM6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyAnzpHPhs6xzq/Pgc61z4POtycgzrPOuc6xIM69zrEgzrHPhs6xzrnPgc6tz4POtc+EzrUgz4TOuc+CIM61z4DOuc67zrXOs868zq3Ovc61z4Igz4PPhM6uzrvOtc+CLlwiLFxuICAgICAgXCJNb3ZlQ29sdW1uSGVscFwiOiBcIs6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOsSDPgM67zq7Ous+Ez4HOsSAnzpXPgM6szr3PiScgzrrOsc65ICfOms6sz4TPiScgzrPOuc6xIM69zrEgzrHOu867zqzOvs61z4TOtSDPhM63zr0gz4POtc65z4HOrCDOtc68z4bOrM69zrnPg863z4Igz4TPic69IM+Dz4TOt867z47OvSDPhM6/z4Ugz4DOr869zrHOus6xLlwiLFxuICAgICAgXCJVbmtub3duQ29sdW1uXCI6IFwizobOs869z4nPg8+Ezr9cIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uXCI6IFwizpXPgM65zrvOv86zzq5cIixcbiAgICAgIFwiQWN0aW9uTGlua0NvbHVtblwiOiBcIs6Vzr3Orc+BzrPOtc65zrXPglwiLFxuICAgICAgXCJEYXRhRXJyb3JcIjoge1xuICAgICAgICBcIlRpdGxlXCI6IFwizqPPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDPgM6xz4HOsc67zrHOss6uIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr1cIixcbiAgICAgICAgXCJNZXNzYWdlXCI6IFwizqPPhc69zq3Oss63IM+Dz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gz4DOsc+BzrHOu86xzrLOriDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69LiDOoM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM6+zrHOvc6sIM6uIM+Ez4HOv8+Azr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+Dz4TOv865z4fOtc6vzrEgzrHOvc6xzrbOrs+EzrfPg863z4IuXCJcbiAgICAgIH0sXG4gICAgICBcIkV4cG9ydExpc3RcIjogXCLOlc6+zrHOs8+JzrPOriDOu86vz4PPhM6xz4JcIixcbiAgICAgIFwiRXhwb3J0TGltaXRFeGNlZWRlZFwiOiBcIs6kzr8gz4DOu86uzrjOv8+CIM+Ez4nOvSDPg8+Ezr/Ouc+HzrXOr8+Jzr0gz4DPgc6/z4IgzrXOvs6xzrPPic6zzq4gKHt7ZGF0YUxlbmd0aH19KSDOvs61z4DOtc+Bzr3OrM61zrkgz4TOvyDOvM6tzrPOuc+Dz4TOvyDOtc+AzrnPhM+BzrXPgM+Ez4wgKHt7ZXhwb3J0TGltaXR9fSkuIM6gzrHPgc6xzrrOsc67zr/Pjc68zrUgz4DPgc6/z4POsc+BzrzPjM+Dz4TOtSDPhM6xIM+Gzq/Ou8+Ez4HOsSDPhM63z4IgzrHOvc6xzrbOrs+EzrfPg863z4IgzrrOsc65IM+Az4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwuXCIsXG4gICAgICBcIkV4cG9ydFJlc3VsdHNcIjogXCLOlM61zrTOv868zq3Ovc6xIM67zq/Pg8+EzrHPglwiXG4gICAgfSxcbiAgICBcIlRydWVGYWxzZVwiOiB7XG4gICAgICAgIFwibG9uZ1wiOiB7XG4gICAgICAgICAgICBcIlllc1wiOiBcIs6dzrHOuVwiLFxuICAgICAgICAgICAgXCJOb1wiOiBcIs6Mz4fOuVwiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiU2V0dGluZ3NcIjoge1xuICAgICAgXCJPcGVyYXRpb25Db21wbGV0ZWRcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgfSxcbiAgICBcIkFkdmFuY2VkU2VhcmNoXCI6IHtcbiAgICAgICAgXCJDaG9vc2VcIjogXCI8zpXPgM65zrvOrc6+z4TOtSDOvM65zrEgzrHOvc6xzrbOrs+EzrfPg863PlwiLFxuICAgICAgICBcIkNob29zZURhdGVcIjogXCLOlc+AzrnOu86/zrPOriDOt868zrXPgc6/zrzOt869zq/Osc+CXCIsXG4gICAgICAgIFwiU2F2ZWRTZWFyY2hlc1wiOiBcIs6Rz4DOv864zrfOus61z4XOvM6tzr3Otc+CIM6xzr3Osc62zrfPhM6uz4POtc65z4JcIixcbiAgICAgICAgXCJUb2dnbGVEcm9wZG93blwiIDogXCLOlc68z4bOrM69zrnPg863IM67zq/Pg8+EzrHPglwiLFxuICAgICAgICBcIlNhdmVDdXJyZW50U2VhcmNoXCI6IFwizpHPgM6/zrjOrs66zrXPhc+DzrcgzrHOvc6xzrbOrs+EzrfPg863z4JcIixcbiAgICAgICAgXCJTYXZlQXNcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+Dzrcgz4nPglwiLFxuICAgICAgICBcIlNhdmVcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgXCJEZWxldGVcIiA6IFwizpTOuc6xzrPPgc6xz4bOrlwiLFxuICAgICAgICBcIk1vcmVcIjogXCLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiTGVzc1wiOiBcIs6bzrnOs8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJNb2RhbFwiIDoge1xuICAgICAgICAgICAgXCJUaXRsZVwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOus+BzrnPhM63z4HOr8+Jzr0gzrHOvc6xzrbOrs+EzrfPg863z4JcIixcbiAgICAgICAgICAgIFwiSGVscFwiIDogXCLOn8+Bzq/Pg8+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOvyDOs865zrEgz4TOsSDOtc+AzrnOu861zrPOvM6tzr3OsSDOus+BzrnPhM6uz4HOuc6xIM6xzr3Osc62zq7PhM63z4POt8+CLiDOkc+Fz4TPjM+CIM6/IM+Ezq/PhM67zr/PgiDOuM6xIM+DzrHPgiDOss6/zrfOuM6uz4POtc65IM69zrEgz4TOsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgzr7Osc69zqwgz4PPhM6/IM68zq3Ou867zr/OvS5cIixcbiAgICAgICAgICAgIFwiVGl0bGVPblVzZXJFcnJvclwiIDogXCLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOv1wiLFxuICAgICAgICAgICAgXCJUaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkXCIgOiBcIs6kzr8gz4zOvc6/zrzOsSDOsc+Fz4TPjCDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrkgzq7OtM63LiDOlM65zrHOu86tzr7PhM61IM6tzr3OsSDOtM65zrHPhs6/z4HOtc+EzrnOus+MLlwiLFxuICAgICAgICAgICAgXCJOb0xpc3REZWZpbmVkXCIgOiBcIs6UzrXOvSDOrc+HzrXOuSDOv8+BzrnPg8+EzrXOryDPhM6/IM+DzrfOvM61zq/OvyDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM+EzrfPgiDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgICAgIFwiRW1wdHlDcml0ZXJpYUxpc3RcIiA6IFwizpTOtc69IM6tz4fOtc+EzrUgzrrOsc64zr/Pgc6vz4POtc65IM66zrHOvc6tzr3OsSDOus+BzrnPhM6uz4HOuc6/IM6zzrnOsSDOsc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZUxhYmVsXCIgOiBcIs6fzr3Ov868zrHPg86vzrEgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lUGxhY2Vob2xkZXJcIiA6IFwizpXOuc+DzqzOs861z4TOtSDOrc69zrHOvSDPhM6vz4TOu86/XCIsXG4gICAgICAgICAgICBcIkFjY2VwdFwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICAgICAgXCJEZWNsaW5lXCIgOiBcIs6Rz4DPjM+Bz4HOuc+IzrdcIixcbiAgICAgICAgICAgIFwiQ2xvc2VcIiA6IFwizprOu861zq/Pg865zrzOv1wiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiQWRkSXRlbXNcIiA6IHtcbiAgICAgIFwiU2VsZWN0SXRlbXNcIjogXCLOlc+AzrnOu86tzr7PhM61IM+Dz4TOv865z4fOtc6vzrFcIixcbiAgICB9XG59O1xuIiwiLy8gdHNsaW50OmRpc2FibGU6IHF1b3RlbWFya1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuZXhwb3J0IGNvbnN0IFRBQkxFU19FTiA9IHtcbiAgICBcIlRhYmxlc1wiOiB7XG4gICAgICBcIkV4cG9ydFwiOiBcIkV4cG9ydFwiLFxuICAgICAgICBcIk1vcmVcIjogXCJNb3JlXCIsXG4gICAgICAgIFwiU2VhcmNoXCI6IFwiU2VhcmNoXCIsXG4gICAgICAgIFwiU2VhcmNoUGxhY2Vob2xkZXJcIjogXCJTZWFyY2guLi5cIixcbiAgICAgICAgXCJHcm91cEJ5XCI6IFwiR3JvdXAgYnlcIixcbiAgICAgICAgXCJOb3REZWZpbmVkXCI6IFwiTm90IGRlZmluZWRcIixcbiAgICAgICAgXCJEYXRhVGFibGVcIjoge1xuICAgICAgICAgICAgXCJwYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJmaXJzdFwiOiBcIkZpcnN0XCIsXG4gICAgICAgICAgICAgICAgXCJsYXN0XCI6IFwiTGFzdFwiLFxuICAgICAgICAgICAgICAgIFwibmV4dFwiOiBcIk5leHRcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzXCI6IFwiUHJldmlvdXNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiaW5mb1wiOiBcIlNob3dpbmcgX1NUQVJUXyB0byBfRU5EXyBvZiBfVE9UQUxfIGVudHJpZXNcIixcbiAgICAgICAgICAgIFwiaW5mb0VtcHR5XCI6IFwiU2hvd2luZyAwIHRvIDAgb2YgMCBlbnRyaWVzXCIsXG4gICAgICAgICAgICBcInByb2Nlc3NpbmdcIjogXCJQcm9jZXNzaW5nIGRhdGEuLi5cIixcbiAgICAgICAgICAgIFwiZW1wdHlUYWJsZVwiOiBcIlRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNvcmRzLlwiXG4gICAgICAgIH0sXG4gICAgICBcIkNvbHVtbkRpc3BsYXlcIjogXCJDb2x1bW4gRGlzcGxheVwiLFxuICAgICAgXCJDb2x1bW5EaXNwbGF5SW5mb1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOuc+CIM+Dz4TOrs67zrXPgiDPgM6/z4UgzrjOrc67zrXPhM61IM69zrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65LlwiLFxuICAgICAgXCJTYXZlXCI6IFwiU2F2ZVwiLFxuICAgICAgXCJBcHBseVwiOiBcIkFwcGx5XCIsXG4gICAgICBcIkNhbmNlbFwiOiBcIkNhbmNlbFwiLFxuICAgICAgXCJSZWNvcmRzUGVyUGFnZVwiOiBcIkl0ZW1zIHBlciBwYWdlXCIsXG4gICAgICBcIlBhZ2VJbmZvXCI6IFwie3tzdGFydH19LXt7ZW5kfX0gb2Yge3tyZWNvcmRzVG90YWx9fVwiLFxuICAgICAgXCJTZWFyY2hMaXN0UGxhY2VIb2xkZXJcIjogXCJTZWFyY2ggaW4gbGlzdC4uLlwiLFxuICAgICAgXCJGaWx0ZXJzXCI6IFwiRmlsdGVyc1wiLFxuICAgICAgXCJBbGxcIjogXCJBbGxcIixcbiAgICAgIFwiQWRkSXRlbVwiOiBcIkFkZCBpdGVtXCIsXG4gICAgICBcIkVtcHR5VGFibGVUaXRsZVwiOiBcIlRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNvcmRzLlwiLFxuICAgICAgXCJFbXB0eVRhYmxlTWVzc2FnZVwiOiBcIlBsZWFzZSB0cnkgdG8gdXNlIG90aGVyIGtleXdvcmRzIG9yIHNlYXJjaCBwYXJhbWV0ZXJzLlwiLFxuICAgICAgXCJSZW1vdmVJdGVtXCI6IFwiUmVtb3ZlIGl0ZW1cIixcbiAgICAgIFwiSXRlbXNcIjogXCJpdGVtc1wiLFxuICAgICAgXCJJdGVtXCI6IFwiaXRlbVwiLFxuICAgIFwiQWRkSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgXCJ0aXRsZVwiOiBcIkFkZCBpdGVtXCIsXG4gICAgICBcIm9uZVwiOiBcIkEgbmV3IGl0ZW0gaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LlwiLFxuICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IG5ldyBpdGVtcyBoYXZlIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgfSxcbiAgICBcIlJlbW92ZUl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgIFwidGl0bGVcIjogXCJSZW1vdmUgaXRlbXNcIixcbiAgICAgIFwib25lXCI6IFwiQW4gaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cIixcbiAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSBpdGVtcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXCJcbiAgICB9LFxuICAgIFwiUmVtb3ZlSXRlbXNUaXRsZVwiOiBcIlJlbW92ZSBpdGVtc1wiLFxuICAgIFwiUmVtb3ZlSXRlbXNNZXNzYWdlXCI6IFwiWW91IGFyZSBnb2luZyB0byByZW1vdmUgb25lIG9yIG1vcmUgaW5zdHJ1Y3RvciBjb3Vyc2VzLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP1wiLFxuICAgICAgXCJTZWxlY3RBbGxcIjogXCJTZWxlY3QgYWxsXCIsXG4gICAgICBcIkNsZWFyU2VsZWN0aW9uXCI6IFwiQ2xlYXIgc2VsZWN0aW9uXCIsXG4gICAgICBcIkFjdGlvbnNcIjoge1xuICAgICAgICBcIkxhYmVsXCI6IFwiRWRpdFwiLFxuICAgICAgICBcIlN0YXJ0XCI6IFwiU3RhcnRcIixcbiAgICAgICAgXCJBY3Rpb25NZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIk5vbmVcIjogXCJUaGVyZSBpcyBubyBzZWxlY3RlZCBpdGVtIHRoYXQgbWVldHMgYWN0aW9uIHJlcXVpcmVtZW50cy5cIixcbiAgICAgICAgICBcIk9uZVwiOiBcIllvdSBoYXZlIHNlbGVjdGVkIG9uZSBpdGVtIHRoYXQgbWVldHMgYWN0aW9uIHJlcXVpcmVtZW50cy5cIixcbiAgICAgICAgICBcIk1hbnlcIjogXCJZb3UgaGF2ZSBzZWxlY3RlZCB7e2xlbmd0aH19IGl0ZW1zIHRoYXQgbWVldCBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aEVycm9yc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCB3aXRoIGVycm9ycy5cIixcbiAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwiT25lXCI6IFwiT25lIGl0ZW0gaGFzIG5vdCBiZWVuIHVwZGF0ZWQgZHVlIHRvIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyBwcm9jZXNzLlwiLFxuICAgICAgICAgICAgXCJNYW55XCI6IFwie3tlcnJvcnN9fSBpdGVtcyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgZHVlIHRvIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyBwcm9jZXNzLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhTdWNjZXNzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJTZWxlY3RDb2x1bW5zXCI6IFwiU2VsZWN0IGNvbHVtbnNcIixcbiAgICAgIFwiTW92ZVVwXCI6IFwiTW92ZSB1cFwiLFxuICAgICAgXCJNb3ZlRG93blwiOiBcIk1vdmUgZG93blwiLFxuICAgICAgXCJBZGRDb2x1bW5cIjogXCJBZGRcIixcbiAgICAgIFwiUmVtb3ZlQ29sdW1uXCI6IFwiUmVtb3ZlXCIsXG4gICAgICBcIlNlbGVjdENvbHVtbkhlbHBcIjogXCJTZWxlY3Qgb25lIG9yIG1vcmUgY29sdW1ucyBhbmQgcHJlc3MgJ0FkZCcgYnV0dG9uIHRvIGluY2x1ZGUgdGhlbSBpbiB0YWJsZS4gVXNlICdSZW1vdmUnIGJ1dHRvbiB0byBleGNsdWRlIG9uZSBvciBtb3JlIGNvbHVtbnMgZnJvbSB2aWV3LlwiLFxuICAgICAgXCJNb3ZlQ29sdW1uSGVscFwiOiBcIlVzZSAnTW92ZSB1cCcgYW5kICdNb3ZlIGRvd24nIGJ1dHRvbnMgdG8gY2hhbmdlIGNvbHVtbiBvcmRlci5cIixcbiAgICAgIFwiVW5rbm93bkNvbHVtblwiOiBcIlVua25vd25cIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uXCI6IFwiU2VsZWN0XCIsXG4gICAgICBcIkFjdGlvbkxpbmtDb2x1bW5cIjogXCJBY3Rpb25zXCIsXG4gICAgICBcIkRhdGFFcnJvclwiOiB7XG4gICAgICAgIFwiVGl0bGVcIjogXCJFcnJvciB3aGlsZSBnZXR0aW5nIGRhdGFcIixcbiAgICAgICAgXCJNZXNzYWdlXCI6IFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBkYXRhLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNoYW5nZSB5b3VyIGNyaXRlcmlhLlwiXG4gICAgICB9LFxuICAgICAgXCJFeHBvcnRMaXN0XCI6IFwiRXhwb3J0IGxpc3RcIixcbiAgICAgIFwiRXhwb3J0TGltaXRFeGNlZWRlZFwiOiBcIlRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdG8gYmUgZXhwb3J0ZWQgKHt7ZGF0YUxlbmd0aH19KSBleGNlZWRzIHRoZSBleHBvcnQgbGltaXQgKHt7ZXhwb3J0TGltaXR9fSkuIFBsZWFzZSBhcHBseSBtb3JlIHNwZWNpZmljIGZpbHRlcnMgdG8gdGhlIHNlYXJjaC5cIixcbiAgICAgIFwiRXhwb3J0UmVzdWx0c1wiOiBcIkV4cG9ydGVkIGxpc3RcIlxuICAgIH0sXG4gICAgXCJUcnVlRmFsc2VcIjoge1xuICAgICAgICBcImxvbmdcIjoge1xuICAgICAgICAgICAgXCJZZXNcIjogXCJZZXNcIixcbiAgICAgICAgICAgIFwiTm9cIjogXCJOb1wiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiU2V0dGluZ3NcIjoge1xuICAgICAgXCJPcGVyYXRpb25Db21wbGV0ZWRcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgfSxcbiAgICBcIkFkdmFuY2VkU2VhcmNoXCI6IHtcbiAgICAgICAgXCJDaG9vc2VcIjogXCI8U2VsZWN0IGEgc2F2ZWQgc2VhcmNoPlwiLFxuICAgICAgICBcIkNob29zZURhdGVcIjogXCJDaG9vc2UgZGF0ZVwiLFxuICAgICAgICBcIlNhdmVkU2VhcmNoZXNcIjogXCJTYXZlZCBzZWFyY2hlc1wiLFxuICAgICAgICBcIlRvZ2dsZURyb3Bkb3duXCIgOiBcIlRvZ2dsZSBEcm9wZG93blwiLFxuICAgICAgICBcIlNhdmVDdXJyZW50U2VhcmNoXCI6IFwiU2F2ZSBzZWFyY2hcIixcbiAgICAgICAgXCJTYXZlQXNcIiA6IFwiU2F2ZSBhcy4uLlwiLFxuICAgICAgICBcIlNhdmVcIiA6IFwiU2F2ZVwiLFxuICAgICAgICBcIkRlbGV0ZVwiIDogXCJSZW1vdmVcIixcbiAgICAgICAgXCJNb3JlXCI6IFwiTW9yZVwiLFxuICAgICAgICBcIkxlc3NcIjogXCJMZXNzXCIsXG4gICAgICAgIFwiTW9kYWxcIiA6IHtcbiAgICAgICAgICAgIFwiVGl0bGVcIiA6IFwiU2F2ZSBjdXJyZW50IHNlYXJjaCBjcml0ZXJpYVwiLFxuICAgICAgICAgICAgXCJIZWxwXCIgOiBcIlBsZWFzZSBhZGQgYSB0aXRsZSBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYS4gVGhpcyB0aXRsZSB3aWxsIGhlbHAgeW91IHRvIHVzZSB0aG9zZSBjcml0ZXJpYSBhZ2FpbiBpbiB0aGUgZnV0dXJlLlwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uVXNlckVycm9yXCIgOiBcIlBsZWFzZSB1c2UgYSB2YWxpZCBuYW1lIGZvciB5b3VyIGxpc3RcIixcbiAgICAgICAgICAgIFwiVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZFwiIDogXCJOYW1lIGFscmVhZHkgaW4gdXNlLiBQbGVhc2UgY2hvb3NlIGEgZGlmZmVyZW50IG9uZVwiLFxuICAgICAgICAgICAgXCJOb0xpc3REZWZpbmVkXCIgOiBcIkNhbm5vdCBkZWZpbmUgdXNlciBzdG9yYWdlIGtleS5cIixcbiAgICAgICAgICAgIFwiRW1wdHlDcml0ZXJpYUxpc3RcIiA6IFwiUGxlYXNlIGRlZmluZSBzZWFyY2ggY3JpdGVyaWEgYmVmb3JlIHNhdmUuXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lTGFiZWxcIiA6IFwiTGlzdCBuYW1lXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lUGxhY2Vob2xkZXJcIiA6IFwiVHlwZSBhIHRpdGxlIGhlcmUuLi5cIixcbiAgICAgICAgICAgIFwiQWNjZXB0XCIgOiBcIlNhdmVcIixcbiAgICAgICAgICAgIFwiRGVjbGluZVwiIDogXCJEZWNsaW5lXCIsXG4gICAgICAgICAgICBcIkNsb3NlXCIgOiBcIkNsb3NlXCJcbiAgICAgICAgfVxuICAgIH0sXG4gIFwiQWRkSXRlbXNcIiA6IHtcbiAgICBcIlNlbGVjdEl0ZW1zXCI6IFwiU2VsZWN0IGl0ZW1zXCIsXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmV4cG9ydCBlbnVtIFRhYmxlQWN0aW9uVHlwZXMge1xuICBMb2FkRmlsdGVyID0gJ1tUYWJsZV0gTG9hZCBGaWx0ZXInLFxuICBBcHBlbmRGaWx0ZXIgPSAnW1RhYmxlXSBBcHBlbmQgRmlsdGVyJyxcbiAgQXBwZW5kU3RhdGUgPSAnW1RhYmxlXSBBcHBlbmQgU3RhdGUnXG59XG5cbmV4cG9ydCBjbGFzcyBMb2FkRmlsdGVyIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuTG9hZEZpbHRlcjtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBlbmRGaWx0ZXIgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRGaWx0ZXI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyOiBhbnkpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBlbmRTdGF0ZSBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZFN0YXRlO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSkge31cbn1cblxuZXhwb3J0IHR5cGUgVGFibGVBY3Rpb25zID0gTG9hZEZpbHRlciB8IEFwcGVuZEZpbHRlciB8IEFwcGVuZFN0YXRlO1xuIiwiaW1wb3J0IHtcbiAgQWN0aW9uUmVkdWNlck1hcCxcbiAgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLFxuICBjcmVhdGVTZWxlY3Rvcixcbn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQWN0aW9ucywgVGFibGVBY3Rpb25UeXBlcyB9IGZyb20gJy4uL2FjdGlvbnMvdGFibGUuYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTdGF0ZSB7XG4gIGZpbHRlcj86IGFueTtcbiAgb3JkZXI/OiBhbnk7XG4gIHRhYmxlPzogYW55O1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xufTtcblxuZXhwb3J0IGNvbnN0IHRhYmxlSW5pdGlhbFN0YXRlOiBUYWJsZVN0YXRlID0ge1xuICBmaWx0ZXI6IHt9LFxuICBvcmRlcjogW11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZVJlZHVjZXIoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogVGFibGVBY3Rpb25zKTogeyBbaWQ6IHN0cmluZ106IFRhYmxlU3RhdGU7IH0ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuTG9hZEZpbHRlcjpcbiAgICAgIHJldHVybiBzdGF0ZVthY3Rpb24uaWRdO1xuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRGaWx0ZXI6XG4gICAgICAgIHN0YXRlW2FjdGlvbi5pZF0gPSB7XG4gICAgICAgICAgLi4uc3RhdGVbYWN0aW9uLmlkXSxcbiAgICAgICAgICBmaWx0ZXI6IGNsb25lRGVlcChhY3Rpb24uZmlsdGVyKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kU3RhdGU6XG4gICAgICAgICAgc3RhdGVbYWN0aW9uLmlkXSA9IHtcbiAgICAgICAgICAgIC4uLnN0YXRlW2FjdGlvbi5pZF0sXG4gICAgICAgICAgICB0YWJsZTogYWN0aW9uLmRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4VGFibGVzU3RhdGUge1xuICB0YWJsZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IFRhYmxlU3RhdGU7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCB0YWJsZVJlZHVjZXJzOiBBY3Rpb25SZWR1Y2VyTWFwPE5neFRhYmxlc1N0YXRlPiA9IHtcbiAgdGFibGVzOiB0YWJsZVJlZHVjZXIsXG59O1xuXG5leHBvcnQgY29uc3QgZmVhdHVyZU5hbWUgPSAndGFibGVzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhYmxlc1N0YXRlID0gY3JlYXRlRmVhdHVyZVNlbGVjdG9yKGZlYXR1cmVOYW1lKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFRhYmxlID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldFRhYmxlc1N0YXRlLFxuICAoc3RhdGU6IE5neFRhYmxlc1N0YXRlLCBwcm9wczogeyBpZDogc3RyaW5nIH0pID0+IHtcbiAgICByZXR1cm4gc3RhdGUudGFibGVzW3Byb3BzLmlkXTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgZnJvbVRhYmxlcyBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcGVuZFN0YXRlIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcblxuQERpcmVjdGl2ZShcbiAgICB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgICAgIHNlbGVjdG9yOiAnW3RhYmxlU3RhdGVdJyxcbiAgICB9LFxuKVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU3RhdGUgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgdGFibGVTdGF0ZT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPikge1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGUuc3RhdGVTYXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZUxvYWRDYWxsYmFjayA9IChzZXR0aW5ncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbVRhYmxlcy5zZWxlY3RUYWJsZSwgeyBpZDogdGhpcy50YWJsZVN0YXRlIGFzIHN0cmluZyB9KSwgZmlyc3QoKSkuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soc3RhdGUgJiYgc3RhdGUudGFibGUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS50YWJsZSAmJiBzdGF0ZS50YWJsZS5Db2xSZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoc3RhdGUudGFibGUuQ29sUmVvcmRlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBmaXJzdERyYXcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYmxlLmRyYXcuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaXJzdERyYXcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdERyYXcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlU3RhdGVTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIG9TYXZlZFN0YXRlPzoge1xuICAgICAgICAgICAgICAgICAgICBDb2xSZW9yZGVyPzogbnVtYmVyW107XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BSb3c6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTY3JvbGxUb3A6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VSb3dUb3A6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnNldHRpbmdzKClbMF07XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlclNldHRpbmdzID0gbG9hZGVTdGF0ZVNldHRpbmdzLm9TYXZlZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgbG9hZGVTdGF0ZVNldHRpbmdzLm9TYXZlZFN0YXRlLnNjcm9sbGVyO1xuICAgICAgICAgICAgaWYgKHNjcm9sbGVyU2V0dGluZ3MgJiYgc2Nyb2xsZXJTZXR0aW5ncy50b3BSb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnNjcm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG9Sb3coc2Nyb2xsZXJTZXR0aW5ncy50b3BSb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVNhdmVDYWxsYmFjayA9IChzZXR0aW5ncywgZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBwZW5kU3RhdGUodGhpcy50YWJsZVN0YXRlIGFzIHN0cmluZywgZGF0YSkpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95XG4gIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXBwZW5kRmlsdGVyIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUsIHNlbGVjdFRhYmxlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU3RhdGUgfSBmcm9tICcuL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5cbiAgZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnROb3ROdWxsIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoJ0FkdmFuY2VkIHRhYmxlIHNlYXJjaCBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgICB9XG4gIH1cblxuICBARGlyZWN0aXZlKFxuICAge1xuICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICAgICBzZWxlY3RvcjogJ1tzZWFyY2hTdGF0ZV0nLFxuICAgfSxcbiAgKVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuICBleHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hTdGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgpIHNlYXJjaFN0YXRlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgdGFibGVJbml0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZTxOZ3hUYWJsZXNTdGF0ZT4pIHtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5zdG9yZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlYXJjaCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnROb3ROdWxsKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAvLyBzZXQgYXV0byBsb2FkIHRvIGZhbHNlXG4gICAgICAgICAgdGhpcy5zZWFyY2gudGFibGUuYXV0b0xvYWQgPSBmYWxzZTtcbiAgICAgICAgICAvLyBoYW5kbGUgZmlsdGVyaW5nXG4gICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaC5maWx0ZXJDaGFuZ2Uuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBhcHBseSB0YWJsZSBzdGF0ZVxuICAgICAgICAgIHRoaXMuYXBwbHlUYWJsZVN0YXRlKCk7XG4gICAgICAgICAgLy8gaGFuZGxlIHRhYmxlIGluaXRcbiAgICAgICAgICB0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoLnRhYmxlLmluaXQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uVGFibGVJbml0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFwcGx5VGFibGVTdGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAvLyBoYW5kbGUgdGFibGUgc3RhdGUgKHZpYSBkaXJlY3RpdmUpXG4gICAgICAgIGNvbnN0IHRhYmxlU3RhdGUgPSBuZXcgQWR2YW5jZWRUYWJsZVN0YXRlKHRoaXMuc2VhcmNoLnRhYmxlLCB0aGlzLnN0b3JlKTtcbiAgICAgICAgdGFibGVTdGF0ZS50YWJsZVN0YXRlID0gdGhpcy5zZWFyY2hTdGF0ZSBhcyBzdHJpbmc7XG4gICAgICAgIHRhYmxlU3RhdGUubmdPbkluaXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUluaXQoKSB7XG4gICAgICB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdFRhYmxlLCB7IGlkOiB0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZ30pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gdXNlIG9yZGVyXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIGlmIChzdGF0ZS5vcmRlciAmJiBzdGF0ZS5vcmRlci5sZW5ndGggJiYgdGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnRhYmxlLmRhdGFUYWJsZS5vcmRlcihzdGF0ZS5vcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVzZSB0ZXh0IHNlYXJjaFxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIgJiYgc3RhdGUuZmlsdGVyLnEgJiYgdGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnRleHQgPSBzdGF0ZS5maWx0ZXIucTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2gudGFibGUuc2VhcmNoKHRoaXMuc2VhcmNoLnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB1c2UgcHJlZGVmaW5lZCBzZWFyY2hcbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyICYmIHN0YXRlLmZpbHRlci5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5zZWxlY3RlZExpc3QgPSB0aGlzLnNlYXJjaC51c2VyU2VhcmNoTGlzdC5maW5kKChpdGVtOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IHN0YXRlLmZpbHRlci5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5maWx0ZXIpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgY29sbGFwc2VkIHRvIGZhbHNlIChhZHZhbmNlZCBzZWFyY2gpXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5maWx0ZXIgPSBzdGF0ZS5maWx0ZXI7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIGVtcHR5IGZpbHRlciBhdCB0aGlzIG1vbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2Ugc2VhcmNoKCkgZnVuY3Rpb24gdHJpZ2dlcnMgYSBzdG9yZSBkaXNwYXRjaFxuICAgICAgICAgIHRoaXMuc2VhcmNoLmZpbHRlciA9IHt9O1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlYXJjaEZpbHRlcihmaWx0ZXI6IGFueSkge1xuICAgICAgZmlsdGVyID0gaXNFbXB0eShmaWx0ZXIpID8gbnVsbCA6IGZpbHRlcjtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEFwcGVuZEZpbHRlcih0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZywgZmlsdGVyKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoU3RhdGUgfSBmcm9tICcuL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tyb3V0ZXJTZWFyY2hTdGF0ZV0nXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlIGV4dGVuZHMgQWR2YW5jZWRTZWFyY2hTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2VudGVyaW5nU3RhdGUgPSB0cnVlO1xuICBwcml2YXRlIF9hcHBseVN0YXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXG4gICAgc3VwZXIoc2VhcmNoLCBzdG9yZSk7XG4gICAgLy8gc2V0IHNlYXJjaCBzdGF0ZSBkeW5hbWljYWxseSBhY2NvcmRpbmcgdG8gcm91dGVcbiAgICB0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCB8IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgICAgLy8gY2FwdHVyZSB1cmxzIHJlZ2FyZGluZyB0YWIgY2hhbmdpbmcgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmVcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmICF0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHNldCBzZWFyY2ggc3RhdGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBuZXcgVVJMKGV2ZW50LnVybCwgbG9jYXRpb24ub3JpZ2luKS5wYXRobmFtZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHNldCBzZWFyY2ggc3RhdGUgZm9yIHRoZSBjdXJyZW50IHRhYmxlJywgZXJyKTtcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIGV2ZW50IHVybFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IGV2ZW50LnVybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdG9vZ2xlIGFwcGx5U3RhdGVcbiAgICAgICAgICB0aGlzLl9hcHBseVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYXB0dXJlIHVybCBvZiB0aGUgZmlyc3QgYWN0aXZhdGlvbiBvZiB0aGUgY29tcG9uZW50IChlLmcuIGNvbWluZyBmcm9tIGFub3RoZXIgcm91dGUpXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5fZW50ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBzZXQgc2VhcmNoIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gbmV3IFVSTChldmVudC51cmxBZnRlclJlZGlyZWN0cywgbG9jYXRpb24ub3JpZ2luKS5wYXRobmFtZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHNldCBzZWFyY2ggc3RhdGUgZm9yIHRoZSBjdXJyZW50IHRhYmxlJywgZXJyKTtcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIGV2ZW50IHVybEFmdGVyUmVkaXJlY3RzXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRvZ2dsZSBlbnRlcmluZ1N0YXRlXG4gICAgICAgICAgdGhpcy5fZW50ZXJpbmdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hcHBseVN0YXRlKSB7XG4gICAgICAgICAgLy8gYXBwbHkgbmV3IHRhYmxlIHN0YXRlXG4gICAgICAgICAgc3VwZXIuYXBwbHlUYWJsZVN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5fYXBwbHlTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIGRlc3Ryb3kgb3duIHN1YnNjcmlwdGlvbnNcbiAgICBpZiAodGhpcy5fcm91dGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLy8gZGVzdHJveSBwYXJlbnQgc3Vic2NyaXB0aW9uc1xuICAgIHJldHVybiBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG59XG4iLCJpbXBvcnQge05nTW9kdWxlLCBPbkluaXQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUF9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVDb21wb25lbnQsIENPTFVNTl9GT1JNQVRURVJTfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7QnRuRXhwRGlyZWN0aXZlfSBmcm9tICcuL2RpcmVjdGl2ZXMvYnRuZXhwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQge1NoYXJlZE1vZHVsZSwgVGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Um91dGVyTW9kYWxNb2R1bGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlYXJjaC1mb3JtL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybXNNb2R1bGV9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHtGb3JtaW9Nb2R1bGV9IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7IEFkdmFuY2VkTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlcixcbiAgICBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvblJlc29sdmVyXG59IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1yZXNvbHZlcnMnO1xuaW1wb3J0IHtBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXJvdy1hY3Rpb24vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtGT1JNQVRURVJTfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQge1RBQkxFU19FTH0gZnJvbSAnLi9pMThuL3RhYmxlcy5lbCc7XG5pbXBvcnQge1RBQkxFU19FTn0gZnJvbSAnLi9pMThuL3RhYmxlcy5lbic7XG5pbXBvcnQgeyBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCwgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc2ltcGxlLWhlYWRlci90YWJsZS1zaW1wbGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NiYXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Byb2dyZXNzYmFyJztcbmltcG9ydCB7IEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VkU2VsZWN0U2VydmljZSB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlZC10YWJsZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JQaXBlfSBmcm9tICcuL3BpcGVzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IucGlwZSc7XG5pbXBvcnQge0dyb3VwQnlQaXBlLCBOZ1BpcGVzTW9kdWxlfSBmcm9tICduZ3gtcGlwZXMnO1xuaW1wb3J0IHtQYXJzZVRpdGxlUGlwZX0gZnJvbSAnLi9waXBlcy9hZHZhbnNlZC1hZ2dyZWdhdG9yLWxpc3QtdGl0bGUtcGFyc2UucGlwZSc7XG5pbXBvcnQge0FkZEl0ZW1zQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWRkLWl0ZW1zL2FkZC1pdGVtcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlLXNlYXJjaC1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLWJhc2UnO1xuaW1wb3J0IHsgQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2RhbE1vZHVsZSxcbiAgICAgICAgRm9ybWlvTW9kdWxlLFxuICAgICAgICBBZHZhbmNlZEZvcm1zTW9kdWxlLFxuICAgICAgICBTaGFyZWRNb2R1bGUsXG4gICAgICAgIE1vZGFsTW9kdWxlLFxuICAgICAgICBQcm9ncmVzc2Jhck1vZHVsZSxcbiAgICAgICAgTmdQaXBlc01vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRGF0ZVBpcGUsIFRlbXBsYXRlUGlwZSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogQ09MVU1OX0ZPUk1BVFRFUlMsXG4gICAgICAgIHVzZVZhbHVlOiBGT1JNQVRURVJTXG4gICAgICB9LFxuXG4gICAgICBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlcixcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgIEdyb3VwQnlQaXBlXG4gICAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQnRuRXhwRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JQaXBlLFxuICAgICAgICBQYXJzZVRpdGxlUGlwZSxcbiAgICAgICAgQWRkSXRlbXNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQnRuRXhwRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVN0YXRlLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZXNNb2R1bGUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5uZ09uSW5pdCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlcyBtb2R1bGUnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24oJ2VuJywgVEFCTEVTX0VOLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbignZWwnLCBUQUJMRVNfRUwsIHRydWUpO1xuICAgIH1cblxufVxuIl0sIm5hbWVzIjpbInRlbXBsYXRlIiwiQWN0aXZhdGVkUm91dGUiLCJSb3V0ZXIiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsImF0IiwiVHJhbnNsYXRlU2VydmljZSIsInRzbGliXzEuX192YWx1ZXMiLCJEYXRlUGlwZSIsIklTTzYzOTEuZ2V0TmF0aXZlTmFtZSIsIlRlbXBsYXRlUGlwZSIsIkluamVjdGFibGUiLCJFdmVudEVtaXR0ZXIiLCJGb3JtQ29udHJvbCIsIkNvbXBvbmVudCIsIlZpZXdFbmNhcHN1bGF0aW9uIiwiQnNNb2RhbFJlZiIsIkNoYW5nZURldGVjdG9yUmVmIiwiSW5wdXQiLCJWaWV3Q2hpbGQiLCJSb3V0ZXJNb2RhbE9rQ2FuY2VsIiwiTW9kYWxTZXJ2aWNlIiwiQmVoYXZpb3JTdWJqZWN0Iiwic2tpcCIsIk5hdmlnYXRpb25TdGFydCIsIlJlc3BvbnNlRXJyb3IiLCJEaXJlY3RpdmUiLCJBbmd1bGFyRGF0YUNvbnRleHQiLCJDb25maWd1cmF0aW9uU2VydmljZSIsIkxvYWRpbmdTZXJ2aWNlIiwiRXJyb3JTZXJ2aWNlIiwiSG9zdExpc3RlbmVyIiwiSW5qZWN0aW9uVG9rZW4iLCJUcmFuc2xhdGVQaXBlIiwiQ2xpZW50RGF0YVF1ZXJ5YWJsZSIsIkRJQUxPR19CVVRUT05TIiwiSW5qZWN0IiwiSW5qZWN0b3IiLCJFbGVtZW50UmVmIiwiSHR0cENsaWVudCIsIkV4cG9ydFNwcmVhZHNoZWV0U2VydmljZSIsIlZpZXdDb250YWluZXJSZWYiLCJPdXRwdXQiLCJUb2FzdFNlcnZpY2UiLCJVc2VyQWN0aXZpdHlTZXJ2aWNlIiwiU2VydmljZVVybFByZVByb2Nlc3NvciIsIlRyYW5zbGF0ZVByZVByb2Nlc3NvciIsIkZvcm1BcnJheSIsIkJzTW9kYWxTZXJ2aWNlIiwiVXNlclN0b3JhZ2VTZXJ2aWNlIiwiRm9ybUJ1aWxkZXIiLCJUZXh0VXRpbHMiLCJDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSIsIlBpcGUiLCJjbG9uZURlZXAiLCJjcmVhdGVGZWF0dXJlU2VsZWN0b3IiLCJjcmVhdGVTZWxlY3RvciIsInN0b3JlIiwic2VsZWN0IiwiZnJvbVRhYmxlcy5zZWxlY3RUYWJsZSIsImZpcnN0IiwiU3RvcmUiLCJPcHRpb25hbCIsImlzRW1wdHkiLCJmaWx0ZXIiLCJOYXZpZ2F0aW9uRW5kIiwiTmdNb2R1bGUiLCJDb21tb25Nb2R1bGUiLCJTaGFyZWRNb2R1bGUiLCJUcmFuc2xhdGVNb2R1bGUiLCJGb3Jtc01vZHVsZSIsIlJlYWN0aXZlRm9ybXNNb2R1bGUiLCJSb3V0ZXJNb2R1bGUiLCJSb3V0ZXJNb2RhbE1vZHVsZSIsIkZvcm1pb01vZHVsZSIsIkFkdmFuY2VkRm9ybXNNb2R1bGUiLCJNb2RhbE1vZHVsZSIsIlByb2dyZXNzYmFyTW9kdWxlIiwiTmdQaXBlc01vZHVsZSIsIkdyb3VwQnlQaXBlIiwiQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQUE7Ozs7Ozs7Ozs7Ozs7O0lBY0E7SUFFQSxJ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
8316
+ //# sourceMappingURL=universis-ngx-tables.umd.js.map