library-portal 1.0.209 → 1.0.210
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.
- package/bundles/library-portal.umd.js +72 -72
- package/bundles/library-portal.umd.js.map +1 -1
- package/bundles/library-portal.umd.min.js +1 -1
- package/bundles/library-portal.umd.min.js.map +1 -1
- package/esm2015/lib/components/cpf-cnpj/cpf-cnpj.validator.directive.js +17 -17
- package/esm2015/lib/login/login.component.js +3 -3
- package/esm2015/lib/user/user.service.js +2 -2
- package/esm2015/lib/util/documento.util.js +2 -2
- package/esm5/lib/components/cpf-cnpj/cpf-cnpj.validator.directive.js +17 -17
- package/esm5/lib/login/login.component.js +3 -3
- package/esm5/lib/user/user.service.js +2 -2
- package/esm5/lib/util/documento.util.js +2 -2
- package/fesm2015/library-portal.js +23 -23
- package/fesm2015/library-portal.js.map +1 -1
- package/fesm5/library-portal.js +22 -22
- package/fesm5/library-portal.js.map +1 -1
- package/lib/components/cpf-cnpj/cpf-cnpj.validator.directive.d.ts +3 -3
- package/lib/user/user.service.d.ts +1 -1
- package/lib/util/documento.util.d.ts +1 -1
- package/library-portal.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('crypto-js'), require('@angular/common/http'), require('@ng-bootstrap/ng-bootstrap'), require('moment'), require('ng2-pdfjs-viewer'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/fontawesome-svg-core'), require('@fortawesome/free-solid-svg-icons'), require('@angular/common'), require('@fortawesome/free-solid-svg-icons/faTimes'), require('@fortawesome/free-solid-svg-icons/faBan'), require('@fortawesome/free-solid-svg-icons/faBell'), require('ng-jhipster'), require('@ngx-translate/core'), require('ng-jhipster/src/config.service'), require('sweetalert2'), require('@angular/animations'), require('ngx-joyride'), require('ng2-fittext'), require('@angular/platform-browser/animations'), require('ngx-webstorage'), require('rxjs'), require('@angular/router'), require('ng-jhipster/src/language/language.service'), require('ngx-webstorage/dist/services/sessionStorage'), require('@angular/platform-browser'), require('rxjs/operators'), require('ngx-webstorage/dist/services/localStorage'), require('ng-recaptcha'), require('ng-recaptcha/recaptcha/recaptcha-common.module'), require('ngx-cookie'), require('ngx-cookie/src/cookie.service'), require('rxjs/internal/Subject'), require('ngx-mask'), require('@fortawesome/free-solid-svg-icons/faUserPlus'), require('@fortawesome/free-solid-svg-icons/faUser'), require('rxjs/internal/observable/throwError'), require('@ngx-loading-bar/http-client'), require('@fortawesome/free-solid-svg-icons/faSave'), require('@fortawesome/free-solid-svg-icons/faCheck')) :
|
|
3
3
|
typeof define === 'function' && define.amd ? define('library-portal', ['exports', '@angular/core', '@angular/forms', 'crypto-js', '@angular/common/http', '@ng-bootstrap/ng-bootstrap', 'moment', 'ng2-pdfjs-viewer', '@fortawesome/angular-fontawesome', '@fortawesome/fontawesome-svg-core', '@fortawesome/free-solid-svg-icons', '@angular/common', '@fortawesome/free-solid-svg-icons/faTimes', '@fortawesome/free-solid-svg-icons/faBan', '@fortawesome/free-solid-svg-icons/faBell', 'ng-jhipster', '@ngx-translate/core', 'ng-jhipster/src/config.service', 'sweetalert2', '@angular/animations', 'ngx-joyride', 'ng2-fittext', '@angular/platform-browser/animations', 'ngx-webstorage', 'rxjs', '@angular/router', 'ng-jhipster/src/language/language.service', 'ngx-webstorage/dist/services/sessionStorage', '@angular/platform-browser', 'rxjs/operators', 'ngx-webstorage/dist/services/localStorage', 'ng-recaptcha', 'ng-recaptcha/recaptcha/recaptcha-common.module', 'ngx-cookie', 'ngx-cookie/src/cookie.service', 'rxjs/internal/Subject', 'ngx-mask', '@fortawesome/free-solid-svg-icons/faUserPlus', '@fortawesome/free-solid-svg-icons/faUser', 'rxjs/internal/observable/throwError', '@ngx-loading-bar/http-client', '@fortawesome/free-solid-svg-icons/faSave', '@fortawesome/free-solid-svg-icons/faCheck'], factory) :
|
|
4
4
|
(factory((global['library-portal'] = {}),global.ng.core,global.ng.forms,global['crypto-js'],global.ng.common.http,global['@ng-bootstrap/ng-bootstrap'],global.moment,global['ng2-pdfjs-viewer'],global['@fortawesome/angular-fontawesome'],global['@fortawesome/fontawesome-svg-core'],global['@fortawesome/free-solid-svg-icons'],global.ng.common,global['@fortawesome/free-solid-svg-icons/faTimes'],global['@fortawesome/free-solid-svg-icons/faBan'],global.faBell,global['ng-jhipster'],global['@ngx-translate/core'],global['ng-jhipster/src/config'].service,global.sweetalert2,global.ng.animations,global['ngx-joyride'],global['ng2-fittext'],global.ng.platformBrowser.animations,global['ngx-webstorage'],global.rxjs,global.ng.router,global['ng-jhipster/src/language/language'].service,global['ngx-webstorage'],global.ng.platformBrowser,global.rxjs.operators,global['ngx-webstorage'],global.ngRecaptcha,global.recaptchaCommon_module,global['ngx-cookie'],global['ngx-cookie/src/cookie'].service,global.rxjs['internal/Subject'],global['ngx-mask'],global['@fortawesome/free-solid-svg-icons/faUserPlus'],global['@fortawesome/free-solid-svg-icons/faUser'],global.rxjs['internal/observable/throwError'],global['@ngx-loading-bar/http-client'],global['@fortawesome/free-solid-svg-icons/faSave'],global['@fortawesome/free-solid-svg-icons/faCheck']));
|
|
5
|
-
}(this, (function (exports,i0,forms,CryptoJS,i1,i1$1,moment,ng2PdfjsViewer,angularFontawesome,fontawesomeSvgCore,freeSolidSvgIcons,common,faTimes,faBan,faBell,ngJhipster,i1$2,i1$3,Swal,animations,i4,ng2Fittext,animations$1,ngxWebstorage,rxjs,i1$4,i1$5,
|
|
5
|
+
}(this, (function (exports,i0,forms,CryptoJS,i1,i1$1,moment,ng2PdfjsViewer,angularFontawesome,fontawesomeSvgCore,freeSolidSvgIcons,common,faTimes,faBan,faBell,ngJhipster,i1$2,i1$3,Swal,animations,i4,ng2Fittext,animations$1,ngxWebstorage,rxjs,i3,i1$4,i1$5,i2,operators,i2$1,ngRecaptcha,recaptchaCommon_module,ngxCookie,i1$6,Subject,ngxMask,faUserPlus,faUser,throwError,httpClient,faSave,faCheck) { 'use strict';
|
|
6
6
|
|
|
7
7
|
moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
|
|
8
8
|
Swal = Swal && Swal.hasOwnProperty('default') ? Swal['default'] : Swal;
|
|
@@ -420,7 +420,7 @@
|
|
|
420
420
|
* @param {?=} cnpjAlfanumerico
|
|
421
421
|
* @return {?}
|
|
422
422
|
*/
|
|
423
|
-
DocumentoUtil.
|
|
423
|
+
DocumentoUtil.isDocumentoValido = /**
|
|
424
424
|
* @param {?} documento
|
|
425
425
|
* @param {?=} cnpjAlfanumerico
|
|
426
426
|
* @return {?}
|
|
@@ -973,8 +973,8 @@
|
|
|
973
973
|
setTimeout(( /**
|
|
974
974
|
* @return {?}
|
|
975
975
|
*/function () {
|
|
976
|
-
_this.
|
|
977
|
-
_this.
|
|
976
|
+
_this.sincronizarTipoDocumento();
|
|
977
|
+
_this.sincronizarValorInicial();
|
|
978
978
|
}));
|
|
979
979
|
};
|
|
980
980
|
/**
|
|
@@ -984,8 +984,8 @@
|
|
|
984
984
|
* @return {?}
|
|
985
985
|
*/
|
|
986
986
|
function () {
|
|
987
|
-
this.
|
|
988
|
-
this.
|
|
987
|
+
this.sincronizarTipoDocumento();
|
|
988
|
+
this.sincronizarValorInicial();
|
|
989
989
|
if (this.validatorChange) {
|
|
990
990
|
this.validatorChange();
|
|
991
991
|
}
|
|
@@ -999,7 +999,7 @@
|
|
|
999
999
|
* @return {?}
|
|
1000
1000
|
*/
|
|
1001
1001
|
function (control) {
|
|
1002
|
-
this.
|
|
1002
|
+
this.sincronizarTipoDocumento();
|
|
1003
1003
|
return _super.prototype.validate.call(this, control);
|
|
1004
1004
|
};
|
|
1005
1005
|
/**
|
|
@@ -1020,12 +1020,12 @@
|
|
|
1020
1020
|
* @return {?}
|
|
1021
1021
|
*/
|
|
1022
1022
|
function () {
|
|
1023
|
-
this.
|
|
1023
|
+
this.sincronizarTipoDocumento();
|
|
1024
1024
|
if (this.realTimeMask === RealTimeMaskType.NONE) {
|
|
1025
|
-
this.
|
|
1025
|
+
this.atualizarDocumentoMascarado(this.element.nativeElement.value, false, false);
|
|
1026
1026
|
return;
|
|
1027
1027
|
}
|
|
1028
|
-
this.
|
|
1028
|
+
this.atualizarDocumentoMascarado(this.element.nativeElement.value, false, true);
|
|
1029
1029
|
};
|
|
1030
1030
|
/**
|
|
1031
1031
|
* @return {?}
|
|
@@ -1034,8 +1034,8 @@
|
|
|
1034
1034
|
* @return {?}
|
|
1035
1035
|
*/
|
|
1036
1036
|
function () {
|
|
1037
|
-
this.
|
|
1038
|
-
this.
|
|
1037
|
+
this.sincronizarTipoDocumento();
|
|
1038
|
+
this.atualizarDocumentoMascarado(this.element.nativeElement.value, false, true);
|
|
1039
1039
|
};
|
|
1040
1040
|
/**
|
|
1041
1041
|
* @return {?}
|
|
@@ -1044,8 +1044,8 @@
|
|
|
1044
1044
|
* @return {?}
|
|
1045
1045
|
*/
|
|
1046
1046
|
function () {
|
|
1047
|
-
this.
|
|
1048
|
-
this.
|
|
1047
|
+
this.sincronizarTipoDocumento();
|
|
1048
|
+
this.atualizarDocumentoMascarado(this.element.nativeElement.value, true, this.realTimeMask !== RealTimeMaskType.NONE);
|
|
1049
1049
|
};
|
|
1050
1050
|
/**
|
|
1051
1051
|
* @private
|
|
@@ -1054,7 +1054,7 @@
|
|
|
1054
1054
|
* @param {?} formatar
|
|
1055
1055
|
* @return {?}
|
|
1056
1056
|
*/
|
|
1057
|
-
CpfCnpjValidatorDirective.prototype.
|
|
1057
|
+
CpfCnpjValidatorDirective.prototype.atualizarDocumentoMascarado = /**
|
|
1058
1058
|
* @private
|
|
1059
1059
|
* @param {?} valorAtual
|
|
1060
1060
|
* @param {?} preservarCursor
|
|
@@ -1093,7 +1093,7 @@
|
|
|
1093
1093
|
* @private
|
|
1094
1094
|
* @return {?}
|
|
1095
1095
|
*/
|
|
1096
|
-
CpfCnpjValidatorDirective.prototype.
|
|
1096
|
+
CpfCnpjValidatorDirective.prototype.sincronizarTipoDocumento = /**
|
|
1097
1097
|
* @private
|
|
1098
1098
|
* @return {?}
|
|
1099
1099
|
*/
|
|
@@ -1104,7 +1104,7 @@
|
|
|
1104
1104
|
* @private
|
|
1105
1105
|
* @return {?}
|
|
1106
1106
|
*/
|
|
1107
|
-
CpfCnpjValidatorDirective.prototype.
|
|
1107
|
+
CpfCnpjValidatorDirective.prototype.sincronizarValorInicial = /**
|
|
1108
1108
|
* @private
|
|
1109
1109
|
* @return {?}
|
|
1110
1110
|
*/
|
|
@@ -1117,7 +1117,7 @@
|
|
|
1117
1117
|
}
|
|
1118
1118
|
return;
|
|
1119
1119
|
}
|
|
1120
|
-
this.
|
|
1120
|
+
this.atualizarDocumentoMascarado(this.ngModel || this.element.nativeElement.value, false, true);
|
|
1121
1121
|
};
|
|
1122
1122
|
CpfCnpjValidatorDirective.decorators = [
|
|
1123
1123
|
{ type: i0.Directive, args: [{
|
|
@@ -5168,10 +5168,10 @@
|
|
|
5168
5168
|
{ type: ngJhipster.JhiLanguageService },
|
|
5169
5169
|
{ type: ngxWebstorage.SessionStorageService },
|
|
5170
5170
|
{ type: AccountService },
|
|
5171
|
-
{ type:
|
|
5171
|
+
{ type: i3.Router }
|
|
5172
5172
|
];
|
|
5173
5173
|
};
|
|
5174
|
-
/** @nocollapse */ Principal.ngInjectableDef = i0.defineInjectable({ factory: function Principal_Factory() { return new Principal(i0.inject(i1$
|
|
5174
|
+
/** @nocollapse */ Principal.ngInjectableDef = i0.defineInjectable({ factory: function Principal_Factory() { return new Principal(i0.inject(i1$4.JhiLanguageService), i0.inject(i1$5.SessionStorageService), i0.inject(AccountService), i0.inject(i3.Router)); }, token: Principal, providedIn: "root" });
|
|
5175
5175
|
return Principal;
|
|
5176
5176
|
}());
|
|
5177
5177
|
|
|
@@ -5565,7 +5565,7 @@
|
|
|
5565
5565
|
{ type: ngxWebstorage.SessionStorageService }
|
|
5566
5566
|
];
|
|
5567
5567
|
};
|
|
5568
|
-
/** @nocollapse */ StateStorageService.ngInjectableDef = i0.defineInjectable({ factory: function StateStorageService_Factory() { return new StateStorageService(i0.inject(i1$
|
|
5568
|
+
/** @nocollapse */ StateStorageService.ngInjectableDef = i0.defineInjectable({ factory: function StateStorageService_Factory() { return new StateStorageService(i0.inject(i1$5.SessionStorageService)); }, token: StateStorageService, providedIn: "root" });
|
|
5569
5569
|
return StateStorageService;
|
|
5570
5570
|
}());
|
|
5571
5571
|
|
|
@@ -5681,7 +5681,7 @@
|
|
|
5681
5681
|
{ type: ngxWebstorage.SessionStorageService }
|
|
5682
5682
|
];
|
|
5683
5683
|
};
|
|
5684
|
-
/** @nocollapse */ AuthServerProvider.ngInjectableDef = i0.defineInjectable({ factory: function AuthServerProvider_Factory() { return new AuthServerProvider(i0.inject(i1.HttpClient), i0.inject(i2$1.LocalStorageService), i0.inject(i1$
|
|
5684
|
+
/** @nocollapse */ AuthServerProvider.ngInjectableDef = i0.defineInjectable({ factory: function AuthServerProvider_Factory() { return new AuthServerProvider(i0.inject(i1.HttpClient), i0.inject(i2$1.LocalStorageService), i0.inject(i1$5.SessionStorageService)); }, token: AuthServerProvider, providedIn: "root" });
|
|
5685
5685
|
return AuthServerProvider;
|
|
5686
5686
|
}());
|
|
5687
5687
|
|
|
@@ -6904,7 +6904,7 @@
|
|
|
6904
6904
|
{ type: ngxCookie.CookieService }
|
|
6905
6905
|
];
|
|
6906
6906
|
};
|
|
6907
|
-
/** @nocollapse */ CSRFService.ngInjectableDef = i0.defineInjectable({ factory: function CSRFService_Factory() { return new CSRFService(i0.inject(i1$
|
|
6907
|
+
/** @nocollapse */ CSRFService.ngInjectableDef = i0.defineInjectable({ factory: function CSRFService_Factory() { return new CSRFService(i0.inject(i1$6.CookieService)); }, token: CSRFService, providedIn: "root" });
|
|
6908
6908
|
return CSRFService;
|
|
6909
6909
|
}());
|
|
6910
6910
|
|
|
@@ -7287,7 +7287,7 @@
|
|
|
7287
7287
|
* @param {?} termoId
|
|
7288
7288
|
* @return {?}
|
|
7289
7289
|
*/
|
|
7290
|
-
UserService.prototype.
|
|
7290
|
+
UserService.prototype.obterAceiteLgpd = /**
|
|
7291
7291
|
* @param {?} login
|
|
7292
7292
|
* @param {?} termoId
|
|
7293
7293
|
* @return {?}
|
|
@@ -7593,7 +7593,7 @@
|
|
|
7593
7593
|
/** @type {?} */
|
|
7594
7594
|
var login = this.normalizarLogin(this.username);
|
|
7595
7595
|
if (login && login.length > 0) {
|
|
7596
|
-
this.userService.
|
|
7596
|
+
this.userService.obterAceiteLgpd(login, this.termoLgpd.id).subscribe(( /**
|
|
7597
7597
|
* @param {?} response
|
|
7598
7598
|
* @return {?}
|
|
7599
7599
|
*/function (response) {
|
|
@@ -7704,7 +7704,7 @@
|
|
|
7704
7704
|
if (this.isEmail(login)) {
|
|
7705
7705
|
return login.toLowerCase();
|
|
7706
7706
|
}
|
|
7707
|
-
if (DocumentoUtil.
|
|
7707
|
+
if (DocumentoUtil.isDocumentoValido(login, this.isCnpjAlfanumericoHabilitado())) {
|
|
7708
7708
|
return DocumentoUtil.normalizarDocumento(login, this.isCnpjAlfanumericoHabilitado());
|
|
7709
7709
|
}
|
|
7710
7710
|
return login;
|
|
@@ -7748,7 +7748,7 @@
|
|
|
7748
7748
|
{ type: StateStorageService },
|
|
7749
7749
|
{ type: i0.ElementRef },
|
|
7750
7750
|
{ type: i0.Renderer },
|
|
7751
|
-
{ type:
|
|
7751
|
+
{ type: i3.Router },
|
|
7752
7752
|
{ type: RegisterModalService },
|
|
7753
7753
|
{ type: i1$2.TranslateService },
|
|
7754
7754
|
{ type: UserService },
|
|
@@ -7893,13 +7893,13 @@
|
|
|
7893
7893
|
/** @nocollapse */
|
|
7894
7894
|
UserRouteAccessService.ctorParameters = function () {
|
|
7895
7895
|
return [
|
|
7896
|
-
{ type:
|
|
7896
|
+
{ type: i3.Router },
|
|
7897
7897
|
{ type: LoginModalService },
|
|
7898
7898
|
{ type: Principal },
|
|
7899
7899
|
{ type: StateStorageService }
|
|
7900
7900
|
];
|
|
7901
7901
|
};
|
|
7902
|
-
/** @nocollapse */ UserRouteAccessService.ngInjectableDef = i0.defineInjectable({ factory: function UserRouteAccessService_Factory() { return new UserRouteAccessService(i0.inject(
|
|
7902
|
+
/** @nocollapse */ UserRouteAccessService.ngInjectableDef = i0.defineInjectable({ factory: function UserRouteAccessService_Factory() { return new UserRouteAccessService(i0.inject(i3.Router), i0.inject(LoginModalService), i0.inject(Principal), i0.inject(StateStorageService)); }, token: UserRouteAccessService, providedIn: "root" });
|
|
7903
7903
|
return UserRouteAccessService;
|
|
7904
7904
|
}());
|
|
7905
7905
|
|
|
@@ -8808,10 +8808,10 @@
|
|
|
8808
8808
|
{ type: i1$2.TranslateService },
|
|
8809
8809
|
{ type: i0.RendererFactory2 },
|
|
8810
8810
|
{ type: i2.Title },
|
|
8811
|
-
{ type:
|
|
8811
|
+
{ type: i3.Router }
|
|
8812
8812
|
];
|
|
8813
8813
|
};
|
|
8814
|
-
/** @nocollapse */ JhiLanguageHelper.ngInjectableDef = i0.defineInjectable({ factory: function JhiLanguageHelper_Factory() { return new JhiLanguageHelper(i0.inject(i1$2.TranslateService), i0.inject(i0.RendererFactory2), i0.inject(i2.Title), i0.inject(
|
|
8814
|
+
/** @nocollapse */ JhiLanguageHelper.ngInjectableDef = i0.defineInjectable({ factory: function JhiLanguageHelper_Factory() { return new JhiLanguageHelper(i0.inject(i1$2.TranslateService), i0.inject(i0.RendererFactory2), i0.inject(i2.Title), i0.inject(i3.Router)); }, token: JhiLanguageHelper, providedIn: "root" });
|
|
8815
8815
|
return JhiLanguageHelper;
|
|
8816
8816
|
}());
|
|
8817
8817
|
|
|
@@ -8933,7 +8933,7 @@
|
|
|
8933
8933
|
common.CommonModule,
|
|
8934
8934
|
forms.FormsModule,
|
|
8935
8935
|
ngJhipster.NgJhipsterModule,
|
|
8936
|
-
|
|
8936
|
+
i3.RouterModule.forChild(ENTITY_STATES)
|
|
8937
8937
|
],
|
|
8938
8938
|
exports: [
|
|
8939
8939
|
JhiGatewayComponent
|
|
@@ -9186,9 +9186,9 @@
|
|
|
9186
9186
|
{ type: AuditsService },
|
|
9187
9187
|
{ type: PortalAlertService },
|
|
9188
9188
|
{ type: ngJhipster.JhiParseLinks },
|
|
9189
|
-
{ type:
|
|
9189
|
+
{ type: i3.ActivatedRoute },
|
|
9190
9190
|
{ type: common.DatePipe },
|
|
9191
|
-
{ type:
|
|
9191
|
+
{ type: i3.Router }
|
|
9192
9192
|
];
|
|
9193
9193
|
};
|
|
9194
9194
|
return AuditsComponent;
|
|
@@ -9230,7 +9230,7 @@
|
|
|
9230
9230
|
common.CommonModule,
|
|
9231
9231
|
forms.FormsModule,
|
|
9232
9232
|
ngJhipster.NgJhipsterModule,
|
|
9233
|
-
|
|
9233
|
+
i3.RouterModule.forChild(ENTITY_STATES$1)
|
|
9234
9234
|
],
|
|
9235
9235
|
exports: [
|
|
9236
9236
|
AuditsComponent
|
|
@@ -9489,7 +9489,7 @@
|
|
|
9489
9489
|
common.CommonModule,
|
|
9490
9490
|
forms.FormsModule,
|
|
9491
9491
|
ngJhipster.NgJhipsterModule,
|
|
9492
|
-
|
|
9492
|
+
i3.RouterModule.forChild(ENTITY_STATES$2)
|
|
9493
9493
|
],
|
|
9494
9494
|
exports: [
|
|
9495
9495
|
JhiConfigurationComponent
|
|
@@ -9785,7 +9785,7 @@
|
|
|
9785
9785
|
common.CommonModule,
|
|
9786
9786
|
forms.FormsModule,
|
|
9787
9787
|
ngJhipster.NgJhipsterModule,
|
|
9788
|
-
|
|
9788
|
+
i3.RouterModule.forChild(ENTITY_STATES$3)
|
|
9789
9789
|
],
|
|
9790
9790
|
exports: [
|
|
9791
9791
|
JhiMetricsMonitoringModalComponent,
|
|
@@ -9856,7 +9856,7 @@
|
|
|
9856
9856
|
imports: [
|
|
9857
9857
|
common.CommonModule,
|
|
9858
9858
|
forms.FormsModule,
|
|
9859
|
-
|
|
9859
|
+
i3.RouterModule.forChild(ENTITY_STATES$4)
|
|
9860
9860
|
],
|
|
9861
9861
|
exports: [
|
|
9862
9862
|
JhiDocsComponent
|
|
@@ -10341,7 +10341,7 @@
|
|
|
10341
10341
|
common.CommonModule,
|
|
10342
10342
|
forms.FormsModule,
|
|
10343
10343
|
ngJhipster.NgJhipsterModule,
|
|
10344
|
-
|
|
10344
|
+
i3.RouterModule.forChild(ENTITY_STATES$5)
|
|
10345
10345
|
],
|
|
10346
10346
|
exports: [
|
|
10347
10347
|
JhiHealthCheckComponent,
|
|
@@ -10498,7 +10498,7 @@
|
|
|
10498
10498
|
common.CommonModule,
|
|
10499
10499
|
forms.FormsModule,
|
|
10500
10500
|
ngJhipster.NgJhipsterModule,
|
|
10501
|
-
|
|
10501
|
+
i3.RouterModule.forChild(ENTITY_STATES$6)
|
|
10502
10502
|
],
|
|
10503
10503
|
exports: [
|
|
10504
10504
|
LogsComponent
|
|
@@ -11230,7 +11230,7 @@
|
|
|
11230
11230
|
{ type: MenuService },
|
|
11231
11231
|
{ type: EmpresaService },
|
|
11232
11232
|
{ type: ParametrosService },
|
|
11233
|
-
{ type:
|
|
11233
|
+
{ type: i3.ActivatedRoute },
|
|
11234
11234
|
{ type: LoginModalService }
|
|
11235
11235
|
];
|
|
11236
11236
|
};
|
|
@@ -11281,7 +11281,7 @@
|
|
|
11281
11281
|
common.CommonModule,
|
|
11282
11282
|
angularFontawesome.FontAwesomeModule,
|
|
11283
11283
|
i1$1.NgbModule.forRoot(),
|
|
11284
|
-
|
|
11284
|
+
i3.RouterModule.forChild(__spread(HOME_ROUTE))
|
|
11285
11285
|
],
|
|
11286
11286
|
declarations: [
|
|
11287
11287
|
HomeComponent
|
|
@@ -11440,7 +11440,7 @@
|
|
|
11440
11440
|
MenuUpdateComponent.ctorParameters = function () {
|
|
11441
11441
|
return [
|
|
11442
11442
|
{ type: MenuService },
|
|
11443
|
-
{ type:
|
|
11443
|
+
{ type: i3.ActivatedRoute },
|
|
11444
11444
|
{ type: GatewayRoutesService }
|
|
11445
11445
|
];
|
|
11446
11446
|
};
|
|
@@ -11561,8 +11561,8 @@
|
|
|
11561
11561
|
/** @nocollapse */
|
|
11562
11562
|
MenuDeletePopupComponent.ctorParameters = function () {
|
|
11563
11563
|
return [
|
|
11564
|
-
{ type:
|
|
11565
|
-
{ type:
|
|
11564
|
+
{ type: i3.ActivatedRoute },
|
|
11565
|
+
{ type: i3.Router },
|
|
11566
11566
|
{ type: i1$1.NgbModal }
|
|
11567
11567
|
];
|
|
11568
11568
|
};
|
|
@@ -11611,7 +11611,7 @@
|
|
|
11611
11611
|
/** @nocollapse */
|
|
11612
11612
|
MenuDetailComponent.ctorParameters = function () {
|
|
11613
11613
|
return [
|
|
11614
|
-
{ type:
|
|
11614
|
+
{ type: i3.ActivatedRoute }
|
|
11615
11615
|
];
|
|
11616
11616
|
};
|
|
11617
11617
|
return MenuDetailComponent;
|
|
@@ -11958,8 +11958,8 @@
|
|
|
11958
11958
|
{ type: ngJhipster.JhiParseLinks },
|
|
11959
11959
|
{ type: PortalAlertService },
|
|
11960
11960
|
{ type: Principal },
|
|
11961
|
-
{ type:
|
|
11962
|
-
{ type:
|
|
11961
|
+
{ type: i3.ActivatedRoute },
|
|
11962
|
+
{ type: i3.Router },
|
|
11963
11963
|
{ type: ngJhipster.JhiEventManager }
|
|
11964
11964
|
];
|
|
11965
11965
|
};
|
|
@@ -12114,7 +12114,7 @@
|
|
|
12114
12114
|
i1$1.NgbModule.forRoot(),
|
|
12115
12115
|
angularFontawesome.FontAwesomeModule,
|
|
12116
12116
|
PortalAlertModule,
|
|
12117
|
-
|
|
12117
|
+
i3.RouterModule.forChild(ENTITY_STATES$7)
|
|
12118
12118
|
],
|
|
12119
12119
|
declarations: [
|
|
12120
12120
|
MenuComponent,
|
|
@@ -12307,7 +12307,7 @@
|
|
|
12307
12307
|
{ type: ngJhipster.JhiDataUtils },
|
|
12308
12308
|
{ type: EmpresaService },
|
|
12309
12309
|
{ type: i0.ElementRef },
|
|
12310
|
-
{ type:
|
|
12310
|
+
{ type: i3.ActivatedRoute }
|
|
12311
12311
|
];
|
|
12312
12312
|
};
|
|
12313
12313
|
return EmpresaUpdateComponent;
|
|
@@ -12427,8 +12427,8 @@
|
|
|
12427
12427
|
/** @nocollapse */
|
|
12428
12428
|
EmpresaDeletePopupComponent.ctorParameters = function () {
|
|
12429
12429
|
return [
|
|
12430
|
-
{ type:
|
|
12431
|
-
{ type:
|
|
12430
|
+
{ type: i3.ActivatedRoute },
|
|
12431
|
+
{ type: i3.Router },
|
|
12432
12432
|
{ type: i1$1.NgbModal }
|
|
12433
12433
|
];
|
|
12434
12434
|
};
|
|
@@ -12503,7 +12503,7 @@
|
|
|
12503
12503
|
EmpresaDetailComponent.ctorParameters = function () {
|
|
12504
12504
|
return [
|
|
12505
12505
|
{ type: ngJhipster.JhiDataUtils },
|
|
12506
|
-
{ type:
|
|
12506
|
+
{ type: i3.ActivatedRoute }
|
|
12507
12507
|
];
|
|
12508
12508
|
};
|
|
12509
12509
|
return EmpresaDetailComponent;
|
|
@@ -12738,9 +12738,9 @@
|
|
|
12738
12738
|
{ type: ngJhipster.JhiParseLinks },
|
|
12739
12739
|
{ type: PortalAlertService },
|
|
12740
12740
|
{ type: Principal },
|
|
12741
|
-
{ type:
|
|
12741
|
+
{ type: i3.ActivatedRoute },
|
|
12742
12742
|
{ type: ngJhipster.JhiDataUtils },
|
|
12743
|
-
{ type:
|
|
12743
|
+
{ type: i3.Router },
|
|
12744
12744
|
{ type: ngJhipster.JhiEventManager }
|
|
12745
12745
|
];
|
|
12746
12746
|
};
|
|
@@ -12877,7 +12877,7 @@
|
|
|
12877
12877
|
ngJhipster.NgJhipsterModule,
|
|
12878
12878
|
angularFontawesome.FontAwesomeModule,
|
|
12879
12879
|
PortalAlertModule,
|
|
12880
|
-
|
|
12880
|
+
i3.RouterModule.forChild(ENTITY_STATES$8)
|
|
12881
12881
|
],
|
|
12882
12882
|
declarations: [
|
|
12883
12883
|
EmpresaComponent,
|
|
@@ -13049,7 +13049,7 @@
|
|
|
13049
13049
|
/** @nocollapse */
|
|
13050
13050
|
UserMgmtDetailComponent.ctorParameters = function () {
|
|
13051
13051
|
return [
|
|
13052
|
-
{ type:
|
|
13052
|
+
{ type: i3.ActivatedRoute }
|
|
13053
13053
|
];
|
|
13054
13054
|
};
|
|
13055
13055
|
return UserMgmtDetailComponent;
|
|
@@ -13178,8 +13178,8 @@
|
|
|
13178
13178
|
return [
|
|
13179
13179
|
{ type: JhiLanguageHelper },
|
|
13180
13180
|
{ type: UserService },
|
|
13181
|
-
{ type:
|
|
13182
|
-
{ type:
|
|
13181
|
+
{ type: i3.ActivatedRoute },
|
|
13182
|
+
{ type: i3.Router }
|
|
13183
13183
|
];
|
|
13184
13184
|
};
|
|
13185
13185
|
return UserMgmtUpdateComponent;
|
|
@@ -13457,8 +13457,8 @@
|
|
|
13457
13457
|
{ type: PortalAlertService },
|
|
13458
13458
|
{ type: Principal },
|
|
13459
13459
|
{ type: ngJhipster.JhiParseLinks },
|
|
13460
|
-
{ type:
|
|
13461
|
-
{ type:
|
|
13460
|
+
{ type: i3.ActivatedRoute },
|
|
13461
|
+
{ type: i3.Router },
|
|
13462
13462
|
{ type: GlobalService },
|
|
13463
13463
|
{ type: ngJhipster.JhiEventManager },
|
|
13464
13464
|
{ type: i1$1.NgbModal }
|
|
@@ -14008,7 +14008,7 @@
|
|
|
14008
14008
|
angularFontawesome.FontAwesomeModule,
|
|
14009
14009
|
PortalAlertModule,
|
|
14010
14010
|
FindLanguageModulo,
|
|
14011
|
-
|
|
14011
|
+
i3.RouterModule.forChild(ENTITY_STATES$9),
|
|
14012
14012
|
PipeModulo
|
|
14013
14013
|
],
|
|
14014
14014
|
declarations: [
|
|
@@ -14073,7 +14073,7 @@
|
|
|
14073
14073
|
/** @nocollapse */
|
|
14074
14074
|
ErrorComponent.ctorParameters = function () {
|
|
14075
14075
|
return [
|
|
14076
|
-
{ type:
|
|
14076
|
+
{ type: i3.ActivatedRoute },
|
|
14077
14077
|
{ type: common.PlatformLocation }
|
|
14078
14078
|
];
|
|
14079
14079
|
};
|
|
@@ -14641,7 +14641,7 @@
|
|
|
14641
14641
|
{ type: ProfileService },
|
|
14642
14642
|
{ type: ParametrosService },
|
|
14643
14643
|
{ type: GlobalService },
|
|
14644
|
-
{ type:
|
|
14644
|
+
{ type: i3.Router },
|
|
14645
14645
|
{ type: UtilMensagem },
|
|
14646
14646
|
{ type: Principal },
|
|
14647
14647
|
{ type: ngJhipster.JhiEventManager },
|
|
@@ -14704,7 +14704,7 @@
|
|
|
14704
14704
|
* @param {?} event
|
|
14705
14705
|
* @return {?}
|
|
14706
14706
|
*/function (event) {
|
|
14707
|
-
if (event instanceof
|
|
14707
|
+
if (event instanceof i3.NavigationEnd) {
|
|
14708
14708
|
if (event.url.indexOf('/accessdenied') < 0 && event.url !== '/') {
|
|
14709
14709
|
/** @type {?} */
|
|
14710
14710
|
var lockedPage = LockPage$$1.retrieveFromStorage(_this.sessionStorage);
|
|
@@ -14735,7 +14735,7 @@
|
|
|
14735
14735
|
JhiMainComponent.ctorParameters = function () {
|
|
14736
14736
|
return [
|
|
14737
14737
|
{ type: JhiLanguageHelper },
|
|
14738
|
-
{ type:
|
|
14738
|
+
{ type: i3.Router },
|
|
14739
14739
|
{ type: ngxWebstorage.SessionStorageService },
|
|
14740
14740
|
{ type: OptionsProvider }
|
|
14741
14741
|
];
|
|
@@ -14958,7 +14958,7 @@
|
|
|
14958
14958
|
CookieConsentModule,
|
|
14959
14959
|
NotificacoesModule,
|
|
14960
14960
|
i1$1.NgbModule.forRoot(),
|
|
14961
|
-
|
|
14961
|
+
i3.RouterModule.forRoot(__spread(LAYOUT_ROUTES), { useHash: true, enableTracing: true }),
|
|
14962
14962
|
i4.JoyrideModule.forRoot()
|
|
14963
14963
|
],
|
|
14964
14964
|
declarations: [
|
|
@@ -14970,7 +14970,7 @@
|
|
|
14970
14970
|
PageRibbonComponent
|
|
14971
14971
|
],
|
|
14972
14972
|
exports: [
|
|
14973
|
-
|
|
14973
|
+
i3.RouterModule,
|
|
14974
14974
|
ErrorComponent,
|
|
14975
14975
|
JhiMainComponent,
|
|
14976
14976
|
NavbarComponent,
|
|
@@ -15084,7 +15084,7 @@
|
|
|
15084
15084
|
return [
|
|
15085
15085
|
{ type: ActivateService },
|
|
15086
15086
|
{ type: LoginModalService },
|
|
15087
|
-
{ type:
|
|
15087
|
+
{ type: i3.ActivatedRoute }
|
|
15088
15088
|
];
|
|
15089
15089
|
};
|
|
15090
15090
|
return ActivateComponent;
|
|
@@ -15343,7 +15343,7 @@
|
|
|
15343
15343
|
return [
|
|
15344
15344
|
{ type: PasswordResetFinishService },
|
|
15345
15345
|
{ type: LoginModalService },
|
|
15346
|
-
{ type:
|
|
15346
|
+
{ type: i3.ActivatedRoute },
|
|
15347
15347
|
{ type: i0.ElementRef },
|
|
15348
15348
|
{ type: i0.Renderer }
|
|
15349
15349
|
];
|
|
@@ -15694,7 +15694,7 @@
|
|
|
15694
15694
|
i1$1.NgbModule.forRoot(),
|
|
15695
15695
|
angularFontawesome.FontAwesomeModule,
|
|
15696
15696
|
PasswordStrengthModule,
|
|
15697
|
-
|
|
15697
|
+
i3.RouterModule.forChild(accountState)
|
|
15698
15698
|
],
|
|
15699
15699
|
declarations: [
|
|
15700
15700
|
ActivateComponent,
|
|
@@ -16369,4 +16369,4 @@
|
|
|
16369
16369
|
|
|
16370
16370
|
})));
|
|
16371
16371
|
|
|
16372
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1wb3J0YWwudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NwZi1jbnBqLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9kb2N1bWVudG8udXRpbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvY3BmLWNucGovY3BmLWNucGoudmFsaWRhdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9vcHRpb25zLXByb3ZpZGVyLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai52YWxpZGF0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5kaXJlY3RpdmUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL3V0aWwtZnVuY3Rpb25zLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9lbmNvZGUtZGVjb2RlLWJhc2U2NC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvcmVxdWVzdC11dGlsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9kYXRlcGlja2VyLWFkYXB0ZXIudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL2Vycm9yLmNvbnN0YW50cy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL3V0aWwtYXJxdWl2by50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvbG9jay1wYWdlcy1tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGRmL3BkZi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BkZi9wZGYuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGRmL3BkZi5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS1mcm9tLWtleS5waXBlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS5tb2R1bG8udHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGFyYW1ldHJvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm8ucmVzdWx0LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC91dGlsLW1lbnNhZ2VtLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9hbGVydC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9hbGVydC1lcnJvci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY2FtcG9zLXByZWVuY2hpbWVudG8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jb250cmlidWludGUubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2FqdWRhL2FqdWRhLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9nbG9iYWwuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvYWp1ZGEvYWp1ZGEubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3MubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy90ZXJtby1sZ3BkL3Rlcm1vLWxncGQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Rlcm1vLWxncGQubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2Nvb2tpZS1jb25zZW50L2Nvb2tpZS1jb25zZW50LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvY29va2llLWNvbnNlbnQvY29va2llLWNvbnNlbnQubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9hY2NvdW50LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYWdpbmEtcGFyYW1ldHJpemFkYS9wYWdpbmEtcGFyYW1ldHJpemFkYS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2hhcy1hbnktYXV0aG9yaXR5LmRpcmVjdGl2ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvc3RhdGUtc3RvcmFnZS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9hdXRoLWp3dC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9hdXRoLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFnaW5hLXBhcmFtZXRyaXphZGEvcGFnaW5hLXBhcmFtZXRyaXphZGEubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9tdWx0aXBsZS1jYXB0Y2hhL211bHRpcGxlLWNhcHRjaGEubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9tdWx0aXBsZS1jYXB0Y2hhL2kxOG4vcHQtYnIudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9jc3JmLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sb2dpbi9sb2dpbi5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXIuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3JlZ2lzdGVyL3JlZ2lzdGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3JlZ2lzdGVyL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXIuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9hY2NvdW50Lm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdXNlci5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2VtcHJlc2EubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9tZW51Lm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2F1ZGl0Lm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvYXVkaXQtZGF0YS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2xvZy5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Byb2ZpbGUtaW5mby5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL211bmljaXBpby5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2VuZGVyZWNvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGFpcy5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3RpcG8tbG9ncmFkb3Vyby5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGVzc29hLWZpc2ljYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Blc3NvYS1qdXJpZGljYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Jlc3BvbnNhdmVsLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdmlhLWNlcC5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NlcnRpZGFvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY29uZmlndXJhY2FvLXBhcmNlbGFtZW50by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2ltb3ZlbC5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2RhZG9zLWRlYml0by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2RlYml0by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2VudW1zLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZ2VyYWNhby1ib2xldG8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYXJjZWxhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGFyY2VsYW1lbnRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY29uc3RhbnRzLWVudW0ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLWJhci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xhbmd1YWdlL2xhbmd1YWdlLmNvbnN0YW50cy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS1yb3V0ZXMuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9nYXRld2F5L2dhdGV3YXkucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9nYXRld2F5L2dhdGV3YXkubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vYXVkaXRzL2F1ZGl0cy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vYXVkaXRzL2F1ZGl0cy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vYXVkaXRzL2F1ZGl0cy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24ucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24ubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL21ldHJpY3MvbWV0cmljcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL21ldHJpY3MvbWV0cmljcy5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL21ldHJpY3MvbWV0cmljcy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9kb2NzL2RvY3MuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZG9jcy9kb2NzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZG9jcy9kb2NzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2hlYWx0aC9oZWFsdGguc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2hlYWx0aC9oZWFsdGgtbW9kYWwuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9oZWFsdGgvaGVhbHRoLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9sb2dzL2xvZ3Muc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9sb2dzL2xvZ3Mucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9sb2dzL2xvZ3MubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3IvYXV0aC5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2ludGVyY2VwdG9yL2F1dGgtZXhwaXJlZC5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2ludGVyY2VwdG9yL2Vycm9yaGFuZGxlci5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2ludGVyY2VwdG9yL25vdGlmaWNhdGlvbi5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21lbnUvbWVudS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ob21lL2hvbWUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaG9tZS9ob21lLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaG9tZS9ob21lLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21lbnUvbWVudS11cGRhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LWRldGFpbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51Lm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2VtcHJlc2EvZW1wcmVzYS11cGRhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLWRldGFpbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2Jsb2Nrcy91aWItcGFnaW5hdGlvbi5jb25maWcudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ibG9ja3MvcHJvZC5jb25maWcudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9waXBlL2VuZGVyZWNvLXByaW5jaXBhbC1mb3JtYXRhZG8ucGlwZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvZW51bS1zdHJpbmcucGlwZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvZmlsdGVyLnBpcGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9waXBlL3BpcGUubW9kdWxvLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9lcnJvci9lcnJvci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2Vycm9yL2Vycm9yLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9wcm9maWxlcy9wcm9maWxlLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL25hdmJhci9uYXZiYXIuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9uYXZiYXIvbmF2YmFyLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9tYWluL21haW4uY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9uYXZiYXIvYWN0aXZlLW1lbnUuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9wcm9maWxlcy9wYWdlLXJpYmJvbi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9sYXlvdXRzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWN0aXZhdGUvYWN0aXZhdGUuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWN0aXZhdGUvYWN0aXZhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY3RpdmF0ZS9hY3RpdmF0ZS5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQvcGFzc3dvcmQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQvcGFzc3dvcmQuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC9wYXNzd29yZC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvZmluaXNoL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvZmluaXNoL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9zZXR0aW5ncy9zZXR0aW5ncy5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWNjb3VudC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWNjb3VudC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5tYXNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gUmVhbFRpbWVNYXNrVHlwZSB7XHJcbiAgICBOT05FLFxyXG4gICAgUExBQ0VIT0xERVIsXHJcbiAgICBDTEFTU0lDXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERvY1R5cGUge1xyXG4gIENQRixcclxuICBDTlBKLFxyXG4gIEJPVEhcclxufVxyXG4iLCJpbXBvcnQge0RvY1R5cGV9IGZyb20gJy4uL21vZGVsL2NwZi1jbnBqLm1vZGVsJztcclxuXHJcbmNvbnN0IERPQ1VNRU5UX1NMT1RfUkVHRVggPSAvWzAtOWEtekEtWl9dLztcclxuY29uc3QgTk9OX0FMUEhBTlVNRVJJQ19SRUdFWCA9IC9bXjAtOWEtekEtWl0vZztcclxuY29uc3QgTk9OX0RJR0lUX1JFR0VYID0gL1xcRC9nO1xyXG5jb25zdCBBTExPV0VEX0ZPUk1BVFRFRF9SRUdFWCA9IC9eWzAtOWEtekEtWi5fL1xcLVxcc10qJC87XHJcbmNvbnN0IENOUEpfV0VJR0hUU19GSVJTVCA9IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuY29uc3QgQ05QSl9XRUlHSFRTX1NFQ09ORCA9IFs2LCA1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudG9VdGlsIHtcclxuICBzdGF0aWMgbm9ybWFsaXphckRvY3VtZW50byhkb2N1bWVudG86IHN0cmluZywgY25wakFsZmFudW1lcmljbyA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGlmICghZG9jdW1lbnRvKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoZG9jdW1lbnRvKS5yZXBsYWNlKE5PTl9BTFBIQU5VTUVSSUNfUkVHRVgsICcnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZyhkb2N1bWVudG8pLnJlcGxhY2UoTk9OX0RJR0lUX1JFR0VYLCAnJyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9ybWFsaXphckNwZihkb2N1bWVudG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRvY3VtZW50bykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nKGRvY3VtZW50bykucmVwbGFjZShOT05fRElHSVRfUkVHRVgsICcnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb250YXJDYXJhY3RlcmVzRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nLCBjbnBqQWxmYW51bWVyaWNvID0gZmFsc2UpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkb2N1bWVudG8pIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBpZiAoY25wakFsZmFudW1lcmljbykge1xyXG4gICAgICByZXR1cm4gZG9jdW1lbnRvLnJlcGxhY2UoTk9OX0FMUEhBTlVNRVJJQ19SRUdFWCwgJycpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiBkb2N1bWVudG8ucmVwbGFjZShOT05fRElHSVRfUkVHRVgsICcnKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgb2J0ZXJDdXJzb3IoZG9jdW1lbnRvRm9ybWF0YWRvOiBzdHJpbmcsIHF1YW50aWRhZGVDYXJhY3RlcmVzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkb2N1bWVudG9Gb3JtYXRhZG8gfHwgcXVhbnRpZGFkZUNhcmFjdGVyZXMgPD0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmlzdG9zID0gMDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb2N1bWVudG9Gb3JtYXRhZG8ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGlmICghRE9DVU1FTlRfU0xPVF9SRUdFWC50ZXN0KGRvY3VtZW50b0Zvcm1hdGFkb1tpbmRleF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZpc3RvcysrO1xyXG4gICAgICBpZiAodmlzdG9zID49IHF1YW50aWRhZGVDYXJhY3RlcmVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkb2N1bWVudG9Gb3JtYXRhZG8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxpbWl0YXJEb2N1bWVudG8oZG9jdW1lbnRvOiBzdHJpbmcsIGRvY1R5cGU6IERvY1R5cGUsIGNucGpBbGZhbnVtZXJpY28gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZG9jVHlwZSA9PT0gRG9jVHlwZS5DUEYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXphckNwZihkb2N1bWVudG8pLnN1YnN0cmluZygwLCAxMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjbnBqQWxmYW51bWVyaWNvKSB7XHJcbiAgICAgIGNvbnN0IGRvY3VtZW50b051bWVyaWNvID0gdGhpcy5ub3JtYWxpemFyQ3BmKGRvY3VtZW50byk7XHJcbiAgICAgIGlmIChkb2NUeXBlID09PSBEb2NUeXBlLkNOUEopIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnRvTnVtZXJpY28uc3Vic3RyaW5nKDAsIDE0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZG9jdW1lbnRvTnVtZXJpY28ubGVuZ3RoIDw9IDExKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50b051bWVyaWNvLnN1YnN0cmluZygwLCAxMSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRvY3VtZW50b051bWVyaWNvLnN1YnN0cmluZygwLCAxNCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvY1R5cGUgPT09IERvY1R5cGUuQ05QSikge1xyXG4gICAgICByZXR1cm4gdGhpcy5saW1pdGFyQ25wakFsZmFudW1lcmljbyhkb2N1bWVudG8pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRvY3VtZW50b05vcm1hbGl6YWRvID0gdGhpcy5ub3JtYWxpemFyRG9jdW1lbnRvKGRvY3VtZW50bywgdHJ1ZSk7XHJcbiAgICBpZiAoL1thLXpBLVpdLy50ZXN0KGRvY3VtZW50b05vcm1hbGl6YWRvKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5saW1pdGFyQ25wakFsZmFudW1lcmljbyhkb2N1bWVudG9Ob3JtYWxpemFkbyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3BmID0gdGhpcy5ub3JtYWxpemFyQ3BmKGRvY3VtZW50byk7XHJcbiAgICBpZiAoY3BmLmxlbmd0aCA8PSAxMSkge1xyXG4gICAgICByZXR1cm4gY3BmLnN1YnN0cmluZygwLCAxMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubGltaXRhckNucGpBbGZhbnVtZXJpY28oY3BmKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmb3JtYXRhckRvY3VtZW50byhkb2N1bWVudG86IHN0cmluZywgZG9jVHlwZTogRG9jVHlwZSwgcGxhY2Vob2xkZXIgPSBmYWxzZSwgY25wakFsZmFudW1lcmljbyA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvY3VtZW50b0xpbWl0YWRvID0gdGhpcy5saW1pdGFyRG9jdW1lbnRvKGRvY3VtZW50bywgZG9jVHlwZSwgY25wakFsZmFudW1lcmljbyk7XHJcbiAgICBpZiAoIWRvY3VtZW50b0xpbWl0YWRvICYmICFwbGFjZWhvbGRlcikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGlwb0VmZXRpdm8gPSB0aGlzLnRpcG9FZmV0aXZvKGRvY3VtZW50b0xpbWl0YWRvLCBkb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvKTtcclxuICAgIGlmICh0aXBvRWZldGl2byA9PT0gRG9jVHlwZS5DUEYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXBsaWNhck1hc2NhcmEoZG9jdW1lbnRvTGltaXRhZG8sICcwMDAuMDAwLjAwMC0wMCcsIHBsYWNlaG9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5hcGxpY2FyTWFzY2FyYShkb2N1bWVudG9MaW1pdGFkbywgJzAwLjAwMC4wMDAvMDAwMC0wMCcsIHBsYWNlaG9sZGVyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2YWxpZGFyRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nLCBkb2NUeXBlOiBEb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvID0gZmFsc2UpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIGlmICghZG9jdW1lbnRvKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvICYmICFBTExPV0VEX0ZPUk1BVFRFRF9SRUdFWC50ZXN0KFN0cmluZyhkb2N1bWVudG8pKSkge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkb2N1bWVudG9Ob3JtYWxpemFkbyA9IHRoaXMubGltaXRhckRvY3VtZW50byhkb2N1bWVudG8sIGRvY1R5cGUsIGNucGpBbGZhbnVtZXJpY28pO1xyXG4gICAgY29uc3QgdGlwb0VmZXRpdm8gPSB0aGlzLnRpcG9FZmV0aXZvKGRvY3VtZW50b05vcm1hbGl6YWRvLCBkb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvKTtcclxuXHJcbiAgICBpZiAodGlwb0VmZXRpdm8gPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXJDcGYoZG9jdW1lbnRvTm9ybWFsaXphZG8pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXJDbnBqQWxmYW51bWVyaWNvKGRvY3VtZW50b05vcm1hbGl6YWRvKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGFyQ25wak51bWVyaWNvKGRvY3VtZW50b05vcm1hbGl6YWRvKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkb2N1bWVudG9WYWxpZG8oZG9jdW1lbnRvOiBzdHJpbmcsIGNucGpBbGZhbnVtZXJpY28gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZG9jdW1lbnRvTm9ybWFsaXphZG8gPSB0aGlzLm5vcm1hbGl6YXJEb2N1bWVudG8oZG9jdW1lbnRvLCBjbnBqQWxmYW51bWVyaWNvKTtcclxuICAgIHJldHVybiAhIWRvY3VtZW50b05vcm1hbGl6YWRvICYmIHRoaXMudmFsaWRhckRvY3VtZW50byhkb2N1bWVudG8sIERvY1R5cGUuQk9USCwgY25wakFsZmFudW1lcmljbykgPT09IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB0aXBvRWZldGl2byhkb2N1bWVudG86IHN0cmluZywgZG9jVHlwZTogRG9jVHlwZSwgY25wakFsZmFudW1lcmljbzogYm9vbGVhbik6IERvY1R5cGUge1xyXG4gICAgaWYgKGRvY1R5cGUgIT09IERvY1R5cGUuQk9USCkge1xyXG4gICAgICByZXR1cm4gZG9jVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY25wakFsZmFudW1lcmljbyAmJiAvW2EtekEtWl0vLnRlc3QoZG9jdW1lbnRvKSkge1xyXG4gICAgICByZXR1cm4gRG9jVHlwZS5DTlBKO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N1bWVudG8ubGVuZ3RoID4gMTEpIHtcclxuICAgICAgcmV0dXJuIERvY1R5cGUuQ05QSjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gRG9jVHlwZS5DUEY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBsaW1pdGFyQ25wakFsZmFudW1lcmljbyhkb2N1bWVudG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkb2N1bWVudG9Ob3JtYWxpemFkbyA9IHRoaXMubm9ybWFsaXphckRvY3VtZW50byhkb2N1bWVudG8sIHRydWUpLnN1YnN0cmluZygwLCAxNCk7XHJcbiAgICBsZXQgZG9jdW1lbnRvTGltaXRhZG8gPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZG9jdW1lbnRvTm9ybWFsaXphZG8ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGNhcmFjdGVyZSA9IGRvY3VtZW50b05vcm1hbGl6YWRvW2luZGV4XTtcclxuICAgICAgY29uc3QgcmVnZXggPSBpbmRleCA8IDEyID8gL1swLTlhLXpBLVpdLyA6IC9cXGQvO1xyXG5cclxuICAgICAgaWYgKHJlZ2V4LnRlc3QoY2FyYWN0ZXJlKSkge1xyXG4gICAgICAgIGRvY3VtZW50b0xpbWl0YWRvICs9IGNhcmFjdGVyZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkb2N1bWVudG9MaW1pdGFkbztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGFwbGljYXJNYXNjYXJhKGRvY3VtZW50bzogc3RyaW5nLCBtYXNjYXJhOiBzdHJpbmcsIHBsYWNlaG9sZGVyOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvY3VtZW50b0Jhc2UgPSBwbGFjZWhvbGRlciA/IHRoaXMucHJlZW5jaGVyRGlyZWl0YShkb2N1bWVudG8sIHRoaXMuY29udGFyU2xvdHMobWFzY2FyYSksICdfJykgOiBkb2N1bWVudG87XHJcbiAgICBsZXQgcmVzdWx0YWRvID0gJyc7XHJcbiAgICBsZXQgaW5kaWNlRG9jdW1lbnRvID0gMDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNhcmFjdGVyZU1hc2NhcmEgb2YgbWFzY2FyYSkge1xyXG4gICAgICBpZiAoY2FyYWN0ZXJlTWFzY2FyYSA9PT0gJzAnKSB7XHJcbiAgICAgICAgaWYgKGluZGljZURvY3VtZW50byA+PSBkb2N1bWVudG9CYXNlLmxlbmd0aCkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXN1bHRhZG8gKz0gZG9jdW1lbnRvQmFzZVtpbmRpY2VEb2N1bWVudG8rK107XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghcGxhY2Vob2xkZXIgJiYgaW5kaWNlRG9jdW1lbnRvID49IGRvY3VtZW50b0Jhc2UubGVuZ3RoKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VsdGFkbyArPSBjYXJhY3RlcmVNYXNjYXJhO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjb250YXJTbG90cyhtYXNjYXJhOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IHF1YW50aWRhZGUgPSAwO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2FyYWN0ZXJlIG9mIG1hc2NhcmEpIHtcclxuICAgICAgaWYgKGNhcmFjdGVyZSA9PT0gJzAnKSB7XHJcbiAgICAgICAgcXVhbnRpZGFkZSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHF1YW50aWRhZGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwcmVlbmNoZXJEaXJlaXRhKHZhbG9yOiBzdHJpbmcsIHRhbWFuaG86IG51bWJlciwgY2FyYWN0ZXJlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbG9yLmxlbmd0aCA+PSB0YW1hbmhvKSB7XHJcbiAgICAgIHJldHVybiB2YWxvcjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsb3IgKyBuZXcgQXJyYXkodGFtYW5obyAtIHZhbG9yLmxlbmd0aCArIDEpLmpvaW4oY2FyYWN0ZXJlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXJDcGYoZG9jdW1lbnRvOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIGNvbnN0IGNwZiA9IHRoaXMubm9ybWFsaXphckNwZihkb2N1bWVudG8pO1xyXG5cclxuICAgIGlmIChjcGYubGVuZ3RoICE9PSAxMSkge1xyXG4gICAgICByZXR1cm4ge2xlbmd0aDogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9eKFxcZClcXDErJC8udGVzdChjcGYpKSB7XHJcbiAgICAgIHJldHVybiB7ZXF1YWxEaWdpdHM6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy52YWxpZGFyQ3BmRGlnaXRvKGNwZiwgOSkgfHwgIXRoaXMudmFsaWRhckNwZkRpZ2l0byhjcGYsIDEwKSkge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXJDcGZEaWdpdG8oY3BmOiBzdHJpbmcsIHBvc2ljYW9EaWdpdG86IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNvbWEgPSAwO1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBvc2ljYW9EaWdpdG87IGluZGV4KyspIHtcclxuICAgICAgc29tYSArPSBwYXJzZUludChjcGZbaW5kZXhdLCAxMCkgKiAocG9zaWNhb0RpZ2l0byArIDEgLSBpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzdG8gPSBzb21hICUgMTE7XHJcbiAgICBjb25zdCBkaWdpdG9Fc3BlcmFkbyA9IHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvO1xyXG4gICAgcmV0dXJuIGRpZ2l0b0VzcGVyYWRvID09PSBwYXJzZUludChjcGZbcG9zaWNhb0RpZ2l0b10sIDEwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXJDbnBqTnVtZXJpY28oZG9jdW1lbnRvOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIGNvbnN0IGNucGogPSB0aGlzLm5vcm1hbGl6YXJDcGYoZG9jdW1lbnRvKTtcclxuXHJcbiAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XHJcbiAgICAgIHJldHVybiB7bGVuZ3RoOiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL14oXFxkKVxcMSskLy50ZXN0KGNucGopKSB7XHJcbiAgICAgIHJldHVybiB7ZXF1YWxEaWdpdHM6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0YW1hbmhvID0gY25wai5sZW5ndGggLSAyO1xyXG4gICAgbGV0IG51bWVyb3MgPSBjbnBqLnN1YnN0cmluZygwLCB0YW1hbmhvKTtcclxuICAgIGNvbnN0IGRpZ2l0b3MgPSBjbnBqLnN1YnN0cmluZyh0YW1hbmhvKTtcclxuICAgIGxldCBzb21hID0gMDtcclxuICAgIGxldCBwb3MgPSB0YW1hbmhvIC0gNztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gdGFtYW5obzsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgc29tYSArPSBwYXJzZUludChudW1lcm9zLmNoYXJBdCh0YW1hbmhvIC0gaSksIDEwKSAqIHBvcy0tO1xyXG4gICAgICBpZiAocG9zIDwgMikge1xyXG4gICAgICAgIHBvcyA9IDk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0YWRvID0gc29tYSAlIDExIDwgMiA/IDAgOiAxMSAtIHNvbWEgJSAxMTtcclxuICAgIGlmIChyZXN1bHRhZG8udG9TdHJpbmcoKSAhPT0gZGlnaXRvcy5jaGFyQXQoMCkpIHtcclxuICAgICAgcmV0dXJuIHtkaWdpdDogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgdGFtYW5obyA9IHRhbWFuaG8gKyAxO1xyXG4gICAgbnVtZXJvcyA9IGNucGouc3Vic3RyaW5nKDAsIHRhbWFuaG8pO1xyXG4gICAgc29tYSA9IDA7XHJcbiAgICBwb3MgPSB0YW1hbmhvIC0gNztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gdGFtYW5obzsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgc29tYSArPSBwYXJzZUludChudW1lcm9zLmNoYXJBdCh0YW1hbmhvIC0gaSksIDEwKSAqIHBvcy0tO1xyXG4gICAgICBpZiAocG9zIDwgMikge1xyXG4gICAgICAgIHBvcyA9IDk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xyXG4gICAgaWYgKHJlc3VsdGFkby50b1N0cmluZygpICE9PSBkaWdpdG9zLmNoYXJBdCgxKSkge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXJDbnBqQWxmYW51bWVyaWNvKGRvY3VtZW50bzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcbiAgICBjb25zdCBjbnBqID0gdGhpcy5ub3JtYWxpemFyRG9jdW1lbnRvKGRvY3VtZW50bywgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkge1xyXG4gICAgICByZXR1cm4ge2xlbmd0aDogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEvXlswLTlhLXpBLVpdezEyfVxcZHsyfSQvLnRlc3QoY25waikpIHtcclxuICAgICAgcmV0dXJuIHtkaWdpdDogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9eKFswLTlhLXpBLVpdKVxcMSskLy50ZXN0KGNucGopKSB7XHJcbiAgICAgIHJldHVybiB7ZXF1YWxEaWdpdHM6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJhc2UgPSBjbnBqLnN1YnN0cmluZygwLCAxMikudG9VcHBlckNhc2UoKTtcclxuICAgIGNvbnN0IHByaW1laXJvRGlnaXRvID0gdGhpcy5jYWxjdWxhckRpZ2l0b0NucGooYmFzZSwgQ05QSl9XRUlHSFRTX0ZJUlNUKTtcclxuICAgIGNvbnN0IHNlZ3VuZG9EaWdpdG8gPSB0aGlzLmNhbGN1bGFyRGlnaXRvQ25waihiYXNlICsgcHJpbWVpcm9EaWdpdG8sIENOUEpfV0VJR0hUU19TRUNPTkQpO1xyXG4gICAgY29uc3QgZGlnaXRvc0luZm9ybWFkb3MgPSBjbnBqLnN1YnN0cmluZygxMik7XHJcblxyXG4gICAgaWYgKCcnICsgcHJpbWVpcm9EaWdpdG8gKyBzZWd1bmRvRGlnaXRvICE9PSBkaWdpdG9zSW5mb3JtYWRvcykge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGFyRGlnaXRvQ25waihiYXNlOiBzdHJpbmcsIHBlc29zOiBudW1iZXJbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgc29tYSA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBlc29zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBzb21hICs9IHRoaXMudmFsb3JDbnBqKGJhc2VbaW5kZXhdKSAqIHBlc29zW2luZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN0byA9IHNvbWEgJSAxMTtcclxuICAgIHJldHVybiByZXN0byA8IDIgPyAwIDogMTEgLSByZXN0bztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbG9yQ25waihjYXJhY3RlcmU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gY2FyYWN0ZXJlLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSAtIDQ4O1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7RG9jVHlwZX0gZnJvbSAnLi4vLi4vbW9kZWwvY3BmLWNucGoubW9kZWwnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtEb2N1bWVudG9VdGlsfSBmcm9tICcuLi8uLi91dGlsL2RvY3VtZW50by51dGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcGZDbnBqVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuICBzdGF0aWMgY3BmTGVuZ3RoID0gMTE7XHJcbiAgc3RhdGljIGNwZkxlbmd0aEZpcnN0UGFydCA9IDM7XHJcbiAgc3RhdGljIGNucGpMZW5ndGhGaXJzdFBhcnQgPSAyO1xyXG4gIHN0YXRpYyBjcGZMZW5ndGhTZWNvbmRQYXJ0ID0gNjtcclxuICBzdGF0aWMgY25wakxlbmd0aFNlY29uZFBhcnQgPSA1O1xyXG4gIHN0YXRpYyBjcGZMZW5ndGhUaGlyZFBhcnQgPSA5O1xyXG4gIHN0YXRpYyBjbnBqTGVuZ3RoVGhpcmRQYXJ0ID0gODtcclxuICBzdGF0aWMgY25wakNwZkxlbmd0aEJvdW5kYXJpZXMgPSAxMjtcclxuICBzdGF0aWMgY25wakxlbmd0aCA9IDE0O1xyXG5cclxuICBwdWJsaWMgZG9jVHlwZTogRG9jVHlwZSA9IERvY1R5cGUuQk9USDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9wdGlvbnNQcm92aWRlcj86IE9wdGlvbnNQcm92aWRlcikge1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzQ25wakFsZmFudW1lcmljb0hhYmlsaXRhZG8oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodGhpcy5vcHRpb25zUHJvdmlkZXIgJiYgdGhpcy5vcHRpb25zUHJvdmlkZXIuY25wakFsZmFudW1lcmljbyk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGFEb2N1bWVudG8oYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIERvY3VtZW50b1V0aWwudmFsaWRhckRvY3VtZW50byhjICYmIGMudmFsdWUsIHRoaXMuZG9jVHlwZSwgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCkpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhRG9jdW1lbnRvKGMpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1PRFVMT19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ01PRFVMT19PUFRJT05TJyk7XHJcbmV4cG9ydCBjb25zdCBNRU5VX01PRFVMT19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ01FTlVfTU9EVUxPX09QVElPTlMnKTtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE9wdGlvbnNQcm92aWRlciB7XHJcbiAgcHJpdmF0ZSBfdmVyc2lvbjogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3R3b0ZhY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3Jlc2V0QnlMb2dpbk9yRW1haWwgPSBmYWxzZTtcclxuICBwcml2YXRlIF9jbnBqQWxmYW51bWVyaWNvID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNT0RVTE9fT1BUSU9OUykgcHJpdmF0ZSBfbW9kdWxvOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KE1FTlVfTU9EVUxPX09QVElPTlMpIHByaXZhdGUgX21lbnVNb2R1bG86IHN0cmluZ1xyXG4gICkge31cclxuXHJcbiAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl92ZXJzaW9uID8gdGhpcy5fdmVyc2lvbiA6ICcnO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZlcnNpb24odmVyc2lvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbjtcclxuICB9XHJcblxyXG4gIHNldCB0d29GYWN0b3IodHdvTG9naW46IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3R3b0ZhY3RvciA9IHR3b0xvZ2luO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHR3b0ZhY3RvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90d29GYWN0b3I7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVzZXRCeUxvZ2luT3JFbWFpbChyZXNldEJ5TG9naW5PckVtYWlsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXNldEJ5TG9naW5PckVtYWlsID0gcmVzZXRCeUxvZ2luT3JFbWFpbDtcclxuICB9XHJcblxyXG4gIGdldCByZXNldEJ5TG9naW5PckVtYWlsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0QnlMb2dpbk9yRW1haWw7XHJcbiAgfVxyXG5cclxuICBzZXQgY25wakFsZmFudW1lcmljbyhjbnBqQWxmYW51bWVyaWNvOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jbnBqQWxmYW51bWVyaWNvID0gY25wakFsZmFudW1lcmljbztcclxuICB9XHJcblxyXG4gIGdldCBjbnBqQWxmYW51bWVyaWNvKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NucGpBbGZhbnVtZXJpY287XHJcbiAgfVxyXG5cclxuICBzZXQgbm92b0NucGoobm92b0NucGo6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuY25wakFsZmFudW1lcmljbyA9IG5vdm9DbnBqO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5vdm9DbnBqKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY25wakFsZmFudW1lcmljbztcclxuICB9XHJcblxyXG4gIGdldCBtb2R1bG8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2R1bG87XHJcbiAgfVxyXG5cclxuICBnZXQgbWVudU1vZHVsbygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX21lbnVNb2R1bG87XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRvcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NwZkNucGpWYWxpZGF0b3J9IGZyb20gJy4vY3BmLWNucGoudmFsaWRhdG9yJztcclxuaW1wb3J0IHtEb2NUeXBlLCBSZWFsVGltZU1hc2tUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcbmltcG9ydCB7RG9jdW1lbnRvVXRpbH0gZnJvbSAnLi4vLi4vdXRpbC9kb2N1bWVudG8udXRpbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbamhpLXZhbGlkYXRlLWRvY3VtZW50b11bbmdNb2RlbF0nLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlIGV4dGVuZHMgQ3BmQ25walZhbGlkYXRvciBpbXBsZW1lbnRzIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuICBASW5wdXQoKVxyXG4gIHJlYWxUaW1lTWFzazogUmVhbFRpbWVNYXNrVHlwZSA9IFJlYWxUaW1lTWFza1R5cGUuTk9ORTtcclxuXHJcbiAgQElucHV0KClcclxuICBkb2N1bWVudFR5cGU6IERvY1R5cGUgPSBEb2NUeXBlLkJPVEg7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbmdNb2RlbDtcclxuXHJcbiAgQE91dHB1dCgpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogKCkgPT4gdm9pZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LCBAT3B0aW9uYWwoKSBvcHRpb25zUHJvdmlkZXI/OiBPcHRpb25zUHJvdmlkZXIpIHtcclxuICAgIHN1cGVyKG9wdGlvbnNQcm92aWRlcik7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zeW5jRG9jVHlwZSgpO1xyXG4gICAgICB0aGlzLnN5bmNJbml0aWFsVmFsdWUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN5bmNEb2NUeXBlKCk7XHJcbiAgICB0aGlzLnN5bmNJbml0aWFsVmFsdWUoKTtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcbiAgICB0aGlzLnN5bmNEb2NUeXBlKCk7XHJcbiAgICByZXR1cm4gc3VwZXIudmFsaWRhdGUoY29udHJvbCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxyXG4gIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zeW5jRG9jVHlwZSgpO1xyXG4gICAgaWYgKHRoaXMucmVhbFRpbWVNYXNrID09PSBSZWFsVGltZU1hc2tUeXBlLk5PTkUpIHtcclxuICAgICAgdGhpcy5kb2N1bWVudE1hc2tlZCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kb2N1bWVudE1hc2tlZCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXHJcbiAgYmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMuc3luY0RvY1R5cGUoKTtcclxuICAgIHRoaXMuZG9jdW1lbnRNYXNrZWQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsIGZhbHNlLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcclxuICBpbnB1dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3luY0RvY1R5cGUoKTtcclxuICAgIHRoaXMuZG9jdW1lbnRNYXNrZWQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsIHRydWUsIHRoaXMucmVhbFRpbWVNYXNrICE9PSBSZWFsVGltZU1hc2tUeXBlLk5PTkUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkb2N1bWVudE1hc2tlZCh2YWxvckF0dWFsOiBzdHJpbmcsIHByZXNlcnZhckN1cnNvcjogYm9vbGVhbiwgZm9ybWF0YXI6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjdXJzb3IgPSBwcmVzZXJ2YXJDdXJzb3IgP1xyXG4gICAgICBEb2N1bWVudG9VdGlsLmNvbnRhckNhcmFjdGVyZXNEb2N1bWVudG8odmFsb3JBdHVhbC5zdWJzdHJpbmcoMCwgaW5wdXQuc2VsZWN0aW9uU3RhcnQgfHwgMCksIHRoaXMuaXNDbnBqQWxmYW51bWVyaWNvSGFiaWxpdGFkbygpKSA6XHJcbiAgICAgIDA7XHJcbiAgICBjb25zdCB2YWxvckxpbWl0YWRvID0gRG9jdW1lbnRvVXRpbC5saW1pdGFyRG9jdW1lbnRvKHZhbG9yQXR1YWwsIHRoaXMuZG9jVHlwZSwgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCkpO1xyXG4gICAgY29uc3QgdmFsb3JGb3JtYXRhZG8gPSBmb3JtYXRhciA/XHJcbiAgICAgIERvY3VtZW50b1V0aWwuZm9ybWF0YXJEb2N1bWVudG8oXHJcbiAgICAgICAgdmFsb3JMaW1pdGFkbyxcclxuICAgICAgICB0aGlzLmRvY1R5cGUsXHJcbiAgICAgICAgdGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuUExBQ0VIT0xERVIsXHJcbiAgICAgICAgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKClcclxuICAgICAgKSA6XHJcbiAgICAgIHZhbG9yTGltaXRhZG87XHJcblxyXG4gICAgaWYgKGlucHV0LnZhbHVlICE9PSB2YWxvckZvcm1hdGFkbykge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9IHZhbG9yRm9ybWF0YWRvO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcmVzZXJ2YXJDdXJzb3IpIHtcclxuICAgICAgY29uc3QgcHJveGltb0N1cnNvciA9IGZvcm1hdGFyID8gRG9jdW1lbnRvVXRpbC5vYnRlckN1cnNvcih2YWxvckZvcm1hdGFkbywgY3Vyc29yKSA6IE1hdGgubWluKGN1cnNvciwgdmFsb3JGb3JtYXRhZG8ubGVuZ3RoKTtcclxuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocHJveGltb0N1cnNvciwgcHJveGltb0N1cnNvcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubmdNb2RlbCAhPT0gdmFsb3JGb3JtYXRhZG8pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nTW9kZWxDaGFuZ2UuZW1pdCh2YWxvckZvcm1hdGFkbykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzeW5jRG9jVHlwZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZG9jVHlwZSA9IHRoaXMuZG9jdW1lbnRUeXBlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzeW5jSW5pdGlhbFZhbHVlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVhbFRpbWVNYXNrID09PSBSZWFsVGltZU1hc2tUeXBlLk5PTkUpIHtcclxuICAgICAgY29uc3QgdmFsb3JBdHVhbCA9IHRoaXMubmdNb2RlbCB8fCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSB8fCAnJztcclxuICAgICAgaWYgKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICE9PSB2YWxvckF0dWFsKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWxvckF0dWFsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvY3VtZW50TWFza2VkKHRoaXMubmdNb2RlbCB8fCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UsIHRydWUpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlfSBmcm9tICcuL2NwZi1jbnBqLnZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbamhpLWludGVnZXItZmllbGRdW25nTW9kZWxdJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IEludGVnZXJGaWVsZERpcmVjdGl2ZSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZWdlckZpZWxkRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuICBASW5wdXQoKVxyXG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcml2YXRlIG1heFZhbHVlOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJpdmF0ZSBvbmx5UG9zaXRpdmU6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5vbmx5UG9zaXRpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubWF4VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGVtcHR5OiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKTtcclxuICAgIGxldCBvbmx5TnVtYmVycztcclxuICAgIGlmICh0aGlzLm9ubHlQb3NpdGl2ZSkge1xyXG4gICAgICBvbmx5TnVtYmVycyA9IG5ld1ZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbmVnYXRpdmUgPSAnJztcclxuICAgICAgaWYgKG5ld1ZhbHVlWzBdID09PSAnLScpIHtcclxuICAgICAgICBuZWdhdGl2ZSA9ICctJztcclxuICAgICAgfVxyXG4gICAgICBvbmx5TnVtYmVycyA9IG5lZ2F0aXZlICsgbmV3VmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgICAgaWYgKHBhcnNlSW50KG9ubHlOdW1iZXJzLCAxMCkgPT09IDAgJiYgbmVnYXRpdmUgPT09ICctJykge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJzAnO1xyXG4gICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob25seU51bWJlcnMgIT09IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKSkge1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9ubHlOdW1iZXJzO1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWREaWdpdDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzTnVtYmVyKG5ld1ZhbHVlKSkge1xyXG4gICAgICByZXR1cm4geyBub25OdW1iZXI6IHRydWUgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobmV3VmFsdWUsIDEwKTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWluVmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA8IHRoaXMubWluVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWF4VmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUoKSB7XHJcbiAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7XHJcbiAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0ludGVnZXJGaWVsZERpcmVjdGl2ZX0gZnJvbSBcIi4vaW50ZWdlci1maWVsZC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBJbnRlZ2VyRmllbGREaXJlY3RpdmVcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEludGVnZXJGaWVsZERpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVnZXJGaWVsZE1vZHVsZSB7IH1cclxuIiwiaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlsRnVuY3Rpb25zIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGFyQ1BGKHN0ckNQRjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29tYSA9IDA7XHJcblxyXG4gICAgc3RyQ1BGID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25OdW1iZXJzKHN0ckNQRik7XHJcblxyXG4gICAgaWYgKHN0ckNQRi5sZW5ndGggIT09IDExKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL14oLilcXDEqJC8udGVzdChzdHJDUEYpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzb21hID0gdGhpcy5zb21hKHNvbWEsIHN0ckNQRiwgMTEsIDkpO1xyXG5cclxuICAgIGxldCByZXN0byA9IChzb21hICogMTApICUgMTE7XHJcblxyXG4gICAgaWYgKHJlc3RvID09PSAxMCB8fCByZXN0byA9PT0gMTEpIHtcclxuICAgICAgcmVzdG8gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN0byAhPT0gcGFyc2VJbnQoc3RyQ1BGLnN1YnN0cmluZyg5LCAxMCksIDEwKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc29tYSA9IDA7XHJcbiAgICBzb21hID0gdGhpcy5zb21hKHNvbWEsIHN0ckNQRiwgMTIsIDEwKTtcclxuXHJcbiAgICByZXN0byA9IChzb21hICogMTApICUgMTE7XHJcblxyXG4gICAgaWYgKHJlc3RvID09PSAxMCB8fCByZXN0byA9PT0gMTEpIHtcclxuICAgICAgcmVzdG8gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN0byA9PT0gcGFyc2VJbnQoc3RyQ1BGLnN1YnN0cmluZygxMCwgMTEpLCAxMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGFyQ05QSihjbnBqOiBzdHJpbmcpIDogYm9vbGVhbiB7XHJcblxyXG4gICAgY25waiA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uTnVtYmVycyhjbnBqKTtcclxuXHJcbiAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgvXihbMC05XSlcXDEqJC8udGVzdChjbnBqKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhIERWc1xyXG4gICAgbGV0IHRhbWFuaG8gPSBjbnBqLmxlbmd0aCAtIDI7XHJcbiAgICBsZXQgbnVtZXJvcyA9IGNucGouc3Vic3RyaW5nKDAsIHRhbWFuaG8pO1xyXG4gICAgY29uc3QgZGlnaXRvcyA9IGNucGouc3Vic3RyaW5nKHRhbWFuaG8pO1xyXG4gICAgbGV0IHNvbWEgPSAwO1xyXG4gICAgbGV0IHBvcyA9IHRhbWFuaG8gLSA3O1xyXG4gICAgZm9yIChsZXQgaSA9IHRhbWFuaG87IGkgPj0gMTsgaS0tKSB7XHJcbiAgICAgIHNvbWEgKz0gcGFyc2VJbnQobnVtZXJvcy5jaGFyQXQodGFtYW5obyAtIGkpLCAxMCkgKiBwb3MtLTtcclxuICAgICAgaWYgKHBvcyA8IDIpIHtcclxuICAgICAgICBwb3MgPSA5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0YWRvID0gc29tYSAlIDExIDwgMiA/IDAgOiAxMSAtIHNvbWEgJSAxMTtcclxuICAgIGlmIChyZXN1bHRhZG8udG9TdHJpbmcoKSAhPT0gZGlnaXRvcy5jaGFyQXQoMCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRhbWFuaG8gPSB0YW1hbmhvICsgMTtcclxuICAgIG51bWVyb3MgPSBjbnBqLnN1YnN0cmluZygwLCB0YW1hbmhvKTtcclxuICAgIHNvbWEgPSAwO1xyXG4gICAgcG9zID0gdGFtYW5obyAtIDc7XHJcbiAgICBmb3IgKGxldCBpID0gdGFtYW5obzsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgc29tYSArPSBwYXJzZUludChudW1lcm9zLmNoYXJBdCh0YW1hbmhvIC0gaSksIDEwKSAqIHBvcy0tO1xyXG4gICAgICBpZiAocG9zIDwgMikge1xyXG4gICAgICAgIHBvcyA9IDk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XHJcbiAgICBpZiAocmVzdWx0YWRvLnRvU3RyaW5nKCkgIT09IGRpZ2l0b3MuY2hhckF0KDEpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHZhbGlkYXJEb2N1bWVudG8oZG9jdW1lbnRvOiBzdHJpbmcpIDogYm9vbGVhbiB7XHJcbiAgICBkb2N1bWVudG8gPSBVdGlsRnVuY3Rpb25zLnJlbW92ZU5vbk51bWJlcnMoZG9jdW1lbnRvKTtcclxuICAgIGlmIChkb2N1bWVudG8ubGVuZ3RoID09PSAxNCkge1xyXG4gICAgICByZXR1cm4gVXRpbEZ1bmN0aW9ucy52YWxpZGFyQ05QSihkb2N1bWVudG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFV0aWxGdW5jdGlvbnMudmFsaWRhckNQRihkb2N1bWVudG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgc29tYShzb21hOiBudW1iZXIsIGNwZjogc3RyaW5nLCBkaWdpdG86IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHNvbWEgPSBzb21hICsgcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpbmRleCAtIDEsIGluZGV4KSwgMTApICogKGRpZ2l0byAtIGluZGV4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzb21hO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZW1vdmVOb25BbHBoYU51bWVyaWModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IHJlZ0V4cCA9IC9bXkEtWmEtejAtOV0vZztcclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBzYW5pdGl6ZVJlY2FwdGNoYUFjdGlvbih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gICAgLnRyaW0oKVxyXG4gICAgLnJlcGxhY2UoLy0vZywgJ18nKSAgICAgICAgICAvLyDDosKcwoUgaMODwq1mZW4gw6LChsKSIHVuZGVybGluZVxyXG4gICAgLnJlcGxhY2UoL1teQS1aYS16Xy9dL2csICcnKTsgLy8gw6LCnMKFIG1hbnTDg8KpbSBzw4PCsyBBw6LCgMKTWiBhw6LCgMKTeiBfIC9cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTm9uTnVtYmVycyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVnRXhwID0gL1teMC05XS9nO1xyXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmVnRXhwLCAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlbW92ZUFjY2VudHModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGF0ZURhdGFiYXNlKGQ6IERhdGUsIGluY2x1ZGVUaW1lOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gJycgKyBkLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgbW9udGggPSAnJyArIChkLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcclxuICAgICAgaG91ciA9ICcnICsgZC5nZXRIb3VycygpLFxyXG4gICAgICBtaW51dGUgPSAnJyArIGQuZ2V0TWludXRlcygpLFxyXG4gICAgICBzZWNvbmRzID0gJycgKyBkLmdldFNlY29uZHMoKTtcclxuXHJcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikge1xyXG4gICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgfVxyXG4gICAgaWYgKGRheS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIGRheSA9ICcwJyArIGRheTtcclxuICAgIH1cclxuICAgIGlmIChob3VyLmxlbmd0aCA8IDIpIHtcclxuICAgICAgaG91ciA9ICcwJyArIGhvdXI7XHJcbiAgICB9XHJcbiAgICBpZiAobWludXRlLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbWludXRlID0gJzAnICsgbWludXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlY29uZHMubGVuZ3RoIDwgMikge1xyXG4gICAgICBzZWNvbmRzID0gJzAnICsgc2Vjb25kcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybWF0ZWREYXRlOiBzdHJpbmcgPSB5ZWFyICsgJy0nICsgbW9udGggKyAnLScgKyBkYXk7XHJcbiAgICBpZiAoaW5jbHVkZVRpbWUpIHtcclxuICAgICAgZm9ybWF0ZWREYXRlICs9ICcgJyArIGhvdXIgKyAnOicgKyBtaW51dGUgKyAnOicgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGF0ZUJyYXppbChkYXRlOiBEYXRlLCBpbmNsdWRlVGltZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QoZGF0ZSkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IHllYXIgPSAnJyArIGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBtb250aCA9ICcnICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpLFxyXG4gICAgICBkYXkgPSAnJyArIGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICBob3VyID0gJycgKyBkYXRlLmdldEhvdXJzKCksXHJcbiAgICAgIG1pbnV0ZSA9ICcnICsgZGF0ZS5nZXRNaW51dGVzKCksXHJcbiAgICAgIHNlY29uZHMgPSAnJyArIGRhdGUuZ2V0U2Vjb25kcygpO1xyXG5cclxuICAgIGlmIChtb250aC5sZW5ndGggPCAyKSB7XHJcbiAgICAgIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIHtcclxuICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG4gICAgfVxyXG4gICAgaWYgKGhvdXIubGVuZ3RoIDwgMikge1xyXG4gICAgICBob3VyID0gJzAnICsgaG91cjtcclxuICAgIH1cclxuICAgIGlmIChtaW51dGUubGVuZ3RoIDwgMikge1xyXG4gICAgICBtaW51dGUgPSAnMCcgKyBtaW51dGU7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHNlY29uZHMgPSAnMCcgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmb3JtYXRlZERhdGU6IHN0cmluZyA9IGRheSArICcvJyArIG1vbnRoICsgJy8nICsgeWVhcjtcclxuICAgIGlmIChpbmNsdWRlVGltZSkge1xyXG4gICAgICBmb3JtYXRlZERhdGUgKz0gJyAnICsgaG91ciArICc6JyArIG1pbnV0ZSArICc6JyArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0ZWREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBwYXJzZURhdGVEYXRhQmFzZUZvcm1hdChkYXRlU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gLy0vZztcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyaW5nLnJlcGxhY2Uoc2VhcmNoVmFsdWUsICcvJykpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByb3VuZE51bWJlcih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZTogc3RyaW5nIHwgYW55W10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IDA7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhISh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyKSB7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0QmFzZTY0VG9CbG9iRGF0YShiYXNlNjREYXRhOiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBzdHJpbmcsIHNsaWNlU2l6ZSA9IDUxMikge1xyXG4gICAgYmFzZTY0RGF0YSA9IGJhc2U2NERhdGEucmVwbGFjZSgvXFxzL2csICcnKTtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcclxuICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcclxuICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XHJcblxyXG4gICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcblxyXG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcclxuICAgIHJldHVybiBibG9iO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRCcm93c2VyTmFtZSgpIHtcclxuICAgIGNvbnN0IGFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2VkZ2UnKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnZWRnZSc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignb3ByJykgPiAtMSAmJiAhISg8YW55PndpbmRvdykub3ByOlxyXG4gICAgICAgIHJldHVybiAnb3BlcmEnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2Nocm9tZScpID4gLTEgJiYgISEoPGFueT53aW5kb3cpLmNocm9tZTpcclxuICAgICAgICByZXR1cm4gJ2Nocm9tZSc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZigndHJpZGVudCcpID4gLTE6XHJcbiAgICAgICAgcmV0dXJuICdpZSc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignZmlyZWZveCcpID4gLTE6XHJcbiAgICAgICAgcmV0dXJuICdmaXJlZm94JztcclxuICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdzYWZhcmknKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnc2FmYXJpJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ290aGVyJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2VyYXJUb2tlbkFuZ3VsYXIoKSB7XHJcbiAgICAgIGNvbnN0IGNoYXZlZW5jcmlwdGFjYW8gPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgncW1OdVlhdHpUZU1uMnNTVCcpO1xyXG4gICAgICBjb25zdCB2ZXRvciAgID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKTtcclxuICAgICAgbGV0IHBsYWluVGV4dCA9ICdhbmd1bGFyOycgKyBVdGlsRnVuY3Rpb25zLmZvcm1hdERhdGVCcmF6aWwobmV3IERhdGUoKSwgdHJ1ZSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWluVGV4dC5sZW5ndGggJSAxNjsgKytpKSB7XHJcbiAgICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0ICsgJ1xcdTAwMDAnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjcnlwID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UocGxhaW5UZXh0KSwgY2hhdmVlbmNyaXB0YWNhbywge1xyXG4gICAgICAgIGl2OiB2ZXRvcixcclxuICAgICAgICBrZXlTaXplOiAxMjgsXHJcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLk5vUGFkZGluZyxcclxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQ30pO1xyXG5cclxuICAgICAgbGV0IGhleCA9ICcnO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjcnlwLmNpcGhlcnRleHQud29yZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgbnVtYmVyID0gY3J5cC5jaXBoZXJ0ZXh0LndvcmRzW2ldO1xyXG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XHJcbiAgICAgICAgICBudW1iZXIgPSAweEZGRkZGRkZGICsgbnVtYmVyICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHRlbXBIZXggPSBudW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIHdoaWxlICh0ZW1wSGV4Lmxlbmd0aCA8IDgpIHtcclxuICAgICAgICAgIHRlbXBIZXggPSAnMCcgKyB0ZW1wSGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBoZXggPSBoZXggKyB0ZW1wSGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBoZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlcmFyVG9rZW4obW9kdWxvOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkYXRhSG9yYTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNoYXZlZW5jcmlwdGFjYW8gPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpO1xyXG4gICAgY29uc3QgdmV0b3IgICA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCdcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwJyk7XHJcbiAgICBsZXQgcGxhaW5UZXh0ID0gbW9kdWxvICsgJzsnICsgZGF0YUhvcmE7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFpblRleHQubGVuZ3RoICUgMTY7ICsraSkge1xyXG4gICAgICBwbGFpblRleHQgPSBwbGFpblRleHQgKyAnXFx1MDAwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3J5cCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHBsYWluVGV4dCksIGNoYXZlZW5jcmlwdGFjYW8sIHtcclxuICAgICAgaXY6IHZldG9yLFxyXG4gICAgICBrZXlTaXplOiAxMjgsXHJcbiAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcsXHJcbiAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDfSk7XHJcblxyXG4gICAgbGV0IGhleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3J5cC5jaXBoZXJ0ZXh0LndvcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBudW1iZXIgPSBjcnlwLmNpcGhlcnRleHQud29yZHNbaV07XHJcbiAgICAgIGlmIChudW1iZXIgPCAwKSB7XHJcbiAgICAgICAgbnVtYmVyID0gMHhGRkZGRkZGRiArIG51bWJlciArIDE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHRlbXBIZXggPSBudW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB3aGlsZSAodGVtcEhleC5sZW5ndGggPCA4KSB7XHJcbiAgICAgICAgdGVtcEhleCA9ICcwJyArIHRlbXBIZXg7XHJcbiAgICAgIH1cclxuICAgICAgaGV4ID0gaGV4ICsgdGVtcEhleDtcclxuICAgIH1cclxuICAgIHJldHVybiBoZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdGFyRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nKSB7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShkb2N1bWVudG8pKSB7XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnRvID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25OdW1iZXJzKGRvY3VtZW50byk7XHJcbiAgICAgIGlmIChkb2N1bWVudG8ubGVuZ3RoID09IDExKSB7XHJcbiAgICAgICAgICByZXR1cm4gZG9jdW1lbnRvLnJlcGxhY2UoLyhcXGR7M30pKFxcZHszfSkoXFxkezN9KShcXGR7Mn0pL2csXCJcXCQxLlxcJDIuXFwkM1xcLVxcJDRcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRvLmxlbmd0aCA9PSAxNCkge1xyXG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50by5yZXBsYWNlKC8oXFxkezJ9KShcXGR7M30pKFxcZHszfSkoXFxkezR9KShcXGR7Mn0pL2csXCJcXCQxLlxcJDIuXFwkM1xcL1xcJDRcXC1cXCQ1XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Tm9tZU1lcyhtZXM6IG51bWJlcikge1xyXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgZGF0ZS5zZXRNb250aChtZXMpO1xyXG4gICAgICBjb25zdCBtb250aCA9IGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnbG9uZycgfSk7XHJcbiAgICAgIHJldHVybiBtb250aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdG9UaXRsZUNhc2Uoc3RyKTogc3RyaW5nIHtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzdHJbaV0gPSBzdHJbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJbaV0uc2xpY2UoMSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEVudW1LZXlCeUVudW1WYWx1ZShteUVudW0sIGVudW1WYWx1ZSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhteUVudW0pKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IG15RW51bVtrZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gZW51bVZhbHVlLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRIdHRwRXJyb3JNZXNzYWdlKHZhbHVlKSB7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICh2YWx1ZS5lcnJvcikge1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLmRldGFpbCkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLmRldGFpbDtcclxuICAgICAgICB9IGVsc2UgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuZXJyb3IuZXJyb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5lcnJvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuZXJyb3IubWVzc2FnZSkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLmZpZWxkRXJyb3JzKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5lcnJvci5maWVsZEVycm9yc1swXS5tZXNzYWdlKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3IuZmllbGRFcnJvcnNbMF0ubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUubWVzc2FnZSkgPT09IHRydWUpIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5tZXNzYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShlcnJvck1lc3NhZ2UpID09PSBmYWxzZSkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSAnRXJybyBkZXNjb25oZWNpZG8nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEVuY29kZURlY29kZUJhc2U2NCB7XHJcbiAgICBzdGF0aWMgZW5jb2RlKHN0cjogYW55KSB7XHJcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IC8lKFswLTlBLUZdezJ9KS9nO1xyXG4gICAgICByZXR1cm4gYnRvYShcclxuICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZShyZWdFeHAsIChtYXRjaCwgcDEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCgnMHgnICsgcDEpIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVjb2RlKHN0cikge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSAnJztcclxuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcclxuICAgICAgICAgICAgYXRvYihzdHIpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5qb2luKHNlcGFyYXRvcilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdE9wdGlvbiA9IChyZXE/OiBhbnkpOiBIdHRwUGFyYW1zID0+IHtcclxuICAgIGxldCBvcHRpb25zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChyZXEpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhyZXEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3NvcnQnKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zZXQoa2V5LCByZXFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVxLnNvcnQpIHtcclxuICAgICAgICAgICAgcmVxLnNvcnQuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuYXBwZW5kKCdzb3J0JywgdmFsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBBbmd1bGFyIGJvb3RzdHJhcCBEYXRlIGFkYXB0ZXJcclxuICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiRGF0ZUFkYXB0ZXIsIE5nYkRhdGVTdHJ1Y3QsIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5nYkRhdGVNb21lbnRBZGFwdGVyIGV4dGVuZHMgTmdiRGF0ZUFkYXB0ZXI8TW9tZW50PiB7XHJcbiAgZnJvbU1vZGVsKGRhdGU6IE1vbWVudCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgaWYgKGRhdGUgIT0gbnVsbCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkgJiYgZGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuIHsgeWVhcjogZGF0ZS55ZWFyKCksIG1vbnRoOiBkYXRlLm1vbnRoKCkgKyAxLCBkYXk6IGRhdGUuZGF0ZSgpIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUgIT09IG51bGwgJiYgZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVOZXcgPSBuZXcgRGF0ZShkYXRlLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4geyB5ZWFyOiBkYXRlTmV3LmdldEZ1bGxZZWFyKCksIG1vbnRoOiBkYXRlTmV3LmdldE1vbnRoKCkgKyAxLCBkYXk6IGRhdGVOZXcuZ2V0VVRDRGF0ZSgpIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE1vbWVudCB7XHJcbiAgICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlLnllYXIgKyAnLScgKyBkYXRlLm1vbnRoICsgJy0nICsgZGF0ZS5kYXksICdZWVlZL01NL0REJykgOiBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU1vbWVudERhdGVGb3JtYXR0ZXIgZXh0ZW5kcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcclxuICByZWFkb25seSBEVF9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICByZXR1cm4gZGF0ZS5pc1ZhbGlkKCkgPyB7IHllYXI6IGRhdGUueWVhcigpLCBtb250aDogZGF0ZS5tb250aCgpICsgMSwgZGF5OiBkYXRlLmRhdGUoKSB9IDogbnVsbDtcclxuICB9XHJcblxyXG4gIGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtZHQgPSBtb21lbnQoW2RhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5XSk7XHJcbiAgICAgIGlmICghbWR0LmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWR0LmZvcm1hdCh0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBQUk9CTEVNX0JBU0VfVVJMID0gJ2h0dHBzOi8vd3d3LmpoaXBzdGVyLnRlY2gvcHJvYmxlbSc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBMT0dJTl9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2xvZ2luLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9OT1RfRk9VTkRfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLW5vdC1mb3VuZCc7XHJcbmV4cG9ydCBjb25zdCBJTlZBTElEX1BBU1NXT1JEX1RZUEUgPSBQUk9CTEVNX0JBU0VfVVJMICsgJy9pbnZhbGlkLXBhc3N3b3JkJztcclxuZXhwb3J0IGNvbnN0IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTiA9IFBST0JMRU1fQkFTRV9VUkwgKyBcIi91bmF1dGhvcml6ZWQtZWRpdC1kZWxldGlvblwiO1xyXG4iLCJleHBvcnQgY29uc3QgSVRFTVNfUEVSX1BBR0UgPSAyMDtcclxuIiwiZXhwb3J0IGNsYXNzIFV0aWxBcnF1aXZvIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZm9ybWF0YXJUYW1hbmhvQXJxdWl2byhieXRlcyA9IDAsIHByZWNpc2FvID0gMik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdW5pZGFkZXMgPSBbJ2J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJ107XHJcblxyXG4gICAgICAgIGlmIChpc05hTihwYXJzZUZsb2F0KFN0cmluZyhieXRlcykpKSB8fCAhaXNGaW5pdGUoYnl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnPyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1bmlkYWRlID0gMDtcclxuICAgICAgICB3aGlsZSAoYnl0ZXMgPj0gMTAyNCkge1xyXG4gICAgICAgICAgICBieXRlcyAvPSAxMDI0O1xyXG4gICAgICAgICAgICB1bmlkYWRlKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBieXRlcy50b0ZpeGVkKCtwcmVjaXNhbykgKyAnICcgKyB1bmlkYWRlc1t1bmlkYWRlXTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSBcIm5neC13ZWJzdG9yYWdlXCI7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLic7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9ja1BhZ2Uge1xyXG4gIHByaXZhdGUgc3RhdGljIHN0b3JhZ2VMYWJlbCA9ICdsb2NrUGFnZU5hdmlnYXRpb24nO1xyXG4gIHB1YmxpYyBtb2R1bGU6IHN0cmluZztcclxuICBwdWJsaWMgcGF0aDogc3RyaW5nO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKG1vZHVsZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubW9kdWxlID0gbW9kdWxlO1xyXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcclxuICB9XHJcbiAgXHJcbiAgZ2V0UmVkaXJlY3RQYWdlKGxvY2F0aW9uOiBMb2NhdGlvbiwgc2VuZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHNlbmRlciA9PT0gdGhpcy5tb2R1bGUpIHtcclxuICAgICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YodGhpcy5tb2R1bGUpIDwgMCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5vcmlnaW4uY29uY2F0KCcvIy8nLCB0aGlzLnBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYXRpb24ub3JpZ2luLmNvbmNhdCgnLycsIHRoaXMubW9kdWxlLCAnLyMvJywgdGhpcy5wYXRoKTtcclxuICB9XHJcblxyXG4gIGlzTG9ja2VkUGFnZShsb2NhdGlvbjogTG9jYXRpb24sIHNlbmRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgXHJcbiAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKHRoaXMuZ2V0UmVkaXJlY3RQYWdlKGxvY2F0aW9uLCBzZW5kZXIpKSA+IDApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJldHJpZXZlRnJvbVN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSk6IExvY2tQYWdlIHtcclxuICAgIGNvbnN0IHN0b3JlZE9iamVjdDogTG9ja1BhZ2UgPSBzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZShMb2NrUGFnZS5zdG9yYWdlTGFiZWwpO1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3Qoc3RvcmVkT2JqZWN0KSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld09iamVjdDogTG9ja1BhZ2UgPSBuZXcgTG9ja1BhZ2Uoc3RvcmVkT2JqZWN0Lm1vZHVsZSwgc3RvcmVkT2JqZWN0LnBhdGgpO1xyXG4gICAgcmV0dXJuIG5ld09iamVjdDtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIHN0YXRpYyBzYXZlVG9TdG9yYWdlKHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHN0b3JlT2JqZWN0OiBMb2NrUGFnZSkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoTG9ja1BhZ2Uuc3RvcmFnZUxhYmVsLCBzdG9yZU9iamVjdCk7XHJcbiAgfVxyXG4gIFxyXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlRnJvbVN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoTG9ja1BhZ2Uuc3RvcmFnZUxhYmVsKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xyXG5pbXBvcnQge1BkZkpzVmlld2VyQ29tcG9uZW50fSBmcm9tIFwibmcyLXBkZmpzLXZpZXdlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktcGRmLXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BkZi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ3BkZi12aWV3ZXIuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdwZGZWaWV3ZXInKSBwZGZWaWV3ZXI6IFBkZkpzVmlld2VyQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgdGl0dWxvOiBzdHJpbmc7XHJcbiAgcHVibGljIG5vbWVBcnF1aXZvOiBzdHJpbmc7XHJcbiAgcHVibGljIHBkZjogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwpIHtcclxuICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdG9wKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjbG9zZScpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIFVzYWRvIHBhcmEgY29udG9ybmFyIG8gcHJvYmxlbWEgZGUgY2hhbmdlIGRvIHNlbGVjdCBkZSB6b29tXHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RIaWRkZW5QZGYnKSkpIHtcclxuICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XHJcbiAgICAgICAgc2VsZWN0LmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgc2VsZWN0LmlkID0gJ3NlbGVjdEhpZGRlblBkZic7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIHNlbGVjdCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luc2VydCBzZWxlY3QgaGlkZGVuJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wZGZWaWV3ZXIuZG93bmxvYWRGaWxlTmFtZSA9IHRoaXMubm9tZUFycXVpdm87XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBVdGlsRnVuY3Rpb25zLmNvbnZlcnRCYXNlNjRUb0Jsb2JEYXRhKHRoaXMucGRmLCAnYXBwbGljYXRpb24vcGRmJyk7XHJcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICB0aGlzLnBkZlZpZXdlci5wZGZTcmMgPSB1cmw7XHJcbiAgICAgIHRoaXMucGRmVmlld2VyLnpvb20gPSAncGFnZS1maXQnO1xyXG4gICAgICB0aGlzLnBkZlZpZXdlci5yZWZyZXNoKCk7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BkZkNvbXBvbmVudH0gZnJvbSAnLi9wZGYuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQZGZTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcGRmVmlld2VyQ29tcG9uZW50OiBQZGZDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIHB1YmxpYyBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50LnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnQodGl0dWxvOiBzdHJpbmcsIG5vbWVBcnF1aXZvOiBzdHJpbmcsIHBkZjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wZGZWaWV3ZXJDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBkZkNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwteGwgcGRmLXZpZXdlcidcclxuICAgICAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICB0aGlzLnBkZlZpZXdlckNvbXBvbmVudC5ub21lQXJxdWl2byA9IG5vbWVBcnF1aXZvO1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50LnRpdHVsbyA9IHRpdHVsbztcclxuICAgICAgICB0aGlzLnBkZlZpZXdlckNvbXBvbmVudC5wZGYgPSBwZGY7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UGRmQ29tcG9uZW50fSBmcm9tICcuL3BkZi5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BkZkpzVmlld2VyTW9kdWxlfSBmcm9tICduZzItcGRmanMtdmlld2VyJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQZGZTZXJ2aWNlfSBmcm9tICcuL3BkZi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBQZGZDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFBkZkpzVmlld2VyTW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlXHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIFBkZkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgUGRmQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFBkZlNlcnZpY2VcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmTW9kdWxlIHt9XHJcbiIsImV4cG9ydCBlbnVtIERpYWxvZ1R5cGUge1xyXG4gICAgSU5GTyxcclxuICAgIFFVRVNUSU9OLFxyXG4gICAgUVVFU1RJT05fWUVTX05PLFxyXG4gICAgV0FJVFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBEaWFsb2dSZXN1bHQge1xyXG4gICAgT0ssXHJcbiAgICBZRVMsXHJcbiAgICBOTyxcclxuICAgIENBTkNFTFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0xpc3RlbmVyIHtcclxuICAgIGRpYWxvZ1JldHVybmVkKHJlc3VsdDogRGlhbG9nUmVzdWx0LCBwYXJhbTogYW55KTtcclxufVxyXG4iLCJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRGlhbG9nTGlzdGVuZXIsIERpYWxvZ1Jlc3VsdCwgRGlhbG9nVHlwZSB9IGZyb20gJy4vbW9kYWwtZGlhbG9nLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbW9kYWwtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtZGlhbG9nLnN0eWxlLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNb2RhbERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnbG9hZGVyJylcclxuICAgIGxvYWRlcjogRWxlbWVudFJlZjtcclxuICAgIGRpYWxvZ1Jlc3VsdCA9IERpYWxvZ1Jlc3VsdDtcclxuICAgIGRpYWxvZ1R5cGUgPSBEaWFsb2dUeXBlO1xyXG4gICAgbGlzdGVuZXI6IERpYWxvZ0xpc3RlbmVyO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGNzc0NsYXNzOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBEaWFsb2dUeXBlO1xyXG4gICAgcGFyYW06IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy50eXBlID0gRGlhbG9nVHlwZS5JTkZPO1xyXG4gICAgICAgIHRoaXMuY3NzQ2xhc3MgPSAnJztcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICB0aGlzLnRpdGxlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0KHJlc3VsdDogRGlhbG9nUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZGlhbG9nUmV0dXJuZWQocmVzdWx0LCB0aGlzLnBhcmFtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygncmVzdWx0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExpc3RlbmVyKHBhcmVudDogRGlhbG9nTGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KHBhcmFtOiBhbnksIHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgY3NzQ2xhc3M6IHN0cmluZywgdHlwZTogRGlhbG9nVHlwZSkge1xuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuY3NzQ2xhc3MgPSBjc3NDbGFzcztcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucGFyYW0gPSBwYXJhbTtcbiAgICB9XG5cbiAgICBnZXRIZWFkZXJJY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IERpYWxvZ1R5cGUuSU5GTyA/ICdiZWxsJyA6ICd0aW1lcyc7XG4gICAgfVxuXHJcbiAgICBwdWJsaWMgc3RvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5kaWFsb2dSZXR1cm5lZChEaWFsb2dSZXN1bHQuQ0FOQ0VMLCB0aGlzLnBhcmFtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjbG9zZScpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgICAgICBjb25zdCBtb2RhbENvbnRlbnQgPSB0aGlzLmxvYWRlci5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSBEaWFsb2dUeXBlLldBSVQpIHtcclxuICAgICAgICAgICAgbW9kYWxDb250ZW50LmNsYXNzTmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AUGlwZSh7IG5hbWU6ICdmaW5kTGFuZ3VhZ2VGcm9tS2V5JyB9KVxyXG5leHBvcnQgY2xhc3MgRmluZExhbmd1YWdlRnJvbUtleVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VzOiBhbnkgPSB7XHJcbiAgICAgICAgJ3B0LWJyJzogeyBuYW1lOiAnUG9ydHVndcODwqpzIChCcmFzaWwpJyB9XHJcbiAgICB9O1xyXG4gICAgdHJhbnNmb3JtKGxhbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VzW2xhbmddLm5hbWU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RmluZExhbmd1YWdlRnJvbUtleVBpcGV9IGZyb20gJy4vZmluZC1sYW5ndWFnZS1mcm9tLWtleS5waXBlJ1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEZpbmRMYW5ndWFnZUZyb21LZXlQaXBlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBGaW5kTGFuZ3VhZ2VGcm9tS2V5UGlwZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaW5kTGFuZ3VhZ2VNb2R1bG8ge31cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TW9kYWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4vbW9kYWwtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XG5pbXBvcnQge2ZhVGltZXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYVRpbWVzJztcbmltcG9ydCB7ZmFCYW59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYUJhbic7XG5pbXBvcnQge2ZhQmVsbH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhQmVsbCc7XG5pbXBvcnQge0ZpbmRMYW5ndWFnZU1vZHVsb30gZnJvbSAnLi4vLi4vbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS5tb2R1bG8nO1xuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XG5cbmxpYnJhcnkuYWRkKGZhVGltZXMpO1xubGlicmFyeS5hZGQoZmFCYW4pO1xubGlicmFyeS5hZGQoZmFCZWxsKTtcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBGaW5kTGFuZ3VhZ2VNb2R1bG8sXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIE1vZGFsRGlhbG9nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgIE1vZGFsRGlhbG9nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBNb2RhbERpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kYWxEaWFsb2dNb2R1bGUge31cclxuIiwiZXhwb3J0IGNsYXNzIFBhcmFtZXRybyB7XHJcbiAgICBwdWJsaWMgaWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyB0aXBvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm9tZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGRlc2NyaWNhbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHZhbG9yOiBhbnk7XHJcbiAgICBwdWJsaWMgdGVsYTogc3RyaW5nO1xyXG4gICAgcHVibGljIGxvY2FsOiBib29sZWFuO1xyXG4gICAgcHVibGljIG1vZHVsbzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBQYXJhbWV0cm9UaXBvIHtcclxuICAgIENPTUJPID0gMSxcclxuICAgIFNUUklORyA9IDIsXHJcbiAgICBCT09MRUFOID0gM1xyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1BhcmFtZXRybywgUGFyYW1ldHJvVGlwb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldHJvc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3BhcmFtZXRyb3MnO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsVHJpYnV0b3MgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvcGFyYW1ldHJvcy10cmlidXRvcyc7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmxQYXJhbWV0cm9zQ2hhdmVWYWxvciA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvcGFyYW1ldHJvcy1jaGF2ZS12YWxvcic7XHJcbiAgICBwcml2YXRlIG1vZHVsbzogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIG9wdGlvbnNQcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tb2R1bG8gPSBvcHRpb25zUHJvdmlkZXIubW9kdWxvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb3MocGFnaW5hOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VVcmwgKyAnLycgKyBwYWdpbmEgKyAnLycgKyB0aGlzLm1vZHVsbztcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQodXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBKU09OLnBhcnNlKGJvZHlba2V5XS52YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IGJvZHlba2V5XS52YWxvciA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9zVG9FZGl0KHBhZ2luYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZVVybCArICcvJyArIHBhZ2luYSArICcvJyArIHRoaXMubW9kdWxvICsgXCI/ZWRpdD10cnVlXCI7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYm9keSA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBib2R5KSB7XHJcbiAgICAgICAgICAgIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IEpTT04ucGFyc2UoYm9keVtrZXldLnZhbG9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gYm9keVtrZXldLnZhbG9yID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb3NCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxQYXJhbWV0cm8+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvcHVibGljL3BhcmFtZXRyb3MnICsgJy8nICsgbmFtZSArICcvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRybzogUGFyYW1ldHJvID0gdmFsdWUuYm9keSBhcyBQYXJhbWV0cm87XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1ldHJvLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1ldHJvLnZhbG9yID0gSlNPTi5wYXJzZShwYXJhbWV0cm8udmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0cm8udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRyby52YWxvciA9IHBhcmFtZXRyby52YWxvciA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRybztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldHJvc0NoYXZlVmFsb3IocGFnaW5hOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VVcmxQYXJhbWV0cm9zQ2hhdmVWYWxvciArICcvJyArIHBhZ2luYSArICcvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IEpTT04ucGFyc2UoYm9keVtrZXldLnZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gYm9keVtrZXldLnZhbG9yID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVQYXJhbWV0cm8ocGFyYW1ldHJvOiBQYXJhbWV0cm8pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRyb0NvcHk6IFBhcmFtZXRybyA9IHsgLi4ucGFyYW1ldHJvIH07XHJcbiAgICAgICAgcGFyYW1ldHJvQ29weS5tb2R1bG8gPSB0aGlzLm1vZHVsbztcclxuICAgICAgICBpZiAocGFyYW1ldHJvQ29weS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRyb0NvcHkudmFsb3IgPSBKU09OLnN0cmluZ2lmeShwYXJhbWV0cm9Db3B5LnZhbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMucmVzb3VyY2VVcmwsIHBhcmFtZXRyb0NvcHksIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQYXJhbWV0cm8ocGFyYW1ldHJvOiBQYXJhbWV0cm8pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRyb0NvcHk6IFBhcmFtZXRybyA9IHsgLi4ucGFyYW1ldHJvIH07XHJcbiAgICAgICAgcGFyYW1ldHJvQ29weS5tb2R1bG8gPSB0aGlzLm1vZHVsbztcclxuICAgICAgICBpZiAocGFyYW1ldHJvQ29weS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRyb0NvcHkudmFsb3IgPSBKU09OLnN0cmluZ2lmeShwYXJhbWV0cm9Db3B5LnZhbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5yZXNvdXJjZVVybCwgcGFyYW1ldHJvQ29weSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVBhcmFtZXRybyhpZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLnJlc291cmNlVXJsICsgJy8nICsgaWQsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9UcmlidXRvcyhub21lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb3VyY2VVcmxUcmlidXRvcyArICcvJyArIG5vbWUsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUGFyYW1ldHJvUmVzdWx0IHtcclxuICAgIHB1YmxpYyBzdWNlc3NvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHJldG9ybm86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lciB7XHJcbiAgICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KTtcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBTYW5pdGl6ZXIsIFNlY3VyaXR5Q29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEpoaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5leHBvcnQgdHlwZSBKaGlBbGVydFR5cGUgPSAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9yYWxBbGVydCB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIHR5cGU6IEpoaUFsZXJ0VHlwZTtcclxuICAgIG1zZzogc3RyaW5nO1xyXG4gICAgcGFyYW1zPzogYW55O1xyXG4gICAgdGltZW91dD86IG51bWJlcjtcclxuICAgIHRvYXN0PzogYm9vbGVhbjtcclxuICAgIHBvc2l0aW9uPzogc3RyaW5nO1xyXG4gICAgc2NvcGVkPzogYm9vbGVhbjtcclxuICAgIGRpc2FibGVUcmFuc2xhdGU/OiBib29sZWFuO1xyXG4gICAgY2xvc2U/OiAoYWxlcnRzOiBQb3JhbEFsZXJ0W10pID0+IHZvaWQ7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQb3J0YWxBbGVydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBhbGVydElkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGFsZXJ0czogUG9yYWxBbGVydFtdO1xyXG4gICAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHRvYXN0OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBpMThuRW5hYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogU2FuaXRpemVyLCBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IEpoaUNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ID0gY29uZmlnLmFsZXJ0QXNUb2FzdDtcclxuICAgICAgICB0aGlzLmkxOG5FbmFibGVkID0gY29uZmlnLmkxOG5FbmFibGVkO1xyXG4gICAgICAgIHRoaXMuYWxlcnRJZCA9IDA7XHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBjb25maWcuYWxlcnRUaW1lb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzLnNwbGljZSgwLCB0aGlzLmFsZXJ0cy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCgpOiBQb3JhbEFsZXJ0W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0cztcclxuICAgIH1cclxuXHJcbiAgICBzdWNjZXNzKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICBtc2csXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUcmFuc2xhdGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGVycm9yKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcclxuICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmlzVG9hc3QoKSxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FybmluZyhtc2c6IHN0cmluZywgcGFyYW1zPzogYW55LCBwb3NpdGlvbj86IHN0cmluZywgZGlzYWJsZVRyYW5zbGF0ZT86IGJvb2xlYW4pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgICAgbXNnLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgdG9hc3Q6IHRoaXMuaXNUb2FzdCgpLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpbmZvKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXHJcbiAgICAgICAgICAgICAgICBtc2csXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUcmFuc2xhdGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFsZXJ0KGFsZXJ0T3B0aW9uczogUG9yYWxBbGVydCwgZXh0QWxlcnRzOiBQb3JhbEFsZXJ0W10pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICBhbGVydE9wdGlvbnMuaWQgPSB0aGlzLmFsZXJ0SWQrKztcclxuXHJcbiAgICAgICAgaWYgKCFhbGVydE9wdGlvbnMuZGlzYWJsZVRyYW5zbGF0ZSAmJiB0aGlzLmkxOG5FbmFibGVkICYmIGFsZXJ0T3B0aW9ucy5tc2cpIHtcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zLm1zZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGFsZXJ0T3B0aW9ucy5tc2csIGFsZXJ0T3B0aW9ucy5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWxlcnQgPSB0aGlzLmZhY3RvcnkoYWxlcnRPcHRpb25zKTtcclxuICAgICAgICBpZiAoYWxlcnRPcHRpb25zLnRpbWVvdXQgJiYgYWxlcnRPcHRpb25zLnRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsZXJ0KGFsZXJ0T3B0aW9ucy5pZCwgZXh0QWxlcnRzKTtcclxuICAgICAgICAgICAgfSwgYWxlcnRPcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBbGVydChpZDogbnVtYmVyLCBleHRBbGVydHM/OiBQb3JhbEFsZXJ0W10pOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHRoaXNBbGVydHM6IFBvcmFsQWxlcnRbXSA9IGV4dEFsZXJ0cyAmJiBleHRBbGVydHMubGVuZ3RoID4gMCA/IGV4dEFsZXJ0cyA6IHRoaXMuYWxlcnRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsb3NlQWxlcnRCeUluZGV4KHRoaXNBbGVydHMubWFwKGUgPT4gZS5pZCkuaW5kZXhPZihpZCksIHRoaXNBbGVydHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWxlcnRCeUluZGV4KGluZGV4OiBudW1iZXIsIHRoaXNBbGVydHM6IFBvcmFsQWxlcnRbXSk6IFBvcmFsQWxlcnRbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNBbGVydHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1RvYXN0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmFjdG9yeShhbGVydE9wdGlvbnM6IFBvcmFsQWxlcnQpOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICBjb25zdCBhbGVydDogUG9yYWxBbGVydCA9IHtcclxuICAgICAgICAgICAgdHlwZTogYWxlcnRPcHRpb25zLnR5cGUsXHJcbiAgICAgICAgICAgIG1zZzogdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGFsZXJ0T3B0aW9ucy5tc2cpLFxyXG4gICAgICAgICAgICBpZDogYWxlcnRPcHRpb25zLmlkLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBhbGVydE9wdGlvbnMudGltZW91dCxcclxuICAgICAgICAgICAgdG9hc3Q6IGFsZXJ0T3B0aW9ucy50b2FzdCxcclxuICAgICAgICAgICAgcG9zaXRpb246IGFsZXJ0T3B0aW9ucy5wb3NpdGlvbiA/IGFsZXJ0T3B0aW9ucy5wb3NpdGlvbiA6ICd0b3AgcmlnaHQnLFxyXG4gICAgICAgICAgICBzY29wZWQ6IGFsZXJ0T3B0aW9ucy5zY29wZWQsXHJcbiAgICAgICAgICAgIGNsb3NlOiAoYWxlcnRzOiBQb3JhbEFsZXJ0W10pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlQWxlcnQoYWxlcnRPcHRpb25zLmlkLCBhbGVydHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWFsZXJ0LnNjb3BlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFsZXJ0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVdGlsTWVuc2FnZW0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgc2hvd0Vycm9yKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZTtcclxuICAgICAgICBpZiAodmFsdWUuZXJyb3IgJiYgdmFsdWUuZXJyb3IuZmllbGRFcnJvcnMpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3IuZmllbGRFcnJvcnNbMF0ubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3JNZXNzYWdlID09PSBudWxsIHx8IGVycm9yTWVzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdFcnJvIGRlc2NvbmhlY2lkbyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd01lbnNhZ2VtRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3JEZXRhaWxlZCh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFV0aWxGdW5jdGlvbnMuZ2V0SHR0cEVycm9yTWVzc2FnZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVuc2FnZW1FcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBbGVydERldGFpbGVkKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gVXRpbEZ1bmN0aW9ucy5nZXRIdHRwRXJyb3JNZXNzYWdlKHZhbHVlKTtcclxuICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3JTd2FsKG1lbnNzYWdlKSB7XHJcbiAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIHRleHQ6IG1lbnNzYWdlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW5zYWdlbUVycm9yKGVycm9yTWVzc2FnZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIG51bGwsIG51bGwsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dXYXJuaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKHZhbHVlLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U3VjY2Vzcyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2Vzcyh2YWx1ZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQYXJhbWV0cm8sIFBhcmFtZXRyb1RpcG99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4vcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9SZXN1bHQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyfSBmcm9tICcuL3BhcmFtZXRyby5yZXN1bHQnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXBhcmFtZXRyb3MtZWRpdC1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFyYW1ldHJvcy5lZGl0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldHJvc0VkaXRDb21wb25lbnQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ25vbWUnKVxyXG4gICAgbm9tZTogRWxlbWVudFJlZjtcclxuXHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgcGFyYW1ldHJvOiBQYXJhbWV0cm87XHJcbiAgICBwYXJhbWV0cm9CYWNrdXA6IFBhcmFtZXRybztcclxuICAgIHBhcmFtZXRyb0VtdW0gPSBQYXJhbWV0cm9UaXBvO1xyXG4gICAgcmV0OiBQYXJhbWV0cm9SZXN1bHQ7XHJcbiAgICBsaXN0ZW5lcjogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXI7XHJcbiAgICBidXN5OiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRybyA9IG5ldyBQYXJhbWV0cm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCh0aXRsZTogc3RyaW5nLCBwYXJhbTogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwID0gcGFyYW07XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm8gPSB7IC4uLnRoaXMucGFyYW1ldHJvQmFja3VwIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExpc3RlbmVyKHBhcmVudDogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmFsb3JBcnJheVZhbGlkbygpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnBhcmFtZXRyby52YWxvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShpdGVtOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFyYW1ldHJvLnZhbG9yLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3Iuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGljaW9uYUl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucGFyYW1ldHJvLnZhbG9yKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvci5wdXNoKHsgdmFsb3I6ICcnLCB0ZXh0bzogJycgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGlwbygpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJhbWV0cm8udGlwbyA9PT0gdGhpcy5wYXJhbWV0cm9FbXVtLkNPTUJPKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJhbWV0cm8udGlwbyA9PT0gdGhpcy5wYXJhbWV0cm9FbXVtLlNUUklORykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJhbWV0cm8udGlwbyA9PT0gdGhpcy5wYXJhbWV0cm9FbXVtLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VMb2NhbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJhbWV0cm8ubG9jYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnRpcG8gPSBQYXJhbWV0cm9UaXBvLlNUUklORztcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXQgPSBuZXcgUGFyYW1ldHJvUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucmV0LnN1Y2Vzc28gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cC50aXBvID0gdGhpcy5wYXJhbWV0cm8udGlwbztcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAubG9jYWwgPSB0aGlzLnBhcmFtZXRyby5sb2NhbDtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAubm9tZSA9IHRoaXMucGFyYW1ldHJvLm5vbWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwLmRlc2NyaWNhbyA9IHRoaXMucGFyYW1ldHJvLmRlc2NyaWNhbztcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAudmFsb3IgPSB0aGlzLnBhcmFtZXRyby52YWxvcjtcclxuICAgICAgICAgICAgdGhpcy5yZXQucmV0b3JubyA9IHRoaXMucGFyYW1ldHJvQmFja3VwO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLnJldG9ybm8odGhpcy5yZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ3NhdmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGljaW9uYVBhcmFtZXRyb1RyaWJ1dG9zKCkge1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFBhcmFtZXRyb1RyaWJ1dG9zKHRoaXMucGFyYW1ldHJvLm5vbWUpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYm9keS5zdWNlc3NvKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gdmFsdWUuYm9keS52YWxvcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dNZW5zYWdlbUVycm9yKHZhbHVlLmJvZHkuZXJybyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQYXJhbWV0cm8sIFBhcmFtZXRyb1RpcG99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7RGlhbG9nTGlzdGVuZXIsIERpYWxvZ1Jlc3VsdH0gZnJvbSAnLi4vbW9kYWwtZGlhbG9nJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NFZGl0Q29tcG9uZW50fSBmcm9tICcuL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb1Jlc3VsdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXJ9IGZyb20gJy4vcGFyYW1ldHJvLnJlc3VsdCc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFyYW1ldHJvcy1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFyYW1ldHJvcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyb3NDb21wb25lbnQgaW1wbGVtZW50cyBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lciwgRGlhbG9nTGlzdGVuZXIge1xyXG4gICAgcHVibGljIHBhcmFtZXRyb0VtdW0gPSBQYXJhbWV0cm9UaXBvO1xyXG4gICAgcHVibGljIHBhZ2luYTogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGFyYW1ldHJvczogQXJyYXk8UGFyYW1ldHJvPjtcclxuICAgIHB1YmxpYyByZXQ6IFBhcmFtZXRyb1Jlc3VsdDtcclxuICAgIHB1YmxpYyBsaXN0ZW5lcjogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXI7XHJcbiAgICBwdWJsaWMgYnVzeTogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRyb3MgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluaXNoKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5saXN0ZW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnJldCA9IG5ldyBQYXJhbWV0cm9SZXN1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5yZXQuc3VjZXNzbyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmV0LnJldG9ybm8gPSB0aGlzLnBhcmFtZXRyb3M7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIucmV0b3Jubyh0aGlzLnJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnZmluaXNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExpc3RlbmVyKHBhcmVudDogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KHRpdGxlOiBzdHJpbmcsIHBhZ2luYTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMucGFnaW5hID0gcGFnaW5hO1xyXG4gICAgICAgIHRoaXMuZ2V0UGFyYW1ldGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0UGFyYW1ldHJvc1RvRWRpdCh0aGlzLnBhZ2luYSlcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnNvcnQoKGEsIGIpID0+IGEubm9tZS5sb2NhbGVDb21wYXJlKGIubm9tZSkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdFBhcmFtZXRlcihwYXJhbWV0cm86IFBhcmFtZXRybykge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0VkaXRDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KCdFZGnDg8Knw4PCo28gZGUgUGFyw4PCom1ldHJvJywgcGFyYW1ldHJvKTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUGFyYW1ldGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0VkaXRDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtID0gbmV3IFBhcmFtZXRybygpO1xyXG4gICAgICAgIHBhcmFtLmxvY2FsID0gdHJ1ZTtcclxuICAgICAgICBwYXJhbS50ZWxhID0gdGhpcy5wYWdpbmE7XHJcbiAgICAgICAgcGFyYW0udGlwbyA9IFBhcmFtZXRyb1RpcG8uU1RSSU5HO1xyXG4gICAgICAgIHBhcmFtLnZhbG9yID0gJyc7XHJcbiAgICAgICAgcGFyYW0ubm9tZSA9ICcnO1xyXG4gICAgICAgIHBhcmFtLmRlc2NyaWNhbyA9ICcnO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KCdBZGnDg8Knw4PCo28gZGUgUGFyw4PCom1ldHJvJywgcGFyYW0pO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5zZXRMaXN0ZW5lcih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlUGFyYW1ldGVyKHBhcmFtZXRybzogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAuc2F2ZVBhcmFtZXRybyhwYXJhbWV0cm8pXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldHJvLmlkID0gcmVzdWx0LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnB1c2gocGFyYW1ldHJvKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qZGVsZXRlUGFyYW1ldGVyKHBhcmFtZXRybzogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgbGV0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogTW9kYWxEaWFsb2dDb21wb25lbnQ7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbERpYWxvZ0NvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLnNldExpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KHBhcmFtZXRybywgJ0NvbmZpcm1hw4PCp8ODwqNvJywgJ0Rlc2VqYSByZWFsbWVudGUgYXBhZ2FyIGVzc2UgcGFyw4PCom1ldHJvPycsICcnLCBEaWFsb2dUeXBlLlFVRVNUSU9OKTtcclxuICAgIH0qL1xyXG5cclxuICAgIHVwZGF0ZVBhcmFtZXRlcihwYXJhbWV0cm86IFBhcmFtZXRybykge1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLnVwZGF0ZVBhcmFtZXRybyhwYXJhbWV0cm8pXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaWFsb2dSZXR1cm5lZChyZXN1bHQ6IERpYWxvZ1Jlc3VsdCwgcGFyYW06IGFueSkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IERpYWxvZ1Jlc3VsdC5ZRVMpIHtcclxuICAgICAgICAgICAgbGV0IHBhcmFtZXRybzogUGFyYW1ldHJvO1xyXG4gICAgICAgICAgICBwYXJhbWV0cm8gPSBwYXJhbTtcclxuICAgICAgICAgICAgaWYgKHBhcmFtZXRyby5pZCA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtZXRyby5pZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhcmFtZXRyb3MuaW5kZXhPZihwYXJhbWV0cm8pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5kZWxldGVQYXJhbWV0cm8ocGFyYW1ldHJvLmlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhcmFtZXRyb3MuaW5kZXhPZihwYXJhbWV0cm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3IodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNlc3NvID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmV0b3Juby5pZCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5yZXRvcm5vLmlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVyKHJlc3VsdC5yZXRvcm5vKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVBhcmFtZXRlcihyZXN1bHQucmV0b3Jubyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3J0YWxBbGVydFNlcnZpY2UgfSBmcm9tICcuL3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYWxlcnQnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRzXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFsZXJ0IG9mIGFsZXJ0c1wiIFtuZ0NsYXNzXT1cInNldENsYXNzZXMoYWxlcnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0ICpuZ0lmPVwiYWxlcnQgJiYgYWxlcnQudHlwZSAmJiBhbGVydC5tc2dcIiBbdHlwZV09XCJhbGVydC50eXBlXCIgKGNsb3NlKT1cImFsZXJ0LmNsb3NlKGFsZXJ0cylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImFsZXJ0Lm1zZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlBbGVydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGFsZXJ0czogYW55W107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0cyA9IHRoaXMuYWxlcnRTZXJ2aWNlLmdldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENsYXNzZXMoYWxlcnQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b2FzdDogISFhbGVydC50b2FzdCxcclxuICAgICAgICAgICAgW2FsZXJ0LnBvc2l0aW9uXTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEpoaUV2ZW50TWFuYWdlciB9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBvcnRhbEFsZXJ0U2VydmljZSB9IGZyb20gJy4vcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1hbGVydC1lcnJvcicsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydHNcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWxlcnQgb2YgYWxlcnRzXCIgW25nQ2xhc3NdPVwic2V0Q2xhc3NlcyhhbGVydClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgKm5nSWY9XCJhbGVydCAmJiBhbGVydC50eXBlICYmIGFsZXJ0Lm1zZ1wiIFt0eXBlXT1cImFsZXJ0LnR5cGVcIiAoY2xvc2UpPVwiYWxlcnQuY2xvc2UoYWxlcnRzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmUgW2lubmVySFRNTF09XCJhbGVydC5tc2dcIj48L3ByZT5cclxuICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlBbGVydEVycm9yQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIGFsZXJ0czogYW55W107XHJcbiAgICBjbGVhbkh0dHBFcnJvckxpc3RlbmVyOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYW5IdHRwRXJyb3JMaXN0ZW5lciA9IGV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ3BvcnRhbEdhdGV3YXlBcHAuaHR0cEVycm9yJywgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaTtcclxuICAgICAgICAgICAgY29uc3QgaHR0cEVycm9yUmVzcG9uc2UgPSByZXNwb25zZS5jb250ZW50O1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGh0dHBFcnJvclJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29ubmVjdGlvbiByZWZ1c2VkLCBzZXJ2ZXIgbm90IHJlYWNoYWJsZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydCgnU2VydmVyIG5vdCByZWFjaGFibGUnLCAnZXJyb3Iuc2VydmVyLm5vdC5yZWFjaGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQwMDpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBodHRwRXJyb3JSZXNwb25zZS5oZWFkZXJzLmtleXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JIZWFkZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHlLZXkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyci5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2FwcC1lcnJvcicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhlYWRlciA9IGh0dHBFcnJvclJlc3BvbnNlLmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtcGFyYW1zJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUtleSA9IGh0dHBFcnJvclJlc3BvbnNlLmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckhlYWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlOYW1lID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdnbG9iYWwubWVudS5lbnRpdGllcy4nICsgZW50aXR5S2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KGVycm9ySGVhZGVyLCBlcnJvckhlYWRlciwgeyBlbnRpdHlOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IgIT09ICcnICYmIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLmZpZWxkRXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IuZmllbGRFcnJvcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZEVycm9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZpZWxkRXJyb3JzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q6IEFycmF5PHN0cmluZz4gPSBbJ01pbicsICdNYXgnLCAnRGVjaW1hbE1pbicsICdEZWNpbWFsTWF4J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuaW5jbHVkZXMoZmllbGRFcnJvci5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3IubWVzc2FnZSA9ICdTaXplJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgJ3NvbWV0aGluZ1sxNF0ub3RoZXJbNF0uaWQnIHRvICdzb21ldGhpbmdbXS5vdGhlcltdLmlkJyBzbyB0cmFuc2xhdGlvbnMgY2FuIGJlIHdyaXR0ZW4gdG8gaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZEZpZWxkID0gZmllbGRFcnJvci5maWVsZC5yZXBsYWNlKC9cXFtcXGQqXFxdL2csICdbXScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdwb3J0YWxHYXRld2F5QXBwLicgKyBmaWVsZEVycm9yLm9iamVjdE5hbWUgKyAnLicgKyBjb252ZXJ0ZWRGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoJ0Vycm9yIG9uIGZpZWxkIFwiJyArIGZpZWxkTmFtZSArICdcIicsICdlcnJvci4nICsgZmllbGRFcnJvci5tZXNzYWdlLCB7IGZpZWxkTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IgIT09ICcnICYmIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5wYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQwNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoJ05vdCBmb3VuZCcsICdlcnJvci51cmwubm90LmZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IgIT09ICcnICYmIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydChodHRwRXJyb3JSZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2xhc3NlcyhhbGVydCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvYXN0OiAhIWFsZXJ0LnRvYXN0LFxyXG4gICAgICAgICAgICBbYWxlcnQucG9zaXRpb25dOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3kodGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyKTtcclxuICAgICAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXJyb3JBbGVydChtZXNzYWdlLCBrZXk/LCBkYXRhPykge1xyXG4gICAgICAgIGtleSA9IGtleSAmJiBrZXkgIT09IG51bGwgPyBrZXkgOiBtZXNzYWdlO1xyXG4gICAgICAgIHRoaXMuYWxlcnRzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIG1zZzoga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiA1MDAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmFsZXJ0U2VydmljZS5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuL3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7SmhpQWxlcnRDb21wb25lbnR9IGZyb20gJy4vYWxlcnQuY29tcG9uZW50JztcclxuaW1wb3J0IHtKaGlBbGVydEVycm9yQ29tcG9uZW50fSBmcm9tICcuL2FsZXJ0LWVycm9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEpoaUFsZXJ0Q29tcG9uZW50LFxyXG4gICAgSmhpQWxlcnRFcnJvckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSmhpQWxlcnRDb21wb25lbnQsXHJcbiAgICBKaGlBbGVydEVycm9yQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFV0aWxNZW5zYWdlbSwgUG9ydGFsQWxlcnRTZXJ2aWNlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBvcnRhbEFsZXJ0TW9kdWxlIHt9XHJcbiIsImltcG9ydCB7VGlwb0xvZ3JhZG91cm99IGZyb20gJy4vdGlwby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtUaXR1bG9Mb2dyYWRvdXJvfSBmcm9tICcuL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wb3NQcmVlbmNoaW1lbnRvIHtcclxuICAgIHB1YmxpYyB0aXBvc0xvZ3JhZG91cm8/OiBBcnJheTxUaXBvTG9ncmFkb3Vybz4gPSBbXTtcclxuICAgIHB1YmxpYyB0aXR1bG9zTG9ncmFkb3Vybz86IEFycmF5PFRpdHVsb0xvZ3JhZG91cm8+ID0gW107XHJcbn1cclxuIiwiaW1wb3J0IHtSZXNwb25zYXZlbH0gZnJvbSAnLi9yZXNwb25zYXZlbC5tb2RlbCc7XHJcbmltcG9ydCB7UGVzc29hSnVyaWRpY2F9IGZyb20gJy4vcGVzc29hLWp1cmlkaWNhLm1vZGVsJztcclxuaW1wb3J0IHtQZXNzb2FGaXNpY2F9IGZyb20gJy4vcGVzc29hLWZpc2ljYS5tb2RlbCc7XHJcbmltcG9ydCB7RW5kZXJlY299IGZyb20gJy4vZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQge1NpdHVhY2FvQ29udHJpYnVpbnRlLCBUaXBvUGVzc29hfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb250cmlidWludGUge1xyXG4gICAgcHVibGljIGlkPzogbnVtYmVyO1xyXG4gICAgcHVibGljIHRpcG9QZXNzb2E/OiBUaXBvUGVzc29hO1xyXG4gICAgcHVibGljIGRvY3VtZW50bz86IHN0cmluZztcclxuICAgIHB1YmxpYyBub21lPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpdHVhY2FvPzogU2l0dWFjYW9Db250cmlidWludGU7XHJcbiAgICBwdWJsaWMgdGVsZWZvbmVDZWx1bGFyPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHRlbGVmb25lUmVzaWRlbmNpYWw/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGVsZWZvbmVDb21lcmNpYWw/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZW1haWw/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGF0YUFsdGVyYWNhbz86IERhdGU7XHJcbiAgICBwdWJsaWMgdXN1YXJpb0FsdGVyYWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyB1dGlsaXphckVuZGVyZWNvUHJpbmNpcGFsUGFyYUNvcnJlc3BvbmRlbmNpYT86IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcGVzc29hRmlzaWNhPzogUGVzc29hRmlzaWNhO1xyXG4gICAgcHVibGljIHBlc3NvYUp1cmlkaWNhPzogUGVzc29hSnVyaWRpY2E7XHJcbiAgICBwdWJsaWMgZW5kZXJlY29zPzogRW5kZXJlY29bXTtcclxuICAgIHB1YmxpYyBlbmRlcmVjbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBpbnNjcmljYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYXJlYU9jdXBhZGE/OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGRkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGF0dWFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVzcG9uc2F2ZWlzPzogQXJyYXk8UmVzcG9uc2F2ZWw+ID0gW107XHJcbn1cclxuXHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvfSBmcm9tICcuLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7UGFnaW5hQWp1ZGF9IGZyb20gJy4uLy4uL21vZGVsL3BhZ2luYUFqdWRhLm1vZGVsJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktYWp1ZGEtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hanVkYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2FqdWRhLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignYW5pbWFjYW8nLCBbXHJcbiAgICAgIHN0YXRlKCdzaG93bicsIHN0eWxlKHtcclxuICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ2hpZGRlbicsIHN0eWxlKHtcclxuICAgICAgICBvcGFjaXR5OiAwXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignKiA9PiAqJywgYW5pbWF0ZSgnLjNzJykpXHJcbiAgICBdKVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBanVkYUNvbXBvbmVudCB7XHJcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XHJcbiAgcHVibGljIGJ1c3k6IGJvb2xlYW47XHJcbiAgcHVibGljIHBhcmFtZXRyb3M6IEFycmF5PFBhcmFtZXRybz47XHJcbiAgcHVibGljIHBhZ2luYXNBanVkYTogQXJyYXk8UGFnaW5hQWp1ZGE+ID0gW107XHJcbiAgcHVibGljIHBhZ2luYUF0dWFsOiBudW1iZXI7XHJcbiAgcHVibGljIGZhZGUgPSAnc2hvd24nO1xyXG5cclxuICBAVmlld0NoaWxkKCdib3Rhb05hdmVnYWNhbycpXHJcbiAgYm90YW9OYXZlZ2FjYW86IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbFxyXG4gICkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9zID0gW107XHJcbiAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZmluaXNoKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdmaW5pc2gnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHRpdGxlOiBzdHJpbmcsIHBhZ2luYXNBanVkYTogQXJyYXk8UGFnaW5hQWp1ZGE+KSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICB0aGlzLnBhZ2luYXNBanVkYSA9IHBhZ2luYXNBanVkYTtcclxuICAgIHRoaXMucGFnaW5hQXR1YWwgPSAwO1xyXG5cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c3VhcmlvVml1QWp1ZGEnLCAndHJ1ZScpO1xyXG5cclxuICAgIHRoaXMuYm90YW9OYXZlZ2FjYW8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gIH1cclxuXHJcbiAgcHJveGltbygpIHtcclxuICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5hQXR1YWwgPT0gdGhpcy5wYWdpbmFzQWp1ZGEubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuZmluaXNoKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmFBdHVhbCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBhbnRlcmlvcigpIHtcclxuICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYWdpbmFBdHVhbC0tO1xyXG4gICAgICB0aGlzLmFsdGVybmFyVmlzaWJpbGlkYWRlKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhbHRlcm5hclZpc2liaWxpZGFkZSgpIHtcclxuICAgIHRoaXMuZmFkZSA9IHRoaXMuZmFkZSA9PSAnc2hvd24nID8gJ2hpZGRlbicgOiAnc2hvd24nO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1BhcmFtZXRyb1Jlc3VsdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXJ9IGZyb20gJy4vcGFyYW1ldHJvLnJlc3VsdCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc0NvbXBvbmVudH0gZnJvbSAnLi9wYXJhbWV0cm9zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q2FtcG9zUHJlZW5jaGltZW50b30gZnJvbSAnLi4vLi4vbW9kZWwvY2FtcG9zLXByZWVuY2hpbWVudG8ubW9kZWwnO1xyXG5pbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi4vLi4vbW9kZWwvY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtBanVkYUNvbXBvbmVudH0gZnJvbSAnLi4vYWp1ZGEvYWp1ZGEuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYWdpbmFBanVkYX0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnaW5hQWp1ZGEubW9kZWwnO1xyXG5pbXBvcnQge0pveXJpZGVTZXJ2aWNlfSBmcm9tICduZ3gtam95cmlkZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR2xvYmFsU2VydmljZSBpbXBsZW1lbnRzIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyIHtcclxuXHJcbiAgICBwcml2YXRlIHJlc291cmNlVXJsR2VyYWw6IHN0cmluZyA9ICcuL2FwaS9wdWJsaWMvZ2VyYWwnIDtcclxuXHJcbiAgICBwdWJsaWMgcGFyYW1ldHJvczogeyBba2V5OiBzdHJpbmddOiBQYXJhbWV0cm8gfTtcclxuICAgIHByaXZhdGUgdXN1YXJpb0xvZ2FkbzogQ29udHJpYnVpbnRlO1xyXG4gICAgcHJpdmF0ZSBjYW1wb3NQcmVlbmNoaW1lbnRvOiBDYW1wb3NQcmVlbmNoaW1lbnRvO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGpveXJpZGVTZXJ2aWNlOiBKb3lyaWRlU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQ2hhdmVWYWxvcignKicpLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3MgPSB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFyYW1ldHJpemFyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0NvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGFyYW1ldHJvc0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoJ1BhcsODwqJtZXRyb3MgR2xvYmFpcycsICcqJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0b3JubyhyZXN1bHQ6IFBhcmFtZXRyb1Jlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25zdWx0YXJDZXAoY2VwOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc291cmNlVXJsR2VyYWwgKyAnL3ZpYWNlcC8nICsgY2VwLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3VsdGFyQ2FtcG9zUHJlZW5jaGltZW50bygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvdXJjZVVybEdlcmFsICsgJy9jYW1wb3MtcHJlZW5jaGltZW50bycsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3VsdGFyVXN1YXJpb0xvZ2FkbygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvdXJjZVVybEdlcmFsICsgJy91c3VhcmlvLWxvZ2FkbycsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDYW1wb3NQcmVlbmNoaW1lbnRvKCk6IFByb21pc2U8Q2FtcG9zUHJlZW5jaGltZW50bz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvKSkge1xyXG4gICAgICAgIHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byA9IG5ldyBDYW1wb3NQcmVlbmNoaW1lbnRvKCk7XHJcbiAgICAgICAgdGhpcy5jb25zdWx0YXJDYW1wb3NQcmVlbmNoaW1lbnRvKClcclxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvID0gdmFsdWUuYm9keTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFVzdWFyaW9Mb2dhZG8oKTogUHJvbWlzZTxDb250cmlidWludGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMudXN1YXJpb0xvZ2FkbykpIHtcclxuICAgICAgICB0aGlzLnVzdWFyaW9Mb2dhZG8gPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICAgICAgdGhpcy5jb25zdWx0YXJVc3VhcmlvTG9nYWRvKClcclxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUuYm9keTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjZXNzbykge1xyXG4gICAgICAgICAgICAgIHRoaXMudXN1YXJpb0xvZ2FkbyA9IHJlc3VsdC5jb250cmlidWludGU7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnVzdWFyaW9Mb2dhZG8pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlamVjdChyZXN1bHQuZXJybyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSh0aGlzLnVzdWFyaW9Mb2dhZG8pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKSB7XHJcbiAgICAgIHRoaXMudXN1YXJpb0xvZ2FkbyA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWJyaXJBanVkYShwYWdpbmFzQWp1ZGE6IEFycmF5PFBhZ2luYUFqdWRhPikge1xyXG4gICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWp1ZGFDb21wb25lbnQsIHtcclxuICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICB3aW5kb3dDbGFzczogJ2FqdWRhJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogQWp1ZGFDb21wb25lbnQgPSBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoJ0FqdWRhJywgcGFnaW5hc0FqdWRhKTtcclxuXHJcbiAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKCgpID0+IHtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5qb3lyaWRlU2VydmljZS5zdGFydFRvdXIoe1xyXG4gICAgICAgICAgICAgIHN0ZXBzOiBbJ2ZpcnN0U3RlcCddLFxyXG4gICAgICAgICAgICAgIHNob3dDb3VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAnI2ZmZidcclxuICAgICAgICAgIH0pLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBib3Rhb0VudGVuZGkgPSA8SFRNTEVsZW1lbnQ+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuam95cmlkZS1zdGVwX19kb25lLWNvbnRhaW5lciAuam95cmlkZS1idXR0b25cIik7XHJcbiAgICAgICAgICAgICAgYm90YW9FbnRlbmRpLmlubmVyVGV4dCA9ICdFbnRlbmRpJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFUaW1lc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVGltZXMnO1xyXG5pbXBvcnQge2ZhQmFufSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFCYW4nO1xyXG5pbXBvcnQge0FqdWRhQ29tcG9uZW50fSBmcm9tICcuL2FqdWRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmcyRml0dGV4dE1vZHVsZX0gZnJvbSAnbmcyLWZpdHRleHQnO1xyXG5pbXBvcnQge0Jyb3dzZXJBbmltYXRpb25zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xyXG5saWJyYXJ5LmFkZChmYVRpbWVzKTtcclxubGlicmFyeS5hZGQoZmFCYW4pO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBOZzJGaXR0ZXh0TW9kdWxlLFxyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgQWp1ZGFDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgQWp1ZGFDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEFqdWRhQ29tcG9uZW50XHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFqdWRhTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NDb21wb25lbnR9IGZyb20gJy4vcGFyYW1ldHJvcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NFZGl0Q29tcG9uZW50fSBmcm9tICcuL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtNb2RhbERpYWxvZ01vZHVsZX0gZnJvbSAnLi4vbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5tb2R1bGUnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi8uLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtHbG9iYWxTZXJ2aWNlfSBmcm9tICcuL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNT0RVTE9fT1BUSU9OUywgT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge0FqdWRhTW9kdWxlfSBmcm9tICcuLi9hanVkYS9hanVkYS5tb2R1bGUnO1xyXG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNb2RhbERpYWxvZ01vZHVsZSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICBBanVkYU1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBQYXJhbWV0cm9zQ29tcG9uZW50LFxyXG4gICAgUGFyYW1ldHJvc0VkaXRDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgUGFyYW1ldHJvc0NvbXBvbmVudCxcclxuICAgIFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQYXJhbWV0cm9zQ29tcG9uZW50LFxyXG4gICAgUGFyYW1ldHJvc0VkaXRDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgT3B0aW9uc1Byb3ZpZGVyXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyb3NNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KG1vZHVsbz86IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFBhcmFtZXRyb3NNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtwcm92aWRlOiBNT0RVTE9fT1BUSU9OUywgdXNlVmFsdWU6IG1vZHVsb31cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi8uLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlcm1vTGdwZFNlcnZpY2Uge1xyXG4gIHB1YmxpYyByZXNvdXJjZVVybCA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaSc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybW9MZ3BkKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUZXJtb0xncGQ+KHRoaXMucmVzb3VyY2VVcmwgKyAnL3B1YmxpYy9sZ3BkL3Rlcm1vTGdwZCcsIHtvYnNlcnZlOiAncmVzcG9uc2UnfSk7XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBUZXJtb0xncGQge1xyXG4gICAgcHVibGljIGlkPzogbnVtYmVyO1xyXG4gICAgcHVibGljIG5vbWU/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGVzY3JpY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGFuZXhvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIG9ic2VydmFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2l0dWFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvX2luYz86IHN0cmluZztcclxuICAgIHB1YmxpYyBkYXRhX2luYz86IERhdGU7XHJcbiAgICBwdWJsaWMgdXN1YXJpb19pcF9pbmM/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZXJyb3M/OiB7XHJcbiAgICAgIGNvX3JldG9ybm8/OiBzdHJpbmdcclxuICAgICAgZHNfcmV0b3Jubz86IHN0cmluZ1xyXG4gICAgICBkc192YWxvcj86IHN0cmluZ1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhYmlsaXRhZG8/OiBib29sZWFuO1xyXG4gICAgcHVibGljIGFjZWl0bz86IGJvb2xlYW47XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZFNlcnZpY2V9IGZyb20gJy4vdGVybW8tbGdwZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi8uLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlcm1vTGdwZENvbXBvbmVudCksXHJcbiAgbXVsdGk6IHRydWVcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXRlcm1vLWxncGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXJtby1sZ3BkLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRlcm1vTGdwZENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICB0ZXJtb0xncGQ/OiBUZXJtb0xncGQ7XHJcblxyXG4gIEBJbnB1dCgpIGV4aWJpclRlcm1vOiBib29sZWFuO1xyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge1xyXG4gIH07XHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0ZXJtb0xncGRTZXJ2aWNlOiBUZXJtb0xncGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW1cclxuICApIHtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbmV3IFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbCkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSB2YWw7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XHJcbiAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlZCgkZXZlbnQpIHtcclxuICAgIHRoaXMudGVybW9MZ3BkLmFjZWl0byA9ICRldmVudCAmJiAkZXZlbnQudGFyZ2V0ICYmICRldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy50ZXJtb0xncGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUZXJtb0xncGQoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnSEFCSUxJVEFSX0xHUEQnKVxyXG4gICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICBpZiAocmVzcC52YWxvciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy50ZXJtb0xncGRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRUZXJtb0xncGQoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXJtb0xncGQgPSByZXNwLmJvZHk7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXJtb0xncGQuaGFiaWxpdGFkbyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy50ZXJtb0xncGQpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1vTGdwZC5lcnJvcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd01lbnNhZ2VtRXJyb3IodGhpcy50ZXJtb0xncGQuZXJyb3MuZHNfcmV0b3Jubyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKGVycik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkQ29tcG9uZW50fSBmcm9tICcuL3Rlcm1vLWxncGQuY29tcG9uZW50JztcclxuaW1wb3J0IHtUZXJtb0xncGRTZXJ2aWNlfSBmcm9tICcuL3Rlcm1vLWxncGQuc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KClcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgVGVybW9MZ3BkQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBUZXJtb0xncGRDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgVGVybW9MZ3BkQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFRlcm1vTGdwZFNlcnZpY2UsXHJcbiAgICBQYXJhbWV0cm9zU2VydmljZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXJtb0xncGRNb2R1bGUge1xyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtUZXJtb0xncGRTZXJ2aWNlfSBmcm9tICcuLi90ZXJtby1sZ3BkL3Rlcm1vLWxncGQuc2VydmljZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi8uLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLWNvb2tpZS1jb25zZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29va2llLWNvbnNlbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydjb29raWUtY29uc2VudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignc2ltcGxlRmFkZUFuaW1hdGlvbicsIFtcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoe29wYWNpdHk6IDF9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7b3BhY2l0eTogMH0pLFxyXG4gICAgICAgIGFuaW1hdGUoNDAwKVxyXG4gICAgICBdKSxcclxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJyxcclxuICAgICAgICBhbmltYXRlKDQwMCwgc3R5bGUoe29wYWNpdHk6IDB9KSkpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvb2tpZUNvbnNlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHRlcm1vTGdwZD86IFRlcm1vTGdwZDtcclxuICBlcnJvcnM/OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIHByaXZhdGUgdGVybW9MZ3BkU2VydmljZTogVGVybW9MZ3BkU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSBuZXcgVGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KCdjb29raWVTZWVuJykpIHtcclxuICAgICAgdGhpcy5nZXRUZXJtb0xncGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZlY2hhcigpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjb29raWVTZWVuJywgJ3RydWUnKTtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVybW9MZ3BkKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoJ0hBQklMSVRBUl9MR1BEJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3AudmFsb3IgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMudGVybW9MZ3BkU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0VGVybW9MZ3BkKClcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudGVybW9MZ3BkID0gcmVzcC5ib2R5O1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMudGVybW9MZ3BkLmVycm9zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IHRoaXMudGVybW9MZ3BkLmVycm9zLmRzX3JldG9ybm87XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudGVybW9MZ3BkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IFV0aWxGdW5jdGlvbnMuZ2V0SHR0cEVycm9yTWVzc2FnZShlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZFNlcnZpY2V9IGZyb20gJy4uL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtDb29raWVDb25zZW50Q29tcG9uZW50fSBmcm9tICcuL2Nvb2tpZS1jb25zZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIENvb2tpZUNvbnNlbnRDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIENvb2tpZUNvbnNlbnRDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgQ29va2llQ29uc2VudENvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBUZXJtb0xncGRTZXJ2aWNlLFxyXG4gICAgUGFyYW1ldHJvc1NlcnZpY2VcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29va2llQ29uc2VudE1vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50U2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZ2V0KCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFjY291bnQ+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QWNjb3VudD4oU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZShhY2NvdW50OiBhbnkpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY2NvdW50JywgYWNjb3VudCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZVNlcnZpY2V9IGZyb20gJ25neC13ZWJzdG9yYWdlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUHJpbmNpcGFsIHtcclxuICAgIHByaXZhdGUgdXNlcklkZW50aXR5OiBhbnk7XG4gICAgcHJpdmF0ZSBhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhdXRoZW50aWNhdGlvblN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm90YUF0dWFsaXphY2FvQ2FkYXN0cmFsID0gJy9zZXR0aW5ncyc7XG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBKaGlMYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY2NvdW50OiBBY2NvdW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxyXG4gICAgYXV0aGVudGljYXRlKGlkZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy51c2VySWRlbnRpdHkgPSBpZGVudGl0eTtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBpZGVudGl0eSAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUubmV4dCh0aGlzLnVzZXJJZGVudGl0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQW55QXV0aG9yaXR5KGF1dGhvcml0aWVzOiBzdHJpbmdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5oYXNBbnlBdXRob3JpdHlEaXJlY3QoYXV0aG9yaXRpZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlBdXRob3JpdHlEaXJlY3QoYXV0aG9yaXRpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQgfHwgIXRoaXMudXNlcklkZW50aXR5IHx8ICF0aGlzLnVzZXJJZGVudGl0eS5hdXRob3JpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF1dGhvcml0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJJZGVudGl0eS5hdXRob3JpdGllcy5pbmNsdWRlcyhhdXRob3JpdGllc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQXV0aG9yaXR5KGF1dGhvcml0eTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eSgpLnRoZW4oXHJcbiAgICAgICAgICAgIGlkID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaWQuYXV0aG9yaXRpZXMgJiYgaWQuYXV0aG9yaXRpZXMuaW5jbHVkZXMoYXV0aG9yaXR5KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZGVudGl0eShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChmb3JjZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGFuZCBzZWUgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhlIHVzZXJJZGVudGl0eSBkYXRhIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAgICAvLyBpZiB3ZSBoYXZlLCByZXVzZSBpdCBieSBpbW1lZGlhdGVseSByZXNvbHZpbmdcclxuICAgICAgICBpZiAodGhpcy51c2VySWRlbnRpdHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnVzZXJJZGVudGl0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXRyaWV2ZSB0aGUgdXNlcklkZW50aXR5IGRhdGEgZnJvbSB0aGUgc2VydmVyLCB1cGRhdGUgdGhlIGlkZW50aXR5IG9iamVjdCwgYW5kIHRoZW4gcmVzb2x2ZS5cclxuICAgICAgICByZXR1cm4gdGhpcy5hY2NvdW50XHJcbiAgICAgICAgICAgIC5nZXQoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gYWNjb3VudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciByZXRyaWV2ZSB0aGUgYWNjb3VudCBpbmZvLCB0aGUgbGFuZ3VhZ2Ugd2lsbCBiZSBjaGFuZ2VkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UgY29uZmlndXJlZCBpbiB0aGUgYWNjb3VudCBzZXR0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ0tleSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2xvY2FsZScpIHx8IHRoaXMudXNlcklkZW50aXR5LmxhbmdLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuY2hhbmdlTGFuZ3VhZ2UobGFuZ0tleSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUubmV4dCh0aGlzLnVzZXJJZGVudGl0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjaW9uYXJQYXJhQXR1YWxpemFjYW9DYWRhc3RyYWxTZU5lY2Vzc2FyaW8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VySWRlbnRpdHk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5uZXh0KHRoaXMudXNlcklkZW50aXR5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBpc0lkZW50aXR5UmVzb2x2ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklkZW50aXR5ICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0lkZW50aXR5UmVzb2x2ZWQoKSA/IHRoaXMudXNlcklkZW50aXR5LmltYWdlVXJsIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySWRlbnRpdHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklkZW50aXR5O1xuICAgIH1cblxuICAgIHByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbChpZGVudGl0eT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250YSA9IGlkZW50aXR5IHx8IHRoaXMudXNlcklkZW50aXR5O1xuICAgICAgICByZXR1cm4gISEoY29udGEgJiYgY29udGEuYXR1YWxpemFjYW9DYWRhc3RyYWxPYnJpZ2F0b3JpYSk7XG4gICAgfVxuXG4gICAgZ2V0Um90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdGFBdHVhbGl6YWNhb0NhZGFzdHJhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZGlyZWNpb25hclBhcmFBdHVhbGl6YWNhb0NhZGFzdHJhbFNlTmVjZXNzYXJpbygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbCgpIHx8ICF0aGlzLnJvdXRlciB8fCAhdGhpcy5yb3V0ZXIudXJsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSB0aGlzLnJvdGFBdHVhbGl6YWNhb0NhZGFzdHJhbCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdGFBdHVhbGl6YWNhb0NhZGFzdHJhbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtQYXJhbWV0cm9SZXN1bHQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyby5yZXN1bHQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi8uLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zQ29tcG9uZW50fSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1wYWdpbmEtcGFyYW1ldHJpemFkYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYS1wYXJhbWV0cml6YWRhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wYWdpbmEtcGFyYW1ldHJpemFkYS5zdHlsZS5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hUGFyYW1ldHJpemFkYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIge1xyXG4gIHBhcmFtZXRyb3M6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldHJvIH0gPSB7fTtcclxuICBpc0J1c3k6IGJvb2xlYW47XHJcbiAgZGVzYWJpbGl0YWRvID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2luYSA9ICcnO1xyXG4gIEBJbnB1dCgpIGNsYXNzTWFpbkNvbnRhaW5lciA9ICcnO1xyXG4gIEBJbnB1dCgpIGNsYXNzQ2FyZENvbnRhaW5lciA9ICcnO1xyXG4gIEBJbnB1dCgpIGhpZGVNYWluQ29udGVudCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGVCYWNrQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVBhZ2VUaXRsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGVQYWdlU3ViVGl0bGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0aXR1bG9EZWZhdWx0ID0gJyc7XHJcbiAgQElucHV0KCkgc3ViVGl0dWxvRGVmYXVsdCA9ICcnO1xyXG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJzUmVhZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHBhcmFtZXRyb3NTZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHVibGljIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtLFxyXG4gICAgcHVibGljIGhpc3Rvcnk6IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgIHB1YmxpYyBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge1xyXG5cclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhcnJlZ2FyUGFyYW1ldHJvcyhmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KTogYW55IHtcclxuICAgIHRoaXMuY2FycmVnYXJQYXJhbWV0cm9zKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcGFyYW1ldHJpemFyKCkge1xyXG4gICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBQYXJhbWV0cm9zQ29tcG9uZW50ID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQYXJhbWV0cm9zQ29tcG9uZW50LCB7XHJcbiAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdChcIlBhcsODwqJtZXRyb3MgZGEgUMODwqFnaW5hXCIsIHRoaXMucGFnaW5hKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FycmVnYXJQYXJhbWV0cm9zKGNoYW5nZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMucGFyYW1ldHJvc1NlcnZpY2VcclxuICAgICAgLmdldFBhcmFtZXRyb3NDaGF2ZVZhbG9yKHRoaXMucGFnaW5hKVxyXG4gICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5kZXNhYmlsaXRhZG8gPSBVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydIQUJJTElUQURPJ10pID09PSB0cnVlICYmIHRoaXMucGFyYW1ldHJvc1snSEFCSUxJVEFETyddLnZhbG9yID09PSBmYWxzZSA7XHJcbiAgICAgICAgaWYgKGNoYW5nZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnNSZWFkLmVtaXQodGhpcy5wYXJhbWV0cm9zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzQ2hhbmdlZC5lbWl0KHRoaXMucGFyYW1ldHJvcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCdXN5ID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VUaXRsZSgpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fVElUVUxPX1RFTEEnXSkgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fVElUVUxPX1RFTEEnXS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fVElUVUxPX1RFTEEnXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudGl0dWxvRGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRTdWJUaXRsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhpZGVQYWdlU3ViVGl0bGUgPT09IGZhbHNlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19DQUJFQ0FMSE9fVEVMQSddKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX0NBQkVDQUxIT19URUxBJ10udmFsb3IpID09PSB0cnVlIHx8XHJcbiAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5zdWJUaXR1bG9EZWZhdWx0KTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VTdWJUaXRsZSgpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXSkgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3ViVGl0dWxvRGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VEZXNjcmlwdGlvbigpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0RFU0NSSUNBTyddKSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfREVTQ1JJQ0FPJ10udmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9ERVNDUklDQU8nXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlSW5mb3JtYXRpb24oKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9JTkZPUk1BQ0FPJ10pID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9JTkZPUk1BQ0FPJ10udmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9JTkZPUk1BQ0FPJ10udmFsb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xCYXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWRlUGFnZVRpdGxlID09PSB0cnVlICYmIHRoaXMuaGlkZUJhY2tCdXR0b24gJiYgdGhpcy5wcmluY2lwYWwuaGFzQW55QXV0aG9yaXR5RGlyZWN0KFtcIlJPTEVfQURNSU5cIl0pID09PSBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi9wcmluY2lwYWwuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQHdoYXRJdERvZXMgQ29uZGl0aW9uYWxseSBpbmNsdWRlcyBhbiBIVE1MIGVsZW1lbnQgaWYgY3VycmVudCB1c2VyIGhhcyBhbnlcclxuICogb2YgdGhlIGF1dGhvcml0aWVzIHBhc3NlZCBhcyB0aGUgYGV4cHJlc3Npb25gLlxyXG4gKlxyXG4gKiBAaG93VG9Vc2VcclxuICogYGBgXHJcbiAqICAgICA8c29tZS1lbGVtZW50ICpqaGlIYXNBbnlBdXRob3JpdHk9XCInUk9MRV9BRE1JTidcIj4uLi48L3NvbWUtZWxlbWVudD5cclxuICpcclxuICogICAgIDxzb21lLWVsZW1lbnQgKmpoaUhhc0FueUF1dGhvcml0eT1cIlsnUk9MRV9BRE1JTicsICdST0xFX1BPUlRBTCddXCI+Li4uPC9zb21lLWVsZW1lbnQ+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tqaGlIYXNBbnlBdXRob3JpdHldJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlIHtcclxuICAgIHByaXZhdGUgYXV0aG9yaXRpZXM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGpoaUhhc0FueUF1dGhvcml0eSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLmF1dGhvcml0aWVzID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IFt2YWx1ZV0gOiB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgICAgICAvLyBHZXQgbm90aWZpZWQgZWFjaCB0aW1lIGF1dGhlbnRpY2F0aW9uIHN0YXRlIGNoYW5nZXMuXHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpLnN1YnNjcmliZShpZGVudGl0eSA9PiB0aGlzLnVwZGF0ZVZpZXcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVWaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmhhc0FueUF1dGhvcml0eSh0aGlzLmF1dGhvcml0aWVzKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICduZ3gtd2Vic3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgU3RhdGVTdG9yYWdlU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGdldFByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKCdwcmV2aW91c1N0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRQcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLmNsZWFyKCdwcmV2aW91c1N0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVQcmV2aW91c1N0YXRlKHByZXZpb3VzU3RhdGVOYW1lLCBwcmV2aW91c1N0YXRlUGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHsgbmFtZTogcHJldmlvdXNTdGF0ZU5hbWUsIHBhcmFtczogcHJldmlvdXNTdGF0ZVBhcmFtcyB9O1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLnN0b3JlKCdwcmV2aW91c1N0YXRlJywgcHJldmlvdXNTdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVzdGluYXRpb25TdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2Rlc3RpbmF0aW9uU3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLnN0b3JlKCdwcmV2aW91c1VybCcsIHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgncHJldmlvdXNVcmwnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZURlc3RpbmF0aW9uU3RhdGUoZGVzdGluYXRpb25TdGF0ZSwgZGVzdGluYXRpb25TdGF0ZVBhcmFtcywgZnJvbVN0YXRlKSB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25JbmZvID0ge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZGVzdGluYXRpb25TdGF0ZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGVzdGluYXRpb25TdGF0ZS5kYXRhXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmFtczogZGVzdGluYXRpb25TdGF0ZVBhcmFtcyxcclxuICAgICAgICAgICAgZnJvbToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZnJvbVN0YXRlLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoJ2Rlc3RpbmF0aW9uU3RhdGUnLCBkZXN0aW5hdGlvbkluZm8pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2ZXJQcm92aWRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgJGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSwgcHJpdmF0ZSAkc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSkge31cclxuXHJcbiAgICBnZXRUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kbG9jYWxTdG9yYWdlLnJldHJpZXZlKCdhdXRoZW50aWNhdGlvblRva2VuJykgfHwgdGhpcy4kc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbihjcmVkZW50aWFscyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hdXRoZW50aWNhdGUnLCBjcmVkZW50aWFscywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnBpcGUobWFwKGF1dGhlbnRpY2F0ZVN1Y2Nlc3MuYmluZCh0aGlzKSkpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBhdXRoZW50aWNhdGVTdWNjZXNzKHJlc3ApIHtcclxuICAgICAgICAgICAgY29uc3QgYmVhcmVyVG9rZW4gPSByZXNwLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChiZWFyZXJUb2tlbiAmJiBiZWFyZXJUb2tlbi5zbGljZSgwLCA3KSA9PT0gJ0JlYXJlciAnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqd3QgPSBiZWFyZXJUb2tlbi5zbGljZSg3LCBiZWFyZXJUb2tlbi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUF1dGhlbnRpY2F0aW9uVG9rZW4oand0LCBjcmVkZW50aWFscy5yZW1lbWJlck1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBqd3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW5XaXRoVG9rZW4oand0LCByZW1lbWJlck1lKSB7XHJcbiAgICAgICAgaWYgKGp3dCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlQXV0aGVudGljYXRpb25Ub2tlbihqd3QsIHJlbWVtYmVyTWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGp3dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdhdXRoLWp3dC1zZXJ2aWNlIFByb21pc2UgcmVqZWN0Jyk7IC8vIFB1dCBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGhlcmVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVBdXRoZW50aWNhdGlvblRva2VuKGp3dCwgcmVtZW1iZXJNZSkge1xyXG4gICAgICAgIGlmIChyZW1lbWJlck1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2FsU3RvcmFnZS5zdG9yZSgnYXV0aGVudGljYXRpb25Ub2tlbicsIGp3dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nLCBqd3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2dvdXQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhbFN0b3JhZ2UuY2xlYXIoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgICAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2UuY2xlYXIoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgICAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2UuY2xlYXIoJ2xvY2tQYWdlc05hdmlnYXRpb24nKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIYXNBbnlBdXRob3JpdHlEaXJlY3RpdmV9IGZyb20gJy4vaGFzLWFueS1hdXRob3JpdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7U3RhdGVTdG9yYWdlU2VydmljZX0gZnJvbSAnLi9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0F1dGhTZXJ2ZXJQcm92aWRlcn0gZnJvbSAnLi9hdXRoLWp3dC5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlXHJcbiAgICBdLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlXHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIEFjY291bnRTZXJ2aWNlLFxyXG4gICAgICBQcmluY2lwYWwsXHJcbiAgICAgIFN0YXRlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgIEF1dGhTZXJ2ZXJQcm92aWRlclxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aE1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYWdpbmFQYXJhbWV0cml6YWRhQ29tcG9uZW50fSBmcm9tICcuL3BhZ2luYS1wYXJhbWV0cml6YWRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0F1dGhNb2R1bGV9IGZyb20gJy4uLy4uL2F1dGgvYXV0aC5tb2R1bGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBBdXRoTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1BhZ2luYVBhcmFtZXRyaXphZGFDb21wb25lbnRdLFxyXG4gICAgZXhwb3J0czogW1BhZ2luYVBhcmFtZXRyaXphZGFDb21wb25lbnRdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdpbmFQYXJhbWV0cml6YWRhTW9kdWxlIHsgfVxyXG4iLCJleHBvcnQgZW51bSBDYXB0Y2hhUHJvdmlkZXJFbnVtIHtcclxuICAgIFJFQ0FQVENIQV9WMiA9ICdSRUNBUFRDSEFfVjInLFxyXG4gICAgUkVDQVBUQ0hBX1YzID0gJ1JFQ0FQVENIQV9WMycsXHJcbiAgICBUVVJOU1RJTEUgPSAnVFVSTlNUSUxFJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFDb25maWdNb2RlbCB7XHJcbiAgICBwcm92aWRlcjogQ2FwdGNoYVByb3ZpZGVyRW51bSB8IHN0cmluZztcclxuICAgIHNpdGVLZXk6IHN0cmluZztcclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtmb3JrSm9pbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Q2FwdGNoYUNvbmZpZ01vZGVsLCBDYXB0Y2hhUHJvdmlkZXJFbnVtfSBmcm9tICcuL211bHRpcGxlLWNhcHRjaGEubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb30gZnJvbSAnLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE11bHRpcGxlQ2FwdGNoYVNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9TSVRFX0tFWSA9ICc2TGRYWFgwVUFBQUFBQWtRMms2dXdETEstU0w1U3pfVW54NWFjOFd4JztcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXRDb25maWcoKTogUHJvbWlzZTxDYXB0Y2hhQ29uZmlnTW9kZWw+IHtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtcclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldDxQYXJhbWV0cm8+KCcvYXBpL3B1YmxpYy9wYXJhbWV0cm9zL0NBUFRDSEFfUFJPVklERVIvKicpLFxyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PFBhcmFtZXRybz4oJy9hcGkvcHVibGljL3BhcmFtZXRyb3MvQ0FQVENIQV9TSVRFX0tFWS8qJylcclxuICAgICAgICBdKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4oKFtwcm92aWRlclBhcmFtLCBzaXRlS2V5UGFyYW1dKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnOiBDYXB0Y2hhQ29uZmlnTW9kZWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyUGFyYW0udmFsb3IgYXMgQ2FwdGNoYVByb3ZpZGVyRW51bSxcclxuICAgICAgICAgICAgICAgICAgICBzaXRlS2V5OiBzaXRlS2V5UGFyYW0udmFsb3JcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShjb25maWcucHJvdmlkZXIpID09PSBmYWxzZSB8fCAhVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShjb25maWcuc2l0ZUtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucHJvdmlkZXIgPSAnUkVDQVBUQ0hBX1YyJztcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcuc2l0ZUtleSA9IHRoaXMuREVGQVVMVF9TSVRFX0tFWTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gY2FycmVnYXIgY29uZmlndXJhw4PCp8ODwqNvIGRlIGNhcHRjaGEnLCBlcnIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6ICdSRUNBUFRDSEFfVjInLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpdGVLZXk6IHRoaXMuREVGQVVMVF9TSVRFX0tFWVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IE1VTFRJUExFX0NBUFRDSEFfUFRfQlIgPSB7XHJcbiAgXCJtdWx0aXBsZUNhcHRjaGFcIjoge1xyXG4gICAgXCJ0dXJuc1RpbGVcIiA6IHtcclxuICAgICAgXCJsb2FkRXJyb3JcIjogXCJFcnJvIGFvIGNhcnJlZ2FyIFR1cm5zdGlsZVwiXHJcbiAgICB9LFxyXG4gICAgXCJyZUNhcHRjaGFWM1wiIDoge1xyXG4gICAgICBcImxvYWRFcnJvclwiOiBcIk7Dg8KjbyBmb2kgcG9zc8ODwq12ZWwgY2FycmVnYXIgbyByZUNBUFRDSEEgdjNcIixcclxuICAgICAgXCJpbnZhbGlkS2V5XCI6IFwiQ2hhdmUgZG8gcmVDQVBUQ0hBIGludsODwqFsaWRhIG91IGRvbcODwq1uaW8gbsODwqNvIGF1dG9yaXphZG9cIixcclxuICAgICAgXCJ2YWxpZGF0aW9uRXJyb3JcIjogXCJGYWxoYSBuYSB2YWxpZGHDg8Knw4PCo28gZG8gY2FwdGNoYVwiLFxyXG4gICAgICBcImh1bWFuVmVyaWZpY2F0aW9uc1wiOiBcIlZlcmlmaWNhbmRvIHNlIHZvY8ODwqogw4PCqSBodW1hbm/DosKAwqZcIixcclxuICAgICAgXCJzdWNjZXNzVmVyaWZpY2F0aW9uXCI6IFwiQ2FwdGNoYSB2ZXJpZmljYWRvIGNvbSBzdWNlc3NvXCJcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDYXB0Y2hhQ29uZmlnTW9kZWwsIENhcHRjaGFQcm92aWRlckVudW19IGZyb20gJy4vbXVsdGlwbGUtY2FwdGNoYS5tb2RlbCc7XHJcbmltcG9ydCB7TXVsdGlwbGVDYXB0Y2hhU2VydmljZX0gZnJvbSAnLi9tdWx0aXBsZS1jYXB0Y2hhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5pbXBvcnQge01VTFRJUExFX0NBUFRDSEFfUFRfQlJ9IGZyb20gJy4vaTE4bi9wdC1icic7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICB0dXJuc3RpbGU6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLW11bHRpcGxlLWNhcHRjaGEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpcGxlQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgndHVybnN0aWxlQ29udGFpbmVyJykgdHVybnN0aWxlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3JlY2FwdGNoYVYyJykgcmVjYXB0Y2hhVjI6IGFueTtcclxuICBwcml2YXRlIF9hY3Rpb24gPSAnaW5pdCc7XHJcbiAgQElucHV0KCkgdmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY3VzdG9tRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSB2YWxpZGF0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHJlc29sdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSB0dXJuc3RpbGVXaWRnZXRJZDogYW55O1xyXG4gIHByaXZhdGUgY2FwdGNoYVRyYW5zbGF0aW9uc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBhY3Rpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3Rpb247XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBhY3Rpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgdmFsdWUgPSBVdGlsRnVuY3Rpb25zLnNhbml0aXplUmVjYXB0Y2hhQWN0aW9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2FjdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgY3VzdG9tRXJyb3IoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tRXJyb3I7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjdXN0b21FcnJvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fY3VzdG9tRXJyb3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjb25maWc6IENhcHRjaGFDb25maWdNb2RlbDtcclxuICBlcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIG5vdm8gY2FtcG8gbm8gY29tcG9uZW50ZVxyXG4gIHByaXZhdGUgdHVybnN0aWxlUmVuZGVyZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHR1cm5zdGlsZUxvYWRpbmc/OiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NhcHRjaGFTZXJ2aWNlOiBNdWx0aXBsZUNhcHRjaGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy52YWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLl9jYXB0Y2hhU2VydmljZS5nZXRDb25maWcoKS50aGVuKGFzeW5jIGNvbmZpZyA9PiB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcucHJvdmlkZXIgPT09IENhcHRjaGFQcm92aWRlckVudW0uVFVSTlNUSUxFKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVHVybnN0aWxlU2NyaXB0KCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJUdXJuc3RpbGUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5wcm92aWRlciA9PT0gQ2FwdGNoYVByb3ZpZGVyRW51bS5SRUNBUFRDSEFfVjMpIHtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVWMygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAvLyBUVVJOU1RJTEVcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHByaXZhdGUgbG9hZFR1cm5zdGlsZVNjcmlwdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh3aW5kb3cudHVybnN0aWxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50dXJuc3RpbGVMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnR1cm5zdGlsZUxvYWRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50dXJuc3RpbGVMb2FkaW5nID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgc2NyaXB0LnNyYyA9ICdodHRwczovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vdHVybnN0aWxlL3YwL2FwaS5qcyc7XHJcbiAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XHJcbiAgICAgIHNjcmlwdC5kZWZlciA9IHRydWU7XHJcblxyXG4gICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xyXG4gICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHJlamVjdCh0aGlzLmdldFRyYW5zbGF0aW9uKCdtdWx0aXBsZUNhcHRjaGEudHVybnNUaWxlLmxvYWRFcnJvcicpKTtcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnR1cm5zdGlsZUxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclR1cm5zdGlsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnR1cm5zdGlsZVJlbmRlcmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMudHVybnN0aWxlQ29udGFpbmVyKSB7XHJcbiAgICAgIC8vIHRlbnRhIG5vdmFtZW50ZSBuYSBwcsODwrN4aW1hIGl0ZXJhw4PCp8ODwqNvIGRvIEFuZ3VsYXJcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbmRlclR1cm5zdGlsZSgpLCAxMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnR1cm5zdGlsZVJlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnR1cm5zdGlsZVdpZGdldElkID0gd2luZG93LnR1cm5zdGlsZS5yZW5kZXIodGhpcy50dXJuc3RpbGVDb250YWluZXIubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBzaXRla2V5OiB0aGlzLmNvbmZpZy5zaXRlS2V5LFxyXG4gICAgICBjYWxsYmFjazogKHRva2VuOiBzdHJpbmcpID0+IHRoaXMucmVzb2x2ZSh0b2tlbiksXHJcbiAgICAgICdlcnJvci1jYWxsYmFjayc6ICgpID0+IHRoaXMudmFsaWRhdGVkID0gZmFsc2UsXHJcbiAgICAgICdleHBpcmVkLWNhbGxiYWNrJzogKCkgPT4gdGhpcy52YWxpZGF0ZWQgPSBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgLy8gUkVDQVBUQ0hBICh2MiAvIHYzKVxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgb25Ub2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc29sdmUodG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVjYXB0Y2hhVjMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLmdyZWNhcHRjaGEpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgc2NyaXB0LnNyYyA9IGBodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanM/cmVuZGVyPSR7dGhpcy5jb25maWcuc2l0ZUtleX1gO1xyXG4gICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xyXG4gICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xyXG4gICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHJlamVjdCgpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4ZWN1dGVWMygpIHtcclxuICAgIHRoaXMubG9hZFJlY2FwdGNoYVYzKClcclxuICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgKHdpbmRvdyBhcyBhbnkpLmdyZWNhcHRjaGEucmVhZHkoKCkgPT4ge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZXhlY1Byb21pc2UgPSAod2luZG93IGFzIGFueSkuZ3JlY2FwdGNoYS5leGVjdXRlKFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5zaXRlS2V5LFxyXG4gICAgICAgICAgICB7IGFjdGlvbjogdGhpcy5fYWN0aW9uIH1cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGV4ZWNQcm9taXNlKVxyXG4gICAgICAgICAgLnRoZW4oKHRva2VuOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh0b2tlbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDYXB0Y2hhRXJyb3IoZXJyKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIC8vIMOwwp/ClMKlIEVSUk8gU8ODwo1OQ1JPTk8gKGVzc2Ugw4PCqSBvIHNldSBjYXNvKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVDYXB0Y2hhRXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDYXB0Y2hhRXJyb3IoZXJyLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDYXB0Y2hhRXJyb3IoZXJyOiBhbnksIHNjcmlwdEVycm9yID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIHJlQ0FQVENIQSB2MzonLCBlcnIpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKHNjcmlwdEVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS5yZUNhcHRjaGFWMy5sb2FkRXJyb3InKTtcclxuICAgICAgfSBlbHNlIGlmIChTdHJpbmcoZXJyKS5pbmNsdWRlcygnSW52YWxpZCBzaXRlIGtleScpKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS5yZUNhcHRjaGFWMy5pbnZhbGlkS2V5Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS5yZUNhcHRjaGFWMy52YWxpZGF0aW9uRXJyb3InKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVycm9yICs9ICc6ICcgKyBlcnI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZSh0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB0aGlzLnZhbGlkYXRlZENoYW5nZS5lbWl0KHRoaXMudmFsaWRhdGVkKTtcclxuICAgIHRoaXMucmVzb2x2ZWQuZW1pdCh0b2tlbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGFuZyA9XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyB8fFxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0RGVmYXVsdExhbmcoKSB8fFxyXG4gICAgICAncHQtYnInO1xyXG5cclxuICAgIGxldCB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSk7XHJcbiAgICBjb25zdCBub3RGb3VuZCA9XHJcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgdmFsdWUuc3RhcnRzV2l0aCgndHJhbnNsYXRpb24tbm90LWZvdW5kWycpO1xyXG5cclxuICAgIC8vIG5neC10cmFuc2xhdGUgcmV0b3JuYSBhIHByw4PCs3ByaWEga2V5IHF1YW5kbyBuw4PCo28gZW5jb250cmFcclxuICAgIGlmIChub3RGb3VuZCAmJiAhdGhpcy5jYXB0Y2hhVHJhbnNsYXRpb25zTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbihsYW5nLCBNVUxUSVBMRV9DQVBUQ0hBX1BUX0JSLCB0cnVlKTtcclxuICAgICAgdGhpcy5jYXB0Y2hhVHJhbnNsYXRpb25zTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIHRlbnRhIG5vdmFtZW50ZSBhcMODwrNzIHJlZ2lzdHJhclxyXG4gICAgICB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICB0aGlzLl9jdXN0b21FcnJvciA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRlZENoYW5nZS5lbWl0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAodGhpcy5jb25maWcucHJvdmlkZXIpIHtcclxuXHJcbiAgICAgICAgY2FzZSBDYXB0Y2hhUHJvdmlkZXJFbnVtLlJFQ0FQVENIQV9WMjpcclxuICAgICAgICAgIHRoaXMucmVzZXRSZWNhcHRjaGFWMigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ2FwdGNoYVByb3ZpZGVyRW51bS5SRUNBUFRDSEFfVjM6XHJcbiAgICAgICAgICB0aGlzLnJlc2V0UmVjYXB0Y2hhVjMoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENhcHRjaGFQcm92aWRlckVudW0uVFVSTlNUSUxFOlxyXG4gICAgICAgICAgdGhpcy5yZXNldFR1cm5zdGlsZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlc2V0UmVjYXB0Y2hhVjIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNhcHRjaGFWMikge1xyXG4gICAgICB0aGlzLnJlY2FwdGNoYVYyLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UmVjYXB0Y2hhVjMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4ZWN1dGVWMygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldFR1cm5zdGlsZSgpOiB2b2lkIHtcclxuICAgIGlmICh3aW5kb3cudHVybnN0aWxlICYmIHRoaXMudHVybnN0aWxlV2lkZ2V0SWQpIHtcclxuICAgICAgd2luZG93LnR1cm5zdGlsZS5yZXNldCh0aGlzLnR1cm5zdGlsZVdpZGdldElkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TXVsdGlwbGVDYXB0Y2hhQ29tcG9uZW50fSBmcm9tICcuL211bHRpcGxlLWNhcHRjaGEuY29tcG9uZW50JztcclxuaW1wb3J0IHtSZWNhcHRjaGFNb2R1bGV9IGZyb20gJ25nLXJlY2FwdGNoYSc7XHJcbmltcG9ydCB7UmVjYXB0Y2hhQ29tbW9uTW9kdWxlfSBmcm9tICduZy1yZWNhcHRjaGEvcmVjYXB0Y2hhL3JlY2FwdGNoYS1jb21tb24ubW9kdWxlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSwgUmVjYXB0Y2hhQ29tbW9uTW9kdWxlLCBSZWNhcHRjaGFNb2R1bGVdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbTXVsdGlwbGVDYXB0Y2hhQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtNdWx0aXBsZUNhcHRjaGFDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZUNhcHRjaGFNb2R1bGUge31cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcbmltcG9ydCB7TGlzdGFDb2RpZ29zfSBmcm9tICcuLi8uLi9tb2RlbC9saXN0YS1jb2RpZ29zJztcclxuaW1wb3J0IHtCYXNpY1Jlc3Bvc3RhfSBmcm9tICcuLi8uLi9tb2RlbC9iYXNpYy1yZXNwb3N0YS5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhY29lc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL25vdGlmaWNhY29lcyc7XHJcbiAgICBwcml2YXRlIG5vdGlmaWNhY29lc0VtQ2FjaGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhY2FvW10+KFtdKTtcclxuICAgIHByaXZhdGUgdWx0aW1vQ2FycmVnYW1lbnRvRW1NczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBvVmlkYUNhY2hlTXMgPSA2MDAwMDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgIH1cclxuXHJcbiAgICBidXNjYXJOb3RpZmljYWNvZXMoZm9yY2FyQXR1YWxpemFjYW86IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Tm90aWZpY2FjYW9bXT4ge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlQXR1YWwgPSB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUuZ2V0VmFsdWUoKTtcclxuICAgICAgICBjb25zdCBkYXRhQXR1YWwgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGlmICghZm9yY2FyQXR1YWxpemFjYW8gJiYgY2FjaGVBdHVhbCAmJiB0aGlzLnVsdGltb0NhcnJlZ2FtZW50b0VtTXMgJiYgKGRhdGFBdHVhbCAtIHRoaXMudWx0aW1vQ2FycmVnYW1lbnRvRW1NcykgPCB0aGlzLnRlbXBvVmlkYUNhY2hlTXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjYWNoZUF0dWFsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldDxOb3RpZmljYWNhb1tdPih0aGlzLnJlc291cmNlVXJsLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbigocmVzcDogSHR0cFJlc3BvbnNlPE5vdGlmaWNhY2FvW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0YSA9IHJlc3AuYm9keSA/IHJlc3AuYm9keSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0aXJMaXN0YUF0dWFsaXphZGEobGlzdGEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlck5vdGlmaWNhY29lc0VtQ2FjaGUoKTogTm90aWZpY2FjYW9bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXRpckxpc3RhQXR1YWxpemFkYShsaXN0YTogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5uZXh0KGxpc3RhID8gbGlzdGEgOiBbXSk7XHJcbiAgICAgICAgdGhpcy51bHRpbW9DYXJyZWdhbWVudG9FbU1zID0gRGF0ZS5ub3coKTtcclxuICAgIH1cclxuXHJcbiAgICBsaW1wYXJDYWNoZSgpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy51bHRpbW9DYXJyZWdhbWVudG9FbU1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhcGxpY2FyTmFvRXhpYmlyTG9jYWwoY29kaWdvczogbnVtYmVyW10pOiBOb3RpZmljYWNhb1tdIHtcclxuICAgICAgICBpZiAoIWNvZGlnb3MgfHwgY29kaWdvcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2J0ZXJOb3RpZmljYWNvZXNFbUNhY2hlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFnb3JhID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGNvbmp1bnRvQ29kaWdvcyA9IG5ldyBTZXQoY29kaWdvcyk7XHJcbiAgICAgICAgY29uc3QgYXR1YWxpemFkYSA9ICh0aGlzLm9idGVyTm90aWZpY2Fjb2VzRW1DYWNoZSgpIHx8IFtdKS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBpdGVtIGFzIGFueTtcclxuICAgICAgICAgICAgY29uc3QgY29kaWdvID0gdmFsb3IgPyB2YWxvci5jb2RpZ28gOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29kaWdvICE9PSBudWxsICYmIGNvZGlnbyAhPT0gdW5kZWZpbmVkICYmIGNvbmp1bnRvQ29kaWdvcy5oYXMoY29kaWdvKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBkYXRhTmFvRXhpYmlyOiBhZ29yYX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lbWl0aXJMaXN0YUF0dWFsaXphZGEoYXR1YWxpemFkYSk7XHJcbiAgICAgICAgcmV0dXJuIGF0dWFsaXphZGE7XHJcbiAgICB9XHJcblxyXG4gICAgbWFyY2FyTmFvRXhpYmlyKGRhZG9zOiBMaXN0YUNvZGlnb3MpOiBQcm9taXNlPEJhc2ljUmVzcG9zdGE+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5wb3N0PEJhc2ljUmVzcG9zdGE+KHRoaXMucmVzb3VyY2VVcmwgKyAnL21hcmNhci1uYW8tZXhpYmlyJywgZGFkb3MsIHtvYnNlcnZlOiAncmVzcG9uc2UnfSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwOiBIdHRwUmVzcG9uc2U8QmFzaWNSZXNwb3N0YT4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwLmJvZHkgYXMgQmFzaWNSZXNwb3N0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JzZXJ2YXJOb3RpZmljYWNvZXMoKTogT2JzZXJ2YWJsZTxOb3RpZmljYWNhb1tdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtOb3RpZmljYWNhb30gZnJvbSAnLi4vLi4vbW9kZWwvbm90aWZpY2FjYW8ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1ub3RpZmljYWNvZXMtZGV0YWxoZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudCB7XHJcbiAgICBub3RpZmljYWNhbzogTm90aWZpY2FjYW87XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge1xyXG4gICAgfVxyXG5cclxuICAgIGluaWNpYXIobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNhbyA9IG5vdGlmaWNhY2FvO1xyXG4gICAgfVxyXG5cclxuICAgIGZlY2hhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJUaXR1bG8oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ05vdGlmaWNhw4PCp8ODwqNvJztcclxuICAgIH1cclxuXHJcbiAgICBvYnRlck1lbnNhZ2VtKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IHRoaXMubm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLm1lbnNhZ2VtIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJEYXRhQ2FkYXN0cm8oKTogYW55IHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gdGhpcy5ub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuZGF0YUNhZGFzdHJvIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlckRhdGFOYW9FeGliaXIoKTogYW55IHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gdGhpcy5ub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuZGF0YU5hb0V4aWJpciA6IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge2ZhRXllfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzU2VydmljZX0gZnJvbSAnLi9ub3RpZmljYWNvZXMuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50fSBmcm9tICcuL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW5vdGlmaWNhY29lcy1wb3B1cCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2Fjb2VzLXBvcHVwLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCB7XHJcbiAgICBub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10gPSBbXTtcclxuICAgIG5vdGlmaWNhY29lc05vdmFzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBub3RpZmljYWNvZXNBbnRpZ2FzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBzZWxlY2lvbmFkb3M6IHsgW2tleTogbnVtYmVyXTogYm9vbGVhbiB9ID0ge307XHJcblxyXG4gICAgY29kaWdvc1Zpc3VhbGl6YWRvcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgY2FycmVnYW5kbyA9IGZhbHNlO1xyXG4gICAgZmFFeWUgPSBmYUV5ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhY29lc1NlcnZpY2U6IE5vdGlmaWNhY29lc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pY2lhcihub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10pIHtcclxuICAgICAgICB0aGlzLmF0dWFsaXphckxpc3Rhcyhub3RpZmljYWNvZXMgPyBub3RpZmljYWNvZXMgOiBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmVjaGFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2xvc2UnKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXN1YWxpemFyKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbykge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnbyA9IHRoaXMub2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbyk7XHJcbiAgICAgICAgaWYgKGNvZGlnbyAhPT0gbnVsbCAmJiBjb2RpZ28gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvZGlnb3NWaXN1YWxpemFkb3MuYWRkKGNvZGlnbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlOiBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50ID0gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5pY2lhcihub3RpZmljYWNhbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWx0ZXJuYXJTZWxlY2lvbmFkbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8sIGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIGlmIChjb2RpZ28gPT09IG51bGwgfHwgY29kaWdvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjaW9uYWRvc1tjb2RpZ29dID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQgPT09IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTZWxlY2lvbmFkbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIHJldHVybiBjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY2lvbmFkb3NbY29kaWdvXSA9PT0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwb2RlU2VsZWNpb25hcihub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIHJldHVybiBjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybWFyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnb3MgPSB0aGlzLm9idGVyQ29kaWdvc1NlbGVjaW9uYWRvcygpO1xyXG4gICAgICAgIGlmIChjb2RpZ29zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHthdHVhbGl6YXI6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UubWFyY2FyTmFvRXhpYmlyKHtsaXN0YTogY29kaWdvc30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3Bvc3RhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb3N0YSAmJiByZXNwb3N0YS5zdWNlc3NvID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvcihyZXNwb3N0YS5lcnJvKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0YUF0dWFsaXphZGEgPSB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UuYXBsaWNhck5hb0V4aWJpckxvY2FsKGNvZGlnb3MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YXJMaXN0YXMobGlzdGFBdHVhbGl6YWRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWNpb25hZG9zID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2Uoe2F0dWFsaXphcjogZmFsc2V9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyTWVuc2FnZW0obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLm1lbnNhZ2VtIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJEYXRhQ2FkYXN0cm8obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYW55IHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLmRhdGFDYWRhc3RybyA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb3RpZmljYWNhb05vdmEobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IG5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gIXZhbG9yIHx8IHZhbG9yLmRhdGFOYW9FeGliaXIgPT09IG51bGwgfHwgdmFsb3IuZGF0YU5hb0V4aWJpciA9PT0gdW5kZWZpbmVkIHx8IHZhbG9yLmRhdGFOYW9FeGliaXIgPT09ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTm90aWZpY2FjYW9WaXN1YWxpemFkYShub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIHJldHVybiBjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb2RpZ29zVmlzdWFsaXphZG9zLmhhcyhjb2RpZ28pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXR1YWxpemFyTGlzdGFzKG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gbm90aWZpY2Fjb2VzID8gbm90aWZpY2Fjb2VzIDogW107XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNOb3ZhcyA9IHRoaXMubm90aWZpY2Fjb2VzLmZpbHRlcihpdGVtID0+IHRoaXMuaXNOb3RpZmljYWNhb05vdmEoaXRlbSkpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzQW50aWdhcyA9IHRoaXMubm90aWZpY2Fjb2VzLmZpbHRlcihpdGVtID0+ICF0aGlzLmlzTm90aWZpY2FjYW9Ob3ZhKGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9idGVyQ29kaWdvc1NlbGVjaW9uYWRvcygpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2VsZWNpb25hZG9zKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGtleSA9PiB0aGlzLnNlbGVjaW9uYWRvc1sra2V5XSA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgLm1hcChrZXkgPT4gK2tleSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuY29kaWdvIDogbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9ub3RpZmljYWNvZXMtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50fSBmcm9tICcuL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gXCJAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgICBGb250QXdlc29tZU1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgICBOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhY29lc01vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQ1NSRlNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGdldENTUkYobmFtZSA9ICdYU1JGLVRPS0VOJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KG5hbWUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0F1dGhTZXJ2ZXJQcm92aWRlcn0gZnJvbSAnLi4vYXV0aC9hdXRoLWp3dC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvZ2luU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLCBwcml2YXRlIGF1dGhTZXJ2ZXJQcm92aWRlcjogQXV0aFNlcnZlclByb3ZpZGVyKSB7fVxyXG5cclxuICAgIGxvZ2luKGNyZWRlbnRpYWxzLCBjYWxsYmFjaz8pIHtcclxuICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZlclByb3ZpZGVyLmxvZ2luKGNyZWRlbnRpYWxzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSh0cnVlKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbldpdGhUb2tlbihqd3QsIHJlbWVtYmVyTWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmVyUHJvdmlkZXIubG9naW5XaXRoVG9rZW4oand0LCByZW1lbWJlck1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmVyUHJvdmlkZXIubG9nb3V0KCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuYXV0aGVudGljYXRlKG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBzYXZlKGFjY291bnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9yZWdpc3RlcicsIGFjY291bnQpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge1JlZ2lzdGVyfSBmcm9tICcuL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlYWxUaW1lTWFza1R5cGV9IGZyb20gJy4uL21vZGVsL2NwZi1jbnBqLm1vZGVsJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gXCIuLi9hbGVydC91dGlsLW1lbnNhZ2VtXCI7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXJlZ2lzdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVnaXN0ZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgY29uZmlybUVtYWlsOiBzdHJpbmc7XHJcbiAgcmVnaXN0ZXJBY2NvdW50OiBhbnk7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcbiAgcmVhbFRpbWVNYXNrVHlwZSA9IFJlYWxUaW1lTWFza1R5cGUuQ0xBU1NJQztcclxuICB0ZXJtb0xncGQ6IFRlcm1vTGdwZDtcclxuICBAVmlld0NoaWxkKCdjb25maXJtRW1haWxkSW5wdXQnKVxyXG4gIGNvbmZpcm1FbWFpbGRJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogSmhpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWdpc3RlclNlcnZpY2U6IFJlZ2lzdGVyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLFxyXG4gICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbSxcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWxcclxuICApIHtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbmV3IFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50ID0ge307XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkb2N1bWVudG8nKSwgJ2ZvY3VzJywgW10pO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5yZWdpc3RlckFjY291bnQucGFzc3dvcmQgPT09IHRoaXMuY29uZmlybVBhc3N3b3JkICYmIHRoaXMucmVnaXN0ZXJBY2NvdW50LmVtYWlsID09PSB0aGlzLmNvbmZpcm1FbWFpbCkge1xyXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRDdXJyZW50KCkudGhlbihrZXkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50LmxhbmdLZXkgPSBrZXk7XHJcbiAgICAgICAgaWYgKHRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8pIHtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50LnRlcm1vTGdwZEFjZWl0byA9IHRoaXMudGVybW9MZ3BkLmlkO1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFjY291bnQuZG9jdW1lbnRvTGdwZCA9IHRoaXMudGVybW9MZ3BkLmRvY3VtZW50b19pbmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJTZXJ2aWNlLnNhdmUodGhpcy5yZWdpc3RlckFjY291bnQpLnN1YnNjcmliZShcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZXNwb25zZSA9PiB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChyZXNwb25zZSlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5yZWdpc3RlckFjY291bnQucGFzc3dvcmQgIT09IHRoaXMuY29uZmlybVBhc3N3b3JkKSB7XHJcbiAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvclN3YWwoJ0FzIHNlbmhhcyBuw4PCo28gY29uZmVyZW0hJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVnaXN0ZXJBY2NvdW50LmVtYWlsICE9PSB0aGlzLmNvbmZpcm1FbWFpbCkge1xyXG4gICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JTd2FsKCdPcyBlbWFpbHMgbsODwqNvIGNvbmZlcmVtIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYXN0ZUNvbmZpcm1FbWFpbChldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXJtb0FjZWl0b091RGVzYWJpbGl0YWRvKCkge1xyXG4gICAgaWYgKCF0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhdGhpcy50ZXJtb0xncGQuYWNlaXRvO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtSZWdpc3RlckNvbXBvbmVudH0gZnJvbSAnLi9yZWdpc3Rlci5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyTW9kYWxTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgaXNPcGVuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gICAgb3BlbigpOiBOZ2JNb2RhbFJlZiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZWdpc3RlckNvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGFsUmVmO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gJy4uL21vZGVsL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XHJcbiAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3VzZXJzJztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBjcmVhdGUodXNlcjogSVVzZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJVXNlcj4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJVXNlcj4odGhpcy5yZXNvdXJjZVVybCwgdXNlciwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVzZXI6IElVc2VyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SVVzZXI+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJVXNlcj4odGhpcy5yZXNvdXJjZVVybCwgdXNlciwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgZmluZChsb2dpbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SVVzZXI+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJVXNlcj4oYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtsb2dpbn1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICBxdWVyeShyZXE/OiBhbnksIGZpbHRlcj86IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElVc2VyW10+PiB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgbGV0IHVybCA9IHRoaXMucmVzb3VyY2VVcmw7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShmaWx0ZXIpKSB7XHJcbiAgICAgIHVybCArPSAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsdGVyKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElVc2VyW10+KHVybCwgeyBwYXJhbXM6IG9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUobG9naW46IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMucmVzb3VyY2VVcmx9LyR7bG9naW59YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgYXV0aG9yaXRpZXMoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8c3RyaW5nW10+KFNFUlZFUl9BUElfVVJMICsgJ2FwaS91c2Vycy9hdXRob3JpdGllcycpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWNlaXRlTGdwZChsb2dpbjogc3RyaW5nLCB0ZXJtb0lkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KCdhcGkvcHVibGljL3VzZXJzL2FjZWl0ZS1sZ3BkLycgKyBsb2dpbiArICcvJyArIHRlcm1vSWQsIHtvYnNlcnZlOiAncmVzcG9uc2UnfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFJlbmRlcmVyLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXJ9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtMb2dpblNlcnZpY2V9IGZyb20gJy4vbG9naW4uc2VydmljZSc7XHJcbmltcG9ydCB7U3RhdGVTdG9yYWdlU2VydmljZX0gZnJvbSAnLi4vYXV0aC9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlZ2lzdGVyTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9yZWdpc3Rlci9yZWdpc3Rlci1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJzY3JpcHRpb24nO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuLi91c2VyL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtUZXJtb0xncGR9IGZyb20gJy4uL21vZGVsL3Rlcm1vLWxncGQubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtFTUFJTF9OT1RfRk9VTkRfVFlQRSwgSU5WQUxJRF9QQVNTV09SRF9UWVBFfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQge0RvY3VtZW50b1V0aWx9IGZyb20gJy4uL3V0aWwvZG9jdW1lbnRvLnV0aWwnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLWxvZ2luLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydsb2dpbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlMb2dpbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGF1dGhlbnRpY2F0aW9uRXJyb3I6IGJvb2xlYW47XHJcbiAgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBwYXNzd29yZDogc3RyaW5nO1xyXG4gIHJlbWVtYmVyTWU6IGJvb2xlYW47XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBjcmVkZW50aWFsczogYW55O1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICBoaW50OiBzdHJpbmc7XHJcbiAgdGVybW9MZ3BkSmFBY2VpdG86IG51bWJlcjtcclxuICBsZ3BkSGFiaWxpdGFkYTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGV4aWJpclRlcm1vOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGVybW9MZ3BkOiBUZXJtb0xncGQ7XHJcbiAgZGVib3VuY2VUaW1lID0gNTAwO1xyXG4gIG1vZGVsQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBwbGFjZWhvbGRlclVzZXJuYW1lQ3VzdG9taXphZG8gPSAnJztcclxuICBpc09jdWx0YXJDcmlhck5vdmFDb250YSA9IGZhbHNlO1xyXG4gIG1lbnNhZ2VtVGVsYUxvZ2luID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgIHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0YXRlU3RvcmFnZVNlcnZpY2U6IFN0YXRlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyTW9kYWxTZXJ2aWNlOiBSZWdpc3Rlck1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbSxcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgb3B0aW9uc1Byb3ZpZGVyPzogT3B0aW9uc1Byb3ZpZGVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0ge307XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IG5ldyBUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyN1c2VybmFtZScpLCAnZm9jdXMnLCBbXSksIDApO1xyXG4gICAgdGhpcy5leGliaXJUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7XHJcbiAgICAgIHVzZXJuYW1lOiBudWxsLFxyXG4gICAgICBwYXNzd29yZDogbnVsbCxcclxuICAgICAgcmVtZW1iZXJNZTogdHJ1ZSxcclxuICAgICAgdGVybW9MZ3BkQWNlaXRvOiBudWxsLFxyXG4gICAgICBkb2N1bWVudG9MZ3BkOiBudWxsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xyXG4gIH1cclxuXHJcbiAgbG9naW4oKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgbG9naW4gPSB0aGlzLm5vcm1hbGl6YXJMb2dpbih0aGlzLnVzZXJuYW1lKTtcclxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7XHJcbiAgICAgIHVzZXJuYW1lOiBsb2dpbixcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgIHJlbWVtYmVyTWU6IHRoaXMucmVtZW1iZXJNZSxcclxuICAgICAgdGVybW9MZ3BkQWNlaXRvOiB0aGlzLnRlcm1vTGdwZC5pZCAmJiB0aGlzLnRlcm1vTGdwZC5hY2VpdG8gPyB0aGlzLnRlcm1vTGdwZC5pZCA6IHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gIT09IG51bGwgPyB0aGlzLnRlcm1vTGdwZEphQWNlaXRvIDogbnVsbCxcclxuICAgICAgZG9jdW1lbnRvTGdwZDogdGhpcy50ZXJtb0xncGQuZG9jdW1lbnRvX2luY1xyXG4gICAgfTtcclxuICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luKHRoaXMuY3JlZGVudGlhbHMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2xvZ2luIHN1Y2Nlc3MnKTtcclxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnL3JlZ2lzdGVyJyB8fCB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ2FjdGl2YXRlJykgfHwgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdyZXNldCcpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQXRSb290KCkpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFBhZ2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7XHJcbiAgICAgICAgICBuYW1lOiAnYXV0aGVudGljYXRpb25TdWNjZXNzJyxcclxuICAgICAgICAgIGNvbnRlbnQ6ICdTZW5kaW5nIEF1dGhlbnRpY2F0aW9uIFN1Y2Nlc3MnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gcHJldmlvdXNTdGF0ZSB3YXMgc2V0IGluIHRoZSBhdXRoRXhwaXJlZEludGVyY2VwdG9yIGJlZm9yZSBiZWluZyByZWRpcmVjdGVkIHRvIGxvZ2luIG1vZGFsLlxyXG4gICAgICAgIC8vIHNpbmNlIGxvZ2luIGlzIHN1Y2Nlc2Z1bCwgZ28gdG8gc3RvcmVkIHByZXZpb3VzU3RhdGUgYW5kIGNsZWFyIHByZXZpb3VzU3RhdGVcclxuICAgICAgICBjb25zdCByZWRpcmVjdCA9IHRoaXMuc3RhdGVTdG9yYWdlU2VydmljZS5nZXRVcmwoKTtcclxuICAgICAgICBpZiAocmVkaXJlY3QpIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGVTdG9yYWdlU2VydmljZS5zdG9yZVVybChudWxsKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRU1BSUxfTk9UX0ZPVU5EX1RZUEUpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2UgPSAnbG9naW4ubWVzc2FnZXMuZXJyb3IuaW52YWxpZC1sb2dpbic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiByZXNwb25zZS5lcnJvci50eXBlID09PSBJTlZBTElEX1BBU1NXT1JEX1RZUEUpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2UgPSAnbG9naW4ubWVzc2FnZXMuZXJyb3IuaW52YWxpZC1wYXNzd29yZCc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2UgPSAnbG9naW4ubWVzc2FnZXMuZXJyb3IuYXV0aGVudGljYXRpb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNBdFJvb3QoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsID09PSAnLycgfHwgdGhpcy5yb3V0ZXIudXJsID09PSAnJztcclxuICB9XHJcblxyXG4gIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZXIudXJsXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCd0byBzdGF0ZSByZWdpc3RlcicpO1xyXG4gICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMucmVnaXN0ZXJNb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdFJlc2V0UGFzc3dvcmQoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ3RvIHN0YXRlIHJlcXVlc3RSZXNldCcpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcmVzZXQnLCAncmVxdWVzdCddKTtcclxuICB9XHJcblxyXG4gIGdldFRyYW5zbGF0aW9uKGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5oaW50KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oaW50O1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSk7XHJcbiAgICBpZiAodHJhbnNsYXRlZC5zdGFydHNXaXRoKCd0cmFuc2xhdGlvbi1ub3QtZm91bmQnKSkge1xyXG4gICAgICB0aGlzLmhpbnQgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhpbnQgPSB0cmFuc2xhdGVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGludDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgIHRoaXMuZ2V0VXNlcm5hbWVQbGFjZWhvbGRlcigpO1xyXG4gICAgdGhpcy5vY3VsdGFyQ3JpYXJOb3ZhQ29udGEoKTtcclxuICAgIHRoaXMuY2FycmVnYXJNZW5zYWdlbVRlbGFMb2dpbigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlucHV0Q2hhbmdlZCgpIHtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIGhhYmlsaXRhckJvdGFvRW50cmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGFiaWxpdGFyID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLm5vcm1hbGl6YXJMb2dpbih0aGlzLnVzZXJuYW1lKSkgPT09IHRydWUgJiYgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhc3N3b3JkKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAoKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvKSA9PT0gZmFsc2UgfHwgdGhpcy50ZXJtb0xncGQuaGFiaWxpdGFkbyA9PT0gZmFsc2UpID8gdHJ1ZSA6XHJcbiAgICAgICAgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnRlcm1vTGdwZEphQWNlaXRvKSA9PT0gdHJ1ZSB8fCB0aGlzLnRlcm1vTGdwZC5hY2VpdG8gPT09IHRydWUpKTtcclxuICAgIHJldHVybiBoYWJpbGl0YXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4aWJpclRlcm1vTGdwZCgpIHtcclxuICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKCdIQUJJTElUQVJfTEdQRCcpXHJcbiAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwLnZhbG9yID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmxncGRIYWJpbGl0YWRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5tb2RlbENoYW5nZWRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrVGVybW9BY2VpdG8oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tUZXJtb0FjZWl0bygpIHtcclxuICAgIGlmICh0aGlzLnRlcm1vTGdwZC5pZCAmJiAhdGhpcy50ZXJtb0xncGQuZXJyb3MpIHtcclxuICAgICAgdGhpcy50ZXJtb0xncGQuYWNlaXRvID0gdGhpcy5leGliaXJUZXJtbyA9IGZhbHNlO1xyXG4gICAgICBjb25zdCBsb2dpbiA9IHRoaXMubm9ybWFsaXphckxvZ2luKHRoaXMudXNlcm5hbWUpO1xyXG4gICAgICBpZiAobG9naW4gJiYgbG9naW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0QWNlaXRlTGdwZChsb2dpbiwgdGhpcy50ZXJtb0xncGQuaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRlcm1vTGdwZEphQWNlaXRvID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgIGlmICh0aGlzLnRlcm1vTGdwZEphQWNlaXRvID09PSBudWxsIHx8ICh0aGlzLnRlcm1vTGdwZEphQWNlaXRvICE9PSArdGhpcy50ZXJtb0xncGQuaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpYmlyVGVybW8gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrVGVybW9BY2VpdG8oKTtcclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRVc2VybmFtZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgY29uc3QgcGxhY2Vob2xkZXJQYWRyYW8gPSB0aGlzLmdldFRyYW5zbGF0aW9uKCdnbG9iYWwubG9naW4ucGxhY2Vob2xkZXInLCAnQ1BGL0NOUEogb3UgZW1haWwnKTtcclxuXHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2VcclxuICAgICAgLmdldFBhcmFtZXRyb3NCeU5hbWUoJ0RFU0NSSUNBT19DQU1QT19MT0dJTicpXHJcbiAgICAgIC50aGVuKHZhbG9yID0+IHtcclxuICAgICAgICBjb25zdCByZXNwID0gdmFsb3IudmFsb3I7XHJcblxyXG4gICAgICAgIGlmICghcmVzcCB8fCByZXNwLnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJVc2VybmFtZUN1c3RvbWl6YWRvID0gcGxhY2Vob2xkZXJQYWRyYW87XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJVc2VybmFtZUN1c3RvbWl6YWRvID0gcmVzcC50cmltKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJVc2VybmFtZUN1c3RvbWl6YWRvID0gcGxhY2Vob2xkZXJQYWRyYW87XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9jdWx0YXJDcmlhck5vdmFDb250YSgpIHtcclxuICAgIHRoaXMucGFyYW1ldHJvU2VydmljZVxyXG4gICAgICAuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnT0NVTFRBUl9MSU5LX0NSSUFDQU9fQ09OVEEnKVxyXG4gICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICB0aGlzLmlzT2N1bHRhckNyaWFyTm92YUNvbnRhID0gcmVzcC52YWxvciAmJiByZXNwLnZhbG9yID09PSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJybycsIGVycik7XHJcbiAgICAgICAgdGhpcy5pc09jdWx0YXJDcmlhck5vdmFDb250YSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhcnJlZ2FyTWVuc2FnZW1UZWxhTG9naW4oKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2VcclxuICAgICAgLmdldFBhcmFtZXRyb3NCeU5hbWUoJ01FTlNBR0VNX1RFTEFfTE9HSU4nKVxyXG4gICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHJlc3ApID09PSB0cnVlICYmIHR5cGVvZiByZXNwLnZhbG9yID09PSAnc3RyaW5nJyAmJiByZXNwLnZhbG9yLnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1lbnNhZ2VtVGVsYUxvZ2luID0gcmVzcC52YWxvci50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXphckxvZ2luKHZhbG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbG9naW4gPSAodmFsb3IgfHwgJycpLnRyaW0oKTtcclxuICAgIGlmICghbG9naW4pIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRW1haWwobG9naW4pKSB7XHJcbiAgICAgIHJldHVybiBsb2dpbi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChEb2N1bWVudG9VdGlsLmRvY3VtZW50b1ZhbGlkbyhsb2dpbiwgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCkpKSB7XHJcbiAgICAgIHJldHVybiBEb2N1bWVudG9VdGlsLm5vcm1hbGl6YXJEb2N1bWVudG8obG9naW4sIHRoaXMuaXNDbnBqQWxmYW51bWVyaWNvSGFiaWxpdGFkbygpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9naW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRW1haWwodmFsb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbG9yLmluZGV4T2YoJ0AnKSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhKHRoaXMub3B0aW9uc1Byb3ZpZGVyICYmIHRoaXMub3B0aW9uc1Byb3ZpZGVyLmNucGpBbGZhbnVtZXJpY28pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUxvZ2luTW9kYWxDb21wb25lbnR9IGZyb20gJy4vbG9naW4uY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZGFsU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGlzT3BlbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIG9wZW4oKTogTmdiTW9kYWxSZWYge1xyXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpTG9naW5Nb2RhbENvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGFsUmVmO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZSwgaXNEZXZNb2RlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4vcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N0YXRlU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4vc3RhdGUtc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgc3RhdGVTdG9yYWdlU2VydmljZTogU3RhdGVTdG9yYWdlU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBhdXRob3JpdGllcyA9IHJvdXRlLmRhdGFbJ2F1dGhvcml0aWVzJ107XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tMb2dpbihhdXRob3JpdGllcywgc3RhdGUudXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0xvZ2luKGF1dGhvcml0aWVzOiBzdHJpbmdbXSwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBwcmluY2lwYWwgPSB0aGlzLnByaW5jaXBhbDtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgICAgICBwcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpdGllcyB8fCBhdXRob3JpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJpbmNpcGFsLnByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbChhY2NvdW50KSAmJiB1cmwgIT09IHByaW5jaXBhbC5nZXRSb3RhQXR1YWxpemFjYW9DYWRhc3RyYWwoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwcmluY2lwYWwuZ2V0Um90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHkoYXV0aG9yaXRpZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNlciBoYXMgbm90IGFueSBvZiByZXF1aXJlZCBhdXRob3JpdGllczogJywgYXV0aG9yaXRpZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RvcmFnZVNlcnZpY2Uuc3RvcmVVcmwodXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWNjZXNzZGVuaWVkJ10pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBBY2NvdW50IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFjdGl2YXRlZDogYm9vbGVhbixcbiAgICAgICAgcHVibGljIGF1dGhvcml0aWVzOiBzdHJpbmdbXSxcbiAgICAgICAgcHVibGljIGVtYWlsOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBmaXJzdE5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmdLZXk6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhc3ROYW1lOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBsb2dpbjogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgaW1hZ2VVcmw6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHRlbGVmb25lPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZGF0YVVsdGltYUF0dWFsaXphY2FvQ2FkYXN0cmFsPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYXR1YWxpemFjYW9DYWRhc3RyYWxPYnJpZ2F0b3JpYT86IGJvb2xlYW5cbiAgICApIHt9XG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgaWQ/OiBhbnk7XHJcbiAgICBsb2dpbj86IHN0cmluZztcclxuICAgIGZpcnN0TmFtZT86IHN0cmluZztcclxuICAgIGxhc3ROYW1lPzogc3RyaW5nO1xyXG4gICAgZW1haWw/OiBzdHJpbmc7XHJcbiAgICBhY3RpdmF0ZWQ/OiBib29sZWFuO1xyXG4gICAgbGFuZ0tleT86IHN0cmluZztcclxuICAgIGF1dGhvcml0aWVzPzogYW55W107XHJcbiAgICBjcmVhdGVkQnk/OiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkRGF0ZT86IERhdGU7XHJcbiAgICBsYXN0TW9kaWZpZWRCeT86IHN0cmluZztcclxuICAgIGxhc3RNb2RpZmllZERhdGU/OiBEYXRlO1xyXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XHJcbiAgICBhY2VpdGVMZ3BkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBhbnksXHJcbiAgICAgICAgcHVibGljIGxvZ2luPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBmaXJzdE5hbWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxhc3ROYW1lPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBlbWFpbD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYWN0aXZhdGVkPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgbGFuZ0tleT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYXV0aG9yaXRpZXM/OiBhbnlbXSxcclxuICAgICAgICBwdWJsaWMgY3JlYXRlZEJ5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjcmVhdGVkRGF0ZT86IERhdGUsXHJcbiAgICAgICAgcHVibGljIGxhc3RNb2RpZmllZEJ5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsYXN0TW9kaWZpZWREYXRlPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGFzc3dvcmQ/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGFjZWl0ZUxncGQ/OiBib29sZWFuXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQgPyBpZCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5sb2dpbiA9IGxvZ2luID8gbG9naW4gOiBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lID8gZmlyc3ROYW1lIDogbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWUgPyBsYXN0TmFtZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsID8gZW1haWwgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkID0gYWN0aXZhdGVkID8gYWN0aXZhdGVkIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sYW5nS2V5ID0gbGFuZ0tleSA/IGxhbmdLZXkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXRpZXMgPSBhdXRob3JpdGllcyA/IGF1dGhvcml0aWVzIDogbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRCeSA9IGNyZWF0ZWRCeSA/IGNyZWF0ZWRCeSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0ZSA9IGNyZWF0ZWREYXRlID8gY3JlYXRlZERhdGUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE1vZGlmaWVkQnkgPSBsYXN0TW9kaWZpZWRCeSA/IGxhc3RNb2RpZmllZEJ5IDogbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlID8gbGFzdE1vZGlmaWVkRGF0ZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkID8gcGFzc3dvcmQgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYWNlaXRlTGdwZCA9IGFjZWl0ZUxncGQgPyBhY2VpdGVMZ3BkIDogZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBJRW1wcmVzYSB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIHJhemFvU29jaWFsPzogc3RyaW5nO1xyXG4gICAgbm9tZUZhbnRhc2lhPzogc3RyaW5nO1xyXG4gICAgdGVsZWZvbmU/OiBzdHJpbmc7XHJcbiAgICBsb2dvQ29udGVudFR5cGU/OiBzdHJpbmc7XHJcbiAgICBsb2dvPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYSBpbXBsZW1lbnRzIElFbXByZXNhIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgcmF6YW9Tb2NpYWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVGYW50YXNpYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdGVsZWZvbmU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxvZ29Db250ZW50VHlwZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG9nbz86IGFueVxyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSU1lbnUge1xyXG4gICAgaWQ/OiBudW1iZXI7XHJcbiAgICBub21lPzogc3RyaW5nO1xyXG4gICAgcm90YT86IHN0cmluZztcclxuICAgIGljb25lPzogc3RyaW5nO1xyXG4gICAgY29yPzogc3RyaW5nO1xyXG4gICAgbW9kdWxvPzogc3RyaW5nO1xyXG4gICAgc2Vydmljbz86IHN0cmluZztcclxuICAgIGF0aXZvPzogYm9vbGVhbjtcclxuICAgIGV4aWJpcj86IGJvb2xlYW47XHJcbiAgICBwZXJpb2RvSW5pY2lhbD86IERhdGU7XHJcbiAgICBwZXJpb2RvRmluYWw/OiBEYXRlO1xyXG4gICAgcGFpPzogSU1lbnU7XHJcbiAgICBzdWJNZW51cz86IElNZW51W107XHJcbiAgICBsb2dpblBlbG9BcHA/OiBib29sZWFuO1xyXG4gICAgc2VtcHJlVmlzaXZlbD86IGJvb2xlYW47XHJcbiAgICB2aXNpdmVsU29tZW50ZVBhcmFHZXN0b3I/OiBib29sZWFuO1xyXG4gICAgc2VxdWVuY2lhPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVudSBpbXBsZW1lbnRzIElNZW51IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgbm9tZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcm90YT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgaWNvbmU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNvcj86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbW9kdWxvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBzZXJ2aWNvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhdGl2bz86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIGV4aWJpcj86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHBlcmlvZG9JbmljaWFsPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGVyaW9kb0ZpbmFsPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGFpPzogTWVudSxcclxuICAgICAgICBwdWJsaWMgc3ViTWVudXM/OiBJTWVudVtdLFxyXG4gICAgICAgIHB1YmxpYyBsb2dpblBlbG9BcHA/OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBzZW1wcmVWaXNpdmVsPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgdmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgc2VxdWVuY2lhPzogbnVtYmVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmF0aXZvID0gdGhpcy5hdGl2byB8fCBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgR2F0ZXdheVJvdXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXRoOiBzdHJpbmcsIHB1YmxpYyBzZXJ2aWNlSWQ6IHN0cmluZywgcHVibGljIHNlcnZpY2VJbnN0YW5jZXM6IGFueVtdKSB7fVxyXG59XHJcbiIsImltcG9ydCB7IEF1ZGl0RGF0YSB9IGZyb20gJy4vYXVkaXQtZGF0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXVkaXQge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IEF1ZGl0RGF0YSwgcHVibGljIHByaW5jaXBhbDogc3RyaW5nLCBwdWJsaWMgdGltZXN0YW1wOiBzdHJpbmcsIHB1YmxpYyB0eXBlOiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEF1ZGl0RGF0YSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVtb3RlQWRkcmVzczogc3RyaW5nLCBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmcsIHB1YmxpYyBsb2c6IHN0cmluZykge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBsZXZlbDogc3RyaW5nKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQcm9maWxlSW5mbyB7XHJcbiAgICBhY3RpdmVQcm9maWxlczogc3RyaW5nW107XHJcbiAgICByaWJib25FbnY6IHN0cmluZztcclxuICAgIGluUHJvZHVjdGlvbjogYm9vbGVhbjtcclxuICAgIHN3YWdnZXJFbmFibGVkOiBib29sZWFuO1xyXG59XHJcbiIsIlxyXG5pbXBvcnQge1BhaXN9IGZyb20gJy4vcGFpcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTXVuaWNpcGlvIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgaWQ/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBlc3RhZG8/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBwYWlzPzogUGFpc1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImltcG9ydCB7VGlwb0xvZ3JhZG91cm99IGZyb20gJy4vdGlwby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtUaXR1bG9Mb2dyYWRvdXJvfSBmcm9tICcuL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtNdW5pY2lwaW99IGZyb20gJy4vbXVuaWNpcGlvLm1vZGVsJztcclxuaW1wb3J0IHtQYWlzfSBmcm9tICcuL3BhaXMubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9FbmRlcmVjb30gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW5kZXJlY28ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBkYXRhPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgdGlwbz86IFRpcG9FbmRlcmVjbyxcclxuICAgICAgICBwdWJsaWMgdGlwb0xvZ3JhZG91cm8/OiBUaXBvTG9ncmFkb3VybyxcclxuICAgICAgICBwdWJsaWMgdGl0dWxvTG9ncmFkb3Vybz86IFRpdHVsb0xvZ3JhZG91cm8sXHJcbiAgICAgICAgcHVibGljIGxvZ3JhZG91cm8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG51bWVybz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYmFpcnJvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjaWRhZGU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHVmPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjaWRhZGVSZWdpYW8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNvbXBsZW1lbnRvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjZXA/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG11bmljaXBpbz86IE11bmljaXBpbyxcclxuICAgICAgICBwdWJsaWMgcGFpcz86IFBhaXMsXHJcbiAgICAgICAgcHVibGljIHF1YWRyYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG90ZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG90ZWFtZW50bz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgY29uanVudG9IYWJpdGFjaW9uYWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGJsb2NvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhcGFydGFtZW50bz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgb2JzZXJ2YWNvZXM/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGliZ2U/OiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubXVuaWNpcGlvID0gbmV3IE11bmljaXBpbygpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQYWlzIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmdcclxuICAgICkge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVGlwb0xvZ3JhZG91cm8ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgcHVibGljIHNpZ2xhPzogc3RyaW5nLFxyXG4gICAgICBwdWJsaWMgZGVzY3JpY2FvPzogc3RyaW5nXHJcbiAgICApIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFRpdHVsb0xvZ3JhZG91cm8ge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkPzogbnVtYmVyLCBwdWJsaWMgc2lnbGE/OiBzdHJpbmcsIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtNdW5pY2lwaW99IGZyb20gJy4vbXVuaWNpcGlvLm1vZGVsJztcclxuaW1wb3J0IHtTZXhvfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQZXNzb2FGaXNpY2Ege1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyByZXNpZGVudGVFeHRlcmlvcj86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIG5vbWVNYWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVQYWk/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRhdGFOYXNjaW1lbnRvPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgc2V4bz86IFNleG8sXHJcbiAgICAgICAgcHVibGljIGFub09iaXRvPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBlc3RyYW5nZWlybz86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHJnPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjbmg/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG11bmljaXBpb05hdHVyYWxpZGFkZT86IE11bmljaXBpb1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQZXNzb2FKdXJpZGljYSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGluc2NyaWNhb0VzdGFkdWFsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBub21lRmFudGFzaWE/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRhdGFBYmVydHVyYT86IERhdGUsXHJcbiAgICAgICAgcHVibGljIGNhcGl0YWxTb2NpYWw/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGNwZlJlc3BvbnNhdmVsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBub21lUmVzcG9uc2F2ZWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHV0aWxpemFyRW5kUHJpUGFyYUNvcnJlc3A/OiBib29sZWFuXHJcbiAgICApIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4vY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtUaXBvUmVzcG9uc2F2ZWx9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNhdmVsIHtcclxuICAgIHB1YmxpYyBjb250cmlidWludGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyB0aXBvOiBUaXBvUmVzcG9uc2F2ZWw7XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFZpYUNlcCB7XHJcbiAgICBjZXA6IHN0cmluZztcclxuICAgIGxvZ3JhZG91cm86IHN0cmluZztcclxuICAgIGNvbXBsZW1lbnRvOiBzdHJpbmc7XHJcbiAgICBiYWlycm86IHN0cmluZztcclxuICAgIGxvY2FsaWRhZGU6IHN0cmluZztcclxuICAgIHVmOiBzdHJpbmc7XHJcbiAgICB1bmlkYWRlOiBzdHJpbmc7XHJcbiAgICBpYmdlOiBzdHJpbmc7XHJcbiAgICBnaWE6IHN0cmluZztcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ2VydGlkYW8ge1xyXG4gICAgcHVibGljIHRpcG86IHN0cmluZztcclxuICAgIHB1YmxpYyB2YWxvckJ1c2NhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm9tZVNvbGljaXRhbnRlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvU29saWNpdGFudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBhbm86IG51bWJlcjtcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ29uZmlndXJhY2FvUGFyY2VsYW1lbnRvIHtcclxuICAgIHB1YmxpYyBjb2RpZ286IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWFudGlkYWRlTWF4aW1hUGFyY2VsYXM6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwcmF6b1ByaW1laXJhUGFyY2VsYTogbnVtYmVyO1xyXG4gICAgcHVibGljIGRhdGFNaW5pbWFQcmltZWlyYVBhcmNlbGE6IERhdGU7XHJcbn1cclxuIiwiaW1wb3J0IHtFbmRlcmVjb30gZnJvbSAnLi9lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7UmVzcG9uc2F2ZWx9IGZyb20gJy4vcmVzcG9uc2F2ZWwubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9JbW92ZWx9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEltb3ZlbCB7XHJcbiAgICBwdWJsaWMgY29kaWdvPzogbnVtYmVyO1xyXG4gICAgcHVibGljIGluc2NyaWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmRlcmVjbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBub21lUHJvcHJpZXRhcmlvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b1Byb3ByaWV0YXJpbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpcG8/OiBUaXBvSW1vdmVsO1xyXG4gICAgcHVibGljIG1hdHJpY3VsYT86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmRlcmVjb1ByaW5jaXBhbD86IEVuZGVyZWNvID0gbmV3IEVuZGVyZWNvKCk7XHJcbiAgICBwdWJsaWMgZW5kZXJlY29Db2JyYW5jYT86IEVuZGVyZWNvID0gbmV3IEVuZGVyZWNvKCk7XHJcbiAgICBwdWJsaWMgcmVzcG9uc2F2ZWlzPzogQXJyYXk8UmVzcG9uc2F2ZWw+ID0gW107XHJcbn1cclxuIiwiaW1wb3J0IHtJbW92ZWx9IGZyb20gJy4vaW1vdmVsLm1vZGVsJztcclxuaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4vY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtEZWJpdG99IGZyb20gJy4vZGViaXRvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBEYWRvc0RlYml0byB7XHJcbiAgICBwdWJsaWMgZGViaXRvczogQXJyYXk8RGViaXRvPiA9IFtdO1xyXG4gICAgcHVibGljIGltb3ZlbDogSW1vdmVsID0gbmV3IEltb3ZlbCgpO1xyXG4gICAgcHVibGljIGNvbnRyaWJ1aW50ZTogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHBvc3N1aURlYml0b3NBanVpemFkb3M6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpRGViaXRvc1ZlbmNpZG9zOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1NYWlzRGViaXRvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBleGlzdGVtRGViaXRvc0ltb2JpbGlhcmlvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBleGlzdGVtRGViaXRvc0VtQ0RBOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1EZWJpdG9zTmFvTW9zdHJhZG9zRGl2aWRhQ29ycmVudGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpUGVuZGVuY2lhc0p1cmlkaWNhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlQYXJjZWxhbWVudG9BdGl2bzogYm9vbGVhbjtcclxufVxyXG4iLCJpbXBvcnQge1NpdHVhY2FvRGl2aWRhRGViaXRvLCBTaXR1YWNhb1BhZ2FtZW50b0RlYml0bywgVGlwb1Blc3NvYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7UGFyY2VsYX0gZnJvbSAnLi9wYXJjZWxhLm1vZGVsJztcclxuaW1wb3J0IHtCYXNpY1Jlc3Bvc3RhfSBmcm9tICcuL2Jhc2ljLXJlc3Bvc3RhLm1vZGVsJztcclxuaW1wb3J0IHtPYnJhfSBmcm9tICcuL29icmEubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERlYml0byB7XHJcbiAgICBwdWJsaWMgY29kaWdvQ29udHJpYnVpbnRlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm9tZUNvbnRyaWJ1aW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGluc2NyaWNhb011bmljaXBhbDogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b0NvbnRyaWJ1aW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpcG9QZXNzb2E6IFRpcG9QZXNzb2E7XHJcbiAgICBwdWJsaWMgY29kaWdvRGViaXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZXhlcmNpY2lvRGViaXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2l0dWFjYW9EZWJpdG86IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvO1xyXG4gICAgcHVibGljIHNpdHVhY2FvRGl2aWRhOiBTaXR1YWNhb0RpdmlkYURlYml0bztcclxuICAgIHB1YmxpYyBjb2RpZ29UcmlidXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGVzY3JpY2FvVHJpYnV0bzogc3RyaW5nO1xyXG4gICAgcHVibGljIG9icmE6IE9icmE7XHJcbiAgICBwdWJsaWMgdmFsb3I6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvckFiZXJ0bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yQXR1YWxpemFkbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHBhcmNlbGFzOiBBcnJheTxQYXJjZWxhPiA9IFtdO1xyXG4gICAgcHVibGljIGluc2NyaWNhb0ltb3ZlbDogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvZGlnb0ltb3ZlbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvZGVTZXJTZWxlY2lvbmFkbzogQmFzaWNSZXNwb3N0YTtcclxuICAgIHB1YmxpYyB0ZW1DREE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbnVtZXJvUHJvY2Vzc286IHN0cmluZztcclxuICAgIHB1YmxpYyBwZXJtaXRpclNlbGVjYW9QYXJjZWxhc0dlcmFjYW9HdWlhOiBib29sZWFuO1xyXG5cclxuICAgIC8vQ2FtcG9zIEZvcmEgZG8gRFRPXHJcbiAgICBwdWJsaWMgcG9zc3VpUGFyY2VsYXNWZW5jaWRhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlDb3RhVW5pY2E6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpQ290YVVuaWNhQWJlcnRhOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBvc3N1aVBhcmNlbGFzQWJlcnRhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwZXJtaXRlUmVmaXM6IGJvb2xlYW47XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gVGlwb1Blc3NvYSB7XHJcbiAgRklTSUNBID0gJ0ZJU0lDQScsXHJcbiAgSlVSSURJQ0EgPSAnSlVSSURJQ0EnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNpdHVhY2FvQ29udHJpYnVpbnRlIHtcclxuICBBVElWTyA9ICdBVElWTycsXHJcbiAgSU5BVElWTyA9ICdJTkFUSVZPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb0RpdmlkYURlYml0byB7XHJcbiAgRElWSURBX0NPUlJFTlRFID0gJ0RJVklEQV9DT1JSRU5URScsXHJcbiAgRElWSURBX0FUSVZBID0gJ0RJVklEQV9BVElWQScsXHJcbiAgRElWSURBX0FKVUlaQURBID0gJ0RJVklEQV9BSlVJWkFEQSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8ge1xyXG4gIEFCRVJUTyA9ICdBQkVSVE8nLFxyXG4gIFBBR08gPSAnUEFHTycsXHJcbiAgUFJPVEVTVEFETyA9ICdQUk9URVNUQURPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEge1xyXG4gIEFCRVJUTyA9ICdBQkVSVE8nLFxyXG4gIFBBR08gPSAnUEFHTycsXHJcbiAgRU1fRElWSURBX0FUSVZBID0gJ0VNX0RJVklEQV9BVElWQScsXHJcbiAgRU1fRVhFQ1VDQU9fRklTQ0FMID0gJ0VNX0VYRUNVQ0FPX0ZJU0NBTCcsXHJcbiAgQ0FOQ0VMQURPID0gJ0NBTkNFTEFETycsXHJcbiAgQUdSVVBBRE9fRU1fUEFSQ0VMQU1FTlRPID0gJ0FHUlVQQURPX0VNX1BBUkNFTEFNRU5UTycsXHJcbiAgUFJPVEVTVEFETyA9ICdQUk9URVNUQURPJyxcclxuICBFWENMVUlETyA9ICdFWENMVUlETycsXHJcbiAgSU1VTkVfSVNFTlRPID0gJ0lNVU5FX0lTRU5UTycsXHJcbiAgRElGRVJFTkNBX0RFX1ZBTE9SX0NBTkNFTEFET19QQVJDSUFMTUVOVEUgPSAnRElGRVJFTkNBX0RFX1ZBTE9SX0NBTkNFTEFET19QQVJDSUFMTUVOVEUnLFxyXG4gIEJMT1FVRUFETyA9ICdCTE9RVUVBRE8nLFxyXG4gIEFHUlVQQURPX0VNX09VVFJBX1BBUkNFTEEgPSAnQUdSVVBBRE9fRU1fT1VUUkFfUEFSQ0VMQScsXHJcbiAgUFJFU0NSSVRPID0gJ1BSRVNDUklUTycsXHJcbiAgRU1fRklTQ0FMSVpBQ0FPID0gJ0VNX0ZJU0NBTElaQUNBTycsXHJcbiAgQkFJWEFfU0VNX01PVklNRU5UTyA9ICdCQUlYQV9TRU1fTU9WSU1FTlRPJyxcclxuICBFTV9SRUNVUlNPX0FETUlOSVNUUkFUSVZPID0gJ0VNX1JFQ1VSU09fQURNSU5JU1RSQVRJVk8nLFxyXG4gIFNVU1BFTlNPID0gJ1NVU1BFTlNPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTZXhvIHtcclxuICBGRU1JTklOTyA9ICdGRU1JTklOTycsXHJcbiAgTUFTQ1VMSU5PID0gJ01BU0NVTElOTydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGlwb0VuZGVyZWNvIHtcclxuICBQUklOQ0lQQUwgPSAnUFJJTkNJUEFMJyxcclxuICBDT1JSRVNQT05ERU5DSUEgPSAnQ09SUkVTUE9OREVOQ0lBJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBUaXBvUmVzcG9uc2F2ZWwge1xyXG4gIFBSSU5DSVBBTCA9ICdQUklOQ0lQQUwnLFxyXG4gIFNPQ0lPID0gJ1NPQ0lPJyxcclxuICBQUk9DVVJBRE9SID0gJyBQUk9DVVJBRE9SJyxcclxuICBSRVNQT05TQVZFTF9JTU9CSUxJQVJJTyA9ICdSRVNQT05TQVZFTF9JTU9CSUxJQVJJTydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGlwb0ltb3ZlbCB7XHJcbiAgVVJCQU5PID0gJ1VSQkFOTycsXHJcbiAgUlVSQUwgPSAnUlVSQUwnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVudW1QaXBlVHlwZSB7XHJcbiAgU0lUVUFDQU9fRElWSURBX0RFQklUTyxcclxuICBTSVRVQUNBT19QQUdBTUVOVE9fREVCSVRPLFxyXG4gIFNJVFVBQ0FPX1BBR0FNRU5UT19QQVJDRUxBLFxyXG4gIFRJUE9fUEVTU09BLFxyXG4gIFNJVFVBQ0FPX0NPTlRSSUJVSU5URSxcclxuICBTRVhPLFxyXG4gIFRJUE9fRU5ERVJFQ08sXHJcbiAgVElQT19SRVNQT05TQVZFTCxcclxuICBUSVBPX0lNT1ZFTFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBDdXN0b21IVFRQU3RhdHVzIHtcclxuICBMT0NLX1BBR0UgPSAyOTYsXHJcbiAgUkVMRUFTRV9QQUdFID0gMjk3LFxyXG4gIFJFRElSRUNUX1BBR0UgPSAyOTgsXHJcbiAgQ0hFQ0tfQUxFUlQgPSAyOTlcclxufVxyXG5cclxuIiwiaW1wb3J0IHtQYXJjZWxhfSBmcm9tICcuL3BhcmNlbGEubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSBcIi4vZGViaXRvLm1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1pc3Nhb0d1aWEge1xyXG4gIGRlYml0bzogRGViaXRvO1xyXG4gIHBhcmNlbGFzOiBBcnJheTxQYXJjZWxhPjtcclxuICBkYXRhVmVuY2ltZW50bzogRGF0ZTtcclxuICByZWZpczogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnBhcmNlbGFzID0gW107XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1pc3Nhb0d1aWFEZWJpdG9zQWdydXBhZG9zIHtcclxuICBkZWJpdG9zOiBBcnJheTxEZWJpdG8+O1xyXG5cclxuICBkYXRhVmVuY2ltZW50bzogRGF0ZTtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZGViaXRvcyA9IFtdO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1NpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7QmFzaWNSZXNwb3N0YX0gZnJvbSAnLi9iYXNpYy1yZXNwb3N0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyY2VsYSB7XHJcbiAgICBwdWJsaWMgY29kaWdvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFyY2VsYTogc3RyaW5nO1xyXG4gICAgcHVibGljIHZlbmNpbWVudG86IERhdGU7XHJcbiAgICBwdWJsaWMgdmFsb3I6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50bzogU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhO1xyXG4gICAgcHVibGljIGVzdGFWZW5jaWRhOiBib29sZWFuO1xyXG4gICAgcHVibGljIGVoVW5pY2E6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZGFtOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JBdHVhbGl6YWRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JEZXNjb250bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvZGVTZXJTZWxlY2lvbmFkbzogQmFzaWNSZXNwb3N0YTtcclxufVxyXG4iLCJpbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi9jb250cmlidWludGUubW9kZWwnO1xyXG5pbXBvcnQge0ltb3ZlbH0gZnJvbSAnLi9pbW92ZWwubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSAnLi9kZWJpdG8ubW9kZWwnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYWNhb1BhcmNlbGFtZW50b30gZnJvbSAnLi9jb25maWd1cmFjYW8tcGFyY2VsYW1lbnRvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJjZWxhbWVudG8ge1xyXG4gICAgcHVibGljIGNvZGlnbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb3ByaWV0YXJpbzogQ29udHJpYnVpbnRlO1xyXG4gICAgcHVibGljIGNwZlJlcXVlcmVudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyByZXNwb25zYXZlbDogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHJlcXVlcmVudGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyBjb250cmliUG9ydGFsOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgaW1vdmVsOiBJbW92ZWw7XHJcbiAgICBwdWJsaWMgY29udHJpYnVpbnRlOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgZGViaXRvczogQXJyYXk8RGViaXRvPiA9IFtdO1xyXG4gICAgcHVibGljIG51bWVyb1BhcmNlbGFzOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmVuY2ltZW50b1ByaW1laXJhUGFyY2VsYTogRGF0ZTtcclxuICAgIHB1YmxpYyB2YWxvclRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JUb3RhbE9yaWdpbmFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JUb3RhbEFiZXJ0bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yUHJpbWVpcmFQYXJjZWxhOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JEZW1haXNQYXJjZWxhczogbnVtYmVyO1xyXG4gICAgcHVibGljIGNhZGFzdHJvVmFsaWRvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHRlcm1vQWNlaXRvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHZhbG9yUGFyY2lhbFRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JQYXJjaWFsVG90YWxPcmlnaW5hbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yUGFyY2lhbFRvdGFsQWJlcnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJvdG9jb2xvOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY29uZmlndXJhY2FvUGFyY2VsYW1lbnRvOiBDb25maWd1cmFjYW9QYXJjZWxhbWVudG87XHJcbiAgICBwdWJsaWMgdmFsb3JEZXNjb250bzogbnVtYmVyO1xyXG4gICAgcHVibGljIGRlYml0b0dlcmFkb3I6IERlYml0bztcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEVudW1QaXBlVHlwZSxcclxuICBTZXhvLFxyXG4gIFNpdHVhY2FvQ29udHJpYnVpbnRlLFxyXG4gIFNpdHVhY2FvRGl2aWRhRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSwgVGlwb0VuZGVyZWNvLCBUaXBvSW1vdmVsLFxyXG4gIFRpcG9QZXNzb2EsIFRpcG9SZXNwb25zYXZlbFxyXG59IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0VudW0ge1xyXG4gIHB1YmxpYyBlbnVtUGlwZVR5cGUgPSBFbnVtUGlwZVR5cGU7XHJcbiAgcHVibGljIHRpcG9QZXNzb2EgPSBUaXBvUGVzc29hO1xyXG4gIHB1YmxpYyBzaXR1YWNhb0NvbnRyaWJ1aW50ZSA9IFNpdHVhY2FvQ29udHJpYnVpbnRlO1xyXG4gIHB1YmxpYyBzaXR1YWNhb0RpdmlkYURlYml0byA9IFNpdHVhY2FvRGl2aWRhRGViaXRvO1xyXG4gIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50b0RlYml0byA9IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvO1xyXG4gIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEgPSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGE7XHJcbiAgcHVibGljIHNleG8gPSBTZXhvO1xyXG4gIHB1YmxpYyB0aXBvRW5kZXJlY28gPSBUaXBvRW5kZXJlY287XHJcbiAgcHVibGljIHRpcG9SZXNwb25zYXZlbCA9IFRpcG9SZXNwb25zYXZlbDtcclxuICBwdWJsaWMgdGlwb0ltb3ZlbCA9IFRpcG9JbW92ZWw7XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQtc3RyZW5ndGgtYmFyJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBpZD1cInN0cmVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbD5Gb3LDg8KnYSBkYSBTZW5oYTo8L3NtYWxsPlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJzdHJlbmd0aEJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZVVybHM6IFsncGFzc3dvcmQtc3RyZW5ndGgtYmFyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudCB7XHJcbiAgICBjb2xvcnMgPSBbJyNGMDAnLCAnI0Y5MCcsICcjRkYwJywgJyM5RjAnLCAnIzBGMCddO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gICAgbWVhc3VyZVN0cmVuZ3RoKHA6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGZvcmNlID0gMDtcclxuICAgICAgICBjb25zdCByZWdleCA9IC9bJC0vOi0/ey1+IVwiXl9gXFxbXFxdXS9nOyAvLyBcIlxyXG4gICAgICAgIGNvbnN0IGxvd2VyTGV0dGVycyA9IC9bYS16XSsvLnRlc3QocCk7XHJcbiAgICAgICAgY29uc3QgdXBwZXJMZXR0ZXJzID0gL1tBLVpdKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCBudW1iZXJzID0gL1swLTldKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCBzeW1ib2xzID0gcmVnZXgudGVzdChwKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbbG93ZXJMZXR0ZXJzLCB1cHBlckxldHRlcnMsIG51bWJlcnMsIHN5bWJvbHNdO1xyXG4gICAgICAgIGNvbnN0IHBhc3NlZE1hdGNoZXMgPSBmbGFncy5maWx0ZXIoKGlzTWF0Y2hlZEZsYWc6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTWF0Y2hlZEZsYWcgPT09IHRydWU7XHJcbiAgICAgICAgfSkubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3JjZSArPSAyICogcC5sZW5ndGggKyAocC5sZW5ndGggPj0gMTAgPyAxIDogMCk7XHJcbiAgICAgICAgZm9yY2UgKz0gcGFzc2VkTWF0Y2hlcyAqIDEwO1xyXG5cclxuICAgICAgICAvLyBwZW5hbHR5IChzaG9ydCBwYXNzd29yZClcclxuICAgICAgICBmb3JjZSA9IHAubGVuZ3RoIDw9IDYgPyBNYXRoLm1pbihmb3JjZSwgMTApIDogZm9yY2U7XHJcblxyXG4gICAgICAgIC8vIHBlbmFsdHkgKHBvb3IgdmFyaWV0eSBvZiBjaGFyYWN0ZXJzKVxyXG4gICAgICAgIGZvcmNlID0gcGFzc2VkTWF0Y2hlcyA9PT0gMSA/IE1hdGgubWluKGZvcmNlLCAxMCkgOiBmb3JjZTtcclxuICAgICAgICBmb3JjZSA9IHBhc3NlZE1hdGNoZXMgPT09IDIgPyBNYXRoLm1pbihmb3JjZSwgMjApIDogZm9yY2U7XHJcbiAgICAgICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAzID8gTWF0aC5taW4oZm9yY2UsIDQwKSA6IGZvcmNlO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9yY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29sb3IoczogbnVtYmVyKTogYW55IHtcclxuICAgICAgICBsZXQgaWR4ID0gMDtcclxuICAgICAgICBpZiAocyA8PSAxMCkge1xyXG4gICAgICAgICAgICBpZHggPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSAyMCkge1xyXG4gICAgICAgICAgICBpZHggPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSAzMCkge1xyXG4gICAgICAgICAgICBpZHggPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSA0MCkge1xyXG4gICAgICAgICAgICBpZHggPSAzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGlkeDogaWR4ICsgMSwgY29sOiB0aGlzLmNvbG9yc1tpZHhdIH07XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBwYXNzd29yZFRvQ2hlY2socGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChwYXNzd29yZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy5nZXRDb2xvcih0aGlzLm1lYXN1cmVTdHJlbmd0aChwYXNzd29yZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3MoZWxlbWVudCwgZWxlbWVudC5jbGFzc05hbWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaXMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBjLmlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudFN0eWxlKGxpc1tpXSwgJ2JhY2tncm91bmRDb2xvcicsIGMuY29sKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUobGlzW2ldLCAnYmFja2dyb3VuZENvbG9yJywgJyNEREQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLWJhci5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1Bhc3N3b3JkU3RyZW5ndGhCYXJDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogW10sXHJcbiAgICBleHBvcnRzOiBbUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkU3RyZW5ndGhNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtSZWdpc3RlckNvbXBvbmVudH0gZnJvbSAnLi9yZWdpc3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge1JlZ2lzdGVyTW9kYWxTZXJ2aWNlfSBmcm9tICcuL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlZ2lzdGVyfSBmcm9tICcuL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NwZkNucGpNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvY3BmLWNucGovY3BmLWNucGoubW9kdWxlJztcclxuaW1wb3J0IHtOZ3hNYXNrTW9kdWxlfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCB7ZmFVc2VyUGx1c30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVXNlclBsdXMnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUnO1xyXG5cclxubGlicmFyeS5hZGQoZmFVc2VyUGx1cyk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgQ3BmQ25wak1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgTmd4TWFza01vZHVsZSxcclxuICAgICAgUGFzc3dvcmRTdHJlbmd0aE1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIFRlcm1vTGdwZE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgUmVnaXN0ZXJDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgUmVnaXN0ZXIsXHJcbiAgICAgIFJlZ2lzdGVyTW9kYWxTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3Rlck1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhVXNlcn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVXNlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SmhpTG9naW5Nb2RhbENvbXBvbmVudH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2R1bGV9IGZyb20gJy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUnO1xyXG5pbXBvcnQge05neE1hc2tNb2R1bGV9IGZyb20gJ25neC1tYXNrJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSBcIm5nLWpoaXBzdGVyXCI7XHJcblxyXG5saWJyYXJ5LmFkZChmYVVzZXIpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIFJlZ2lzdGVyTW9kdWxlLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICBOZ3hNYXNrTW9kdWxlLFxyXG4gICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICBUZXJtb0xncGRNb2R1bGUsXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlXHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIEpoaUxvZ2luTW9kYWxDb21wb25lbnRcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZHVsZSB7XHJcbn1cclxuIiwiLypcclxuICAgIExhbmd1YWdlcyBjb2RlcyBhcmUgSVNPXzYzOS0xIGNvZGVzLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0lTT182MzktMV9jb2Rlc1xyXG4gICAgVGhleSBhcmUgd3JpdHRlbiBpbiBFbmdsaXNoIHRvIGF2b2lkIGNoYXJhY3RlciBlbmNvZGluZyBpc3N1ZXMgKG5vdCBhIHBlcmZlY3Qgc29sdXRpb24pXHJcbiovXHJcbmV4cG9ydCBjb25zdCBMQU5HVUFHRVM6IHN0cmluZ1tdID0gW1xyXG4gICAgJ3B0LWJyJ1xyXG4gICAgLy8gamhpcHN0ZXItbmVlZGxlLWkxOG4tbGFuZ3VhZ2UtY29uc3RhbnQgLSBKSGlwc3RlciB3aWxsIGFkZC9yZW1vdmUgbGFuZ3VhZ2VzIGluIHRoaXMgYXJyYXlcclxuXTtcclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1RpdGxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TGFuZ0NoYW5nZUV2ZW50LCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xBTkdVQUdFU30gZnJvbSAnLi9sYW5ndWFnZS5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaUxhbmd1YWdlSGVscGVyIHtcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC12YXJpYWJsZVxyXG4gICAgICAgIHByaXZhdGUgcm9vdFJlbmRlcmVyOiBSZW5kZXJlckZhY3RvcnkyLFxyXG4gICAgICAgIHByaXZhdGUgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByb290UmVuZGVyZXIuY3JlYXRlUmVuZGVyZXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLCBudWxsKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKExBTkdVQUdFUyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxhbmd1YWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSB3aW5kb3cgdGl0bGUgdXNpbmcgcGFyYW1zIGluIHRoZSBmb2xsb3dpbmdcclxuICAgICAqIG9yZGVyOlxyXG4gICAgICogMS4gdGl0bGVLZXkgcGFyYW1ldGVyXHJcbiAgICAgKiAyLiAkc3RhdGUuJGN1cnJlbnQuZGF0YS5wYWdlVGl0bGUgKGN1cnJlbnQgc3RhdGUgcGFnZSB0aXRsZSlcclxuICAgICAqIDMuICdnbG9iYWwudGl0bGUnXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVRpdGxlKHRpdGxlS2V5Pzogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aXRsZUtleSkge1xyXG4gICAgICAgICAgICB0aXRsZUtleSA9IHRoaXMuZ2V0UGFnZVRpdGxlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aXRsZUtleSkuc3Vic2NyaWJlKHRpdGxlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKCd0cmFuc2xhdGlvbi1ub3QtZm91bmQnKSkge1xyXG4gICAgICAgICAgICAgIHRpdGxlID0gdGl0bGVLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZS5uZXh0KHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgJ2xhbmcnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlVGl0bGUocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nID0gcm91dGVTbmFwc2hvdC5kYXRhICYmIHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gPyByb3V0ZVNuYXBzaG90LmRhdGFbJ3BhZ2VUaXRsZSddIDogJ3BvcnRhbEdhdGV3YXlBcHAnO1xyXG4gICAgICAgIGlmIChyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHx8IHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdhdGV3YXlSb3V0ZSB9IGZyb20gJy4uLy4uL21vZGVsL2dhdGV3YXktcm91dGUubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR2F0ZXdheVJvdXRlc1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGZpbmRBbGwoKTogT2JzZXJ2YWJsZTxHYXRld2F5Um91dGVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdhdGV3YXlSb3V0ZVtdPihTRVJWRVJfQVBJX1VSTCArICdhcGkvZ2F0ZXdheS9yb3V0ZXMvJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEdhdGV3YXlSb3V0ZXNTZXJ2aWNlIH0gZnJvbSAnLi9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2F0ZXdheVJvdXRlIH0gZnJvbSAnLi4vLi4vbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWdhdGV3YXknLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhdGV3YXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOiBbR2F0ZXdheVJvdXRlc1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlHYXRld2F5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGdhdGV3YXlSb3V0ZXM6IEdhdGV3YXlSb3V0ZVtdO1xyXG4gICAgdXBkYXRpbmdSb3V0ZXM6IEJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBnYXRld2F5Um91dGVzU2VydmljZTogR2F0ZXdheVJvdXRlc1NlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0aW5nUm91dGVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdhdGV3YXlSb3V0ZXNTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUoZ2F0ZXdheVJvdXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZXdheVJvdXRlcyA9IGdhdGV3YXlSb3V0ZXM7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdSb3V0ZXMgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBKaGlHYXRld2F5Q29tcG9uZW50IH0gZnJvbSAnLi9nYXRld2F5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBnYXRld2F5Um91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2dhdGV3YXknLFxyXG4gICAgY29tcG9uZW50OiBKaGlHYXRld2F5Q29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0dhdGV3YXknLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlHYXRld2F5Q29tcG9uZW50fSBmcm9tICcuL2dhdGV3YXkuY29tcG9uZW50JztcclxuaW1wb3J0IHtnYXRld2F5Um91dGV9IGZyb20gJy4vZ2F0ZXdheS5yb3V0ZSdcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4vZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmdhdGV3YXlSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaUdhdGV3YXlDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpR2F0ZXdheUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2F0ZXdheU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uLy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtBdWRpdH0gZnJvbSAnLi4vLi4vbW9kZWwvYXVkaXQubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAgJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdHNTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBxdWVyeShyZXE6IGFueSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEF1ZGl0W10+PiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBIdHRwUGFyYW1zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgICAgIHBhcmFtcy5zZXQoJ2Zyb21EYXRlJywgcmVxLmZyb21EYXRlKTtcclxuICAgICAgICBwYXJhbXMuc2V0KCd0b0RhdGUnLCByZXEudG9EYXRlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBdWRpdFtdPihTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2F1ZGl0cycsIHtcclxuICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNTZXJ2aWNlfSBmcm9tICcuL2F1ZGl0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uLy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7QXVkaXR9IGZyb20gJy4uLy4uL21vZGVsL2F1ZGl0Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYXVkaXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0cy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGF1ZGl0czogQXVkaXRbXTtcclxuICAgIGZyb21EYXRlOiBzdHJpbmc7XHJcbiAgICBpdGVtc1BlclBhZ2U6IGFueTtcclxuICAgIGxpbmtzOiBhbnk7XHJcbiAgICBxdWVyeUNvdW50OiBudW1iZXI7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICByb3V0ZURhdGE6IGFueTtcclxuICAgIHByZWRpY2F0ZTogYW55O1xyXG4gICAgcHJldmlvdXNQYWdlOiBhbnk7XHJcbiAgICByZXZlcnNlOiBib29sZWFuO1xyXG4gICAgdG9EYXRlOiBzdHJpbmc7XHJcbiAgICB0b3RhbEl0ZW1zOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhdWRpdHNTZXJ2aWNlOiBBdWRpdHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJzZUxpbmtzOiBKaGlQYXJzZUxpbmtzLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wcmVkaWNhdGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50b2RheSgpO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNNb250aCgpIHtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xyXG4gICAgICAgIGxldCBmcm9tRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIGlmIChmcm9tRGF0ZS5nZXRNb250aCgpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGUuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCBmcm9tRGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGUuZ2V0RnVsbFllYXIoKSwgZnJvbURhdGUuZ2V0TW9udGgoKSAtIDEsIGZyb21EYXRlLmdldERhdGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZnJvbURhdGUsIGRhdGVGb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZGF5KCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAneXl5eS1NTS1kZCc7XHJcbiAgICAgICAgLy8gVG9kYXkgKyAxIGRheSAtIG5lZWRlZCBpZiB0aGUgY3VycmVudCBkYXkgbXVzdCBiZSBpbmNsdWRlZFxyXG4gICAgICAgIGNvbnN0IHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0b2RheS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZGF0ZUZvcm1hdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLmF1ZGl0c1NlcnZpY2VcclxuICAgICAgICAgICAgLnF1ZXJ5KHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSAtIDEsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydCgpLFxyXG4gICAgICAgICAgICAgICAgZnJvbURhdGU6IHRoaXMuZnJvbURhdGUsXHJcbiAgICAgICAgICAgICAgICB0b0RhdGU6IHRoaXMudG9EYXRlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8QXVkaXRbXT4pID0+IHRoaXMub25TdWNjZXNzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8YW55PikgPT4gdGhpcy5vbkVycm9yKHJlcy5ib2R5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW3RoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKV07XHJcbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlICE9PSAnaWQnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdpZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FkbWluL2F1ZGl0cyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TdWNjZXNzKGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy5wYXJzZUxpbmtzLnBhcnNlKGhlYWRlcnMuZ2V0KCdsaW5rJykpO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50Jyk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMuYXVkaXRzID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRXJyb3IoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5lcnJvciwgZXJyb3IubWVzc2FnZSwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7QXVkaXRzQ29tcG9uZW50fSBmcm9tICcuL2F1ZGl0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgYXVkaXRzUm91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2F1ZGl0cycsXHJcbiAgICBjb21wb25lbnQ6IEF1ZGl0c0NvbXBvbmVudCxcclxuICAgIHJlc29sdmU6IHtcclxuICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgIH0sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnQXVkaXRvcmlhcycsXHJcbiAgICAgICAgZGVmYXVsdFNvcnQ6ICdhdWRpdEV2ZW50RGF0ZSxkZXNjJyxcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJ11cclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7YXVkaXRzUm91dGV9IGZyb20gJy4vYXVkaXRzLnJvdXRlJ1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNDb21wb25lbnR9IGZyb20gJy4vYXVkaXRzLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmF1ZGl0c1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgQXVkaXRzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEF1ZGl0c0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSmhpQ29uZmlndXJhdGlvblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvY29uZmlncHJvcHMnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc09iamVjdCA9IHRoaXMuZ2V0Q29uZmlnUHJvcGVydGllc09iamVjdHMocmVzLmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllc09iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnRpZXNPYmplY3Rba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLnNvcnQoKHByb3BlcnR5QSwgcHJvcGVydHlCKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5QS5wcmVmaXggPT09IHByb3BlcnR5Qi5wcmVmaXggPyAwIDogcHJvcGVydHlBLnByZWZpeCA8IHByb3BlcnR5Qi5wcmVmaXggPyAtMSA6IDE7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmZpZ1Byb3BlcnRpZXNPYmplY3RzKHJlczogT2JqZWN0KSB7XHJcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIGZvciBTcHJpbmcgQm9vdCAyXHJcbiAgICAgICAgaWYgKHJlc1snY29udGV4dHMnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlc1snY29udGV4dHMnXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBub3QgYm9vdHN0cmFwLCBpdCB3aWxsIGJlIHRoZSBBcHBsaWNhdGlvbkNvbnRleHQgSWRcclxuICAgICAgICAgICAgICAgIC8vIEZvciBkZWZhdWx0IGFwcCwgaXQgaXMgYmFzZU5hbWVcclxuICAgICAgICAgICAgICAgIC8vIEZvciBtaWNyb3NlcnZpY2UsIGl0IGlzIGJhc2VOYW1lLTFcclxuICAgICAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoJ2Jvb3RzdHJhcCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc1snY29udGV4dHMnXVtrZXldWydiZWFucyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQsIHVzZSB0aGUgZGVmYXVsdCBBcHBsaWNhdGlvbkNvbnRleHQgSWRcclxuICAgICAgICByZXR1cm4gcmVzWydjb250ZXh0cyddWydwb3J0YWxHYXRld2F5J11bJ2JlYW5zJ107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW52KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9lbnYnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5U291cmNlcyA9IHJlcy5ib2R5Wydwcm9wZXJ0eVNvdXJjZXMnXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5T2JqZWN0IG9mIHByb3BlcnR5U291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU9iamVjdFsnbmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbFByb3BlcnRpZXMgPSBwcm9wZXJ0eU9iamVjdFsncHJvcGVydGllcyddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXlEZXRhaWwgaW4gZGV0YWlsUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXlEZXRhaWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzLnB1c2goeyBrZXk6IGtleURldGFpbCwgdmFsOiBkZXRhaWxQcm9wZXJ0aWVzW2tleURldGFpbF1bJ3ZhbHVlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IHZhbHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpoaUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1jb25maWd1cmF0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBhbGxDb25maWd1cmF0aW9uOiBhbnkgPSBudWxsO1xyXG4gICAgY29uZmlndXJhdGlvbjogYW55ID0gbnVsbDtcclxuICAgIGNvbmZpZ0tleXM6IGFueVtdO1xyXG4gICAgZmlsdGVyOiBzdHJpbmc7XHJcbiAgICBvcmRlclByb3A6IHN0cmluZztcclxuICAgIHJldmVyc2U6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogSmhpQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0tleXMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMub3JkZXJQcm9wID0gJ3ByZWZpeCc7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAga2V5cyhkaWN0KTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIGRpY3QgPT09IHVuZGVmaW5lZCA/IFtdIDogT2JqZWN0LmtleXMoZGljdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXQoKS5zdWJzY3JpYmUoY29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnS2V5cy5wdXNoKE9iamVjdC5rZXlzKGNvbmZpZy5wcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnYoKS5zdWJzY3JpYmUoY29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7SmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBjb25maWd1cmF0aW9uUm91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2poaS1jb25maWd1cmF0aW9uJyxcclxuICAgIGNvbXBvbmVudDogSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdDb25maWd1cmHDg8Knw4PCo28nLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7SmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Y29uZmlndXJhdGlvblJvdXRlfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24ucm91dGUnXHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmNvbmZpZ3VyYXRpb25Sb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaUNvbmZpZ3VyYXRpb25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbk1vZHVsZSB7fVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWV0cmljcy1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy1tb2RhbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdGhyZWFkRHVtcEZpbHRlcjogYW55O1xyXG4gICAgdGhyZWFkRHVtcDogYW55O1xyXG4gICAgdGhyZWFkRHVtcEFsbCA9IDA7XHJcbiAgICB0aHJlYWREdW1wQmxvY2tlZCA9IDA7XHJcbiAgICB0aHJlYWREdW1wUnVubmFibGUgPSAwO1xyXG4gICAgdGhyZWFkRHVtcFRpbWVkV2FpdGluZyA9IDA7XHJcbiAgICB0aHJlYWREdW1wV2FpdGluZyA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRocmVhZER1bXAuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1JVTk5BQkxFJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wUnVubmFibGUgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1dBSVRJTkcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZER1bXBXYWl0aW5nICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudGhyZWFkU3RhdGUgPT09ICdUSU1FRF9XQUlUSU5HJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wVGltZWRXYWl0aW5nICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudGhyZWFkU3RhdGUgPT09ICdCTE9DS0VEJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wQmxvY2tlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudGhyZWFkRHVtcEFsbCA9IHRoaXMudGhyZWFkRHVtcFJ1bm5hYmxlICsgdGhpcy50aHJlYWREdW1wV2FpdGluZyArIHRoaXMudGhyZWFkRHVtcFRpbWVkV2FpdGluZyArIHRoaXMudGhyZWFkRHVtcEJsb2NrZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFkZ2VDbGFzcyh0aHJlYWRTdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aHJlYWRTdGF0ZSA9PT0gJ1JVTk5BQkxFJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXN1Y2Nlc3MnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdXQUlUSU5HJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWluZm8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdUSU1FRF9XQUlUSU5HJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXdhcm5pbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdCTE9DS0VEJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXRNZXRyaWNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9tZXRyaWNzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyZWFkRHVtcCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvdGhyZWFkZHVtcCcpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuaW1wb3J0IHsgSmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vbWV0cmljcy1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBKaGlNZXRyaWNzU2VydmljZSB9IGZyb20gJy4vbWV0cmljcy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWV0cmljcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NNb25pdG9yaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1ldHJpY3M6IGFueSA9IHt9O1xyXG4gICAgY2FjaGVzU3RhdHM6IGFueSA9IHt9O1xyXG4gICAgc2VydmljZXNTdGF0czogYW55ID0ge307XHJcbiAgICB1cGRhdGluZ01ldHJpY3MgPSB0cnVlO1xyXG4gICAgSkNBQ0hFX0tFWTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgbWV0cmljc1NlcnZpY2U6IEpoaU1ldHJpY3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5KQ0FDSEVfS0VZID0gJ2pjYWNoZS5zdGF0aXN0aWNzJztcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdNZXRyaWNzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLmdldE1ldHJpY3MoKS5zdWJzY3JpYmUobWV0cmljcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWV0cmljcyA9IG1ldHJpY3M7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdNZXRyaWNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXNTdGF0cyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlc1N0YXRzID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3MudGltZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldHJpY3MudGltZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd3ZWIucmVzdCcpIHx8IGtleS5pbmNsdWRlcygnc2VydmljZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1N0YXRzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3MuZ2F1Z2VzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdqY2FjaGUuc3RhdGlzdGljcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXRyaWNzLmdhdWdlc1trZXldLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBnZXRzIG9yIHB1dHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IGtleS5zdWJzdHIoMCwgaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBuYW1lIG9mIHRoZSBkb21haW5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlc1N0YXRzW25ld0tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuSkNBQ0hFX0tFWS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaFRocmVhZER1bXBEYXRhKCkge1xyXG4gICAgICAgIHRoaXMubWV0cmljc1NlcnZpY2UudGhyZWFkRHVtcCgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQsIHsgc2l6ZTogJ2xnJyB9KTtcclxuICAgICAgICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGhyZWFkRHVtcCA9IGRhdGEudGhyZWFkcztcclxuICAgICAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck5hTihpbnB1dCkge1xyXG4gICAgICAgIGlmIChpc05hTihpbnB1dCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBtZXRyaWNzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2poaS1tZXRyaWNzJyxcclxuICAgIGNvbXBvbmVudDogSmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnTcODwql0cmljYXMnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7SmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnR9IGZyb20gJy4vbWV0cmljcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge21ldHJpY3NSb3V0ZX0gZnJvbSAnLi9tZXRyaWNzLnJvdXRlJ1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi5tZXRyaWNzUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50LFxyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50LFxyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZXRyaWNzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1kb2NzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb2NzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpRG9jc0NvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7SmhpRG9jc0NvbXBvbmVudH0gZnJvbSAnLi9kb2NzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBkb2NzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2RvY3MnLFxyXG4gICAgY29tcG9uZW50OiBKaGlEb2NzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ2dsb2JhbC5tZW51LmFkbWluLmFwaWRvY3MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlEb2NzQ29tcG9uZW50fSBmcm9tICcuL2RvY3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtkb2NzUm91dGV9IGZyb20gJy4vZG9jcy5yb3V0ZSdcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uZG9jc1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpRG9jc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlEb2NzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2NzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaUhlYWx0aFNlcnZpY2Uge1xyXG4gICAgc2VwYXJhdG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSAnLic7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tIZWFsdGgoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2hlYWx0aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybUhlYWx0aERhdGEoZGF0YSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbXTtcclxuICAgICAgICB0aGlzLmZsYXR0ZW5IZWFsdGhEYXRhKHJlc3BvbnNlLCBudWxsLCBkYXRhLmRldGFpbHMpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNlTmFtZShuYW1lKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IG5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNwbGl0WzBdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdWJTeXN0ZW1OYW1lKG5hbWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBzcGxpdC5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHNwbGl0LmpvaW4oJy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA/ICcgLSAnICsgcmVtYWluZGVyIDogJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xyXG4gICAgcHJpdmF0ZSBhZGRIZWFsdGhPYmplY3QocmVzdWx0LCBpc0xlYWYsIGhlYWx0aE9iamVjdCwgbmFtZSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgaGVhbHRoRGF0YTogYW55ID0ge1xyXG4gICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGV0YWlscyA9IHt9O1xyXG4gICAgICAgIGxldCBoYXNEZXRhaWxzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhlYWx0aE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoaGVhbHRoT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGVhbHRoT2JqZWN0W2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnc3RhdHVzJyB8fCBrZXkgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFsdGhEYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGVhbHRoT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGV0YWlscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIGRldGFpbHNcclxuICAgICAgICBpZiAoaGFzRGV0YWlscykge1xyXG4gICAgICAgICAgICBoZWFsdGhEYXRhLmRldGFpbHMgPSBkZXRhaWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT25seSBhZGQgbm9kZXMgaWYgdGhleSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cclxuICAgICAgICBpZiAoaXNMZWFmIHx8IGhhc0RldGFpbHMgfHwgaGVhbHRoRGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChoZWFsdGhEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlYWx0aERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmbGF0dGVuSGVhbHRoRGF0YShyZXN1bHQsIHBhdGgsIGRhdGEpOiBhbnkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0hlYWx0aE9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTdWJTeXN0ZW0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGVhbHRoT2JqZWN0KHJlc3VsdCwgZmFsc2UsIHZhbHVlLCB0aGlzLmdldE1vZHVsZU5hbWUocGF0aCwga2V5KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlbkhlYWx0aERhdGEocmVzdWx0LCB0aGlzLmdldE1vZHVsZU5hbWUocGF0aCwga2V5KSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGVhbHRoT2JqZWN0KHJlc3VsdCwgdHJ1ZSwgdmFsdWUsIHRoaXMuZ2V0TW9kdWxlTmFtZShwYXRoLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1vZHVsZU5hbWUocGF0aCwgbmFtZSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICBpZiAocGF0aCAmJiBuYW1lKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhdGggKyB0aGlzLnNlcGFyYXRvciArIG5hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXRoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhdGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5hbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNTdWJTeXN0ZW0oaGVhbHRoT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBoZWFsdGhPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGhlYWx0aE9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWx0aE9iamVjdFtrZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSGVhbHRoT2JqZWN0KGhlYWx0aE9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaGVhbHRoT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChoZWFsdGhPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXR1cycpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBKaGlIZWFsdGhTZXJ2aWNlIH0gZnJvbSAnLi9oZWFsdGguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWhlYWx0aC1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGVhbHRoLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpSGVhbHRoTW9kYWxDb21wb25lbnQge1xyXG4gICAgY3VycmVudEhlYWx0aDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGhlYWx0aFNlcnZpY2U6IEpoaUhlYWx0aFNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWxcclxuICAgICkge31cclxuXHJcbiAgICBiYXNlTmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhbHRoU2VydmljZS5nZXRCYXNlTmFtZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJTeXN0ZW1OYW1lKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldFN1YlN5c3RlbU5hbWUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZGFibGVWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEhlYWx0aC5uYW1lID09PSAnZGlza1NwYWNlJykge1xyXG4gICAgICAgICAgICAvLyBTaG91bGQgZGlzcGxheSBzdG9yYWdlIHNwYWNlIGluIGFuIGh1bWFuIHJlYWRhYmxlIHVuaXRcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdmFsdWUgLyAxMDczNzQxODI0O1xyXG4gICAgICAgICAgICBpZiAodmFsID4gMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWwudG9GaXhlZCgyKSArICcgR0InO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSAvIDEwNDg1NzYpLnRvRml4ZWQoMikgKyAnIE1CJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5pbXBvcnQgeyBKaGlIZWFsdGhTZXJ2aWNlIH0gZnJvbSAnLi9oZWFsdGguc2VydmljZSc7XHJcbmltcG9ydCB7IEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9oZWFsdGgtbW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktaGVhbHRoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oZWFsdGguY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBoZWFsdGhEYXRhOiBhbnk7XHJcbiAgICB1cGRhdGluZ0hlYWx0aDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgaGVhbHRoU2VydmljZTogSmhpSGVhbHRoU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldEJhc2VOYW1lKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhZGdlQ2xhc3Moc3RhdHVzU3RhdGUpIHtcclxuICAgICAgICBpZiAoc3RhdHVzU3RhdGUgPT09ICdVUCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdiYWRnZS1zdWNjZXNzJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0hlYWx0aCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaGVhbHRoU2VydmljZS5jaGVja0hlYWx0aCgpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgaGVhbHRoID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhbHRoRGF0YSA9IHRoaXMuaGVhbHRoU2VydmljZS50cmFuc2Zvcm1IZWFsdGhEYXRhKGhlYWx0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhbHRoRGF0YSA9IHRoaXMuaGVhbHRoU2VydmljZS50cmFuc2Zvcm1IZWFsdGhEYXRhKGVycm9yLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dIZWFsdGgoaGVhbHRoOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpSGVhbHRoTW9kYWxDb21wb25lbnQpO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRIZWFsdGggPSBoZWFsdGg7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViU3lzdGVtTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldFN1YlN5c3RlbU5hbWUobmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQgfSBmcm9tICcuL2hlYWx0aC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgaGVhbHRoUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2poaS1oZWFsdGgnLFxyXG4gICAgY29tcG9uZW50OiBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdFc3RhZG8gZG8gU2lzdGVtYScsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59XTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0poaUhlYWx0aENoZWNrQ29tcG9uZW50fSBmcm9tICcuL2hlYWx0aC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0poaUhlYWx0aE1vZGFsQ29tcG9uZW50fSBmcm9tICcuL2hlYWx0aC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge2hlYWx0aFJvdXRlfSBmcm9tICcuL2hlYWx0aC5yb3V0ZSdcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmhlYWx0aFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQsXHJcbiAgICAgIEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEpoaUhlYWx0aENoZWNrQ29tcG9uZW50LFxyXG4gICAgICBKaGlIZWFsdGhNb2RhbENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW0poaUhlYWx0aE1vZGFsQ29tcG9uZW50XSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhbHRoTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TG9nfSBmcm9tICcuLi8uLi9tb2RlbC9sb2cubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvZ3NTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBjaGFuZ2VMZXZlbChsb2c6IExvZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2xvZ3MnLCBsb2csIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kQWxsKCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPExvZ1tdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PExvZ1tdPihTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2xvZ3MnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0xvZ3NTZXJ2aWNlfSBmcm9tICcuL2xvZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7TG9nfSBmcm9tICcuLi8uLi9tb2RlbC9sb2cubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1sb2dzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2dzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBsb2dnZXJzOiBMb2dbXTtcclxuICAgIGZpbHRlcjogc3RyaW5nO1xyXG4gICAgb3JkZXJQcm9wOiBzdHJpbmc7XHJcbiAgICByZXZlcnNlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nc1NlcnZpY2U6IExvZ3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSAnJztcclxuICAgICAgICB0aGlzLm9yZGVyUHJvcCA9ICduYW1lJztcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4gKHRoaXMubG9nZ2VycyA9IHJlc3BvbnNlLmJvZHkpKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VMZXZlbChuYW1lOiBzdHJpbmcsIGxldmVsOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBsb2cgPSBuZXcgTG9nKG5hbWUsIGxldmVsKTtcclxuICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmNoYW5nZUxldmVsKGxvZykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dzU2VydmljZS5maW5kQWxsKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+ICh0aGlzLmxvZ2dlcnMgPSByZXNwb25zZS5ib2R5KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7TG9nc0NvbXBvbmVudH0gZnJvbSAnLi9sb2dzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBsb2dzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2xvZ3MnLFxyXG4gICAgY29tcG9uZW50OiBMb2dzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0xvZ3MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7bG9nc1JvdXRlfSBmcm9tICcuL2xvZ3Mucm91dGUnXHJcbmltcG9ydCB7TG9nc0NvbXBvbmVudH0gZnJvbSAnLi9sb2dzLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmxvZ3NSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIExvZ3NDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTG9nc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nc01vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5pbXBvcnQge0h0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7Q3VzdG9tSFRUUFN0YXR1c30gZnJvbSAnLi4vbW9kZWwvZW51bXMubW9kZWwnO1xyXG5pbXBvcnQge0xvY2tQYWdlfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tIFwicnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3JcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7RGlhbG9nVHlwZSwgTW9kYWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBwcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyKSB7fVxyXG4gIFxyXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIFxyXG4gICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL3B1YmxpY1wiKT49MCkge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgc2V0SGVhZGVyczoge1xyXG4gICAgICAgICAgdG9rZW46IFV0aWxGdW5jdGlvbnMuZ2VyYXJUb2tlbkFuZ3VsYXIoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJsIHx8ICgvXmh0dHAvLnRlc3QocmVxdWVzdC51cmwpICYmICEoU0VSVkVSX0FQSV9VUkwgJiYgcmVxdWVzdC51cmwuc3RhcnRzV2l0aChTRVJWRVJfQVBJX1VSTCkpKSkge1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5hbHlzZUh0dHBTdGF0dXMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL2FjY291bnRcIik+PTApIHtcclxuICAgICAgICAgICAgTG9ja1BhZ2UucmVtb3ZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmxvY2FsU3RvcmFnZS5yZXRyaWV2ZSgnYXV0aGVudGljYXRpb25Ub2tlbicpIHx8IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgIFxyXG4gICAgaWYgKCEhdG9rZW4pIHtcclxuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xyXG4gICAgICAgIHNldEhlYWRlcnM6IHtcclxuICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5hbmFseXNlSHR0cFN0YXR1cyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnVybC5pbmRleE9mKFwiL2FwaS9hY2NvdW50XCIpPj0wKSB7XHJcbiAgICAgICAgICBMb2NrUGFnZS5yZW1vdmVGcm9tU3RvcmFnZSh0aGlzLnNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgYW5hbHlzZUh0dHBTdGF0dXMoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KSB7XG4gICAgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5MT0NLX1BBR0UpIHtcclxuICAgICAgY29uc3QgcGFnZSA9IGV2ZW50LmhlYWRlcnMuZ2V0KCdyZWRpcmVjdFBhZ2UnKTtcclxuICAgICAgY29uc3QgbW9kdWxlID0gZXZlbnQuaGVhZGVycy5nZXQoJ21vZHVsZScpO1xyXG4gICAgICBsZXQgbG9ja2VkUGFnZTogTG9ja1BhZ2UgPSBMb2NrUGFnZS5yZXRyaWV2ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChsb2NrZWRQYWdlKSkge1xyXG4gICAgICAgIGxvY2tlZFBhZ2UgPSBuZXcgTG9ja1BhZ2UobW9kdWxlLCBwYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBMb2NrUGFnZS5zYXZlVG9TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UsIGxvY2tlZFBhZ2UpO1xyXG4gICAgICBjb25zdCByZWRpcmVjdFBhZ2UgPSBsb2NrZWRQYWdlLmdldFJlZGlyZWN0UGFnZSh3aW5kb3cubG9jYXRpb24sIHRoaXMucHJvdmlkZXIubW9kdWxvKTtcclxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFBhZ2U7XHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmIChldmVudC5zdGF0dXMgPT09IEN1c3RvbUhUVFBTdGF0dXMuUkVMRUFTRV9QQUdFKSB7XHJcbiAgICAgIExvY2tQYWdlLnJlbW92ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5zdGF0dXMgPT09IEN1c3RvbUhUVFBTdGF0dXMuUkVESVJFQ1RfUEFHRSkge1xyXG4gICAgICBjb25zdCBwYWdlID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvJyArIGV2ZW50LmhlYWRlcnMuZ2V0KCdyZWRpcmVjdFBhZ2UnKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYWdlO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5zdGF0dXMgPT09IEN1c3RvbUhUVFBTdGF0dXMuQ0hFQ0tfQUxFUlQpIHtcbiAgICAgIGNvbnN0IGFsZXJ0ID0gZXZlbnQuaGVhZGVycy5nZXQoJ2FsZXJ0TWVzc2FnZScpO1xuICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbERpYWxvZ0NvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSkuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdCh1bmRlZmluZWQsICdBbGVydGEnLCB0aGlzLmZvcm1hdEFsZXJ0TWVzc2FnZShhbGVydCksICcnLCBEaWFsb2dUeXBlLklORk8pO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdEFsZXJ0TWVzc2FnZShhbGVydDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWFsZXJ0KSB7XG4gICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxuICAgIHJldHVybiBhbGVydC5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XG4gIH1cbn1cbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtMb2dpblNlcnZpY2V9IGZyb20gJy4uL2xvZ2luL2xvZ2luLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aEV4cGlyZWRJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlKSB7fVxyXG5cclxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICAgICAgdGFwKFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSmhpRXZlbnRNYW5hZ2VyIH0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBFcnJvckhhbmRsZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyKSB7fVxyXG5cclxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICAgICAgdGFwKFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXJyLnN0YXR1cyA9PT0gNDAxICYmIChlcnIubWVzc2FnZSA9PT0gJycgfHwgKGVyci51cmwgJiYgZXJyLnVybC5pbmNsdWRlcygnL2FwaS9hY2NvdW50JykpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7IG5hbWU6ICdwb3J0YWxHYXRld2F5QXBwLmh0dHBFcnJvcicsIGNvbnRlbnQ6IGVyciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGV2ZW50LmhlYWRlcnMua2V5cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxlcnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxlcnRQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnYXBwLWFsZXJ0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCA9IGV2ZW50LmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnYXBwLXBhcmFtcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQYXJhbXMgPSBldmVudC5oZWFkZXJzLmdldChlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxlcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhhbGVydCwgeyBwYXJhbTogYWxlcnRQYXJhbXMgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7fVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtjcmVhdGVSZXF1ZXN0T3B0aW9ufSBmcm9tICcuLi91dGlsL3JlcXVlc3QtdXRpbCc7XHJcbmltcG9ydCB7SU1lbnV9IGZyb20gJy4uL21vZGVsL21lbnUubW9kZWwnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbnR5cGUgRW50aXR5UmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlPElNZW51PjtcclxudHlwZSBFbnRpdHlBcnJheVJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZTxJTWVudVtdPjtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSB7XHJcbiAgICBwdWJsaWMgbW9kdWxvO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsUHVibGljO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL21lbnVzJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG9wdGlvbnNQcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tb2R1bG8gPSBvcHRpb25zUHJvdmlkZXIubWVudU1vZHVsbztcclxuICAgICAgdGhpcy5yZXNvdXJjZVVybFB1YmxpYyA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvbWVudXMvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShtZW51OiBJTWVudSk6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElNZW51Pih0aGlzLnJlc291cmNlVXJsLCBtZW51LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKG1lbnU6IElNZW51KTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJTWVudT4odGhpcy5yZXNvdXJjZVVybCwgbWVudSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SU1lbnU+KGAke3RoaXMucmVzb3VyY2VVcmx9L2ZpbmQvJHtpZH1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnkocmVxPzogYW55KTogT2JzZXJ2YWJsZTxFbnRpdHlBcnJheVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVSZXF1ZXN0T3B0aW9uKHJlcSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SU1lbnVbXT4odGhpcy5yZXNvdXJjZVVybCArICcvJyArIHRoaXMubW9kdWxvLCB7IHBhcmFtczogb3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxNZW51cyhsaW1pdGVFeGliaWNhbyk6IE9ic2VydmFibGU8RW50aXR5QXJyYXlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudVtdPih0aGlzLnJlc291cmNlVXJsUHVibGljLmNvbmNhdCgnLycsIGxpbWl0ZUV4aWJpY2FvKSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbE1lbnVzUGFpcygpOiBPYnNlcnZhYmxlPEVudGl0eUFycmF5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SU1lbnVbXT4oU0VSVkVSX0FQSV9VUkwgKyAnYXBpL21lbnVzLXBhaXMvJyArIHRoaXMubW9kdWxvLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLnJlc291cmNlVXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0lFbXByZXNhfSBmcm9tICcuLi9tb2RlbC9lbXByZXNhLm1vZGVsJztcclxuaW1wb3J0IHtjcmVhdGVSZXF1ZXN0T3B0aW9ufSBmcm9tICcuLi91dGlsL3JlcXVlc3QtdXRpbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG50eXBlIEVudGl0eVJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZTxJRW1wcmVzYT47XHJcbnR5cGUgRW50aXR5QXJyYXlSZXNwb25zZVR5cGUgPSBIdHRwUmVzcG9uc2U8SUVtcHJlc2FbXT47XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2VtcHJlc2FzJztcclxuICAgIHB1YmxpYyByZXNvdXJjZVVybFB1YmxpYyA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvZW1wcmVzYSc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGNyZWF0ZShlbXByZXNhOiBJRW1wcmVzYSk6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElFbXByZXNhPih0aGlzLnJlc291cmNlVXJsLCBlbXByZXNhLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKGVtcHJlc2E6IElFbXByZXNhKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJRW1wcmVzYT4odGhpcy5yZXNvdXJjZVVybCwgZW1wcmVzYSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUVtcHJlc2E+KGAke3RoaXMucmVzb3VyY2VVcmx9LyR7aWR9YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5KHJlcT86IGFueSk6IE9ic2VydmFibGU8RW50aXR5QXJyYXlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElFbXByZXNhW10+KHRoaXMucmVzb3VyY2VVcmwsIHsgcGFyYW1zOiBvcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZShpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtpZH1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW1wcmVzYSgpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJRW1wcmVzYT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJRW1wcmVzYT4odGhpcy5yZXNvdXJjZVVybFB1YmxpYywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi4vbW9kZWwvYWNjb3VudC5tb2RlbCc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4uL21lbnUvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbXByZXNhU2VydmljZX0gZnJvbSAnLi4vZW1wcmVzYS9lbXByZXNhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IFFVQU5USURBREVfTUFYX1NVQl9NRU5VUyA9IDM7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWhvbWUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hvbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2hvbWUuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb21lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGFjY291bnQ6IEFjY291bnQ7XHJcbiAgICBtZW51czogSU1lbnVbXTtcclxuICAgIGVtcHJlc2E6IElFbXByZXNhO1xyXG4gICAgbW9zdHJhckltYWdlbUZ1bmRvOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIG1lbnNhZ2VtQm9hc1ZpbmRhczogc3RyaW5nID0gJ0JlbSB2aW5kbywgUG9ydGFsIGRlIFNlcnZpw4PCp29zISc7XHJcbiAgICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2dpbk1vZGFsU2VydmljZTogTG9naW5Nb2RhbFNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zWydhZG1pbi1sb2dvbiddICE9PSB1bmRlZmluZWQgJiYgIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2luKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnNvbGljaXRhck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQXV0aGVudGljYXRpb25TdWNjZXNzKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhcnJlZ2FyTWVudXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbXByZXNhU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0RW1wcmVzYSgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihlbXByZXNhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1wcmVzYSA9IGVtcHJlc2EuYm9keTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIk1PU1RSQVJfSU1BR0VNX0ZVTkRPXCIpXHJcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZSkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3N0cmFySW1hZ2VtRnVuZG8gPSB2YWx1ZS52YWxvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoXCJNRU5TQUdFTV9CT0FTX1ZJTkRBU1wiKVxyXG4gICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodmFsdWUpID09PSB0cnVlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUudmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1Cb2FzVmluZGFzID0gdmFsdWUudmFsb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbigpIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5sb2dpbk1vZGFsU2VydmljZS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJBdXRoZW50aWNhdGlvblN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdhdXRoZW50aWNhdGlvblN1Y2Nlc3MnLCBtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50ID0gYWNjb3VudDtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjYXJyZWdhck1lbnVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvbGljaXRhck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlY2FycmVnYXJNZW51cygpIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZVxyXG4gICAgICAgIC5nZXRBbGxNZW51cyhRVUFOVElEQURFX01BWF9TVUJfTUVOVVMpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgLnRoZW4obWVudXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZW51cyA9IG1lbnVzLmJvZHk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJVcmwobWVudSkge1xyXG4gICAgICAgIHJldHVybiBtb250YXJVcmwobWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNRdWFudGlkYWRlTWF4U3ViTWVudXMobWVudSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHN1Yk1lbnVzID0gbWVudS5zdWJNZW51cy5maWx0ZXIoc3ViID0+IHN1Yi5hdGl2byk7XHJcbiAgICAgICAgcmV0dXJuIHN1Yk1lbnVzLmxlbmd0aCA+IFFVQU5USURBREVfTUFYX1NVQl9NRU5VUztcclxuICAgIH1cclxuXHJcbiAgICBpZGVudGlmeShpbmRleCwgaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm5vbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb2xpY2l0YXJOb3RpZmljYWNvZXNTZVRpdmVyTm92YXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7bmFtZTogJ2FicmlyTm90aWZpY2Fjb2VzU2VUaXZlck5vdmFzJ30pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9udGFyVXJsID0gKG1lbnU6IElNZW51KTogc3RyaW5nID0+IHtcclxuICAgIGlmIChtZW51LnNlcnZpY28gJiYgbWVudS5zZXJ2aWNvLmluY2x1ZGVzKCdodHRwJykpIHtcclxuICAgICAgICByZXR1cm4gbWVudS5zZXJ2aWNvO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VydmljbyA9IG1lbnUuc2VydmljbyA/IG1lbnUuc2VydmljbyA6ICcnO1xyXG4gICAgY29uc3Qgcm90YSA9IG1lbnUucm90YSA/IG1lbnUucm90YSArICcvIy8nIDogJyMvJztcclxuICAgIHJldHVybiByb3RhICsgc2VydmljbztcclxufTtcclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSG9tZUNvbXBvbmVudCB9IGZyb20gJy4vaG9tZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhPTUVfUk9VVEU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJycsXHJcbiAgICBjb21wb25lbnQ6IEhvbWVDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0JlbSB2aW5kbywgUG9ydGFsIGRlIFNlcnZpw4PCp29zISdcclxuICAgIH1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtIb21lQ29tcG9uZW50fSBmcm9tICcuL2hvbWUuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7SE9NRV9ST1VURX0gZnJvbSAnLi9ob21lLnJvdXRlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChbLi4uSE9NRV9ST1VURV0pXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEhvbWVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEhvbWVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHtHYXRld2F5Um91dGV9IGZyb20gJy4uL21vZGVsL2dhdGV3YXktcm91dGUubW9kZWwnO1xyXG5pbXBvcnQge0dhdGV3YXlSb3V0ZXNTZXJ2aWNlfSBmcm9tICcuLi9hZG1pbi9nYXRld2F5L2dhdGV3YXktcm91dGVzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZW51LXVwZGF0ZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS11cGRhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51VXBkYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1lbnU6IElNZW51O1xyXG4gICAgaXNTYXZpbmc6IGJvb2xlYW47XHJcbiAgICBwYWlzOiBJTWVudVtdO1xyXG4gICAgcm91dGVzOiBHYXRld2F5Um91dGVbXTtcclxuXHJcbiAgICBwcml2YXRlIHBhaXNEaXNwb25pdmVpcyhwYWlzOiBJTWVudVtdKTogSU1lbnVbXSB7XHJcbiAgICAgICAgaWYgKCFwYWlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhaXMuZmlsdGVyKHAgPT4gcC5pZCAhPT0gdGhpcy5tZW51LmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIGdhdGV3YXlSb3V0ZXNTZXJ2aWNlOiBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRBbGxNZW51c1BhaXMoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4obWVudXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWlzID0gdGhpcy5wYWlzRGlzcG9uaXZlaXMobWVudXMuYm9keSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IG1lbnUgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUgPSBtZW51O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdhdGV3YXlSb3V0ZXNTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUoZ2F0ZXdheVJvdXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVzID0gZ2F0ZXdheVJvdXRlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm1lbnUuaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvU2F2ZVJlc3BvbnNlKHRoaXMubWVudVNlcnZpY2UudXBkYXRlKHRoaXMubWVudSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudS5hdGl2byA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5tZW51U2VydmljZS5jcmVhdGUodGhpcy5tZW51KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UocmVzdWx0OiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJTWVudT4+KSB7XHJcbiAgICAgICAgcmVzdWx0LnN1YnNjcmliZSgocmVzOiBIdHRwUmVzcG9uc2U8SU1lbnU+KSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MoKSwgKHJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMub25TYXZlRXJyb3IoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNhdmVTdWNjZXNzKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXJ9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1lbnUtZGVsZXRlLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCB7XHJcbiAgICBtZW51OiBJTWVudTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge31cclxuXHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5icm9hZGNhc3Qoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ21lbnVMaXN0TW9kaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEZWxldGVkIGFuIG1lbnUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3ModHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudS1kZWxldGUtcG9wdXAnLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51RGVsZXRlUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIG5nYk1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgbWVudSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCBhcyBDb21wb25lbnQsIHsgc2l6ZTogJ2xnJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5tZW51ID0gbWVudTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudS1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUtZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudURldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBtZW51OiBJTWVudTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IG1lbnUgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUgPSBtZW51O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyLCBKaGlQYXJzZUxpbmtzfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lURU1TX1BFUl9QQUdFfSBmcm9tICcuLi91dGlsL3BhZ2luYXRpb24uY29uc3RhbnRzJztcclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1lbnUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgY3VycmVudEFjY291bnQ6IGFueTtcclxuICAgIG1lbnVzOiBJTWVudVtdO1xyXG4gICAgZXJyb3I6IGFueTtcclxuICAgIHN1Y2Nlc3M6IGFueTtcclxuICAgIGV2ZW50U3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcm91dGVEYXRhOiBhbnk7XHJcbiAgICBsaW5rczogYW55O1xyXG4gICAgdG90YWxJdGVtczogYW55O1xyXG4gICAgcXVlcnlDb3VudDogYW55O1xyXG4gICAgaXRlbXNQZXJQYWdlOiBhbnk7XHJcbiAgICBwYWdlOiBhbnk7XHJcbiAgICBwcmVkaWNhdGU6IGFueTtcclxuICAgIHByZXZpb3VzUGFnZTogYW55O1xyXG4gICAgcmV2ZXJzZTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyc2VMaW5rczogSmhpUGFyc2VMaW5rcyxcclxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IElURU1TX1BFUl9QQUdFO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gZGF0YS5wYWdpbmdQYXJhbXMucGFnZTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnJldmVyc2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5hc2NlbmRpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJlZGljYXRlID0gZGF0YS5wYWdpbmdQYXJhbXMucHJlZGljYXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlID09PSAnaWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWRpY2F0ZSA9ICdzZXF1ZW5jaWEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY2NvdW50ID0gYWNjb3VudDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlSW5NZW51cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZVxyXG4gICAgICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlIC0gMSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0KClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxJTWVudVtdPikgPT4gdGhpcy5wYWdpbmF0ZU1lbnVzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vbkVycm9yKHJlcy5tZXNzYWdlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShtZW51LCBpc0FjdGl2YXRlZCkge1xyXG4gICAgICAgIG1lbnUuYXRpdm8gPSBpc0FjdGl2YXRlZDtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS51cGRhdGUobWVudSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExvZ2luUGVsb0FwcChtZW51LCBpc0xvZ2luUGVsb0FwcCkge1xyXG4gICAgICAgIG1lbnUubG9naW5QZWxvQXBwID0gaXNMb2dpblBlbG9BcHA7XHJcblxyXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2UudXBkYXRlKG1lbnUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgc2V0VmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yKG1lbnUsIGlzVmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yKSB7XHJcbiAgICAgIG1lbnUudmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yID0gaXNWaXNpdmVsU29tZW50ZVBhcmFHZXN0b3I7XHJcblxyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLnVwZGF0ZShtZW51KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTZW1wcmVWaXNpdmVsKG1lbnUsIGlzU2VtcHJlVmlzaXZlbCkge1xyXG4gICAgICBtZW51LnNlbXByZVZpc2l2ZWwgPSBpc1NlbXByZVZpc2l2ZWw7XHJcblxyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLnVwZGF0ZShtZW51KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21lbnUnXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xyXG4gICAgICAgICAgICAnL21lbnUnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3kodGhpcy5ldmVudFN1YnNjcmliZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrSWQoaW5kZXg6IG51bWJlciwgaXRlbTogSU1lbnUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pZDtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNoYW5nZUluTWVudXMoKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudFN1YnNjcmliZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ21lbnVMaXN0TW9kaWZpY2F0aW9uJywgKCkgPT4gdGhpcy5sb2FkQWxsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdzZXF1ZW5jaWEsYXNjJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFnaW5hdGVNZW51cyhkYXRhOiBJTWVudVtdLCBoZWFkZXJzOiBIdHRwSGVhZGVycykge1xyXG4gICAgICAgIHRoaXMubGlua3MgPSB0aGlzLnBhcnNlTGlua3MucGFyc2UoaGVhZGVycy5nZXQoJ2xpbmsnKSk7XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcGFyc2VJbnQoaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKSwgMTApO1xyXG4gICAgICAgIHRoaXMucXVlcnlDb3VudCA9IHRoaXMudG90YWxJdGVtcztcclxuICAgICAgICB0aGlzLm1lbnVzID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRXJyb3IoZXJyb3JNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIG51bGwsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNvcnRJY29uKHByb3BlcnR5OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJlZGljYXRlIHx8IHRoaXMucmV2ZXJzZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnc29ydCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgPT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldmVyc2UgPyAnc29ydC11cCcgOiAnc29ydC1kb3duJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdzb3J0JztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3QsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZW51Q29tcG9uZW50fSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51RGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9tZW51LXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtJTWVudSwgTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNZW51UmVzb2x2ZSBpbXBsZW1lbnRzIFJlc29sdmU8SU1lbnU+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogTWVudVNlcnZpY2UpIHt9XHJcblxyXG4gICAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPE1lbnU+IHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtc1snaWQnXSA/IHJvdXRlLnBhcmFtc1snaWQnXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZmluZChpZCkucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxNZW51PikgPT4gcmVzcG9uc2Uub2spLFxyXG4gICAgICAgICAgICAgICAgbWFwKChtZW51OiBIdHRwUmVzcG9uc2U8TWVudT4pID0+IG1lbnUuYm9keSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKG5ldyBNZW51KCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbWVudVJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogJ2lkLGFzYycsXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdtZW51LzppZC92aWV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IE1lbnVEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBtZW51OiBNZW51UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdNZW51J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnbWVudS9uZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdtZW51LzppZC9lZGl0JyxcclxuICAgICAgICBjb21wb25lbnQ6IE1lbnVVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBtZW51OiBNZW51UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdNZW51J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IG1lbnVQb3B1cFJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUvOmlkL2RlbGV0ZScsXHJcbiAgICAgICAgY29tcG9uZW50OiBNZW51RGVsZXRlUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBtZW51OiBNZW51UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdNZW51J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXSxcclxuICAgICAgICBvdXRsZXQ6ICdwb3B1cCdcclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtNZW51Q29tcG9uZW50fSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51RGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9tZW51LXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZWxldGVEaWFsb2dDb21wb25lbnQsIE1lbnVEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHttZW51UG9wdXBSb3V0ZSwgbWVudVJvdXRlfSBmcm9tICcuL21lbnUucm91dGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtNRU5VX01PRFVMT19PUFRJT05TLCBPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4uL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi5tZW51Um91dGUsIC4uLm1lbnVQb3B1cFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICAgIE1lbnVEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgIE1lbnVVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgIE1lbnVEZWxldGVEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIE1lbnVEZWxldGVQb3B1cENvbXBvbmVudF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgTWVudUNvbXBvbmVudCxcclxuICAgICAgTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZVBvcHVwQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIE9wdGlvbnNQcm92aWRlcixcclxuICAgICAgR2F0ZXdheVJvdXRlc1NlcnZpY2VcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KG1vZHVsbz86c3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogTWVudU1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge3Byb3ZpZGU6IE1FTlVfTU9EVUxPX09QVElPTlMsIHVzZVZhbHVlOiBtb2R1bG99XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBKaGlEYXRhVXRpbHMgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQgeyBFbXByZXNhU2VydmljZSB9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtdXBkYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FVcGRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGRhdGFVdGlsczogSmhpRGF0YVV0aWxzLFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGVtcHJlc2EgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHJlc2EgPSBlbXByZXNhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ5dGVTaXplKGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLmJ5dGVTaXplKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMub3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWxlRGF0YShldmVudCwgZW50aXR5LCBmaWVsZCwgaXNJbWFnZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVV0aWxzLnNldEZpbGVEYXRhKGV2ZW50LCBlbnRpdHksIGZpZWxkLCBpc0ltYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcklucHV0SW1hZ2UoZmllbGQ6IHN0cmluZywgZmllbGRDb250ZW50VHlwZTogc3RyaW5nLCBpZElucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRhdGFVdGlscy5jbGVhcklucHV0SW1hZ2UodGhpcy5lbXByZXNhLCB0aGlzLmVsZW1lbnRSZWYsIGZpZWxkLCBmaWVsZENvbnRlbnRUeXBlLCBpZElucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmVtcHJlc2EuaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvU2F2ZVJlc3BvbnNlKHRoaXMuZW1wcmVzYVNlcnZpY2UudXBkYXRlKHRoaXMuZW1wcmVzYSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5lbXByZXNhU2VydmljZS5jcmVhdGUodGhpcy5lbXByZXNhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UocmVzdWx0OiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJRW1wcmVzYT4+KSB7XHJcbiAgICAgICAgcmVzdWx0LnN1YnNjcmliZSgocmVzOiBIdHRwUmVzcG9uc2U8SUVtcHJlc2E+KSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MoKSwgKHJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMub25TYXZlRXJyb3IoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNhdmVTdWNjZXNzKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgSmhpRXZlbnRNYW5hZ2VyIH0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHsgRW1wcmVzYVNlcnZpY2UgfSBmcm9tICcuL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1lbXByZXNhLWRlbGV0ZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQge1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHt9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjYW5jZWwnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmVtcHJlc2FTZXJ2aWNlLmRlbGV0ZShpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdlbXByZXNhTGlzdE1vZGlmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnRGVsZXRlZCBhbiBlbXByZXNhJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtZGVsZXRlLXBvcHVwJyxcclxuICAgIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYURlbGV0ZVBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGVtcHJlc2EgfSkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQgYXMgQ29tcG9uZW50LCB7IHNpemU6ICdsZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZW1wcmVzYSA9IGVtcHJlc2E7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmLnJlc3VsdC50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgcG9wdXA6IG51bGwgfSB9XSwgeyByZXBsYWNlVXJsOiB0cnVlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgcG9wdXA6IG51bGwgfSB9XSwgeyByZXBsYWNlVXJsOiB0cnVlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlEYXRhVXRpbHN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbXByZXNhLWRldGFpbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhVXRpbHM6IEpoaURhdGFVdGlscywgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyBlbXByZXNhIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbXByZXNhID0gZW1wcmVzYTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBieXRlU2l6ZShmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5ieXRlU2l6ZShmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLm9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCk7XHJcbiAgICB9XHJcbiAgICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0poaURhdGFVdGlscywgSmhpRXZlbnRNYW5hZ2VyLCBKaGlQYXJzZUxpbmtzfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQge0VtcHJlc2FTZXJ2aWNlfSBmcm9tICcuL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7SVRFTVNfUEVSX1BBR0V9IGZyb20gJy4uL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1lbXByZXNhJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbXByZXNhLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGN1cnJlbnRBY2NvdW50OiBhbnk7XHJcbiAgICBlbXByZXNhczogSUVtcHJlc2FbXTtcclxuICAgIGVycm9yOiBhbnk7XHJcbiAgICBzdWNjZXNzOiBhbnk7XHJcbiAgICBldmVudFN1YnNjcmliZXI6IFN1YnNjcmlwdGlvbjtcclxuICAgIHJvdXRlRGF0YTogYW55O1xyXG4gICAgbGlua3M6IGFueTtcclxuICAgIHRvdGFsSXRlbXM6IGFueTtcclxuICAgIHF1ZXJ5Q291bnQ6IGFueTtcclxuICAgIGl0ZW1zUGVyUGFnZTogYW55O1xyXG4gICAgcGFnZTogYW55O1xyXG4gICAgcHJlZGljYXRlOiBhbnk7XHJcbiAgICBwcmV2aW91c1BhZ2U6IGFueTtcclxuICAgIHJldmVyc2U6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGVtcHJlc2FTZXJ2aWNlOiBFbXByZXNhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBhcnNlTGlua3M6IEpoaVBhcnNlTGlua3MsXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVV0aWxzOiBKaGlEYXRhVXRpbHMsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IElURU1TX1BFUl9QQUdFO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gZGF0YS5wYWdpbmdQYXJhbXMucGFnZTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnJldmVyc2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5hc2NlbmRpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJlZGljYXRlID0gZGF0YS5wYWdpbmdQYXJhbXMucHJlZGljYXRlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5lbXByZXNhU2VydmljZVxyXG4gICAgICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlIC0gMSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0KClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxJRW1wcmVzYVtdPikgPT4gdGhpcy5wYWdpbmF0ZUVtcHJlc2FzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vbkVycm9yKHJlcy5tZXNzYWdlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2VtcHJlc2EnXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xyXG4gICAgICAgICAgICAnL2VtcHJlc2EnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KCkudGhlbihhY2NvdW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNoYW5nZUluRW1wcmVzYXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KHRoaXMuZXZlbnRTdWJzY3JpYmVyKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0lkKGluZGV4OiBudW1iZXIsIGl0ZW06IElFbXByZXNhKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYnl0ZVNpemUoZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMuYnl0ZVNpemUoZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5vcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ2hhbmdlSW5FbXByZXNhcygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaWJlciA9IHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnZW1wcmVzYUxpc3RNb2RpZmljYXRpb24nLCByZXNwb25zZSA9PiB0aGlzLmxvYWRBbGwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbdGhpcy5wcmVkaWNhdGUgKyAnLCcgKyAodGhpcy5yZXZlcnNlID8gJ2FzYycgOiAnZGVzYycpXTtcclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0ZUVtcHJlc2FzKGRhdGE6IElFbXByZXNhW10sIGhlYWRlcnM6IEh0dHBIZWFkZXJzKSB7XHJcbiAgICAgICAgdGhpcy5saW5rcyA9IHRoaXMucGFyc2VMaW5rcy5wYXJzZShoZWFkZXJzLmdldCgnbGluaycpKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBwYXJzZUludChoZWFkZXJzLmdldCgnWC1Ub3RhbC1Db3VudCcpLCAxMCk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMuZW1wcmVzYXMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25FcnJvcihlcnJvck1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgbnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSZXNvbHZlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0VtcHJlc2FTZXJ2aWNlfSBmcm9tICcuL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7RW1wcmVzYUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYURldGFpbENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FVcGRhdGVDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYSwgSUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYVJlc29sdmUgaW1wbGVtZW50cyBSZXNvbHZlPElFbXByZXNhPiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlKSB7fVxyXG5cclxuICAgIHJlc29sdmUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxFbXByZXNhPiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSByb3V0ZS5wYXJhbXNbJ2lkJ10gPyByb3V0ZS5wYXJhbXNbJ2lkJ10gOiBudWxsO1xyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmZpbmQoaWQpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8RW1wcmVzYT4pID0+IHJlc3BvbnNlLm9rKSxcclxuICAgICAgICAgICAgICAgIG1hcCgoZW1wcmVzYTogSHR0cFJlc3BvbnNlPEVtcHJlc2E+KSA9PiBlbXByZXNhLmJvZHkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihuZXcgRW1wcmVzYSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVtcHJlc2FSb3V0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhJyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgZGVmYXVsdFNvcnQ6ICdpZCxhc2MnLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZW1wcmVzYS86aWQvdmlldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBFbXByZXNhRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgZW1wcmVzYTogRW1wcmVzYVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnRW1wcmVzYSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2VtcHJlc2EvbmV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZW1wcmVzYS86aWQvZWRpdCcsXHJcbiAgICAgICAgY29tcG9uZW50OiBFbXByZXNhVXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgZW1wcmVzYTogRW1wcmVzYVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnRW1wcmVzYSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH1cclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBlbXByZXNhUG9wdXBSb3V0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhLzppZC9kZWxldGUnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRW1wcmVzYURlbGV0ZVBvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgZW1wcmVzYTogRW1wcmVzYVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnRW1wcmVzYSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV0sXHJcbiAgICAgICAgb3V0bGV0OiAncG9wdXAnXHJcbiAgICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge2VtcHJlc2FQb3B1cFJvdXRlLCBlbXByZXNhUm91dGV9IGZyb20gJy4vZW1wcmVzYS5yb3V0ZSc7XHJcbmltcG9ydCB7RW1wcmVzYUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYURldGFpbENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FVcGRhdGVDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGVsZXRlRGlhbG9nQ29tcG9uZW50LCBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmVtcHJlc2FSb3V0ZSwgLi4uZW1wcmVzYVBvcHVwUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBFbXByZXNhQ29tcG9uZW50LFxyXG4gICAgICAgIEVtcHJlc2FEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgICAgRW1wcmVzYVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBFbXByZXNhRGVsZXRlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgIEVtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBFbXByZXNhQ29tcG9uZW50LFxyXG4gICAgICBFbXByZXNhVXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICBFbXByZXNhRGVsZXRlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FNb2R1bGUge31cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JQYWdpbmF0aW9uQ29uZmlnfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SVRFTVNfUEVSX1BBR0V9IGZyb20gJy4uL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db25maWcge1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bnVzZWQtdmFyaWFibGVcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBOZ2JQYWdpbmF0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgY29uZmlnLmJvdW5kYXJ5TGlua3MgPSB0cnVlO1xyXG4gICAgICAgIGNvbmZpZy5tYXhTaXplID0gNTtcclxuICAgICAgICBjb25maWcucGFnZVNpemUgPSBJVEVNU19QRVJfUEFHRTtcclxuICAgICAgICBjb25maWcuc2l6ZSA9ICdzbSc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtlbmFibGVQcm9kTW9kZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUHJvZENvbmZpZyhkZWJ1ZzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFkZWJ1Zykge1xyXG4gICAgICAgIGVuYWJsZVByb2RNb2RlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFUlJfVU5BVVRIT1JJWkVEX0VESVRfREVMRVRJT059IGZyb20gXCIuLi91dGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdC1kZWxldGUtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNZ210RGVsZXRlRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIHVzZXI6IFVzZXI7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShsb2dpbikge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZGVsZXRlKGxvZ2luKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICd1c2VyTGlzdE1vZGlmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEZWxldGVkIGEgdXNlcidcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3ModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgfSxyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdC1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdERldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyOiBVc2VyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgdXNlciB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXIuYm9keSA/IHVzZXIuYm9keSA6IHVzZXI7XHJcblxyXG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHRoaXMudXNlcikpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnVzZXJbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1VzZXJ9IGZyb20gJy4uL21vZGVsL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VIZWxwZXJ9IGZyb20gJy4uL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlcic7XHJcbmltcG9ydCB7RVJSX1VOQVVUSE9SSVpFRF9FRElUX0RFTEVUSU9OfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS11c2VyLW1nbXQtdXBkYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQtdXBkYXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1nbXRVcGRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdXNlcjogVXNlcjtcclxuICAgIGxhbmd1YWdlczogYW55W107XHJcbiAgICBhdXRob3JpdGllczogYW55W107XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbjtcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZUhlbHBlcjogSmhpTGFuZ3VhZ2VIZWxwZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IHVzZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyLmJvZHkgPyB1c2VyLmJvZHkgOiB1c2VyO1xyXG5cclxuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnVzZXIpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdGhpcy51c2VyWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRob3JpdGllcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuYXV0aG9yaXRpZXMoKS5zdWJzY3JpYmUoYXV0aG9yaXRpZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml0aWVzID0gYXV0aG9yaXRpZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZUhlbHBlci5nZXRBbGwoKS50aGVuKGxhbmd1YWdlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlci5pZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZSh0aGlzLnVzZXIpLnN1YnNjcmliZShyZXNwb25zZSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MocmVzcG9uc2UpLCByZXNwb25zZSA9PiB0aGlzLm9uU2F2ZUVycm9yKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5jcmVhdGUodGhpcy51c2VyKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4gdGhpcy5vblNhdmVTdWNjZXNzKHJlc3BvbnNlKSwgcmVzcG9uc2UgPT4gdGhpcy5vblNhdmVFcnJvcihyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZVN1Y2Nlc3MocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlRXJyb3IocmVzcG9uc2UpIHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTikge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlciwgSmhpUGFyc2VMaW5rc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHtVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJ9IGZyb20gJy4uL21vZGVsL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vdXRpbCc7XHJcbmltcG9ydCB7R2xvYmFsU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS11c2VyLW1nbXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjdXJyZW50QWNjb3VudDogYW55O1xyXG4gIHVzZXJzOiBVc2VyW107XHJcbiAgZXJyb3I6IGFueTtcclxuICBzdWNjZXNzOiBhbnk7XHJcbiAgcm91dGVEYXRhOiBhbnk7XHJcbiAgbGlua3M6IGFueTtcclxuICB0b3RhbEl0ZW1zOiBhbnk7XHJcbiAgcXVlcnlDb3VudDogYW55O1xyXG4gIGl0ZW1zUGVyUGFnZTogYW55O1xyXG4gIHBhZ2U6IGFueTtcclxuICBwcmVkaWNhdGU6IGFueTtcclxuICBwcmV2aW91c1BhZ2U6IGFueTtcclxuICByZXZlcnNlOiBhbnk7XHJcbiAgZmlsdGVyVXNlcnM6IHN0cmluZztcclxuICBzaG93RmlsdGVyVXNlciA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICBwcml2YXRlIHBhcnNlTGlua3M6IEpoaVBhcnNlTGlua3MsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGdsb2JhbDogR2xvYmFsU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICApIHtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnBhZ2U7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucGFnZTtcclxuICAgICAgdGhpcy5yZXZlcnNlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10uYXNjZW5kaW5nO1xyXG4gICAgICB0aGlzLnByZWRpY2F0ZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnByZWRpY2F0ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudEFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgdGhpcy5yZWdpc3RlckNoYW5nZUluVXNlcnMoKTtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsXHJcbiAgICAgICAgICAuaW5pdCgpXHJcbiAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5nbG9iYWwucGFyYW1ldHJvc1snTU9TVFJBUl9GSUxUUk9fVVNVQVJJT1MnXSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlclVzZXIgPSB0aGlzLmdsb2JhbC5wYXJhbWV0cm9zWydNT1NUUkFSX0ZJTFRST19VU1VBUklPUyddLnZhbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3NbJ01PU1RSQVJfRklMVFJPX1VTVUFSSU9TJ10pID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlclVzZXIgPSB0aGlzLmdsb2JhbC5wYXJhbWV0cm9zWydNT1NUUkFSX0ZJTFRST19VU1VBUklPUyddLnZhbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJvdXRlRGF0YS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJDaGFuZ2VJblVzZXJzKCkge1xyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCd1c2VyTGlzdE1vZGlmaWNhdGlvbicsIHJlc3BvbnNlID0+IHRoaXMubG9hZEFsbCgpKTtcclxuICB9XHJcblxyXG4gIHNldEFjdGl2ZSh1c2VyLCBpc0FjdGl2YXRlZCkge1xyXG4gICAgdXNlci5hY3RpdmF0ZWQgPSBpc0FjdGl2YXRlZDtcclxuXHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZSh1c2VyKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEFsbChwYWdlPzogbnVtYmVyKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHBhZ2UpID09PSB0cnVlICYmIHBhZ2UgPiAwKSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgLnF1ZXJ5KHtcclxuICAgICAgICBwYWdlOiB0aGlzLnBhZ2UgLSAxLFxyXG4gICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgIHNvcnQ6IHRoaXMuc29ydCgpXHJcbiAgICAgIH0sIHRoaXMuZmlsdGVyVXNlcnMpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPFVzZXJbXT4pID0+IHRoaXMub25TdWNjZXNzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPGFueT4pID0+IHRoaXMub25FcnJvcihyZXMuYm9keSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHRyYWNrSWRlbnRpdHkoaW5kZXgsIGl0ZW06IFVzZXIpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgc29ydCgpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFt0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJyldO1xyXG4gICAgaWYgKHRoaXMucHJlZGljYXRlICE9PSAnaWQnKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKCdpZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2l0aW9uKCkge1xyXG4gICAgLypcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FkbWluL3VzZXItbWFuYWdlbWVudCddLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxyXG4gICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICB0aGlzLmxvYWRBbGwoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXIodXNlcjogVXNlcikge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFVzZXJNZ210RGVsZXRlRGlhbG9nQ29tcG9uZW50LCB7c2l6ZTogJ2xnJywgYmFja2Ryb3A6ICdzdGF0aWMnfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VyID0gdXNlcjtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKFxyXG4gICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TdWNjZXNzKGRhdGEsIGhlYWRlcnMpIHtcclxuICAgIHRoaXMubGlua3MgPSB0aGlzLnBhcnNlTGlua3MucGFyc2UoaGVhZGVycy5nZXQoJ2xpbmsnKSk7XHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSBwYXJzZUludChoZWFkZXJzLmdldCgnWC1Ub3RhbC1Db3VudCcpLCAxMCk7XHJcbiAgICB0aGlzLnF1ZXJ5Q291bnQgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICB0aGlzLnVzZXJzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25FcnJvcihlcnJvcikge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3IuZXJyb3IsIGVycm9yLm1lc3NhZ2UsIG51bGwpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3QsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7VXNlck1nbXRDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXREZXRhaWxDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJNZ210VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVXNlck1nbXRSZXNvbHZlIGltcGxlbWVudHMgUmVzb2x2ZTxhbnk+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogVXNlclNlcnZpY2UpIHt9XHJcblxyXG4gICAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtc1snbG9naW4nXSA/IHJvdXRlLnBhcmFtc1snbG9naW4nXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZmluZChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgVXNlcigpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXNlck1nbXRSb3V0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICd1c2VyLW1hbmFnZW1lbnQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogVXNlck1nbXRDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnVXN1w4PCoXJpb3MnLFxyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogJ2lkLGFzYydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudC86bG9naW4vdmlldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBVc2VyTWdtdERldGFpbENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHVzZXI6IFVzZXJNZ210UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdVc3XDg8KhcmlvcydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudC9uZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogVXNlck1nbXRVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHVzZXI6IFVzZXJNZ210UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAndXNlci1tYW5hZ2VtZW50Lzpsb2dpbi9lZGl0JyxcclxuICAgICAgICBjb21wb25lbnQ6IFVzZXJNZ210VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTicsICdST0xFX0FETUlOX0NMSUVOVEUnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICB1c2VyOiBVc2VyTWdtdFJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtFbmRlcmVjb30gZnJvbSAnLi4vbW9kZWwvZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9FbmRlcmVjb30gZnJvbSAnLi4vbW9kZWwnO1xyXG5cclxuQFBpcGUoeyBuYW1lOiAnZW5kZXJlY29QcmluY2lwYWxGb3JtYXRhZG8nIH0pXHJcbmV4cG9ydCBjbGFzcyBFbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkb1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcbiAgICB0cmFuc2Zvcm0oZW5kZXJlY29zOiBFbmRlcmVjb1tdKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWVuZGVyZWNvcykge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByaW5jaXBhbCA9IGVuZGVyZWNvc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUudGlwbyA9PT0gVGlwb0VuZGVyZWNvLlBSSU5DSVBBTDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAoIXByaW5jaXBhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0aXBvTG9ncmFkb3VybyA9IHByaW5jaXBhbC50aXBvTG9ncmFkb3VybyAmJiBwcmluY2lwYWwudGlwb0xvZ3JhZG91cm8uZGVzY3JpY2FvID8gcHJpbmNpcGFsLnRpcG9Mb2dyYWRvdXJvLmRlc2NyaWNhbyArICcgJyA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHRpdHVsb0xvZ3JhZG91cm8gPSBwcmluY2lwYWwudGl0dWxvTG9ncmFkb3VybyAmJiBwcmluY2lwYWwudGl0dWxvTG9ncmFkb3Vyby5zaWdsYSA/IHByaW5jaXBhbC50aXR1bG9Mb2dyYWRvdXJvLnNpZ2xhICsgJyAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgbG9ncmFkb3VybyA9IHByaW5jaXBhbC5sb2dyYWRvdXJvID8gcHJpbmNpcGFsLmxvZ3JhZG91cm8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgbnVtZXJvID0gcHJpbmNpcGFsLm51bWVybyA/IHByaW5jaXBhbC5udW1lcm8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgY29tcGxlbWVudG8gPSBwcmluY2lwYWwuY29tcGxlbWVudG8gPyBwcmluY2lwYWwuY29tcGxlbWVudG8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgYmFpcnJvID0gcHJpbmNpcGFsLmJhaXJybyA/IHByaW5jaXBhbC5iYWlycm8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgbXVuaWNpcGlvID0gcHJpbmNpcGFsLm11bmljaXBpbyAmJiBwcmluY2lwYWwubXVuaWNpcGlvLmRlc2NyaWNhbyA/IHByaW5jaXBhbC5tdW5pY2lwaW8uZGVzY3JpY2FvICsgJy0nIDogJyc7XHJcbiAgICAgICAgY29uc3QgZXN0YWRvID0gcHJpbmNpcGFsLm11bmljaXBpbyAmJiBwcmluY2lwYWwubXVuaWNpcGlvLmVzdGFkbyA/IHByaW5jaXBhbC5tdW5pY2lwaW8uZXN0YWRvIDogJyc7XHJcbiAgICAgICAgY29uc3QgZW5kZXJlY28gPSB0aXBvTG9ncmFkb3VybyArIHRpdHVsb0xvZ3JhZG91cm8gKyBsb2dyYWRvdXJvICsgbnVtZXJvICsgY29tcGxlbWVudG8gKyBiYWlycm8gKyBtdW5pY2lwaW8gKyBlc3RhZG87XHJcblxyXG4gICAgICAgIHJldHVybiBlbmRlcmVjb1xyXG4gICAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oLCQpL2csICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvKC0kKS9nLCAnJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBFbnVtUGlwZVR5cGUsXHJcbiAgU2V4byxcclxuICBTaXR1YWNhb0NvbnRyaWJ1aW50ZSxcclxuICBTaXR1YWNhb0RpdmlkYURlYml0byxcclxuICBTaXR1YWNhb1BhZ2FtZW50b0RlYml0byxcclxuICBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEsXHJcbiAgVGlwb0VuZGVyZWNvLFxyXG4gIFRpcG9JbW92ZWwsXHJcbiAgVGlwb1Blc3NvYSxcclxuICBUaXBvUmVzcG9uc2F2ZWxcclxufSBmcm9tICcuLi9tb2RlbCc7XHJcbmltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AUGlwZSh7bmFtZTogJ2VudW1Ub1N0cmluZyd9KVxyXG5leHBvcnQgY2xhc3MgRW51bVRvU3RyaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCB0eXBlOiBFbnVtUGlwZVR5cGUpOiBzdHJpbmcge1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19ESVZJREFfREVCSVRPOlxyXG4gICAgICAgIHJldHVybiBTaXR1YWNhb0RpdmlkYURlYml0b05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgY2FzZSBFbnVtUGlwZVR5cGUuU0lUVUFDQU9fUEFHQU1FTlRPX0RFQklUTzpcclxuICAgICAgICByZXR1cm4gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG9OYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19QQUdBTUVOVE9fUEFSQ0VMQTpcclxuICAgICAgICByZXR1cm4gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19QRVNTT0E6XHJcbiAgICAgICAgcmV0dXJuIFRpcG9QZXNzb2FOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19DT05UUklCVUlOVEU6XHJcbiAgICAgICAgcmV0dXJuIFNpdHVhY2FvQ29udHJpYnVpbnRlTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuU0VYTzpcclxuICAgICAgICByZXR1cm4gU2V4b05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlRJUE9fRU5ERVJFQ086XHJcbiAgICAgICAgcmV0dXJuIFRpcG9FbmRlcmVjb05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlRJUE9fUkVTUE9OU0FWRUw6XHJcbiAgICAgICAgcmV0dXJuIFRpcG9SZXNwb25zYXZlbE5hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlRJUE9fSU1PVkVMOlxyXG4gICAgICAgIHJldHVybiBUaXBvSW1vdmVsTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2l0dWFjYW9EaXZpZGFEZWJpdG9OYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogU2l0dWFjYW9EaXZpZGFEZWJpdG8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb0RpdmlkYURlYml0by5ESVZJREFfQ09SUkVOVEUpIHtcclxuICAgICAgcmV0dXJuICdEw4PCrXZpZGEgQ29ycmVudGUnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9EaXZpZGFEZWJpdG8uRElWSURBX0FKVUlaQURBKSB7XHJcbiAgICAgIHJldHVybiAnRMODwq12aWRhIEFqdWl6YWRhJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvRGl2aWRhRGViaXRvLkRJVklEQV9BVElWQSkge1xyXG4gICAgICByZXR1cm4gJ0TDg8KtdmlkYSBBdGl2YSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2l0dWFjYW9QYWdhbWVudG9EZWJpdG9OYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0by5BQkVSVE8pIHtcclxuICAgICAgcmV0dXJuICdBYmVydG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8uUEFHTykge1xyXG4gICAgICByZXR1cm4gJ1BhZ28nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8uUFJPVEVTVEFETykge1xyXG4gICAgICByZXR1cm4gJ1Byb3Rlc3RhZG8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubmFtZXNwYWNlIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYU5hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQUJFUlRPKSB7XHJcbiAgICAgIHJldHVybiAnQWJlcnRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5QQUdPKSB7XHJcbiAgICAgIHJldHVybiAnUGFnbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRU1fRElWSURBX0FUSVZBKSB7XHJcbiAgICAgIHJldHVybiAnRW0gRMODwq12aWRhIEF0aXZhJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5FTV9FWEVDVUNBT19GSVNDQUwpIHtcclxuICAgICAgcmV0dXJuICdFbSBFeGVjdcODwqfDg8KjbyBGaXNjYWwnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkNBTkNFTEFETykge1xyXG4gICAgICByZXR1cm4gJ0NhbmNlbGFkbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQUdSVVBBRE9fRU1fUEFSQ0VMQU1FTlRPKSB7XHJcbiAgICAgIHJldHVybiAnRW0gUGFyY2VsYW1lbnRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5QUk9URVNUQURPKSB7XHJcbiAgICAgIHJldHVybiAnUHJvdGVzdGFkbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRVhDTFVJRE8pIHtcclxuICAgICAgcmV0dXJuICdFeGNsdcODwq1kbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuSU1VTkVfSVNFTlRPKSB7XHJcbiAgICAgIHJldHVybiAnSW11bmUvSXNlbnRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5ESUZFUkVOQ0FfREVfVkFMT1JfQ0FOQ0VMQURPX1BBUkNJQUxNRU5URSkge1xyXG4gICAgICByZXR1cm4gJ0RpZmVyZW7Dg8KnYSBkZSBWYWxvciBDYW5jZWxhZG8gUGFyY2lhbG1lbnRlJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5CTE9RVUVBRE8pIHtcclxuICAgICAgcmV0dXJuICdCbG9xdWVhZG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkFHUlVQQURPX0VNX09VVFJBX1BBUkNFTEEpIHtcclxuICAgICAgcmV0dXJuICdBZ3J1cGFkbyBlbSBPdXRyYSBQYXJjZWxhJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5QUkVTQ1JJVE8pIHtcclxuICAgICAgcmV0dXJuICdQcmVzY3JpdG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkVNX0ZJU0NBTElaQUNBTykge1xyXG4gICAgICByZXR1cm4gJ0VtIEZpc2NhbGl6YcODwqfDg8Kjbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQkFJWEFfU0VNX01PVklNRU5UTykge1xyXG4gICAgICByZXR1cm4gJ0JhaXhhIHNlbSBNb3ZpbWVudG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkVNX1JFQ1VSU09fQURNSU5JU1RSQVRJVk8pIHtcclxuICAgICAgcmV0dXJuICdFbSBSZWN1cnNvIEFkbWluaXN0cmF0aXZvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5TVVNQRU5TTykge1xyXG4gICAgICByZXR1cm4gJ1N1c3BlbnNvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgVGlwb1Blc3NvYU5hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBUaXBvUGVzc29hKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb1Blc3NvYS5GSVNJQ0EpIHtcclxuICAgICAgcmV0dXJuICdGw4PCrXNpY2EnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Blc3NvYS5KVVJJRElDQSkge1xyXG4gICAgICByZXR1cm4gJ0p1csODwq1kaWNhJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgU2l0dWFjYW9Db250cmlidWludGVOYW1lc3BhY2UgIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFNpdHVhY2FvQ29udHJpYnVpbnRlKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9Db250cmlidWludGUuQVRJVk8pIHtcclxuICAgICAgcmV0dXJuICdBdGl2byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb0NvbnRyaWJ1aW50ZS5JTkFUSVZPKSB7XHJcbiAgICAgIHJldHVybiAnSW5hdGl2byc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2V4b05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTZXhvKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gU2V4by5GRU1JTklOTykge1xyXG4gICAgICByZXR1cm4gJ0ZlbWluaW5vJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNleG8uTUFTQ1VMSU5PKSB7XHJcbiAgICAgIHJldHVybiAnTWFzY3VsaW5vJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBUaXBvRW5kZXJlY29OYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogVGlwb0VuZGVyZWNvKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb0VuZGVyZWNvLlBSSU5DSVBBTCkge1xyXG4gICAgICByZXR1cm4gJ1ByaW5jaXBhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvRW5kZXJlY28uQ09SUkVTUE9OREVOQ0lBKSB7XHJcbiAgICAgIHJldHVybiAnQ29ycmVzcG9uZMODwqpuY2lhJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgVGlwb1Jlc3BvbnNhdmVsTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFRpcG9SZXNwb25zYXZlbCk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFRpcG9SZXNwb25zYXZlbC5QUklOQ0lQQUwpIHtcclxuICAgICAgcmV0dXJuICdQcmluY2lwYWwnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlNPQ0lPKSB7XHJcbiAgICAgIHJldHVybiAnU8ODwrNjaW8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlBST0NVUkFET1IpIHtcclxuICAgICAgcmV0dXJuICdQcm9jdXJhZG9yJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFRpcG9SZXNwb25zYXZlbC5SRVNQT05TQVZFTF9JTU9CSUxJQVJJTykge1xyXG4gICAgICByZXR1cm4gJ1Jlc3BvbnPDg8KhdmVsIEltb2JpbGnDg8KhcmlvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgVGlwb0ltb3ZlbE5hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBUaXBvSW1vdmVsKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb0ltb3ZlbC5VUkJBTk8pIHtcclxuICAgICAgcmV0dXJuICdVcmJhbm8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb0ltb3ZlbC5SVVJBTCkge1xyXG4gICAgICByZXR1cm4gJ1J1cmFsJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnZmlsdGVyJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICB0cmFuc2Zvcm0oaXRlbXM6IGFueVtdLCBmaWx0ZXJzOntba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogYW55W10ge1xyXG4gICAgaWYoIWl0ZW1zKSByZXR1cm4gW107XHJcbiAgICBpZighZmlsdGVycykgcmV0dXJuIGl0ZW1zO1xyXG4gICAgaWYgKCFGaWx0ZXJQaXBlLnZhbGlkYXRlKGZpbHRlcnMpKSByZXR1cm4gaXRlbXM7XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgZm9yKGxldCBmaWVsZCBpbiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgaWYoRmlsdGVyUGlwZS5pc0VxdWFscyhmaWx0ZXJzW2ZpZWxkXSwgdmFsdWVbZmllbGRdKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZShmaWx0ZXJzOntba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XHJcbiAgICBsZXQgaXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgZmllbGQgaW4gZmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyc1tmaWVsZF0gIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJzW2ZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgICBpc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc0VxdWFscyhmaWx0ZXIsIHZhbHVlKSB7XHJcbiAgICB2YWx1ZSA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlQWNjZW50cyh2YWx1ZS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgZmlsdGVyID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVBY2NlbnRzKGZpbHRlci50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKGZpbHRlcik7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0VuZGVyZWNvUHJpbmNpcGFsRm9ybWF0YWRvUGlwZX0gZnJvbSAnLi9lbmRlcmVjby1wcmluY2lwYWwtZm9ybWF0YWRvLnBpcGUnO1xyXG5pbXBvcnQge0VudW1Ub1N0cmluZ1BpcGV9IGZyb20gJy4vZW51bS1zdHJpbmcucGlwZSc7XHJcbmltcG9ydCB7RmlsdGVyUGlwZX0gZnJvbSAnLi9maWx0ZXIucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRW5kZXJlY29QcmluY2lwYWxGb3JtYXRhZG9QaXBlLCBFbnVtVG9TdHJpbmdQaXBlLCBGaWx0ZXJQaXBlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBFbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkb1BpcGUsIEVudW1Ub1N0cmluZ1BpcGUsIEZpbHRlclBpcGVcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGlwZU1vZHVsbyB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7dXNlck1nbXRSb3V0ZX0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQucm91dGUnO1xyXG5pbXBvcnQge1VzZXJNZ210Q29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJNZ210RGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC1kZXRhaWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtdXBkYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7RmluZExhbmd1YWdlTW9kdWxvfSBmcm9tICcuLi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLm1vZHVsbyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGlwZU1vZHVsb30gZnJvbSAnLi4vcGlwZS9waXBlLm1vZHVsbyc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi51c2VyTWdtdFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgICAgRmluZExhbmd1YWdlTW9kdWxvLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUyksXHJcbiAgICAgIFBpcGVNb2R1bG9cclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgVXNlck1nbXRDb21wb25lbnQsXHJcbiAgICAgIFVzZXJNZ210RGV0YWlsQ29tcG9uZW50LFxyXG4gICAgICBVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VtZW50TW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZXJyb3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Vycm9yLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBlcnJvcjQwMzogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgbG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24pIHtcclxuICAgICAgICBsb2NhdGlvbi5vblBvcFN0YXRlKCgpID0+IHtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy4uLyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUocm91dGVEYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKHJvdXRlRGF0YS5lcnJvcjQwMykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcjQwMyA9IHJvdXRlRGF0YS5lcnJvcjQwMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocm91dGVEYXRhLmVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByb3V0ZURhdGEuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBFcnJvckNvbXBvbmVudCB9IGZyb20gJy4vZXJyb3IuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBlcnJvclJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2Vycm9yJyxcclxuICAgICAgICBjb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdPY29ycmV1IHVtIGVycm8nXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnYWNjZXNzZGVuaWVkJyxcclxuICAgICAgICBjb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdGYcODwqdhIGxvZ2luIG5vdmFtZW50ZScsXHJcbiAgICAgICAgICAgIGVycm9yNDAzOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1Byb2ZpbGVJbmZvfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9maWxlLWluZm8ubW9kZWwnO1xyXG5cclxuY29uc3QgIFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGluZm9VcmwgPSBTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2luZm8nO1xyXG4gICAgcHJpdmF0ZSBwcm9maWxlSW5mbzogUHJvbWlzZTxQcm9maWxlSW5mbz47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldFByb2ZpbGVJbmZvKCk6IFByb21pc2U8UHJvZmlsZUluZm8+IHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvZmlsZUluZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9maWxlSW5mbyA9IHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAgICAgLmdldDxQcm9maWxlSW5mbz4odGhpcy5pbmZvVXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzOiBIdHRwUmVzcG9uc2U8UHJvZmlsZUluZm8+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXMuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGkgPSBuZXcgUHJvZmlsZUluZm8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGkuYWN0aXZlUHJvZmlsZXMgPSBkYXRhWydhY3RpdmVQcm9maWxlcyddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5UmliYm9uT25Qcm9maWxlcyA9IGRhdGFbJ2Rpc3BsYXktcmliYm9uLW9uLXByb2ZpbGVzJ10uc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpLmFjdGl2ZVByb2ZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWJib25Qcm9maWxlcyA9IGRpc3BsYXlSaWJib25PblByb2ZpbGVzLmZpbHRlcihwcm9maWxlID0+IHBpLmFjdGl2ZVByb2ZpbGVzLmluY2x1ZGVzKHByb2ZpbGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWJib25Qcm9maWxlcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaS5yaWJib25FbnYgPSByaWJib25Qcm9maWxlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpLmluUHJvZHVjdGlvbiA9IHBpLmFjdGl2ZVByb2ZpbGVzLmluY2x1ZGVzKCdwcm9kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaS5zd2FnZ2VyRW5hYmxlZCA9IHBpLmFjdGl2ZVByb2ZpbGVzLmluY2x1ZGVzKCdzd2FnZ2VyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2ZpbGVJbmZvO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TmdiTW9kYWwsIE5nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGVzL3Byb2ZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uLy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge0xvZ2luU2VydmljZX0gZnJvbSAnLi4vLi4vbG9naW4vbG9naW4uc2VydmljZSc7XHJcbmltcG9ydCB7RW1wcmVzYVNlcnZpY2V9IGZyb20gJy4uLy4uL2VtcHJlc2EvZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2dpbk1vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vbG9naW4vbG9naW4tbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2RhbFNlcnZpY2V9IGZyb20gJy4uLy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dsb2JhbFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi8uLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtQYWdpbmFBanVkYX0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnaW5hQWp1ZGEubW9kZWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLnNlcnZpY2UnO1xyXG5pbXBvcnQge05vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMtcG9wdXAuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbmF2YmFyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXZiYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ25hdmJhci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGluUHJvZHVjdGlvbjogYm9vbGVhbjtcclxuICAgIGlzTmF2YmFyQ29sbGFwc2VkOiBib29sZWFuO1xyXG4gICAgcGFnaW5hc0FqdWRhOiBBcnJheTxQYWdpbmFBanVkYT4gPSBbXTtcclxuICAgIGlzUmVtb3ZlQWNhbzogYm9vbGVhbjtcclxuICAgIGVtcHJlc2E6IElFbXByZXNhO1xyXG4gICAgc3dhZ2dlckVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcbiAgICBoYWJpbGl0YXJOb3RpZmljYWNvZXMgPSBmYWxzZTtcclxuICAgIG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSA9IFtdO1xyXG4gICAgcXVhbnRpZGFkZU5vdGlmaWNhY29lc05vdmFzID0gMDtcclxuICAgIHByaXZhdGUgbm90aWZpY2Fjb2VzTGlzdGVuZXJzUmVnaXN0cmFkb3MgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgb3BlbmVkT25UaGlzTG9naW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGFicmlyUG9wdXBTZVRpdmVyTm92YXNRdWFuZG9DYXJyZWdhciA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNvZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGVtcHJlc2FTZXJ2aWNlOiBFbXByZXNhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlZ2lzdGVyTW9kYWxTZXJ2aWNlOiBSZWdpc3Rlck1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZ2xvYmFsOiBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbSxcclxuICAgICAgICBwdWJsaWMgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhY29lc1NlcnZpY2U6IE5vdGlmaWNhY29lc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlzTmF2YmFyQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUmVtb3ZlQWNhbyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLm9ic2VydmFyTm90aWZpY2Fjb2VzKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShsaXN0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhY29lcyA9IGxpc3RhID8gbGlzdGEgOiBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVhbnRpZGFkZU5vdGlmaWNhY29lc05vdmFzID0gdGhpcy5jb250YXJOb3Zhc05vdGlmaWNhY29lcyh0aGlzLm5vdGlmaWNhY29lcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFByb2ZpbGVJbmZvKCkudGhlbihwcm9maWxlSW5mbyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5Qcm9kdWN0aW9uID0gcHJvZmlsZUluZm8uaW5Qcm9kdWN0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLnN3YWdnZXJFbmFibGVkID0gcHJvZmlsZUluZm8uc3dhZ2dlckVuYWJsZWQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wcmVzYVNlcnZpY2VcclxuICAgICAgICAgICAgLmdldEVtcHJlc2EoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4oZW1wcmVzYSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHJlc2EgPSBlbXByZXNhLmJvZHk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIlJFTU9WRVJfQUNBT19OQVZCQVJcIilcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlbW92ZUFjYW8gPSB2YWx1ZS52YWxvcjtcclxuICAgICAgICAgICAgfSkuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIkpTT05fQUpVREFcIilcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUudmFsb3IpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXNBanVkYSA9IEpTT04ucGFyc2UodmFsdWUudmFsb3IpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXN1YXJpb1ZpdUFqdWRhKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpckFqdWRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdHJhckxpc3RlbmVyc05vdGlmaWNhY29lcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sbGFwc2VOYXZiYXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc05hdmJhckNvbGxhcHNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0FkbWluKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHlEaXJlY3QoW1wiUk9MRV9BRE1JTlwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubG9naW5Nb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLnJlZ2lzdGVyTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsYXBzZU5hdmJhcigpO1xyXG4gICAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsLmxvZ291dCgpO1xyXG4gICAgICAgIHRoaXMucmVzZXRhck5vdGlmaWNhY29lcygpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU2VydmljZS5saW1wYXJDYWNoZSgpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy4uLyc7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTmF2YmFyKCkge1xyXG4gICAgICAgIHRoaXMuaXNOYXZiYXJDb2xsYXBzZWQgPSAhdGhpcy5pc05hdmJhckNvbGxhcHNlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbWFnZVVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSA/IHRoaXMucHJpbmNpcGFsLmdldEltYWdlVXJsKCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtZXRyaXphcigpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbC5wYXJhbWV0cml6YXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVzdWFyaW9WaXVBanVkYSgpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KCd1c3VhcmlvVml1QWp1ZGEnKTtcclxuICAgIH1cclxuXHJcbiAgICBhYnJpckFqdWRhKCkge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsLmFicmlyQWp1ZGEodGhpcy5wYWdpbmFzQWp1ZGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFicmlyTm90aWZpY2Fjb2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYWJpbGl0YXJOb3RpZmljYWNvZXMgfHwgIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idXNjYXJOb3RpZmljYWNvZXMoZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZXh0b1F1YW50aWRhZGVOb3RpZmljYWNvZXMoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPiA5OSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJys5OSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3Zhcy50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVnaXN0cmFyTGlzdGVuZXJzTm90aWZpY2Fjb2VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhY29lc0xpc3RlbmVyc1JlZ2lzdHJhZG9zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNMaXN0ZW5lcnNSZWdpc3RyYWRvcyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnYXV0aGVudGljYXRpb25TdWNjZXNzJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZE9uVGhpc0xvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnYWJyaXJOb3RpZmljYWNvZXNTZVRpdmVyTm92YXMnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmdldEF1dGhlbnRpY2F0aW9uU3RhdGUoKS5zdWJzY3JpYmUoYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QoYWNjb3VudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldGFyTm90aWZpY2Fjb2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UubGltcGFyQ2FjaGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmluY2lwYWwuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcihmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIoYWJyaXJQb3B1cFNlVGl2ZXJOb3ZhczogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnJlZ2FuZG9IYWJpbGl0YWNhbykge1xyXG4gICAgICAgICAgICBpZiAoYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiSEFCSUxJVEFSX05PVElGSUNBQ09FU1wiKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcyA9IFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZSkgPT09IHRydWUgJiYgdmFsdWUudmFsb3IgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYWJpbGl0YXJOb3RpZmljYWNvZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2Nhck5vdGlmaWNhY29lcyhhYnJpclBvcHVwU2VUaXZlck5vdmFzLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0YXJOb3RpZmljYWNvZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb0hhYmlsaXRhY2FvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRhck5vdGlmaWNhY29lcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1c2Nhck5vdGlmaWNhY29lcyhhYnJpclBvcHVwU2VUaXZlck5vdmFzOiBib29sZWFuLCBhYnJpclBvcHVwU2VtcHJlOiBib29sZWFuLCBmb3JjZVJlZnJlc2g6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFiaWxpdGFyTm90aWZpY2Fjb2VzIHx8ICF0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKSB8fCB0aGlzLmNhcnJlZ2FuZG9Ob3RpZmljYWNvZXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFicmlyUG9wdXBTZW1wcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLmJ1c2Nhck5vdGlmaWNhY29lcyhmb3JjZVJlZnJlc2gpXHJcbiAgICAgICAgICAgIC50aGVuKGxpc3RhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gbGlzdGEgPyBsaXN0YSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSB0aGlzLmNvbnRhck5vdmFzTm90aWZpY2Fjb2VzKHRoaXMubm90aWZpY2Fjb2VzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3N1aU5vdmFzID0gdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV2ZUFicmlyU2VUaXZlck5vdmFzID0gKGFicmlyUG9wdXBTZVRpdmVyTm92YXMgfHwgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcG9zc3VpTm92YXNcclxuICAgICAgICAgICAgICAgICAgICAmJiAhdGhpcy5vcGVuZWRPblRoaXNMb2dpbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRldmVBYnJpciA9IGRldmVBYnJpclNlVGl2ZXJOb3Zhc1xyXG4gICAgICAgICAgICAgICAgICAgIHx8IGFicmlyUG9wdXBTZW1wcmVcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhcjtcclxuICAgICAgICAgICAgICAgIGlmIChkZXZlQWJyaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2ZUFicmlyU2VUaXZlck5vdmFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkT25UaGlzTG9naW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwTm90aWZpY2Fjb2VzKHRoaXMubm90aWZpY2Fjb2VzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhYnJpclBvcHVwTm90aWZpY2Fjb2VzKG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCB0ZWxhTm90aWZpY2Fjb2VzUG9wdXA6IE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50ID0gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgdGVsYU5vdGlmaWNhY29lc1BvcHVwLmluaWNpYXIobm90aWZpY2Fjb2VzKTtcclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmF0dWFsaXphcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNjYXJOb3RpZmljYWNvZXMoZmFsc2UsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udGFyTm92YXNOb3RpZmljYWNvZXMobm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIW5vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vdGlmaWNhY29lcy5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzTm92YU5vdGlmaWNhY2FvKGl0ZW0pKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc05vdmFOb3RpZmljYWNhbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWx1ZTogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUuZGF0YU5hb0V4aWJpciA9PT0gbnVsbCB8fCB2YWx1ZS5kYXRhTmFvRXhpYmlyID09PSB1bmRlZmluZWQgfHwgdmFsdWUuZGF0YU5hb0V4aWJpciA9PT0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldGFyTm90aWZpY2Fjb2VzKCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gW107XHJcbiAgICAgICAgdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSAwO1xyXG4gICAgICAgIHRoaXMub3BlbmVkT25UaGlzTG9naW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgTmF2YmFyQ29tcG9uZW50IH0gZnJvbSAnLi9uYXZiYXIuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBuYXZiYXJSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAnJyxcclxuICAgIGNvbXBvbmVudDogTmF2YmFyQ29tcG9uZW50LFxyXG4gICAgb3V0bGV0OiAnbmF2YmFyJ1xyXG59O1xyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VIZWxwZXJ9IGZyb20gJy4uLy4uL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlcic7XHJcbmltcG9ydCB7U2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwibmd4LXdlYnN0b3JhZ2VcIjtcclxuaW1wb3J0IHtMb2NrUGFnZSwgVXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tYWluJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tYWluLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWydtYWluLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpTWFpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGpoaUxhbmd1YWdlSGVscGVyOiBKaGlMYW5ndWFnZUhlbHBlciwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHByb3ZpZGVyOiBPcHRpb25zUHJvdmlkZXIpIHt9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlVGl0bGUocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nID0gcm91dGVTbmFwc2hvdC5kYXRhICYmIHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gPyByb3V0ZVNuYXBzaG90LmRhdGFbJ3BhZ2VUaXRsZSddIDogJ3BvcnRhbEdhdGV3YXlBcHAnO1xyXG4gICAgICAgIGlmIChyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHx8IHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC51cmwuaW5kZXhPZignL2FjY2Vzc2RlbmllZCcpIDwgMCAmJiBldmVudC51cmwgIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tlZFBhZ2U6IExvY2tQYWdlID0gTG9ja1BhZ2UucmV0cmlldmVGcm9tU3RvcmFnZSh0aGlzLnNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGxvY2tlZFBhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NrZWRQYWdlLmlzTG9ja2VkUGFnZSh3aW5kb3cubG9jYXRpb24sIHRoaXMucHJvdmlkZXIubW9kdWxvKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0UGFnZSA9IGxvY2tlZFBhZ2UuZ2V0UmVkaXJlY3RQYWdlKHdpbmRvdy5sb2NhdGlvbiwgdGhpcy5wcm92aWRlci5tb2R1bG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RQYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmpoaUxhbmd1YWdlSGVscGVyLnVwZGF0ZVRpdGxlKHRoaXMuZ2V0UGFnZVRpdGxlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBFbGVtZW50UmVmLCBSZW5kZXJlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSwgTGFuZ0NoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2poaUFjdGl2ZU1lbnVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZlTWVudURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgamhpQWN0aXZlTWVudTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGbGFnKGV2ZW50LmxhbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmxhZyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFjdGl2ZUZsYWcoc2VsZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmpoaUFjdGl2ZU1lbnUgPT09IHNlbGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnYWN0aXZlJywgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnYWN0aXZlJywgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9maWxlU2VydmljZSB9IGZyb20gJy4vcHJvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcm9maWxlSW5mb30gZnJvbSAnLi4vLi4vbW9kZWwvcHJvZmlsZS1pbmZvLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFnZS1yaWJib24nLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicmliYm9uXCIgKm5nSWY9XCJyaWJib25FbnZcIj48YSBocmVmPVwiXCIgamhpVHJhbnNsYXRlPVwiZ2xvYmFsLnJpYmJvbi57e3JpYmJvbkVudn19XCI+e3tyaWJib25FbnZ9fTwvYT48L2Rpdj5gLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3BhZ2UtcmliYm9uLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnZVJpYmJvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwcm9maWxlSW5mbzogUHJvZmlsZUluZm87XHJcbiAgICByaWJib25FbnY6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFByb2ZpbGVJbmZvKCkudGhlbihwcm9maWxlSW5mbyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbztcclxuICAgICAgICAgICAgdGhpcy5yaWJib25FbnYgPSBwcm9maWxlSW5mby5yaWJib25FbnY7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xyXG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZm9vdGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2Zvb3Rlci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvb3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgdmVyc2lvbjogc3RyaW5nO1xyXG4gICAgYW5vOiBudW1iZXI7XHJcbiAgICBleHRyYUhUTUw6IHN0cmluZztcclxuICAgIGNoZWNrZWRIVE1MID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnNQcm92aWRlcjpPcHRpb25zUHJvdmlkZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb24gPSBvcHRpb25zUHJvdmlkZXIudmVyc2lvbjtcclxuICAgICAgICB0aGlzLmFubyA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tlZEhUTUwgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuZ2V0SHRtbEZvb3RlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjaGFuZ2VDb250ZW50SGVpZ2h0KCkge1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKXtcclxuICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2poaS1mb290ZXInKS5pdGVtKDApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgY29uc3QgaGVpZ3RoU3R5bGUgPSAnY2FsYygxMDB2aCAtIDgwcHggLSAnICsgZm9vdGVySGVpZ2h0ICsgJ3B4KSc7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyLWZsdWlkJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ3RoU3R5bGU7XHJcbiAgICAgIGNvbnRlbnQuc3R5bGUubWluSGVpZ2h0ID0gaGVpZ3RoU3R5bGU7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SHRtbEZvb3RlcigpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgdXJsID0gJy9hcGkvcHVibGljL3BhcmFtZXRyb3MtY2hhdmUtdmFsb3IvKi8qJztcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZEhUTUwgPSB0cnVlO1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodmFsdWUuYm9keVsnTUVOU0FHRU1fSFRNTF9GT09URVInXSkgPT09IHRydWUgJiZcclxuICAgICAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuYm9keVsnTUVOU0FHRU1fSFRNTF9GT09URVInXS52YWxvcikgPT09IHRydWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZXh0cmFIVE1MID0gdmFsdWUuYm9keVsnTUVOU0FHRU1fSFRNTF9GT09URVInXS52YWxvci5yZXBsYWNlKCd7e3llYXJ9fScsIHRoaXMuYW5vKS5yZXBsYWNlKCd7e3ZlcnNpb259fScsIHRoaXMudmVyc2lvbik7XHJcbiAgICAgICAgICAvL3RoaXMuY2hhbmdlQ29udGVudEhlaWdodCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pLmNhdGNoKCgpID0+e1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZEhUTUwgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7ZXJyb3JSb3V0ZX0gZnJvbSAnLi9lcnJvci9lcnJvci5yb3V0ZSc7XHJcbmltcG9ydCB7bmF2YmFyUm91dGV9IGZyb20gJy4vbmF2YmFyL25hdmJhci5yb3V0ZSc7XHJcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vZXJyb3IvZXJyb3IuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge0poaU1haW5Db21wb25lbnR9IGZyb20gJy4vbWFpbi9tYWluLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmF2YmFyQ29tcG9uZW50fSBmcm9tICcuL25hdmJhci9uYXZiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtBY3RpdmVNZW51RGlyZWN0aXZlfSBmcm9tICcuL25hdmJhci9hY3RpdmUtbWVudS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge1BhZ2VSaWJib25Db21wb25lbnR9IGZyb20gJy4vcHJvZmlsZXMvcGFnZS1yaWJib24uY29tcG9uZW50JztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtBdXRoTW9kdWxlfSBmcm9tICcuLi9hdXRoL2F1dGgubW9kdWxlJztcclxuaW1wb3J0IHtGb290ZXJDb21wb25lbnR9IGZyb20gJy4vZm9vdGVyL2Zvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge0xvYWRpbmdCYXJIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAbmd4LWxvYWRpbmctYmFyL2h0dHAtY2xpZW50JztcbmltcG9ydCB7Sm95cmlkZU1vZHVsZSwgSm95cmlkZVN0ZXBDb21wb25lbnR9IGZyb20gJ25neC1qb3lyaWRlJztcbmltcG9ydCB7Q29va2llQ29uc2VudE1vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9jb29raWUtY29uc2VudC9jb29raWUtY29uc2VudC5tb2R1bGUnO1xuaW1wb3J0IHtOb3RpZmljYWNvZXNNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy5tb2R1bGUnO1xuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5jb25zdCBMQVlPVVRfUk9VVEVTID0gW25hdmJhclJvdXRlLCAuLi5lcnJvclJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIEF1dGhNb2R1bGUsXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgTG9hZGluZ0Jhckh0dHBDbGllbnRNb2R1bGUsXG4gICAgICBDb29raWVDb25zZW50TW9kdWxlLFxuICAgICAgTm90aWZpY2Fjb2VzTW9kdWxlLFxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JSb290KFsuLi5MQVlPVVRfUk9VVEVTXSwgeyB1c2VIYXNoOiB0cnVlLCBlbmFibGVUcmFjaW5nOiB0cnVlIH0pLFxyXG4gICAgICBKb3lyaWRlTW9kdWxlLmZvclJvb3QoKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBFcnJvckNvbXBvbmVudCxcclxuICAgICAgSmhpTWFpbkNvbXBvbmVudCxcclxuICAgICAgTmF2YmFyQ29tcG9uZW50LFxyXG4gICAgICBGb290ZXJDb21wb25lbnQsXHJcbiAgICAgIEFjdGl2ZU1lbnVEaXJlY3RpdmUsXHJcbiAgICAgIFBhZ2VSaWJib25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIFJvdXRlck1vZHVsZSxcclxuICAgICAgRXJyb3JDb21wb25lbnQsXHJcbiAgICAgIEpoaU1haW5Db21wb25lbnQsXHJcbiAgICAgIE5hdmJhckNvbXBvbmVudCxcclxuICAgICAgRm9vdGVyQ29tcG9uZW50LFxyXG4gICAgICBBY3RpdmVNZW51RGlyZWN0aXZlLFxyXG4gICAgICBQYWdlUmliYm9uQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIE9wdGlvbnNQcm92aWRlclxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW0pveXJpZGVTdGVwQ29tcG9uZW50XSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0c01vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY3RpdmF0ZScsIHtcclxuICAgICAgICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgna2V5Jywga2V5KVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZVNlcnZpY2UgfSBmcm9tICcuL2FjdGl2YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYWN0aXZhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGl2YXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhY3RpdmF0ZVNlcnZpY2U6IEFjdGl2YXRlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBsb2dpbk1vZGFsU2VydmljZTogTG9naW5Nb2RhbFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVNlcnZpY2UuZ2V0KHBhcmFtc1sna2V5J10pLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZUNvbXBvbmVudCB9IGZyb20gJy4vYWN0aXZhdGUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBhY3RpdmF0ZVJvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICdhY3RpdmF0ZScsXHJcbiAgICBjb21wb25lbnQ6IEFjdGl2YXRlQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdBdGl2YcODwqfDg8KjbydcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBzYXZlKG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGN1cnJlbnRQYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvY2hhbmdlLXBhc3N3b3JkJywgeyBjdXJyZW50UGFzc3dvcmQsIG5ld1Bhc3N3b3JkIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4vcGFzc3dvcmQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi8uLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Bhc3N3b3JkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZG9Ob3RNYXRjaDogc3RyaW5nO1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIGFjY291bnQ6IGFueTtcclxuICAgIGN1cnJlbnRQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgbmV3UGFzc3dvcmQ6IHN0cmluZztcclxuICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHBhc3N3b3JkU2VydmljZTogUGFzc3dvcmRTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5ld1Bhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1QYXNzd29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5kb05vdE1hdGNoID0gJ0VSUk9SJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkU2VydmljZS5zYXZlKHRoaXMubmV3UGFzc3dvcmQsIHRoaXMuY3VycmVudFBhc3N3b3JkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7UGFzc3dvcmRDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ3Bhc3N3b3JkJyxcclxuICAgIGNvbXBvbmVudDogUGFzc3dvcmRDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnLCdST0xFX0FETUlOJ10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnU2VuaGEnXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59O1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFJlc2V0RmluaXNoU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgc2F2ZShrZXlBbmRQYXNzd29yZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvcmVzZXQtcGFzc3dvcmQvZmluaXNoJywga2V5QW5kUGFzc3dvcmQpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1Bhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2dpbk1vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9naW4vbG9naW4tbW9kYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXBhc3N3b3JkLXJlc2V0LWZpbmlzaCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtcmVzZXQtZmluaXNoLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBjb25maXJtUGFzc3dvcmQ6IHN0cmluZztcclxuICAgIGRvTm90TWF0Y2g6IHN0cmluZztcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcbiAgICBrZXlNaXNzaW5nOiBib29sZWFuO1xyXG4gICAgcmVzZXRBY2NvdW50OiBhbnk7XHJcbiAgICBzdWNjZXNzOiBzdHJpbmc7XHJcbiAgICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcbiAgICBrZXk6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlOiBQYXNzd29yZFJlc2V0RmluaXNoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXJcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmtleSA9IHBhcmFtc1sna2V5J107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZXNldEFjY291bnQgPSB7fTtcclxuICAgICAgICB0aGlzLmtleU1pc3NpbmcgPSAhdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjcGFzc3dvcmQnKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjcGFzc3dvcmQnKSwgJ2ZvY3VzJywgW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaW5pc2hSZXNldCgpIHtcclxuICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc2V0QWNjb3VudC5wYXNzd29yZCAhPT0gdGhpcy5jb25maXJtUGFzc3dvcmQpIHtcclxuICAgICAgICAgICAgdGhpcy5kb05vdE1hdGNoID0gJ0VSUk9SJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlLnNhdmUoeyBrZXk6IHRoaXMua2V5LCBuZXdQYXNzd29yZDogdGhpcy5yZXNldEFjY291bnQucGFzc3dvcmQgfSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50IH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlc2V0RmluaXNoUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ3Jlc2V0L2ZpbmlzaCcsXHJcbiAgICBjb21wb25lbnQ6IFBhc3N3b3JkUmVzZXRGaW5pc2hDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ1NlbmhhJ1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFJlc2V0SW5pdFNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgc2F2ZVR3b0ZhY3RvcihyZXNldEFjY291bnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvcmVzZXQtcGFzc3dvcmQtdHdvZmFjdG9yL2luaXQnLCByZXNldEFjY291bnQpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZShtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY2NvdW50L3Jlc2V0LXBhc3N3b3JkL2luaXQnLCBtYWlsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYXNzd29yZFJlc2V0SW5pdFNlcnZpY2V9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQtaW5pdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtFTUFJTF9OT1RfRk9VTkRfVFlQRX0gZnJvbSAnLi4vLi4vLi4vdXRpbC9lcnJvci5jb25zdGFudHMnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gXCIuLi8uLi8uLi91dGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1wYXNzd29yZC1yZXNldC1pbml0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtcmVzZXQtaW5pdC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBlcnJvcjogc3RyaW5nO1xyXG4gIGVycm9yRW1haWxOb3RFeGlzdHM6IHN0cmluZztcclxuICByZXNldEFjY291bnQ6IGFueTtcclxuICB0d29GYWN0b3I6IGJvb2xlYW47XHJcbiAgcmVzZXRCeUxvZ2luT3JFbWFpbDogYm9vbGVhbjtcclxuICBzdWNjZXNzOiBzdHJpbmc7XHJcbiAgZW1haWxTdWNlc3M6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhc3N3b3JkUmVzZXRJbml0U2VydmljZTogUGFzc3dvcmRSZXNldEluaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvcHRpb25zUHJvdmlkZXI6IE9wdGlvbnNQcm92aWRlcixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVzZXRBY2NvdW50ID0ge307XHJcbiAgICB0aGlzLnR3b0ZhY3RvciA9IHRoaXMub3B0aW9uc1Byb3ZpZGVyLnR3b0ZhY3RvcjtcclxuICAgIHRoaXMucmVzZXRCeUxvZ2luT3JFbWFpbCA9IHRoaXMub3B0aW9uc1Byb3ZpZGVyLnJlc2V0QnlMb2dpbk9yRW1haWw7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmludm9rZUVsZW1lbnRNZXRob2QodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2VtYWlsSW5wdXQnKSwgJ2ZvY3VzJywgW10pO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdFJlc2V0KCkge1xyXG4gICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICB0aGlzLmVycm9yRW1haWxOb3RFeGlzdHMgPSBudWxsO1xyXG5cclxuICAgIGxldCByZXN1bHQ6IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgICBpZiAodGhpcy50d29GYWN0b3IpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wYXNzd29yZFJlc2V0SW5pdFNlcnZpY2Uuc2F2ZVR3b0ZhY3Rvcih0aGlzLnJlc2V0QWNjb3VudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLnBhc3N3b3JkUmVzZXRJbml0U2VydmljZS5zYXZlKHRoaXMucmVzZXRBY2NvdW50LmVtYWlsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXN1bHQuc3Vic2NyaWJlKFxyXG4gICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChyZXNwb25zZS5ib2R5KSA9PT0gdHJ1ZSAmJiBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHJlc3BvbnNlLmJvZHkuZW1haWwpKXtcclxuICAgICAgICAgIHRoaXMuZW1haWxTdWNlc3MgPSAnICgnICsgcmVzcG9uc2UuYm9keS5lbWFpbCArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgfSxcclxuICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IEVNQUlMX05PVF9GT1VORF9UWVBFKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yRW1haWxOb3RFeGlzdHMgPSAnRVJST1InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50IH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgY29uc3QgcGFzc3dvcmRSZXNldEluaXRSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAncmVzZXQvcmVxdWVzdCcsXHJcbiAgICBjb21wb25lbnQ6IFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdTZW5oYSdcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XG5pbXBvcnQge0poaUxhbmd1YWdlSGVscGVyfSBmcm9tICcuLi8uLi9sYW5ndWFnZS9sYW5ndWFnZS5oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2poaS1zZXR0aW5ncycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmdzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBzdWNjZXNzOiBzdHJpbmc7XG4gICAgc2V0dGluZ3NBY2NvdW50OiBhbnk7XG4gICAgbGFuZ3VhZ2VzOiBhbnlbXTtcbiAgICBtZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhY2NvdW50OiBBY2NvdW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IEpoaUxhbmd1YWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZUhlbHBlcjogSmhpTGFuZ3VhZ2VIZWxwZXIsXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvc1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KCkudGhlbihhY2NvdW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50ID0gdGhpcy5jb3B5QWNjb3VudChhY2NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuYnVzY2FyTWVuc2FnZW1BdHVhbGl6YWNhb0NhZGFzdHJhbCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYW5ndWFnZUhlbHBlci5nZXRBbGwoKS50aGVuKGxhbmd1YWdlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcyA9IGxhbmd1YWdlcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NBY2NvdW50ICYmIHRoaXMuc2V0dGluZ3NBY2NvdW50LnRlbGVmb25lKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzQWNjb3VudC50ZWxlZm9uZSA9IHRoaXMuc2V0dGluZ3NBY2NvdW50LnRlbGVmb25lLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY2NvdW50LnNhdmUodGhpcy5zZXR0aW5nc0FjY291bnQpLnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xuICAgICAgICAgICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KHRydWUpLnRoZW4oYWNjb3VudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50ID0gdGhpcy5jb3B5QWNjb3VudChhY2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNjYXJNZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpLnRoZW4oY3VycmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzQWNjb3VudC5sYW5nS2V5ICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5jaGFuZ2VMYW5ndWFnZSh0aGlzLnNldHRpbmdzQWNjb3VudC5sYW5nS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvcHlBY2NvdW50KGFjY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGl2YXRlZDogYWNjb3VudC5hY3RpdmF0ZWQsXG4gICAgICAgICAgICBlbWFpbDogYWNjb3VudC5lbWFpbCxcbiAgICAgICAgICAgIGZpcnN0TmFtZTogYWNjb3VudC5maXJzdE5hbWUsXG4gICAgICAgICAgICBsYW5nS2V5OiBhY2NvdW50LmxhbmdLZXksXG4gICAgICAgICAgICBsYXN0TmFtZTogYWNjb3VudC5sYXN0TmFtZSxcbiAgICAgICAgICAgIGxvZ2luOiBhY2NvdW50LmxvZ2luLFxuICAgICAgICAgICAgaW1hZ2VVcmw6IGFjY291bnQuaW1hZ2VVcmwsXG4gICAgICAgICAgICB0ZWxlZm9uZTogYWNjb3VudC50ZWxlZm9uZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVzY2FyTWVuc2FnZW1BdHVhbGl6YWNhb0NhZGFzdHJhbCgpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9zU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKCdNRU5TQUdFTV9BVFVBTElaQUNBT19DQURBU1RSQUwnKVxuICAgICAgICAgICAgLnRoZW4ocGFyYW1ldHJvID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnNhZ2VtQXR1YWxpemFjYW9DYWRhc3RyYWwgPSBwYXJhbWV0cm8gJiYgcGFyYW1ldHJvLnZhbG9yO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7U2V0dGluZ3NDb21wb25lbnR9IGZyb20gJy4vc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ3NldHRpbmdzJyxcclxuICAgIGNvbXBvbmVudDogU2V0dGluZ3NDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnLCAnUk9MRV9BRE1JTiddLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0NvbmZpZ3VyYcODwqfDg8KjbydcclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbn07XHJcbiIsImltcG9ydCB7Um91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge2FjdGl2YXRlUm91dGV9IGZyb20gJy4vYWN0aXZhdGUvYWN0aXZhdGUucm91dGUnO1xyXG5pbXBvcnQge3Bhc3N3b3JkUm91dGV9IGZyb20gJy4vcGFzc3dvcmQvcGFzc3dvcmQucm91dGUnO1xyXG5pbXBvcnQge3Bhc3N3b3JkUmVzZXRGaW5pc2hSb3V0ZX0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLnJvdXRlJztcclxuaW1wb3J0IHtwYXNzd29yZFJlc2V0SW5pdFJvdXRlfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5yb3V0ZSc7XHJcbmltcG9ydCB7c2V0dGluZ3NSb3V0ZX0gZnJvbSAnLi9zZXR0aW5ncy9zZXR0aW5ncy5yb3V0ZSc7XHJcblxyXG5jb25zdCBBQ0NPVU5UX1JPVVRFUyA9IFthY3RpdmF0ZVJvdXRlLCBwYXNzd29yZFJvdXRlLCBwYXNzd29yZFJlc2V0RmluaXNoUm91dGUsIHBhc3N3b3JkUmVzZXRJbml0Um91dGUsIHNldHRpbmdzUm91dGVdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFjY291bnRTdGF0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgIGNoaWxkcmVuOiBBQ0NPVU5UX1JPVVRFU1xyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge2FjY291bnRTdGF0ZX0gZnJvbSAnLi9hY2NvdW50LnJvdXRlJztcclxuaW1wb3J0IHtBY3RpdmF0ZUNvbXBvbmVudH0gZnJvbSAnLi9hY3RpdmF0ZS9hY3RpdmF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1Bhc3N3b3JkQ29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkL3Bhc3N3b3JkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFzc3dvcmRSZXNldEluaXRDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7U2V0dGluZ3NDb21wb25lbnR9IGZyb20gJy4vc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VNb2R1bG99IGZyb20gJy4uL2xhbmd1YWdlL2ZpbmQtbGFuZ3VhZ2UubW9kdWxvJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFTYXZlfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFTYXZlJztcclxuaW1wb3J0IHtmYUNoZWNrfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFDaGVjayc7XHJcbmltcG9ydCB7UGFzc3dvcmRTdHJlbmd0aE1vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aC9wYXNzd29yZC1zdHJlbmd0aC5tb2R1bGUnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSBcIi4uL3V0aWwvb3B0aW9ucy1wcm92aWRlclwiO1xyXG5cclxubGlicmFyeS5hZGQoZmFTYXZlKTtcclxubGlicmFyeS5hZGQoZmFDaGVjayk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBGaW5kTGFuZ3VhZ2VNb2R1bG8sXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBQYXNzd29yZFN0cmVuZ3RoTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoYWNjb3VudFN0YXRlKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBBY3RpdmF0ZUNvbXBvbmVudCxcclxuICAgICAgUGFzc3dvcmRDb21wb25lbnQsXHJcbiAgICAgIFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50LFxyXG4gICAgICBQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50LFxyXG4gICAgICBTZXR0aW5nc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBPcHRpb25zUHJvdmlkZXJcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGaWx0ZXJQaXBlfSBmcm9tICcuLi8uLi9waXBlL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHtHcmlkQWN0aW9uc30gZnJvbSAnLi9ncmlkLmFjdGlvbnMnO1xyXG5pbXBvcnQge0dyaWRQcmludH0gZnJvbSAnLi9ncmlkLnByaW50JztcclxuaW1wb3J0IHtHcmlkTWFza30gZnJvbSAnLi9ncmlkLm1hc2snO1xyXG5pbXBvcnQge01hc2tQaXBlfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZ3JpZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IHtcclxuICBwdWJsaWMgc2VhcmNoOiBzdHJpbmc7XHJcbiAgcHVibGljIHBhZ2VTaXplID0gNTtcclxuICBwdWJsaWMgcGFnZSA9IDE7XHJcbiAgcHVibGljIGlzVmlldyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0VkaXQgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEZWxldGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNTYXZlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2VhcmNoID0gdHJ1ZTtcclxuICBwdWJsaWMgaXNQcmludCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpdGVuczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHB1YmxpYyBjb2x1bW5zOkFycmF5PHN0cmluZz4gPSBbXTtcclxuICBwdWJsaWMgaGVhZGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gIHB1YmxpYyBncmlkQWN0aW9uczogR3JpZEFjdGlvbnM7XHJcbiAgcHVibGljIGdyaWRQcmludDogR3JpZFByaW50O1xyXG4gIHB1YmxpYyBncmlkTWFzazogR3JpZE1hc2s7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnUGVzcXVpc2FyIHBvciBxdWFscXVlciBjYW1wby4uLic7XHJcbiAgcHVibGljIGl0ZW5zU2luZ2xldG9uOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJQaXBlOiBGaWx0ZXJQaXBlLFxyXG4gICAgcHJpdmF0ZSBtYXNrUGlwZTogTWFza1BpcGUpIHtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9WaWV3KGlzVG9WaWV3OiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMuaXNWaWV3ID0gaXNUb1ZpZXc7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvRWRpdChpc0VkaXQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNFZGl0ID0gaXNFZGl0O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb0RlbGV0ZShpc0RlbGV0ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0RlbGV0ZSA9IGlzRGVsZXRlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb1NhdmUoaXNTYXZlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9TZWFyY2goaXNTZWFyY2g6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNTZWFyY2ggPSBpc1NlYXJjaDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9QcmludChpc1ByaW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzUHJpbnQgPSBpc1ByaW50O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZykge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRJdGVucyhpdGVucykge1xyXG4gICAgdGhpcy5pdGVucyA9IGl0ZW5zO1xyXG4gICAgdGhpcy5pdGVuc1NpbmdsZXRvbiA9IGl0ZW5zO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0Q29sdW1ucyhjb2x1bW5zOiBbXSkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNldEhlYWRlcnMoaGVhZGVyczogW10pIHtcclxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRNYXNrKGdyaWRNYXNrOiBHcmlkTWFzaykge1xyXG4gICAgdGhpcy5ncmlkTWFzayA9IGdyaWRNYXNrO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYWRkTGlzdGVuZXIoY29tcG9uZW50OiBHcmlkQWN0aW9ucyB8IEdyaWRQcmludCkge1xyXG4gICAgaWYgKChjb21wb25lbnQgYXMgR3JpZEFjdGlvbnMpLnRvVmlldykge1xyXG4gICAgICB0aGlzLmdyaWRBY3Rpb25zID0gY29tcG9uZW50IGFzIEdyaWRBY3Rpb25zO1xyXG4gICAgfVxyXG4gICAgaWYgKChjb21wb25lbnQgYXMgR3JpZFByaW50KS50b1ByaW50KSB7XHJcbiAgICAgIHRoaXMuZ3JpZFByaW50ID0gY29tcG9uZW50IGFzIEdyaWRQcmludDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2ggIT09ICcnICYmIHRoaXMuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLml0ZW5zID0gdGhpcy5nZXRJdGVucygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmFsdWVJdGVtKGl0ZW06IGFueSwgY29sdW1uOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgbWFzayA9IHRoaXMuZ2V0TWFzayhjb2x1bW4pO1xyXG4gICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl07XHJcbiAgICBpZiAobWFzayAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hc2tQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgbWFzaylcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVucygpOiBBcnJheTxhbnk+IHtcclxuICAgIHRoaXMuaXRlbnMgPSB0aGlzLml0ZW5zU2luZ2xldG9uO1xyXG4gICAgbGV0IGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBjb2x1bW4gb2YgdGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgIGZpbHRlcnNbY29sdW1uXSA9IHRoaXMuc2VhcmNoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaC5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlclBpcGUudHJhbnNmb3JtKHRoaXMuaXRlbnMsIGZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLml0ZW5zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXNrKGNvbHVtbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBncmlkTWFzayA9IHRoaXMuZ3JpZE1hc2s7XHJcbiAgICBpZiAoZ3JpZE1hc2sgIT0gbnVsbCAmJiBjb2x1bW4gPT09IGdyaWRNYXNrLmNvbHVtbikge1xyXG4gICAgICByZXR1cm4gZ3JpZE1hc2subWFzaztcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9WaWV3KGl0ZW0pIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZEFjdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmdyaWRBY3Rpb25zLnRvVmlldyhpdGVtKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9FZGl0KGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdyaWRBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9FZGl0KGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9EZWxldGUoaXRlbSkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFjdGlvbnMpIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICB0aXRsZTogJ0Rlc2VqYSBleGNsdWlyPycsXHJcbiAgICAgICAgdGV4dDogXCJPcGVyYcODwqfDg8KjbyBuw4PCo28gcG9kZSBzZXIgZGVzZmVpdGEhXCIsXHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiAnIzMwODVkNicsXHJcbiAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6ICcjZDMzJyxcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ1NpbSEnLFxyXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICdOw4PCo28nXHJcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9EZWxldGUoaXRlbSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvU2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9TYXZlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1ByaW50KGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdyaWRQcmludCkge1xyXG4gICAgICB0aGlzLmdyaWRQcmludC50b1ByaW50KGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5pdGVucyA9IHRoaXMuaXRlbnNTaW5nbGV0b247XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFUaW1lc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVGltZXMnO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7RmlsdGVyUGlwZX0gZnJvbSAnLi4vLi4vcGlwZS9maWx0ZXIucGlwZSc7XHJcbmltcG9ydCB7R3JpZENvbXBvbmVudH0gZnJvbSAnLi9ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge01hc2tQaXBlLCBOZ3hNYXNrTW9kdWxlfSBmcm9tICduZ3gtbWFzayc7XHJcblxyXG5saWJyYXJ5LmFkZChmYVRpbWVzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBOZ3hNYXNrTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbR3JpZENvbXBvbmVudF0sXHJcbiAgICBleHBvcnRzOiBbR3JpZENvbXBvbmVudF0sXHJcbiAgICBwcm92aWRlcnM6IFtGaWx0ZXJQaXBlLCBNYXNrUGlwZV0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRNb2R1bGUgeyB9XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSUdyaWRNYXNrIHtcclxuICBjb2x1bW4/OiBzdHJpbmc7XHJcbiAgbWFzaz86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRNYXNrIGltcGxlbWVudHMgSUdyaWRNYXNrIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgY29sdW1uPzogc3RyaW5nLFxyXG4gICAgICBwdWJsaWMgbWFzaz86IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbInRzbGliXzEuX192YWx1ZXMiLCJJbmplY3Rpb25Ub2tlbiIsIkluamVjdGFibGUiLCJJbmplY3QiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsIkV2ZW50RW1pdHRlciIsIkRpcmVjdGl2ZSIsIk5HX1ZBTElEQVRPUlMiLCJFbGVtZW50UmVmIiwiT3B0aW9uYWwiLCJJbnB1dCIsIk91dHB1dCIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiQ3J5cHRvSlMuZW5jIiwiQ3J5cHRvSlMuQUVTIiwiQ3J5cHRvSlMucGFkIiwiQ3J5cHRvSlMubW9kZSIsIkh0dHBQYXJhbXMiLCJOZ2JEYXRlQWRhcHRlciIsIk5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIiLCJMb2NrUGFnZSIsIkNvbXBvbmVudCIsIk5nYkFjdGl2ZU1vZGFsIiwiVmlld0NoaWxkIiwiTmdiTW9kYWwiLCJsaWJyYXJ5IiwiZmFzIiwiUGRmSnNWaWV3ZXJNb2R1bGUiLCJOZ2JNb2R1bGUiLCJGb250QXdlc29tZU1vZHVsZSIsIkNVU1RPTV9FTEVNRU5UU19TQ0hFTUEiLCJQaXBlIiwiZmFUaW1lcyIsImZhQmFuIiwiZmFCZWxsIiwiQ29tbW9uTW9kdWxlIiwiTmdKaGlwc3Rlck1vZHVsZSIsIkh0dHBDbGllbnQiLCJTZWN1cml0eUNvbnRleHQiLCJTYW5pdGl6ZXIiLCJKaGlDb25maWdTZXJ2aWNlIiwiVHJhbnNsYXRlU2VydmljZSIsIkpoaUV2ZW50TWFuYWdlciIsIkZvcm1zTW9kdWxlIiwidHJpZ2dlciIsInN0YXRlIiwic3R5bGUiLCJ0cmFuc2l0aW9uIiwiYW5pbWF0ZSIsIkpveXJpZGVTZXJ2aWNlIiwiTmcyRml0dGV4dE1vZHVsZSIsIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiwiU0VSVkVSX0FQSV9VUkwiLCJOR19WQUxVRV9BQ0NFU1NPUiIsImZvcndhcmRSZWYiLCJTdWJqZWN0IiwiSmhpTGFuZ3VhZ2VTZXJ2aWNlIiwiU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIiwiUm91dGVyIiwiTG9jYXRpb24iLCJEb21TYW5pdGl6ZXIiLCJUZW1wbGF0ZVJlZiIsIlZpZXdDb250YWluZXJSZWYiLCJtYXAiLCJPYnNlcnZhYmxlIiwiTG9jYWxTdG9yYWdlU2VydmljZSIsImZvcmtKb2luIiwiTmdab25lIiwiQ2hhbmdlRGV0ZWN0b3JSZWYiLCJSZWNhcHRjaGFDb21tb25Nb2R1bGUiLCJSZWNhcHRjaGFNb2R1bGUiLCJCZWhhdmlvclN1YmplY3QiLCJmYUV5ZSIsIkNvb2tpZVNlcnZpY2UiLCJSZW5kZXJlciIsImRlYm91bmNlVGltZSIsImlzRGV2TW9kZSIsImZhVXNlclBsdXMiLCJOZ3hNYXNrTW9kdWxlIiwiZmFVc2VyIiwiUmVuZGVyZXJGYWN0b3J5MiIsIlRpdGxlIiwiUm91dGVyTW9kdWxlIiwiSmhpUGFyc2VMaW5rcyIsIkFjdGl2YXRlZFJvdXRlIiwiRGF0ZVBpcGUiLCJKaGlSZXNvbHZlUGFnaW5nUGFyYW1zIiwiRU5USVRZX1NUQVRFUyIsIkh0dHBSZXNwb25zZSIsImNhdGNoRXJyb3IiLCJ0aHJvd0Vycm9yIiwidGFwIiwiSHR0cEVycm9yUmVzcG9uc2UiLCJmaWx0ZXIiLCJvZiIsIkpoaURhdGFVdGlscyIsIk5nYlBhZ2luYXRpb25Db25maWciLCJlbmFibGVQcm9kTW9kZSIsIlRpcG9QZXNzb2FOYW1lc3BhY2UiLCJTaXR1YWNhb0NvbnRyaWJ1aW50ZU5hbWVzcGFjZSIsIlRpcG9SZXNwb25zYXZlbE5hbWVzcGFjZSIsIlRpcG9JbW92ZWxOYW1lc3BhY2UiLCJQbGF0Zm9ybUxvY2F0aW9uIiwiTmF2aWdhdGlvbkVuZCIsIkxvYWRpbmdCYXJIdHRwQ2xpZW50TW9kdWxlIiwiSm95cmlkZU1vZHVsZSIsIkpveXJpZGVTdGVwQ29tcG9u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QUUsQ0FBQzs0QkFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pELEtBQUssQ0FBQzs0QkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pEOzRCQUNJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUFDLFNBQVM7NkJBQUU7NEJBQzVHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUFDLE1BQU07NkJBQUU7NEJBQ3RGLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dDQUFDLE1BQU07NkJB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
|
|
16372
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1wb3J0YWwudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NwZi1jbnBqLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9kb2N1bWVudG8udXRpbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvY3BmLWNucGovY3BmLWNucGoudmFsaWRhdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9vcHRpb25zLXByb3ZpZGVyLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai52YWxpZGF0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5kaXJlY3RpdmUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL3V0aWwtZnVuY3Rpb25zLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9lbmNvZGUtZGVjb2RlLWJhc2U2NC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvcmVxdWVzdC11dGlsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9kYXRlcGlja2VyLWFkYXB0ZXIudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL2Vycm9yLmNvbnN0YW50cy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL3V0aWwtYXJxdWl2by50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvbG9jay1wYWdlcy1tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGRmL3BkZi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BkZi9wZGYuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGRmL3BkZi5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS1mcm9tLWtleS5waXBlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS5tb2R1bG8udHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGFyYW1ldHJvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm8ucmVzdWx0LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC91dGlsLW1lbnNhZ2VtLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9hbGVydC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9hbGVydC1lcnJvci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY2FtcG9zLXByZWVuY2hpbWVudG8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jb250cmlidWludGUubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2FqdWRhL2FqdWRhLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9nbG9iYWwuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvYWp1ZGEvYWp1ZGEubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3MubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy90ZXJtby1sZ3BkL3Rlcm1vLWxncGQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Rlcm1vLWxncGQubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2Nvb2tpZS1jb25zZW50L2Nvb2tpZS1jb25zZW50LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvY29va2llLWNvbnNlbnQvY29va2llLWNvbnNlbnQubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9hY2NvdW50LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYWdpbmEtcGFyYW1ldHJpemFkYS9wYWdpbmEtcGFyYW1ldHJpemFkYS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2hhcy1hbnktYXV0aG9yaXR5LmRpcmVjdGl2ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvc3RhdGUtc3RvcmFnZS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9hdXRoLWp3dC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9hdXRoLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFnaW5hLXBhcmFtZXRyaXphZGEvcGFnaW5hLXBhcmFtZXRyaXphZGEubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9tdWx0aXBsZS1jYXB0Y2hhL211bHRpcGxlLWNhcHRjaGEubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9tdWx0aXBsZS1jYXB0Y2hhL2kxOG4vcHQtYnIudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9jc3JmLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sb2dpbi9sb2dpbi5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXIuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3JlZ2lzdGVyL3JlZ2lzdGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3JlZ2lzdGVyL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXIuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9hY2NvdW50Lm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdXNlci5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2VtcHJlc2EubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9tZW51Lm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2F1ZGl0Lm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvYXVkaXQtZGF0YS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2xvZy5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Byb2ZpbGUtaW5mby5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL211bmljaXBpby5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2VuZGVyZWNvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGFpcy5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3RpcG8tbG9ncmFkb3Vyby5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGVzc29hLWZpc2ljYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Blc3NvYS1qdXJpZGljYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3Jlc3BvbnNhdmVsLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdmlhLWNlcC5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NlcnRpZGFvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY29uZmlndXJhY2FvLXBhcmNlbGFtZW50by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2ltb3ZlbC5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2RhZG9zLWRlYml0by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2RlYml0by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2VudW1zLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZ2VyYWNhby1ib2xldG8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYXJjZWxhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGFyY2VsYW1lbnRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY29uc3RhbnRzLWVudW0ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLWJhci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xhbmd1YWdlL2xhbmd1YWdlLmNvbnN0YW50cy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS1yb3V0ZXMuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9nYXRld2F5L2dhdGV3YXkucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9nYXRld2F5L2dhdGV3YXkubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vYXVkaXRzL2F1ZGl0cy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vYXVkaXRzL2F1ZGl0cy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vYXVkaXRzL2F1ZGl0cy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24ucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24ubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL21ldHJpY3MvbWV0cmljcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL21ldHJpY3MvbWV0cmljcy5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL21ldHJpY3MvbWV0cmljcy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9kb2NzL2RvY3MuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZG9jcy9kb2NzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZG9jcy9kb2NzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2hlYWx0aC9oZWFsdGguc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2hlYWx0aC9oZWFsdGgtbW9kYWwuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9oZWFsdGgvaGVhbHRoLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9sb2dzL2xvZ3Muc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9sb2dzL2xvZ3Mucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9sb2dzL2xvZ3MubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3IvYXV0aC5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2ludGVyY2VwdG9yL2F1dGgtZXhwaXJlZC5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2ludGVyY2VwdG9yL2Vycm9yaGFuZGxlci5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2ludGVyY2VwdG9yL25vdGlmaWNhdGlvbi5pbnRlcmNlcHRvci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21lbnUvbWVudS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ob21lL2hvbWUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaG9tZS9ob21lLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaG9tZS9ob21lLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21lbnUvbWVudS11cGRhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LWRldGFpbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51Lm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2VtcHJlc2EvZW1wcmVzYS11cGRhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLWRldGFpbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2Jsb2Nrcy91aWItcGFnaW5hdGlvbi5jb25maWcudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ibG9ja3MvcHJvZC5jb25maWcudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9waXBlL2VuZGVyZWNvLXByaW5jaXBhbC1mb3JtYXRhZG8ucGlwZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvZW51bS1zdHJpbmcucGlwZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvZmlsdGVyLnBpcGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9waXBlL3BpcGUubW9kdWxvLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9lcnJvci9lcnJvci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2Vycm9yL2Vycm9yLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9wcm9maWxlcy9wcm9maWxlLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL25hdmJhci9uYXZiYXIuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9uYXZiYXIvbmF2YmFyLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9tYWluL21haW4uY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9uYXZiYXIvYWN0aXZlLW1lbnUuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9wcm9maWxlcy9wYWdlLXJpYmJvbi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGF5b3V0cy9sYXlvdXRzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWN0aXZhdGUvYWN0aXZhdGUuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWN0aXZhdGUvYWN0aXZhdGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY3RpdmF0ZS9hY3RpdmF0ZS5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQvcGFzc3dvcmQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQvcGFzc3dvcmQuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC9wYXNzd29yZC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvZmluaXNoL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvZmluaXNoL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9zZXR0aW5ncy9zZXR0aW5ncy5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWNjb3VudC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvYWNjb3VudC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5tYXNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gUmVhbFRpbWVNYXNrVHlwZSB7XHJcbiAgICBOT05FLFxyXG4gICAgUExBQ0VIT0xERVIsXHJcbiAgICBDTEFTU0lDXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERvY1R5cGUge1xyXG4gIENQRixcclxuICBDTlBKLFxyXG4gIEJPVEhcclxufVxyXG4iLCJpbXBvcnQge0RvY1R5cGV9IGZyb20gJy4uL21vZGVsL2NwZi1jbnBqLm1vZGVsJztcclxuXHJcbmNvbnN0IERPQ1VNRU5UX1NMT1RfUkVHRVggPSAvWzAtOWEtekEtWl9dLztcclxuY29uc3QgTk9OX0FMUEhBTlVNRVJJQ19SRUdFWCA9IC9bXjAtOWEtekEtWl0vZztcclxuY29uc3QgTk9OX0RJR0lUX1JFR0VYID0gL1xcRC9nO1xyXG5jb25zdCBBTExPV0VEX0ZPUk1BVFRFRF9SRUdFWCA9IC9eWzAtOWEtekEtWi5fL1xcLVxcc10qJC87XHJcbmNvbnN0IENOUEpfV0VJR0hUU19GSVJTVCA9IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuY29uc3QgQ05QSl9XRUlHSFRTX1NFQ09ORCA9IFs2LCA1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXTtcclxuXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudG9VdGlsIHtcclxuICBzdGF0aWMgbm9ybWFsaXphckRvY3VtZW50byhkb2N1bWVudG86IHN0cmluZywgY25wakFsZmFudW1lcmljbyA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGlmICghZG9jdW1lbnRvKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoZG9jdW1lbnRvKS5yZXBsYWNlKE5PTl9BTFBIQU5VTUVSSUNfUkVHRVgsICcnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0cmluZyhkb2N1bWVudG8pLnJlcGxhY2UoTk9OX0RJR0lUX1JFR0VYLCAnJyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbm9ybWFsaXphckNwZihkb2N1bWVudG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWRvY3VtZW50bykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nKGRvY3VtZW50bykucmVwbGFjZShOT05fRElHSVRfUkVHRVgsICcnKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb250YXJDYXJhY3RlcmVzRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nLCBjbnBqQWxmYW51bWVyaWNvID0gZmFsc2UpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkb2N1bWVudG8pIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBpZiAoY25wakFsZmFudW1lcmljbykge1xyXG4gICAgICByZXR1cm4gZG9jdW1lbnRvLnJlcGxhY2UoTk9OX0FMUEhBTlVNRVJJQ19SRUdFWCwgJycpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiBkb2N1bWVudG8ucmVwbGFjZShOT05fRElHSVRfUkVHRVgsICcnKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgb2J0ZXJDdXJzb3IoZG9jdW1lbnRvRm9ybWF0YWRvOiBzdHJpbmcsIHF1YW50aWRhZGVDYXJhY3RlcmVzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkb2N1bWVudG9Gb3JtYXRhZG8gfHwgcXVhbnRpZGFkZUNhcmFjdGVyZXMgPD0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdmlzdG9zID0gMDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb2N1bWVudG9Gb3JtYXRhZG8ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGlmICghRE9DVU1FTlRfU0xPVF9SRUdFWC50ZXN0KGRvY3VtZW50b0Zvcm1hdGFkb1tpbmRleF0pKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZpc3RvcysrO1xyXG4gICAgICBpZiAodmlzdG9zID49IHF1YW50aWRhZGVDYXJhY3RlcmVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkb2N1bWVudG9Gb3JtYXRhZG8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxpbWl0YXJEb2N1bWVudG8oZG9jdW1lbnRvOiBzdHJpbmcsIGRvY1R5cGU6IERvY1R5cGUsIGNucGpBbGZhbnVtZXJpY28gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZG9jVHlwZSA9PT0gRG9jVHlwZS5DUEYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXphckNwZihkb2N1bWVudG8pLnN1YnN0cmluZygwLCAxMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjbnBqQWxmYW51bWVyaWNvKSB7XHJcbiAgICAgIGNvbnN0IGRvY3VtZW50b051bWVyaWNvID0gdGhpcy5ub3JtYWxpemFyQ3BmKGRvY3VtZW50byk7XHJcbiAgICAgIGlmIChkb2NUeXBlID09PSBEb2NUeXBlLkNOUEopIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnRvTnVtZXJpY28uc3Vic3RyaW5nKDAsIDE0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZG9jdW1lbnRvTnVtZXJpY28ubGVuZ3RoIDw9IDExKSB7XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50b051bWVyaWNvLnN1YnN0cmluZygwLCAxMSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRvY3VtZW50b051bWVyaWNvLnN1YnN0cmluZygwLCAxNCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvY1R5cGUgPT09IERvY1R5cGUuQ05QSikge1xyXG4gICAgICByZXR1cm4gdGhpcy5saW1pdGFyQ25wakFsZmFudW1lcmljbyhkb2N1bWVudG8pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRvY3VtZW50b05vcm1hbGl6YWRvID0gdGhpcy5ub3JtYWxpemFyRG9jdW1lbnRvKGRvY3VtZW50bywgdHJ1ZSk7XHJcbiAgICBpZiAoL1thLXpBLVpdLy50ZXN0KGRvY3VtZW50b05vcm1hbGl6YWRvKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5saW1pdGFyQ25wakFsZmFudW1lcmljbyhkb2N1bWVudG9Ob3JtYWxpemFkbyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3BmID0gdGhpcy5ub3JtYWxpemFyQ3BmKGRvY3VtZW50byk7XHJcbiAgICBpZiAoY3BmLmxlbmd0aCA8PSAxMSkge1xyXG4gICAgICByZXR1cm4gY3BmLnN1YnN0cmluZygwLCAxMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubGltaXRhckNucGpBbGZhbnVtZXJpY28oY3BmKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmb3JtYXRhckRvY3VtZW50byhkb2N1bWVudG86IHN0cmluZywgZG9jVHlwZTogRG9jVHlwZSwgcGxhY2Vob2xkZXIgPSBmYWxzZSwgY25wakFsZmFudW1lcmljbyA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvY3VtZW50b0xpbWl0YWRvID0gdGhpcy5saW1pdGFyRG9jdW1lbnRvKGRvY3VtZW50bywgZG9jVHlwZSwgY25wakFsZmFudW1lcmljbyk7XHJcbiAgICBpZiAoIWRvY3VtZW50b0xpbWl0YWRvICYmICFwbGFjZWhvbGRlcikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGlwb0VmZXRpdm8gPSB0aGlzLnRpcG9FZmV0aXZvKGRvY3VtZW50b0xpbWl0YWRvLCBkb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvKTtcclxuICAgIGlmICh0aXBvRWZldGl2byA9PT0gRG9jVHlwZS5DUEYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYXBsaWNhck1hc2NhcmEoZG9jdW1lbnRvTGltaXRhZG8sICcwMDAuMDAwLjAwMC0wMCcsIHBsYWNlaG9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5hcGxpY2FyTWFzY2FyYShkb2N1bWVudG9MaW1pdGFkbywgJzAwLjAwMC4wMDAvMDAwMC0wMCcsIHBsYWNlaG9sZGVyKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2YWxpZGFyRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nLCBkb2NUeXBlOiBEb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvID0gZmFsc2UpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIGlmICghZG9jdW1lbnRvKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvICYmICFBTExPV0VEX0ZPUk1BVFRFRF9SRUdFWC50ZXN0KFN0cmluZyhkb2N1bWVudG8pKSkge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkb2N1bWVudG9Ob3JtYWxpemFkbyA9IHRoaXMubGltaXRhckRvY3VtZW50byhkb2N1bWVudG8sIGRvY1R5cGUsIGNucGpBbGZhbnVtZXJpY28pO1xyXG4gICAgY29uc3QgdGlwb0VmZXRpdm8gPSB0aGlzLnRpcG9FZmV0aXZvKGRvY3VtZW50b05vcm1hbGl6YWRvLCBkb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvKTtcclxuXHJcbiAgICBpZiAodGlwb0VmZXRpdm8gPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXJDcGYoZG9jdW1lbnRvTm9ybWFsaXphZG8pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXJDbnBqQWxmYW51bWVyaWNvKGRvY3VtZW50b05vcm1hbGl6YWRvKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGFyQ25wak51bWVyaWNvKGRvY3VtZW50b05vcm1hbGl6YWRvKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0RvY3VtZW50b1ZhbGlkbyhkb2N1bWVudG86IHN0cmluZywgY25wakFsZmFudW1lcmljbyA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBkb2N1bWVudG9Ob3JtYWxpemFkbyA9IHRoaXMubm9ybWFsaXphckRvY3VtZW50byhkb2N1bWVudG8sIGNucGpBbGZhbnVtZXJpY28pO1xyXG4gICAgcmV0dXJuICEhZG9jdW1lbnRvTm9ybWFsaXphZG8gJiYgdGhpcy52YWxpZGFyRG9jdW1lbnRvKGRvY3VtZW50bywgRG9jVHlwZS5CT1RILCBjbnBqQWxmYW51bWVyaWNvKSA9PT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHRpcG9FZmV0aXZvKGRvY3VtZW50bzogc3RyaW5nLCBkb2NUeXBlOiBEb2NUeXBlLCBjbnBqQWxmYW51bWVyaWNvOiBib29sZWFuKTogRG9jVHlwZSB7XHJcbiAgICBpZiAoZG9jVHlwZSAhPT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgIHJldHVybiBkb2NUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjbnBqQWxmYW51bWVyaWNvICYmIC9bYS16QS1aXS8udGVzdChkb2N1bWVudG8pKSB7XHJcbiAgICAgIHJldHVybiBEb2NUeXBlLkNOUEo7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvY3VtZW50by5sZW5ndGggPiAxMSkge1xyXG4gICAgICByZXR1cm4gRG9jVHlwZS5DTlBKO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBEb2NUeXBlLkNQRjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGxpbWl0YXJDbnBqQWxmYW51bWVyaWNvKGRvY3VtZW50bzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRvY3VtZW50b05vcm1hbGl6YWRvID0gdGhpcy5ub3JtYWxpemFyRG9jdW1lbnRvKGRvY3VtZW50bywgdHJ1ZSkuc3Vic3RyaW5nKDAsIDE0KTtcclxuICAgIGxldCBkb2N1bWVudG9MaW1pdGFkbyA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkb2N1bWVudG9Ob3JtYWxpemFkby5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgY2FyYWN0ZXJlID0gZG9jdW1lbnRvTm9ybWFsaXphZG9baW5kZXhdO1xyXG4gICAgICBjb25zdCByZWdleCA9IGluZGV4IDwgMTIgPyAvWzAtOWEtekEtWl0vIDogL1xcZC87XHJcblxyXG4gICAgICBpZiAocmVnZXgudGVzdChjYXJhY3RlcmUpKSB7XHJcbiAgICAgICAgZG9jdW1lbnRvTGltaXRhZG8gKz0gY2FyYWN0ZXJlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRvY3VtZW50b0xpbWl0YWRvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXBsaWNhck1hc2NhcmEoZG9jdW1lbnRvOiBzdHJpbmcsIG1hc2NhcmE6IHN0cmluZywgcGxhY2Vob2xkZXI6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZG9jdW1lbnRvQmFzZSA9IHBsYWNlaG9sZGVyID8gdGhpcy5wcmVlbmNoZXJEaXJlaXRhKGRvY3VtZW50bywgdGhpcy5jb250YXJTbG90cyhtYXNjYXJhKSwgJ18nKSA6IGRvY3VtZW50bztcclxuICAgIGxldCByZXN1bHRhZG8gPSAnJztcclxuICAgIGxldCBpbmRpY2VEb2N1bWVudG8gPSAwO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2FyYWN0ZXJlTWFzY2FyYSBvZiBtYXNjYXJhKSB7XHJcbiAgICAgIGlmIChjYXJhY3RlcmVNYXNjYXJhID09PSAnMCcpIHtcclxuICAgICAgICBpZiAoaW5kaWNlRG9jdW1lbnRvID49IGRvY3VtZW50b0Jhc2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc3VsdGFkbyArPSBkb2N1bWVudG9CYXNlW2luZGljZURvY3VtZW50bysrXTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFwbGFjZWhvbGRlciAmJiBpbmRpY2VEb2N1bWVudG8gPj0gZG9jdW1lbnRvQmFzZS5sZW5ndGgpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzdWx0YWRvICs9IGNhcmFjdGVyZU1hc2NhcmE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGNvbnRhclNsb3RzKG1hc2NhcmE6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgcXVhbnRpZGFkZSA9IDA7XHJcblxyXG4gICAgZm9yIChjb25zdCBjYXJhY3RlcmUgb2YgbWFzY2FyYSkge1xyXG4gICAgICBpZiAoY2FyYWN0ZXJlID09PSAnMCcpIHtcclxuICAgICAgICBxdWFudGlkYWRlKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcXVhbnRpZGFkZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHByZWVuY2hlckRpcmVpdGEodmFsb3I6IHN0cmluZywgdGFtYW5obzogbnVtYmVyLCBjYXJhY3RlcmU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsb3IubGVuZ3RoID49IHRhbWFuaG8pIHtcclxuICAgICAgcmV0dXJuIHZhbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWxvciArIG5ldyBBcnJheSh0YW1hbmhvIC0gdmFsb3IubGVuZ3RoICsgMSkuam9pbihjYXJhY3RlcmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhckNwZihkb2N1bWVudG86IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgY29uc3QgY3BmID0gdGhpcy5ub3JtYWxpemFyQ3BmKGRvY3VtZW50byk7XHJcblxyXG4gICAgaWYgKGNwZi5sZW5ndGggIT09IDExKSB7XHJcbiAgICAgIHJldHVybiB7bGVuZ3RoOiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL14oXFxkKVxcMSskLy50ZXN0KGNwZikpIHtcclxuICAgICAgcmV0dXJuIHtlcXVhbERpZ2l0czogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnZhbGlkYXJDcGZEaWdpdG8oY3BmLCA5KSB8fCAhdGhpcy52YWxpZGFyQ3BmRGlnaXRvKGNwZiwgMTApKSB7XHJcbiAgICAgIHJldHVybiB7ZGlnaXQ6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhckNwZkRpZ2l0byhjcGY6IHN0cmluZywgcG9zaWNhb0RpZ2l0bzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29tYSA9IDA7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaWNhb0RpZ2l0bzsgaW5kZXgrKykge1xyXG4gICAgICBzb21hICs9IHBhcnNlSW50KGNwZltpbmRleF0sIDEwKSAqIChwb3NpY2FvRGlnaXRvICsgMSAtIGluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN0byA9IHNvbWEgJSAxMTtcclxuICAgIGNvbnN0IGRpZ2l0b0VzcGVyYWRvID0gcmVzdG8gPCAyID8gMCA6IDExIC0gcmVzdG87XHJcbiAgICByZXR1cm4gZGlnaXRvRXNwZXJhZG8gPT09IHBhcnNlSW50KGNwZltwb3NpY2FvRGlnaXRvXSwgMTApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhckNucGpOdW1lcmljbyhkb2N1bWVudG86IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgY29uc3QgY25waiA9IHRoaXMubm9ybWFsaXphckNwZihkb2N1bWVudG8pO1xyXG5cclxuICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gMTQpIHtcclxuICAgICAgcmV0dXJuIHtsZW5ndGg6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgvXihcXGQpXFwxKyQvLnRlc3QoY25waikpIHtcclxuICAgICAgcmV0dXJuIHtlcXVhbERpZ2l0czogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRhbWFuaG8gPSBjbnBqLmxlbmd0aCAtIDI7XHJcbiAgICBsZXQgbnVtZXJvcyA9IGNucGouc3Vic3RyaW5nKDAsIHRhbWFuaG8pO1xyXG4gICAgY29uc3QgZGlnaXRvcyA9IGNucGouc3Vic3RyaW5nKHRhbWFuaG8pO1xyXG4gICAgbGV0IHNvbWEgPSAwO1xyXG4gICAgbGV0IHBvcyA9IHRhbWFuaG8gLSA3O1xyXG5cclxuICAgIGZvciAobGV0IGkgPSB0YW1hbmhvOyBpID49IDE7IGktLSkge1xyXG4gICAgICBzb21hICs9IHBhcnNlSW50KG51bWVyb3MuY2hhckF0KHRhbWFuaG8gLSBpKSwgMTApICogcG9zLS07XHJcbiAgICAgIGlmIChwb3MgPCAyKSB7XHJcbiAgICAgICAgcG9zID0gOTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xyXG4gICAgaWYgKHJlc3VsdGFkby50b1N0cmluZygpICE9PSBkaWdpdG9zLmNoYXJBdCgwKSkge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICB0YW1hbmhvID0gdGFtYW5obyArIDE7XHJcbiAgICBudW1lcm9zID0gY25wai5zdWJzdHJpbmcoMCwgdGFtYW5obyk7XHJcbiAgICBzb21hID0gMDtcclxuICAgIHBvcyA9IHRhbWFuaG8gLSA3O1xyXG5cclxuICAgIGZvciAobGV0IGkgPSB0YW1hbmhvOyBpID49IDE7IGktLSkge1xyXG4gICAgICBzb21hICs9IHBhcnNlSW50KG51bWVyb3MuY2hhckF0KHRhbWFuaG8gLSBpKSwgMTApICogcG9zLS07XHJcbiAgICAgIGlmIChwb3MgPCAyKSB7XHJcbiAgICAgICAgcG9zID0gOTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XHJcbiAgICBpZiAocmVzdWx0YWRvLnRvU3RyaW5nKCkgIT09IGRpZ2l0b3MuY2hhckF0KDEpKSB7XHJcbiAgICAgIHJldHVybiB7ZGlnaXQ6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhckNucGpBbGZhbnVtZXJpY28oZG9jdW1lbnRvOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcclxuICAgIGNvbnN0IGNucGogPSB0aGlzLm5vcm1hbGl6YXJEb2N1bWVudG8oZG9jdW1lbnRvLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XHJcbiAgICAgIHJldHVybiB7bGVuZ3RoOiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIS9eWzAtOWEtekEtWl17MTJ9XFxkezJ9JC8udGVzdChjbnBqKSkge1xyXG4gICAgICByZXR1cm4ge2RpZ2l0OiB0cnVlfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL14oWzAtOWEtekEtWl0pXFwxKyQvLnRlc3QoY25waikpIHtcclxuICAgICAgcmV0dXJuIHtlcXVhbERpZ2l0czogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFzZSA9IGNucGouc3Vic3RyaW5nKDAsIDEyKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgY29uc3QgcHJpbWVpcm9EaWdpdG8gPSB0aGlzLmNhbGN1bGFyRGlnaXRvQ25waihiYXNlLCBDTlBKX1dFSUdIVFNfRklSU1QpO1xyXG4gICAgY29uc3Qgc2VndW5kb0RpZ2l0byA9IHRoaXMuY2FsY3VsYXJEaWdpdG9DbnBqKGJhc2UgKyBwcmltZWlyb0RpZ2l0bywgQ05QSl9XRUlHSFRTX1NFQ09ORCk7XHJcbiAgICBjb25zdCBkaWdpdG9zSW5mb3JtYWRvcyA9IGNucGouc3Vic3RyaW5nKDEyKTtcclxuXHJcbiAgICBpZiAoJycgKyBwcmltZWlyb0RpZ2l0byArIHNlZ3VuZG9EaWdpdG8gIT09IGRpZ2l0b3NJbmZvcm1hZG9zKSB7XHJcbiAgICAgIHJldHVybiB7ZGlnaXQ6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgY2FsY3VsYXJEaWdpdG9DbnBqKGJhc2U6IHN0cmluZywgcGVzb3M6IG51bWJlcltdKTogbnVtYmVyIHtcclxuICAgIGxldCBzb21hID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGVzb3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHNvbWEgKz0gdGhpcy52YWxvckNucGooYmFzZVtpbmRleF0pICogcGVzb3NbaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3RvID0gc29tYSAlIDExO1xyXG4gICAgcmV0dXJuIHJlc3RvIDwgMiA/IDAgOiAxMSAtIHJlc3RvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgdmFsb3JDbnBqKGNhcmFjdGVyZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBjYXJhY3RlcmUudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApIC0gNDg7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEb2NUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge0RvY3VtZW50b1V0aWx9IGZyb20gJy4uLy4uL3V0aWwvZG9jdW1lbnRvLnV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENwZkNucGpWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG4gIHN0YXRpYyBjcGZMZW5ndGggPSAxMTtcclxuICBzdGF0aWMgY3BmTGVuZ3RoRmlyc3RQYXJ0ID0gMztcclxuICBzdGF0aWMgY25wakxlbmd0aEZpcnN0UGFydCA9IDI7XHJcbiAgc3RhdGljIGNwZkxlbmd0aFNlY29uZFBhcnQgPSA2O1xyXG4gIHN0YXRpYyBjbnBqTGVuZ3RoU2Vjb25kUGFydCA9IDU7XHJcbiAgc3RhdGljIGNwZkxlbmd0aFRoaXJkUGFydCA9IDk7XHJcbiAgc3RhdGljIGNucGpMZW5ndGhUaGlyZFBhcnQgPSA4O1xyXG4gIHN0YXRpYyBjbnBqQ3BmTGVuZ3RoQm91bmRhcmllcyA9IDEyO1xyXG4gIHN0YXRpYyBjbnBqTGVuZ3RoID0gMTQ7XHJcblxyXG4gIHB1YmxpYyBkb2NUeXBlOiBEb2NUeXBlID0gRG9jVHlwZS5CT1RIO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3B0aW9uc1Byb3ZpZGVyPzogT3B0aW9uc1Byb3ZpZGVyKSB7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaXNDbnBqQWxmYW51bWVyaWNvSGFiaWxpdGFkbygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhISh0aGlzLm9wdGlvbnNQcm92aWRlciAmJiB0aGlzLm9wdGlvbnNQcm92aWRlci5jbnBqQWxmYW51bWVyaWNvKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYURvY3VtZW50byhjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gRG9jdW1lbnRvVXRpbC52YWxpZGFyRG9jdW1lbnRvKGMgJiYgYy52YWx1ZSwgdGhpcy5kb2NUeXBlLCB0aGlzLmlzQ25wakFsZmFudW1lcmljb0hhYmlsaXRhZG8oKSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGFEb2N1bWVudG8oYyk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgY29uc3QgTU9EVUxPX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignTU9EVUxPX09QVElPTlMnKTtcclxuZXhwb3J0IGNvbnN0IE1FTlVfTU9EVUxPX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignTUVOVV9NT0RVTE9fT1BUSU9OUycpO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgT3B0aW9uc1Byb3ZpZGVyIHtcclxuICBwcml2YXRlIF92ZXJzaW9uOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdHdvRmFjdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVzZXRCeUxvZ2luT3JFbWFpbCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NucGpBbGZhbnVtZXJpY28gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1PRFVMT19PUFRJT05TKSBwcml2YXRlIF9tb2R1bG86IHN0cmluZyxcclxuICAgIEBJbmplY3QoTUVOVV9NT0RVTE9fT1BUSU9OUykgcHJpdmF0ZSBfbWVudU1vZHVsbzogc3RyaW5nXHJcbiAgKSB7fVxyXG5cclxuICBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPyB0aGlzLl92ZXJzaW9uIDogJyc7XHJcbiAgfVxyXG5cclxuICBzZXQgdmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3ZlcnNpb24gPSB2ZXJzaW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0IHR3b0ZhY3Rvcih0d29Mb2dpbjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdHdvRmFjdG9yID0gdHdvTG9naW47XHJcbiAgfVxyXG5cclxuICBnZXQgdHdvRmFjdG9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R3b0ZhY3RvcjtcclxuICB9XHJcblxyXG4gIHNldCByZXNldEJ5TG9naW5PckVtYWlsKHJlc2V0QnlMb2dpbk9yRW1haWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3Jlc2V0QnlMb2dpbk9yRW1haWwgPSByZXNldEJ5TG9naW5PckVtYWlsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlc2V0QnlMb2dpbk9yRW1haWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzZXRCeUxvZ2luT3JFbWFpbDtcclxuICB9XHJcblxyXG4gIHNldCBjbnBqQWxmYW51bWVyaWNvKGNucGpBbGZhbnVtZXJpY286IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2NucGpBbGZhbnVtZXJpY28gPSBjbnBqQWxmYW51bWVyaWNvO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNucGpBbGZhbnVtZXJpY28oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY25wakFsZmFudW1lcmljbztcclxuICB9XHJcblxyXG4gIHNldCBub3ZvQ25waihub3ZvQ25wajogYm9vbGVhbikge1xyXG4gICAgdGhpcy5jbnBqQWxmYW51bWVyaWNvID0gbm92b0NucGo7XHJcbiAgfVxyXG5cclxuICBnZXQgbm92b0NucGooKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jbnBqQWxmYW51bWVyaWNvO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1vZHVsbygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZHVsbztcclxuICB9XHJcblxyXG4gIGdldCBtZW51TW9kdWxvKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWVudU1vZHVsbztcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgTkdfVkFMSURBVE9SUywgVmFsaWRhdG9yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q3BmQ25walZhbGlkYXRvcn0gZnJvbSAnLi9jcGYtY25wai52YWxpZGF0b3InO1xyXG5pbXBvcnQge0RvY1R5cGUsIFJlYWxUaW1lTWFza1R5cGV9IGZyb20gJy4uLy4uL21vZGVsL2NwZi1jbnBqLm1vZGVsJztcclxuaW1wb3J0IHtEb2N1bWVudG9VdGlsfSBmcm9tICcuLi8uLi91dGlsL2RvY3VtZW50by51dGlsJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tqaGktdmFsaWRhdGUtZG9jdW1lbnRvXVtuZ01vZGVsXScsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUgZXh0ZW5kcyBDcGZDbnBqVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpXHJcbiAgcmVhbFRpbWVNYXNrOiBSZWFsVGltZU1hc2tUeXBlID0gUmVhbFRpbWVNYXNrVHlwZS5OT05FO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGRvY3VtZW50VHlwZTogRG9jVHlwZSA9IERvY1R5cGUuQk9USDtcclxuXHJcbiAgQElucHV0KClcclxuICBuZ01vZGVsO1xyXG5cclxuICBAT3V0cHV0KCkgbmdNb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiAoKSA9PiB2b2lkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4sIEBPcHRpb25hbCgpIG9wdGlvbnNQcm92aWRlcj86IE9wdGlvbnNQcm92aWRlcikge1xyXG4gICAgc3VwZXIob3B0aW9uc1Byb3ZpZGVyKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNpbmNyb25pemFyVGlwb0RvY3VtZW50bygpO1xyXG4gICAgICB0aGlzLnNpbmNyb25pemFyVmFsb3JJbmljaWFsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaW5jcm9uaXphclRpcG9Eb2N1bWVudG8oKTtcclxuICAgIHRoaXMuc2luY3Jvbml6YXJWYWxvckluaWNpYWwoKTtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcbiAgICB0aGlzLnNpbmNyb25pemFyVGlwb0RvY3VtZW50bygpO1xyXG4gICAgcmV0dXJuIHN1cGVyLnZhbGlkYXRlKGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2luY3Jvbml6YXJUaXBvRG9jdW1lbnRvKCk7XHJcbiAgICBpZiAodGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuTk9ORSkge1xyXG4gICAgICB0aGlzLmF0dWFsaXphckRvY3VtZW50b01hc2NhcmFkbyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHVhbGl6YXJEb2N1bWVudG9NYXNjYXJhZG8odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsIGZhbHNlLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxyXG4gIGJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNpbmNyb25pemFyVGlwb0RvY3VtZW50bygpO1xyXG4gICAgdGhpcy5hdHVhbGl6YXJEb2N1bWVudG9NYXNjYXJhZG8odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUsIGZhbHNlLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcclxuICBpbnB1dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2luY3Jvbml6YXJUaXBvRG9jdW1lbnRvKCk7XHJcbiAgICB0aGlzLmF0dWFsaXphckRvY3VtZW50b01hc2NhcmFkbyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSwgdHJ1ZSwgdGhpcy5yZWFsVGltZU1hc2sgIT09IFJlYWxUaW1lTWFza1R5cGUuTk9ORSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGF0dWFsaXphckRvY3VtZW50b01hc2NhcmFkbyh2YWxvckF0dWFsOiBzdHJpbmcsIHByZXNlcnZhckN1cnNvcjogYm9vbGVhbiwgZm9ybWF0YXI6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjdXJzb3IgPSBwcmVzZXJ2YXJDdXJzb3IgP1xyXG4gICAgICBEb2N1bWVudG9VdGlsLmNvbnRhckNhcmFjdGVyZXNEb2N1bWVudG8odmFsb3JBdHVhbC5zdWJzdHJpbmcoMCwgaW5wdXQuc2VsZWN0aW9uU3RhcnQgfHwgMCksIHRoaXMuaXNDbnBqQWxmYW51bWVyaWNvSGFiaWxpdGFkbygpKSA6XHJcbiAgICAgIDA7XHJcbiAgICBjb25zdCB2YWxvckxpbWl0YWRvID0gRG9jdW1lbnRvVXRpbC5saW1pdGFyRG9jdW1lbnRvKHZhbG9yQXR1YWwsIHRoaXMuZG9jVHlwZSwgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCkpO1xyXG4gICAgY29uc3QgdmFsb3JGb3JtYXRhZG8gPSBmb3JtYXRhciA/XHJcbiAgICAgIERvY3VtZW50b1V0aWwuZm9ybWF0YXJEb2N1bWVudG8oXHJcbiAgICAgICAgdmFsb3JMaW1pdGFkbyxcclxuICAgICAgICB0aGlzLmRvY1R5cGUsXHJcbiAgICAgICAgdGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuUExBQ0VIT0xERVIsXHJcbiAgICAgICAgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKClcclxuICAgICAgKSA6XHJcbiAgICAgIHZhbG9yTGltaXRhZG87XHJcblxyXG4gICAgaWYgKGlucHV0LnZhbHVlICE9PSB2YWxvckZvcm1hdGFkbykge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9IHZhbG9yRm9ybWF0YWRvO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcmVzZXJ2YXJDdXJzb3IpIHtcclxuICAgICAgY29uc3QgcHJveGltb0N1cnNvciA9IGZvcm1hdGFyID8gRG9jdW1lbnRvVXRpbC5vYnRlckN1cnNvcih2YWxvckZvcm1hdGFkbywgY3Vyc29yKSA6IE1hdGgubWluKGN1cnNvciwgdmFsb3JGb3JtYXRhZG8ubGVuZ3RoKTtcclxuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocHJveGltb0N1cnNvciwgcHJveGltb0N1cnNvcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubmdNb2RlbCAhPT0gdmFsb3JGb3JtYXRhZG8pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nTW9kZWxDaGFuZ2UuZW1pdCh2YWxvckZvcm1hdGFkbykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaW5jcm9uaXphclRpcG9Eb2N1bWVudG8oKTogdm9pZCB7XHJcbiAgICB0aGlzLmRvY1R5cGUgPSB0aGlzLmRvY3VtZW50VHlwZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2luY3Jvbml6YXJWYWxvckluaWNpYWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuTk9ORSkge1xyXG4gICAgICBjb25zdCB2YWxvckF0dWFsID0gdGhpcy5uZ01vZGVsIHx8IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlIHx8ICcnO1xyXG4gICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgIT09IHZhbG9yQXR1YWwpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbG9yQXR1YWw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXR1YWxpemFyRG9jdW1lbnRvTWFzY2FyYWRvKHRoaXMubmdNb2RlbCB8fCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSwgZmFsc2UsIHRydWUpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlfSBmcm9tICcuL2NwZi1jbnBqLnZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbamhpLWludGVnZXItZmllbGRdW25nTW9kZWxdJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IEludGVnZXJGaWVsZERpcmVjdGl2ZSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZWdlckZpZWxkRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuICBASW5wdXQoKVxyXG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcml2YXRlIG1heFZhbHVlOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJpdmF0ZSBvbmx5UG9zaXRpdmU6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5vbmx5UG9zaXRpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubWF4VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGVtcHR5OiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKTtcclxuICAgIGxldCBvbmx5TnVtYmVycztcclxuICAgIGlmICh0aGlzLm9ubHlQb3NpdGl2ZSkge1xyXG4gICAgICBvbmx5TnVtYmVycyA9IG5ld1ZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbmVnYXRpdmUgPSAnJztcclxuICAgICAgaWYgKG5ld1ZhbHVlWzBdID09PSAnLScpIHtcclxuICAgICAgICBuZWdhdGl2ZSA9ICctJztcclxuICAgICAgfVxyXG4gICAgICBvbmx5TnVtYmVycyA9IG5lZ2F0aXZlICsgbmV3VmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgICAgaWYgKHBhcnNlSW50KG9ubHlOdW1iZXJzLCAxMCkgPT09IDAgJiYgbmVnYXRpdmUgPT09ICctJykge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJzAnO1xyXG4gICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob25seU51bWJlcnMgIT09IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKSkge1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9ubHlOdW1iZXJzO1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWREaWdpdDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzTnVtYmVyKG5ld1ZhbHVlKSkge1xyXG4gICAgICByZXR1cm4geyBub25OdW1iZXI6IHRydWUgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobmV3VmFsdWUsIDEwKTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWluVmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA8IHRoaXMubWluVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWF4VmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUoKSB7XHJcbiAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7XHJcbiAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0ludGVnZXJGaWVsZERpcmVjdGl2ZX0gZnJvbSBcIi4vaW50ZWdlci1maWVsZC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBJbnRlZ2VyRmllbGREaXJlY3RpdmVcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEludGVnZXJGaWVsZERpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVnZXJGaWVsZE1vZHVsZSB7IH1cclxuIiwiaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVdGlsRnVuY3Rpb25zIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGFyQ1BGKHN0ckNQRjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29tYSA9IDA7XHJcblxyXG4gICAgc3RyQ1BGID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25OdW1iZXJzKHN0ckNQRik7XHJcblxyXG4gICAgaWYgKHN0ckNQRi5sZW5ndGggIT09IDExKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoL14oLilcXDEqJC8udGVzdChzdHJDUEYpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzb21hID0gdGhpcy5zb21hKHNvbWEsIHN0ckNQRiwgMTEsIDkpO1xyXG5cclxuICAgIGxldCByZXN0byA9IChzb21hICogMTApICUgMTE7XHJcblxyXG4gICAgaWYgKHJlc3RvID09PSAxMCB8fCByZXN0byA9PT0gMTEpIHtcclxuICAgICAgcmVzdG8gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN0byAhPT0gcGFyc2VJbnQoc3RyQ1BGLnN1YnN0cmluZyg5LCAxMCksIDEwKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc29tYSA9IDA7XHJcbiAgICBzb21hID0gdGhpcy5zb21hKHNvbWEsIHN0ckNQRiwgMTIsIDEwKTtcclxuXHJcbiAgICByZXN0byA9IChzb21hICogMTApICUgMTE7XHJcblxyXG4gICAgaWYgKHJlc3RvID09PSAxMCB8fCByZXN0byA9PT0gMTEpIHtcclxuICAgICAgcmVzdG8gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN0byA9PT0gcGFyc2VJbnQoc3RyQ1BGLnN1YnN0cmluZygxMCwgMTEpLCAxMCk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGFyQ05QSihjbnBqOiBzdHJpbmcpIDogYm9vbGVhbiB7XHJcblxyXG4gICAgY25waiA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uTnVtYmVycyhjbnBqKTtcclxuXHJcbiAgICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgvXihbMC05XSlcXDEqJC8udGVzdChjbnBqKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhIERWc1xyXG4gICAgbGV0IHRhbWFuaG8gPSBjbnBqLmxlbmd0aCAtIDI7XHJcbiAgICBsZXQgbnVtZXJvcyA9IGNucGouc3Vic3RyaW5nKDAsIHRhbWFuaG8pO1xyXG4gICAgY29uc3QgZGlnaXRvcyA9IGNucGouc3Vic3RyaW5nKHRhbWFuaG8pO1xyXG4gICAgbGV0IHNvbWEgPSAwO1xyXG4gICAgbGV0IHBvcyA9IHRhbWFuaG8gLSA3O1xyXG4gICAgZm9yIChsZXQgaSA9IHRhbWFuaG87IGkgPj0gMTsgaS0tKSB7XHJcbiAgICAgIHNvbWEgKz0gcGFyc2VJbnQobnVtZXJvcy5jaGFyQXQodGFtYW5obyAtIGkpLCAxMCkgKiBwb3MtLTtcclxuICAgICAgaWYgKHBvcyA8IDIpIHtcclxuICAgICAgICBwb3MgPSA5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0YWRvID0gc29tYSAlIDExIDwgMiA/IDAgOiAxMSAtIHNvbWEgJSAxMTtcclxuICAgIGlmIChyZXN1bHRhZG8udG9TdHJpbmcoKSAhPT0gZGlnaXRvcy5jaGFyQXQoMCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRhbWFuaG8gPSB0YW1hbmhvICsgMTtcclxuICAgIG51bWVyb3MgPSBjbnBqLnN1YnN0cmluZygwLCB0YW1hbmhvKTtcclxuICAgIHNvbWEgPSAwO1xyXG4gICAgcG9zID0gdGFtYW5obyAtIDc7XHJcbiAgICBmb3IgKGxldCBpID0gdGFtYW5obzsgaSA+PSAxOyBpLS0pIHtcclxuICAgICAgc29tYSArPSBwYXJzZUludChudW1lcm9zLmNoYXJBdCh0YW1hbmhvIC0gaSksIDEwKSAqIHBvcy0tO1xyXG4gICAgICBpZiAocG9zIDwgMikge1xyXG4gICAgICAgIHBvcyA9IDk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XHJcbiAgICBpZiAocmVzdWx0YWRvLnRvU3RyaW5nKCkgIT09IGRpZ2l0b3MuY2hhckF0KDEpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHZhbGlkYXJEb2N1bWVudG8oZG9jdW1lbnRvOiBzdHJpbmcpIDogYm9vbGVhbiB7XHJcbiAgICBkb2N1bWVudG8gPSBVdGlsRnVuY3Rpb25zLnJlbW92ZU5vbk51bWJlcnMoZG9jdW1lbnRvKTtcclxuICAgIGlmIChkb2N1bWVudG8ubGVuZ3RoID09PSAxNCkge1xyXG4gICAgICByZXR1cm4gVXRpbEZ1bmN0aW9ucy52YWxpZGFyQ05QSihkb2N1bWVudG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFV0aWxGdW5jdGlvbnMudmFsaWRhckNQRihkb2N1bWVudG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgc29tYShzb21hOiBudW1iZXIsIGNwZjogc3RyaW5nLCBkaWdpdG86IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHNvbWEgPSBzb21hICsgcGFyc2VJbnQoY3BmLnN1YnN0cmluZyhpbmRleCAtIDEsIGluZGV4KSwgMTApICogKGRpZ2l0byAtIGluZGV4KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzb21hO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZW1vdmVOb25BbHBoYU51bWVyaWModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IHJlZ0V4cCA9IC9bXkEtWmEtejAtOV0vZztcclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBzYW5pdGl6ZVJlY2FwdGNoYUFjdGlvbih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gICAgLnRyaW0oKVxyXG4gICAgLnJlcGxhY2UoLy0vZywgJ18nKSAgICAgICAgICAvLyDDosKcwoUgaMODwq1mZW4gw6LChsKSIHVuZGVybGluZVxyXG4gICAgLnJlcGxhY2UoL1teQS1aYS16Xy9dL2csICcnKTsgLy8gw6LCnMKFIG1hbnTDg8KpbSBzw4PCsyBBw6LCgMKTWiBhw6LCgMKTeiBfIC9cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTm9uTnVtYmVycyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVnRXhwID0gL1teMC05XS9nO1xyXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmVnRXhwLCAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlbW92ZUFjY2VudHModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGF0ZURhdGFiYXNlKGQ6IERhdGUsIGluY2x1ZGVUaW1lOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB5ZWFyID0gJycgKyBkLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgbW9udGggPSAnJyArIChkLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcclxuICAgICAgaG91ciA9ICcnICsgZC5nZXRIb3VycygpLFxyXG4gICAgICBtaW51dGUgPSAnJyArIGQuZ2V0TWludXRlcygpLFxyXG4gICAgICBzZWNvbmRzID0gJycgKyBkLmdldFNlY29uZHMoKTtcclxuXHJcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikge1xyXG4gICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgfVxyXG4gICAgaWYgKGRheS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIGRheSA9ICcwJyArIGRheTtcclxuICAgIH1cclxuICAgIGlmIChob3VyLmxlbmd0aCA8IDIpIHtcclxuICAgICAgaG91ciA9ICcwJyArIGhvdXI7XHJcbiAgICB9XHJcbiAgICBpZiAobWludXRlLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbWludXRlID0gJzAnICsgbWludXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlY29uZHMubGVuZ3RoIDwgMikge1xyXG4gICAgICBzZWNvbmRzID0gJzAnICsgc2Vjb25kcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybWF0ZWREYXRlOiBzdHJpbmcgPSB5ZWFyICsgJy0nICsgbW9udGggKyAnLScgKyBkYXk7XHJcbiAgICBpZiAoaW5jbHVkZVRpbWUpIHtcclxuICAgICAgZm9ybWF0ZWREYXRlICs9ICcgJyArIGhvdXIgKyAnOicgKyBtaW51dGUgKyAnOicgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGF0ZUJyYXppbChkYXRlOiBEYXRlLCBpbmNsdWRlVGltZTogYm9vbGVhbikge1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QoZGF0ZSkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IHllYXIgPSAnJyArIGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBtb250aCA9ICcnICsgKGRhdGUuZ2V0TW9udGgoKSArIDEpLFxyXG4gICAgICBkYXkgPSAnJyArIGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICBob3VyID0gJycgKyBkYXRlLmdldEhvdXJzKCksXHJcbiAgICAgIG1pbnV0ZSA9ICcnICsgZGF0ZS5nZXRNaW51dGVzKCksXHJcbiAgICAgIHNlY29uZHMgPSAnJyArIGRhdGUuZ2V0U2Vjb25kcygpO1xyXG5cclxuICAgIGlmIChtb250aC5sZW5ndGggPCAyKSB7XHJcbiAgICAgIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIHtcclxuICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG4gICAgfVxyXG4gICAgaWYgKGhvdXIubGVuZ3RoIDwgMikge1xyXG4gICAgICBob3VyID0gJzAnICsgaG91cjtcclxuICAgIH1cclxuICAgIGlmIChtaW51dGUubGVuZ3RoIDwgMikge1xyXG4gICAgICBtaW51dGUgPSAnMCcgKyBtaW51dGU7XHJcbiAgICB9XHJcbiAgICBpZiAoc2Vjb25kcy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHNlY29uZHMgPSAnMCcgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmb3JtYXRlZERhdGU6IHN0cmluZyA9IGRheSArICcvJyArIG1vbnRoICsgJy8nICsgeWVhcjtcclxuICAgIGlmIChpbmNsdWRlVGltZSkge1xyXG4gICAgICBmb3JtYXRlZERhdGUgKz0gJyAnICsgaG91ciArICc6JyArIG1pbnV0ZSArICc6JyArIHNlY29uZHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0ZWREYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBwYXJzZURhdGVEYXRhQmFzZUZvcm1hdChkYXRlU3RyaW5nOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gLy0vZztcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyaW5nLnJlcGxhY2Uoc2VhcmNoVmFsdWUsICcvJykpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByb3VuZE51bWJlcih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgKiAxMDApIC8gMTAwO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZTogc3RyaW5nIHwgYW55W10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLmxlbmd0aCA+IDA7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBpc1ZhbGlkT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhISh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlKTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyKSB7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0QmFzZTY0VG9CbG9iRGF0YShiYXNlNjREYXRhOiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBzdHJpbmcsIHNsaWNlU2l6ZSA9IDUxMikge1xyXG4gICAgYmFzZTY0RGF0YSA9IGJhc2U2NERhdGEucmVwbGFjZSgvXFxzL2csICcnKTtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjREYXRhKTtcclxuICAgIGNvbnN0IGJ5dGVBcnJheXMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcclxuICAgICAgY29uc3Qgc2xpY2UgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XHJcblxyXG4gICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XHJcblxyXG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywgeyB0eXBlOiBjb250ZW50VHlwZSB9KTtcclxuICAgIHJldHVybiBibG9iO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRCcm93c2VyTmFtZSgpIHtcclxuICAgIGNvbnN0IGFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2VkZ2UnKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnZWRnZSc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignb3ByJykgPiAtMSAmJiAhISg8YW55PndpbmRvdykub3ByOlxyXG4gICAgICAgIHJldHVybiAnb3BlcmEnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2Nocm9tZScpID4gLTEgJiYgISEoPGFueT53aW5kb3cpLmNocm9tZTpcclxuICAgICAgICByZXR1cm4gJ2Nocm9tZSc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZigndHJpZGVudCcpID4gLTE6XHJcbiAgICAgICAgcmV0dXJuICdpZSc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignZmlyZWZveCcpID4gLTE6XHJcbiAgICAgICAgcmV0dXJuICdmaXJlZm94JztcclxuICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdzYWZhcmknKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnc2FmYXJpJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ290aGVyJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2VyYXJUb2tlbkFuZ3VsYXIoKSB7XHJcbiAgICAgIGNvbnN0IGNoYXZlZW5jcmlwdGFjYW8gPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgncW1OdVlhdHpUZU1uMnNTVCcpO1xyXG4gICAgICBjb25zdCB2ZXRvciAgID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKTtcclxuICAgICAgbGV0IHBsYWluVGV4dCA9ICdhbmd1bGFyOycgKyBVdGlsRnVuY3Rpb25zLmZvcm1hdERhdGVCcmF6aWwobmV3IERhdGUoKSwgdHJ1ZSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWluVGV4dC5sZW5ndGggJSAxNjsgKytpKSB7XHJcbiAgICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0ICsgJ1xcdTAwMDAnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjcnlwID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UocGxhaW5UZXh0KSwgY2hhdmVlbmNyaXB0YWNhbywge1xyXG4gICAgICAgIGl2OiB2ZXRvcixcclxuICAgICAgICBrZXlTaXplOiAxMjgsXHJcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLk5vUGFkZGluZyxcclxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQ30pO1xyXG5cclxuICAgICAgbGV0IGhleCA9ICcnO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjcnlwLmNpcGhlcnRleHQud29yZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgbnVtYmVyID0gY3J5cC5jaXBoZXJ0ZXh0LndvcmRzW2ldO1xyXG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XHJcbiAgICAgICAgICBudW1iZXIgPSAweEZGRkZGRkZGICsgbnVtYmVyICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHRlbXBIZXggPSBudW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIHdoaWxlICh0ZW1wSGV4Lmxlbmd0aCA8IDgpIHtcclxuICAgICAgICAgIHRlbXBIZXggPSAnMCcgKyB0ZW1wSGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBoZXggPSBoZXggKyB0ZW1wSGV4O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBoZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlcmFyVG9rZW4obW9kdWxvOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkYXRhSG9yYTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNoYXZlZW5jcmlwdGFjYW8gPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpO1xyXG4gICAgY29uc3QgdmV0b3IgICA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCdcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwJyk7XHJcbiAgICBsZXQgcGxhaW5UZXh0ID0gbW9kdWxvICsgJzsnICsgZGF0YUhvcmE7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFpblRleHQubGVuZ3RoICUgMTY7ICsraSkge1xyXG4gICAgICBwbGFpblRleHQgPSBwbGFpblRleHQgKyAnXFx1MDAwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3J5cCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHBsYWluVGV4dCksIGNoYXZlZW5jcmlwdGFjYW8sIHtcclxuICAgICAgaXY6IHZldG9yLFxyXG4gICAgICBrZXlTaXplOiAxMjgsXHJcbiAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcsXHJcbiAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDfSk7XHJcblxyXG4gICAgbGV0IGhleCA9ICcnO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3J5cC5jaXBoZXJ0ZXh0LndvcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBudW1iZXIgPSBjcnlwLmNpcGhlcnRleHQud29yZHNbaV07XHJcbiAgICAgIGlmIChudW1iZXIgPCAwKSB7XHJcbiAgICAgICAgbnVtYmVyID0gMHhGRkZGRkZGRiArIG51bWJlciArIDE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHRlbXBIZXggPSBudW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB3aGlsZSAodGVtcEhleC5sZW5ndGggPCA4KSB7XHJcbiAgICAgICAgdGVtcEhleCA9ICcwJyArIHRlbXBIZXg7XHJcbiAgICAgIH1cclxuICAgICAgaGV4ID0gaGV4ICsgdGVtcEhleDtcclxuICAgIH1cclxuICAgIHJldHVybiBoZXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdGFyRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nKSB7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShkb2N1bWVudG8pKSB7XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnRvID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25OdW1iZXJzKGRvY3VtZW50byk7XHJcbiAgICAgIGlmIChkb2N1bWVudG8ubGVuZ3RoID09IDExKSB7XHJcbiAgICAgICAgICByZXR1cm4gZG9jdW1lbnRvLnJlcGxhY2UoLyhcXGR7M30pKFxcZHszfSkoXFxkezN9KShcXGR7Mn0pL2csXCJcXCQxLlxcJDIuXFwkM1xcLVxcJDRcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRvLmxlbmd0aCA9PSAxNCkge1xyXG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50by5yZXBsYWNlKC8oXFxkezJ9KShcXGR7M30pKFxcZHszfSkoXFxkezR9KShcXGR7Mn0pL2csXCJcXCQxLlxcJDIuXFwkM1xcL1xcJDRcXC1cXCQ1XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Tm9tZU1lcyhtZXM6IG51bWJlcikge1xyXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgZGF0ZS5zZXRNb250aChtZXMpO1xyXG4gICAgICBjb25zdCBtb250aCA9IGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnbG9uZycgfSk7XHJcbiAgICAgIHJldHVybiBtb250aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdG9UaXRsZUNhc2Uoc3RyKTogc3RyaW5nIHtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzdHJbaV0gPSBzdHJbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJbaV0uc2xpY2UoMSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEVudW1LZXlCeUVudW1WYWx1ZShteUVudW0sIGVudW1WYWx1ZSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhteUVudW0pKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyA9IG15RW51bVtrZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gZW51bVZhbHVlLnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgIHJldHVybiBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRIdHRwRXJyb3JNZXNzYWdlKHZhbHVlKSB7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGlmICh2YWx1ZS5lcnJvcikge1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLmRldGFpbCkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLmRldGFpbDtcclxuICAgICAgICB9IGVsc2UgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuZXJyb3IuZXJyb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5lcnJvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuZXJyb3IubWVzc2FnZSkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLmZpZWxkRXJyb3JzKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5lcnJvci5maWVsZEVycm9yc1swXS5tZXNzYWdlKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3IuZmllbGRFcnJvcnNbMF0ubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUubWVzc2FnZSkgPT09IHRydWUpIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5tZXNzYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShlcnJvck1lc3NhZ2UpID09PSBmYWxzZSkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSAnRXJybyBkZXNjb25oZWNpZG8nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEVuY29kZURlY29kZUJhc2U2NCB7XHJcbiAgICBzdGF0aWMgZW5jb2RlKHN0cjogYW55KSB7XHJcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IC8lKFswLTlBLUZdezJ9KS9nO1xyXG4gICAgICByZXR1cm4gYnRvYShcclxuICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZShyZWdFeHAsIChtYXRjaCwgcDEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCgnMHgnICsgcDEpIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVjb2RlKHN0cikge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSAnJztcclxuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcclxuICAgICAgICAgICAgYXRvYihzdHIpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5qb2luKHNlcGFyYXRvcilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdE9wdGlvbiA9IChyZXE/OiBhbnkpOiBIdHRwUGFyYW1zID0+IHtcclxuICAgIGxldCBvcHRpb25zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChyZXEpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhyZXEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3NvcnQnKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zZXQoa2V5LCByZXFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVxLnNvcnQpIHtcclxuICAgICAgICAgICAgcmVxLnNvcnQuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuYXBwZW5kKCdzb3J0JywgdmFsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBBbmd1bGFyIGJvb3RzdHJhcCBEYXRlIGFkYXB0ZXJcclxuICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiRGF0ZUFkYXB0ZXIsIE5nYkRhdGVTdHJ1Y3QsIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5nYkRhdGVNb21lbnRBZGFwdGVyIGV4dGVuZHMgTmdiRGF0ZUFkYXB0ZXI8TW9tZW50PiB7XHJcbiAgZnJvbU1vZGVsKGRhdGU6IE1vbWVudCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgaWYgKGRhdGUgIT0gbnVsbCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkgJiYgZGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuIHsgeWVhcjogZGF0ZS55ZWFyKCksIG1vbnRoOiBkYXRlLm1vbnRoKCkgKyAxLCBkYXk6IGRhdGUuZGF0ZSgpIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUgIT09IG51bGwgJiYgZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVOZXcgPSBuZXcgRGF0ZShkYXRlLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4geyB5ZWFyOiBkYXRlTmV3LmdldEZ1bGxZZWFyKCksIG1vbnRoOiBkYXRlTmV3LmdldE1vbnRoKCkgKyAxLCBkYXk6IGRhdGVOZXcuZ2V0VVRDRGF0ZSgpIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE1vbWVudCB7XHJcbiAgICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlLnllYXIgKyAnLScgKyBkYXRlLm1vbnRoICsgJy0nICsgZGF0ZS5kYXksICdZWVlZL01NL0REJykgOiBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU1vbWVudERhdGVGb3JtYXR0ZXIgZXh0ZW5kcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcclxuICByZWFkb25seSBEVF9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICByZXR1cm4gZGF0ZS5pc1ZhbGlkKCkgPyB7IHllYXI6IGRhdGUueWVhcigpLCBtb250aDogZGF0ZS5tb250aCgpICsgMSwgZGF5OiBkYXRlLmRhdGUoKSB9IDogbnVsbDtcclxuICB9XHJcblxyXG4gIGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtZHQgPSBtb21lbnQoW2RhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5XSk7XHJcbiAgICAgIGlmICghbWR0LmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWR0LmZvcm1hdCh0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBQUk9CTEVNX0JBU0VfVVJMID0gJ2h0dHBzOi8vd3d3LmpoaXBzdGVyLnRlY2gvcHJvYmxlbSc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBMT0dJTl9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2xvZ2luLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9OT1RfRk9VTkRfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLW5vdC1mb3VuZCc7XHJcbmV4cG9ydCBjb25zdCBJTlZBTElEX1BBU1NXT1JEX1RZUEUgPSBQUk9CTEVNX0JBU0VfVVJMICsgJy9pbnZhbGlkLXBhc3N3b3JkJztcclxuZXhwb3J0IGNvbnN0IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTiA9IFBST0JMRU1fQkFTRV9VUkwgKyBcIi91bmF1dGhvcml6ZWQtZWRpdC1kZWxldGlvblwiO1xyXG4iLCJleHBvcnQgY29uc3QgSVRFTVNfUEVSX1BBR0UgPSAyMDtcclxuIiwiZXhwb3J0IGNsYXNzIFV0aWxBcnF1aXZvIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgZm9ybWF0YXJUYW1hbmhvQXJxdWl2byhieXRlcyA9IDAsIHByZWNpc2FvID0gMik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdW5pZGFkZXMgPSBbJ2J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJ107XHJcblxyXG4gICAgICAgIGlmIChpc05hTihwYXJzZUZsb2F0KFN0cmluZyhieXRlcykpKSB8fCAhaXNGaW5pdGUoYnl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnPyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1bmlkYWRlID0gMDtcclxuICAgICAgICB3aGlsZSAoYnl0ZXMgPj0gMTAyNCkge1xyXG4gICAgICAgICAgICBieXRlcyAvPSAxMDI0O1xyXG4gICAgICAgICAgICB1bmlkYWRlKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBieXRlcy50b0ZpeGVkKCtwcmVjaXNhbykgKyAnICcgKyB1bmlkYWRlc1t1bmlkYWRlXTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSBcIm5neC13ZWJzdG9yYWdlXCI7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLic7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9ja1BhZ2Uge1xyXG4gIHByaXZhdGUgc3RhdGljIHN0b3JhZ2VMYWJlbCA9ICdsb2NrUGFnZU5hdmlnYXRpb24nO1xyXG4gIHB1YmxpYyBtb2R1bGU6IHN0cmluZztcclxuICBwdWJsaWMgcGF0aDogc3RyaW5nO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKG1vZHVsZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubW9kdWxlID0gbW9kdWxlO1xyXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcclxuICB9XHJcbiAgXHJcbiAgZ2V0UmVkaXJlY3RQYWdlKGxvY2F0aW9uOiBMb2NhdGlvbiwgc2VuZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHNlbmRlciA9PT0gdGhpcy5tb2R1bGUpIHtcclxuICAgICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YodGhpcy5tb2R1bGUpIDwgMCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5vcmlnaW4uY29uY2F0KCcvIy8nLCB0aGlzLnBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYXRpb24ub3JpZ2luLmNvbmNhdCgnLycsIHRoaXMubW9kdWxlLCAnLyMvJywgdGhpcy5wYXRoKTtcclxuICB9XHJcblxyXG4gIGlzTG9ja2VkUGFnZShsb2NhdGlvbjogTG9jYXRpb24sIHNlbmRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgXHJcbiAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKHRoaXMuZ2V0UmVkaXJlY3RQYWdlKGxvY2F0aW9uLCBzZW5kZXIpKSA+IDApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJldHJpZXZlRnJvbVN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSk6IExvY2tQYWdlIHtcclxuICAgIGNvbnN0IHN0b3JlZE9iamVjdDogTG9ja1BhZ2UgPSBzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZShMb2NrUGFnZS5zdG9yYWdlTGFiZWwpO1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3Qoc3RvcmVkT2JqZWN0KSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld09iamVjdDogTG9ja1BhZ2UgPSBuZXcgTG9ja1BhZ2Uoc3RvcmVkT2JqZWN0Lm1vZHVsZSwgc3RvcmVkT2JqZWN0LnBhdGgpO1xyXG4gICAgcmV0dXJuIG5ld09iamVjdDtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIHN0YXRpYyBzYXZlVG9TdG9yYWdlKHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHN0b3JlT2JqZWN0OiBMb2NrUGFnZSkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoTG9ja1BhZ2Uuc3RvcmFnZUxhYmVsLCBzdG9yZU9iamVjdCk7XHJcbiAgfVxyXG4gIFxyXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlRnJvbVN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoTG9ja1BhZ2Uuc3RvcmFnZUxhYmVsKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xyXG5pbXBvcnQge1BkZkpzVmlld2VyQ29tcG9uZW50fSBmcm9tIFwibmcyLXBkZmpzLXZpZXdlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktcGRmLXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BkZi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ3BkZi12aWV3ZXIuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdwZGZWaWV3ZXInKSBwZGZWaWV3ZXI6IFBkZkpzVmlld2VyQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgdGl0dWxvOiBzdHJpbmc7XHJcbiAgcHVibGljIG5vbWVBcnF1aXZvOiBzdHJpbmc7XHJcbiAgcHVibGljIHBkZjogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc0xvYWRlZDogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwpIHtcclxuICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdG9wKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjbG9zZScpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIFVzYWRvIHBhcmEgY29udG9ybmFyIG8gcHJvYmxlbWEgZGUgY2hhbmdlIGRvIHNlbGVjdCBkZSB6b29tXHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RIaWRkZW5QZGYnKSkpIHtcclxuICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XHJcbiAgICAgICAgc2VsZWN0LmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgc2VsZWN0LmlkID0gJ3NlbGVjdEhpZGRlblBkZic7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmJlZ2luXCIsIHNlbGVjdCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luc2VydCBzZWxlY3QgaGlkZGVuJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wZGZWaWV3ZXIuZG93bmxvYWRGaWxlTmFtZSA9IHRoaXMubm9tZUFycXVpdm87XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBVdGlsRnVuY3Rpb25zLmNvbnZlcnRCYXNlNjRUb0Jsb2JEYXRhKHRoaXMucGRmLCAnYXBwbGljYXRpb24vcGRmJyk7XHJcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICB0aGlzLnBkZlZpZXdlci5wZGZTcmMgPSB1cmw7XHJcbiAgICAgIHRoaXMucGRmVmlld2VyLnpvb20gPSAncGFnZS1maXQnO1xyXG4gICAgICB0aGlzLnBkZlZpZXdlci5yZWZyZXNoKCk7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BkZkNvbXBvbmVudH0gZnJvbSAnLi9wZGYuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQZGZTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcGRmVmlld2VyQ29tcG9uZW50OiBQZGZDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIHB1YmxpYyBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50LnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnQodGl0dWxvOiBzdHJpbmcsIG5vbWVBcnF1aXZvOiBzdHJpbmcsIHBkZjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5wZGZWaWV3ZXJDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBkZkNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAnbW9kYWwteGwgcGRmLXZpZXdlcidcclxuICAgICAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICB0aGlzLnBkZlZpZXdlckNvbXBvbmVudC5ub21lQXJxdWl2byA9IG5vbWVBcnF1aXZvO1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50LnRpdHVsbyA9IHRpdHVsbztcclxuICAgICAgICB0aGlzLnBkZlZpZXdlckNvbXBvbmVudC5wZGYgPSBwZGY7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UGRmQ29tcG9uZW50fSBmcm9tICcuL3BkZi5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BkZkpzVmlld2VyTW9kdWxlfSBmcm9tICduZzItcGRmanMtdmlld2VyJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQZGZTZXJ2aWNlfSBmcm9tICcuL3BkZi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBQZGZDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFBkZkpzVmlld2VyTW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlXHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIFBkZkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgUGRmQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFBkZlNlcnZpY2VcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmTW9kdWxlIHt9XHJcbiIsImV4cG9ydCBlbnVtIERpYWxvZ1R5cGUge1xyXG4gICAgSU5GTyxcclxuICAgIFFVRVNUSU9OLFxyXG4gICAgUVVFU1RJT05fWUVTX05PLFxyXG4gICAgV0FJVFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBEaWFsb2dSZXN1bHQge1xyXG4gICAgT0ssXHJcbiAgICBZRVMsXHJcbiAgICBOTyxcclxuICAgIENBTkNFTFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ0xpc3RlbmVyIHtcclxuICAgIGRpYWxvZ1JldHVybmVkKHJlc3VsdDogRGlhbG9nUmVzdWx0LCBwYXJhbTogYW55KTtcclxufVxyXG4iLCJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgRGlhbG9nTGlzdGVuZXIsIERpYWxvZ1Jlc3VsdCwgRGlhbG9nVHlwZSB9IGZyb20gJy4vbW9kYWwtZGlhbG9nLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbW9kYWwtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtZGlhbG9nLnN0eWxlLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNb2RhbERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnbG9hZGVyJylcclxuICAgIGxvYWRlcjogRWxlbWVudFJlZjtcclxuICAgIGRpYWxvZ1Jlc3VsdCA9IERpYWxvZ1Jlc3VsdDtcclxuICAgIGRpYWxvZ1R5cGUgPSBEaWFsb2dUeXBlO1xyXG4gICAgbGlzdGVuZXI6IERpYWxvZ0xpc3RlbmVyO1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGNzc0NsYXNzOiBzdHJpbmc7XHJcbiAgICB0eXBlOiBEaWFsb2dUeXBlO1xyXG4gICAgcGFyYW06IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy50eXBlID0gRGlhbG9nVHlwZS5JTkZPO1xyXG4gICAgICAgIHRoaXMuY3NzQ2xhc3MgPSAnJztcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICB0aGlzLnRpdGxlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0KHJlc3VsdDogRGlhbG9nUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZGlhbG9nUmV0dXJuZWQocmVzdWx0LCB0aGlzLnBhcmFtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygncmVzdWx0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExpc3RlbmVyKHBhcmVudDogRGlhbG9nTGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KHBhcmFtOiBhbnksIHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgY3NzQ2xhc3M6IHN0cmluZywgdHlwZTogRGlhbG9nVHlwZSkge1xuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuY3NzQ2xhc3MgPSBjc3NDbGFzcztcclxuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgIHRoaXMucGFyYW0gPSBwYXJhbTtcbiAgICB9XG5cbiAgICBnZXRIZWFkZXJJY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IERpYWxvZ1R5cGUuSU5GTyA/ICdiZWxsJyA6ICd0aW1lcyc7XG4gICAgfVxuXHJcbiAgICBwdWJsaWMgc3RvcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5kaWFsb2dSZXR1cm5lZChEaWFsb2dSZXN1bHQuQ0FOQ0VMLCB0aGlzLnBhcmFtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjbG9zZScpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgICAgICBjb25zdCBtb2RhbENvbnRlbnQgPSB0aGlzLmxvYWRlci5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSBEaWFsb2dUeXBlLldBSVQpIHtcclxuICAgICAgICAgICAgbW9kYWxDb250ZW50LmNsYXNzTmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AUGlwZSh7IG5hbWU6ICdmaW5kTGFuZ3VhZ2VGcm9tS2V5JyB9KVxyXG5leHBvcnQgY2xhc3MgRmluZExhbmd1YWdlRnJvbUtleVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VzOiBhbnkgPSB7XHJcbiAgICAgICAgJ3B0LWJyJzogeyBuYW1lOiAnUG9ydHVndcODwqpzIChCcmFzaWwpJyB9XHJcbiAgICB9O1xyXG4gICAgdHJhbnNmb3JtKGxhbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VzW2xhbmddLm5hbWU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RmluZExhbmd1YWdlRnJvbUtleVBpcGV9IGZyb20gJy4vZmluZC1sYW5ndWFnZS1mcm9tLWtleS5waXBlJ1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEZpbmRMYW5ndWFnZUZyb21LZXlQaXBlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBGaW5kTGFuZ3VhZ2VGcm9tS2V5UGlwZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaW5kTGFuZ3VhZ2VNb2R1bG8ge31cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TW9kYWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4vbW9kYWwtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XG5pbXBvcnQge2ZhVGltZXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYVRpbWVzJztcbmltcG9ydCB7ZmFCYW59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYUJhbic7XG5pbXBvcnQge2ZhQmVsbH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhQmVsbCc7XG5pbXBvcnQge0ZpbmRMYW5ndWFnZU1vZHVsb30gZnJvbSAnLi4vLi4vbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS5tb2R1bG8nO1xuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XG5cbmxpYnJhcnkuYWRkKGZhVGltZXMpO1xubGlicmFyeS5hZGQoZmFCYW4pO1xubGlicmFyeS5hZGQoZmFCZWxsKTtcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBGaW5kTGFuZ3VhZ2VNb2R1bG8sXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIE1vZGFsRGlhbG9nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgIE1vZGFsRGlhbG9nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBNb2RhbERpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kYWxEaWFsb2dNb2R1bGUge31cclxuIiwiZXhwb3J0IGNsYXNzIFBhcmFtZXRybyB7XHJcbiAgICBwdWJsaWMgaWQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyB0aXBvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm9tZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGRlc2NyaWNhbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHZhbG9yOiBhbnk7XHJcbiAgICBwdWJsaWMgdGVsYTogc3RyaW5nO1xyXG4gICAgcHVibGljIGxvY2FsOiBib29sZWFuO1xyXG4gICAgcHVibGljIG1vZHVsbzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBQYXJhbWV0cm9UaXBvIHtcclxuICAgIENPTUJPID0gMSxcclxuICAgIFNUUklORyA9IDIsXHJcbiAgICBCT09MRUFOID0gM1xyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1BhcmFtZXRybywgUGFyYW1ldHJvVGlwb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldHJvc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3BhcmFtZXRyb3MnO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsVHJpYnV0b3MgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvcGFyYW1ldHJvcy10cmlidXRvcyc7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmxQYXJhbWV0cm9zQ2hhdmVWYWxvciA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvcGFyYW1ldHJvcy1jaGF2ZS12YWxvcic7XHJcbiAgICBwcml2YXRlIG1vZHVsbzogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIG9wdGlvbnNQcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tb2R1bG8gPSBvcHRpb25zUHJvdmlkZXIubW9kdWxvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb3MocGFnaW5hOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VVcmwgKyAnLycgKyBwYWdpbmEgKyAnLycgKyB0aGlzLm1vZHVsbztcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQodXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBKU09OLnBhcnNlKGJvZHlba2V5XS52YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IGJvZHlba2V5XS52YWxvciA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9zVG9FZGl0KHBhZ2luYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZVVybCArICcvJyArIHBhZ2luYSArICcvJyArIHRoaXMubW9kdWxvICsgXCI/ZWRpdD10cnVlXCI7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYm9keSA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBib2R5KSB7XHJcbiAgICAgICAgICAgIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IEpTT04ucGFyc2UoYm9keVtrZXldLnZhbG9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gYm9keVtrZXldLnZhbG9yID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb3NCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxQYXJhbWV0cm8+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvcHVibGljL3BhcmFtZXRyb3MnICsgJy8nICsgbmFtZSArICcvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRybzogUGFyYW1ldHJvID0gdmFsdWUuYm9keSBhcyBQYXJhbWV0cm87XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1ldHJvLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1ldHJvLnZhbG9yID0gSlNPTi5wYXJzZShwYXJhbWV0cm8udmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0cm8udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRyby52YWxvciA9IHBhcmFtZXRyby52YWxvciA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtZXRybztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldHJvc0NoYXZlVmFsb3IocGFnaW5hOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VVcmxQYXJhbWV0cm9zQ2hhdmVWYWxvciArICcvJyArIHBhZ2luYSArICcvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IEpTT04ucGFyc2UoYm9keVtrZXldLnZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gYm9keVtrZXldLnZhbG9yID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVQYXJhbWV0cm8ocGFyYW1ldHJvOiBQYXJhbWV0cm8pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRyb0NvcHk6IFBhcmFtZXRybyA9IHsgLi4ucGFyYW1ldHJvIH07XHJcbiAgICAgICAgcGFyYW1ldHJvQ29weS5tb2R1bG8gPSB0aGlzLm1vZHVsbztcclxuICAgICAgICBpZiAocGFyYW1ldHJvQ29weS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRyb0NvcHkudmFsb3IgPSBKU09OLnN0cmluZ2lmeShwYXJhbWV0cm9Db3B5LnZhbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMucmVzb3VyY2VVcmwsIHBhcmFtZXRyb0NvcHksIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQYXJhbWV0cm8ocGFyYW1ldHJvOiBQYXJhbWV0cm8pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRyb0NvcHk6IFBhcmFtZXRybyA9IHsgLi4ucGFyYW1ldHJvIH07XHJcbiAgICAgICAgcGFyYW1ldHJvQ29weS5tb2R1bG8gPSB0aGlzLm1vZHVsbztcclxuICAgICAgICBpZiAocGFyYW1ldHJvQ29weS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRyb0NvcHkudmFsb3IgPSBKU09OLnN0cmluZ2lmeShwYXJhbWV0cm9Db3B5LnZhbG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5yZXNvdXJjZVVybCwgcGFyYW1ldHJvQ29weSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVBhcmFtZXRybyhpZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLnJlc291cmNlVXJsICsgJy8nICsgaWQsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9UcmlidXRvcyhub21lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb3VyY2VVcmxUcmlidXRvcyArICcvJyArIG5vbWUsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUGFyYW1ldHJvUmVzdWx0IHtcclxuICAgIHB1YmxpYyBzdWNlc3NvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHJldG9ybm86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lciB7XHJcbiAgICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KTtcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBTYW5pdGl6ZXIsIFNlY3VyaXR5Q29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEpoaUNvbmZpZ1NlcnZpY2UgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5leHBvcnQgdHlwZSBKaGlBbGVydFR5cGUgPSAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9yYWxBbGVydCB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIHR5cGU6IEpoaUFsZXJ0VHlwZTtcclxuICAgIG1zZzogc3RyaW5nO1xyXG4gICAgcGFyYW1zPzogYW55O1xyXG4gICAgdGltZW91dD86IG51bWJlcjtcclxuICAgIHRvYXN0PzogYm9vbGVhbjtcclxuICAgIHBvc2l0aW9uPzogc3RyaW5nO1xyXG4gICAgc2NvcGVkPzogYm9vbGVhbjtcclxuICAgIGRpc2FibGVUcmFuc2xhdGU/OiBib29sZWFuO1xyXG4gICAgY2xvc2U/OiAoYWxlcnRzOiBQb3JhbEFsZXJ0W10pID0+IHZvaWQ7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQb3J0YWxBbGVydFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBhbGVydElkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGFsZXJ0czogUG9yYWxBbGVydFtdO1xyXG4gICAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHRvYXN0OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBpMThuRW5hYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNhbml0aXplcjogU2FuaXRpemVyLCBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IEpoaUNvbmZpZ1NlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ID0gY29uZmlnLmFsZXJ0QXNUb2FzdDtcclxuICAgICAgICB0aGlzLmkxOG5FbmFibGVkID0gY29uZmlnLmkxOG5FbmFibGVkO1xyXG4gICAgICAgIHRoaXMuYWxlcnRJZCA9IDA7XHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgICAgICB0aGlzLnRpbWVvdXQgPSBjb25maWcuYWxlcnRUaW1lb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzLnNwbGljZSgwLCB0aGlzLmFsZXJ0cy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCgpOiBQb3JhbEFsZXJ0W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0cztcclxuICAgIH1cclxuXHJcbiAgICBzdWNjZXNzKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICBtc2csXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUcmFuc2xhdGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGVycm9yKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcclxuICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmlzVG9hc3QoKSxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FybmluZyhtc2c6IHN0cmluZywgcGFyYW1zPzogYW55LCBwb3NpdGlvbj86IHN0cmluZywgZGlzYWJsZVRyYW5zbGF0ZT86IGJvb2xlYW4pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgICAgbXNnLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgdG9hc3Q6IHRoaXMuaXNUb2FzdCgpLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpbmZvKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXHJcbiAgICAgICAgICAgICAgICBtc2csXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUcmFuc2xhdGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFsZXJ0KGFsZXJ0T3B0aW9uczogUG9yYWxBbGVydCwgZXh0QWxlcnRzOiBQb3JhbEFsZXJ0W10pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICBhbGVydE9wdGlvbnMuaWQgPSB0aGlzLmFsZXJ0SWQrKztcclxuXHJcbiAgICAgICAgaWYgKCFhbGVydE9wdGlvbnMuZGlzYWJsZVRyYW5zbGF0ZSAmJiB0aGlzLmkxOG5FbmFibGVkICYmIGFsZXJ0T3B0aW9ucy5tc2cpIHtcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zLm1zZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGFsZXJ0T3B0aW9ucy5tc2csIGFsZXJ0T3B0aW9ucy5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWxlcnQgPSB0aGlzLmZhY3RvcnkoYWxlcnRPcHRpb25zKTtcclxuICAgICAgICBpZiAoYWxlcnRPcHRpb25zLnRpbWVvdXQgJiYgYWxlcnRPcHRpb25zLnRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsZXJ0KGFsZXJ0T3B0aW9ucy5pZCwgZXh0QWxlcnRzKTtcclxuICAgICAgICAgICAgfSwgYWxlcnRPcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWxlcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBbGVydChpZDogbnVtYmVyLCBleHRBbGVydHM/OiBQb3JhbEFsZXJ0W10pOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHRoaXNBbGVydHM6IFBvcmFsQWxlcnRbXSA9IGV4dEFsZXJ0cyAmJiBleHRBbGVydHMubGVuZ3RoID4gMCA/IGV4dEFsZXJ0cyA6IHRoaXMuYWxlcnRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNsb3NlQWxlcnRCeUluZGV4KHRoaXNBbGVydHMubWFwKGUgPT4gZS5pZCkuaW5kZXhPZihpZCksIHRoaXNBbGVydHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWxlcnRCeUluZGV4KGluZGV4OiBudW1iZXIsIHRoaXNBbGVydHM6IFBvcmFsQWxlcnRbXSk6IFBvcmFsQWxlcnRbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNBbGVydHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1RvYXN0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmFjdG9yeShhbGVydE9wdGlvbnM6IFBvcmFsQWxlcnQpOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICBjb25zdCBhbGVydDogUG9yYWxBbGVydCA9IHtcclxuICAgICAgICAgICAgdHlwZTogYWxlcnRPcHRpb25zLnR5cGUsXHJcbiAgICAgICAgICAgIG1zZzogdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGFsZXJ0T3B0aW9ucy5tc2cpLFxyXG4gICAgICAgICAgICBpZDogYWxlcnRPcHRpb25zLmlkLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBhbGVydE9wdGlvbnMudGltZW91dCxcclxuICAgICAgICAgICAgdG9hc3Q6IGFsZXJ0T3B0aW9ucy50b2FzdCxcclxuICAgICAgICAgICAgcG9zaXRpb246IGFsZXJ0T3B0aW9ucy5wb3NpdGlvbiA/IGFsZXJ0T3B0aW9ucy5wb3NpdGlvbiA6ICd0b3AgcmlnaHQnLFxyXG4gICAgICAgICAgICBzY29wZWQ6IGFsZXJ0T3B0aW9ucy5zY29wZWQsXHJcbiAgICAgICAgICAgIGNsb3NlOiAoYWxlcnRzOiBQb3JhbEFsZXJ0W10pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NlQWxlcnQoYWxlcnRPcHRpb25zLmlkLCBhbGVydHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWFsZXJ0LnNjb3BlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFsZXJ0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVdGlsTWVuc2FnZW0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgc2hvd0Vycm9yKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZTtcclxuICAgICAgICBpZiAodmFsdWUuZXJyb3IgJiYgdmFsdWUuZXJyb3IuZmllbGRFcnJvcnMpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3IuZmllbGRFcnJvcnNbMF0ubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXJyb3JNZXNzYWdlID09PSBudWxsIHx8IGVycm9yTWVzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdFcnJvIGRlc2NvbmhlY2lkbyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd01lbnNhZ2VtRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3JEZXRhaWxlZCh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFV0aWxGdW5jdGlvbnMuZ2V0SHR0cEVycm9yTWVzc2FnZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVuc2FnZW1FcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBbGVydERldGFpbGVkKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gVXRpbEZ1bmN0aW9ucy5nZXRIdHRwRXJyb3JNZXNzYWdlKHZhbHVlKTtcclxuICAgICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICB0ZXh0OiBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3JTd2FsKG1lbnNzYWdlKSB7XHJcbiAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIHRleHQ6IG1lbnNzYWdlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW5zYWdlbUVycm9yKGVycm9yTWVzc2FnZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIG51bGwsIG51bGwsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dXYXJuaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKHZhbHVlLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U3VjY2Vzcyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2Vzcyh2YWx1ZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQYXJhbWV0cm8sIFBhcmFtZXRyb1RpcG99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4vcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9SZXN1bHQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyfSBmcm9tICcuL3BhcmFtZXRyby5yZXN1bHQnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXBhcmFtZXRyb3MtZWRpdC1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFyYW1ldHJvcy5lZGl0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldHJvc0VkaXRDb21wb25lbnQge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ25vbWUnKVxyXG4gICAgbm9tZTogRWxlbWVudFJlZjtcclxuXHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgcGFyYW1ldHJvOiBQYXJhbWV0cm87XHJcbiAgICBwYXJhbWV0cm9CYWNrdXA6IFBhcmFtZXRybztcclxuICAgIHBhcmFtZXRyb0VtdW0gPSBQYXJhbWV0cm9UaXBvO1xyXG4gICAgcmV0OiBQYXJhbWV0cm9SZXN1bHQ7XHJcbiAgICBsaXN0ZW5lcjogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXI7XHJcbiAgICBidXN5OiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRybyA9IG5ldyBQYXJhbWV0cm8oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCh0aXRsZTogc3RyaW5nLCBwYXJhbTogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwID0gcGFyYW07XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm8gPSB7IC4uLnRoaXMucGFyYW1ldHJvQmFja3VwIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExpc3RlbmVyKHBhcmVudDogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmFsb3JBcnJheVZhbGlkbygpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnBhcmFtZXRyby52YWxvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShpdGVtOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFyYW1ldHJvLnZhbG9yLmluZGV4T2YoaXRlbSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3Iuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGljaW9uYUl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucGFyYW1ldHJvLnZhbG9yKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvci5wdXNoKHsgdmFsb3I6ICcnLCB0ZXh0bzogJycgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGlwbygpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJhbWV0cm8udGlwbyA9PT0gdGhpcy5wYXJhbWV0cm9FbXVtLkNPTUJPKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJhbWV0cm8udGlwbyA9PT0gdGhpcy5wYXJhbWV0cm9FbXVtLlNUUklORykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9ICcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJhbWV0cm8udGlwbyA9PT0gdGhpcy5wYXJhbWV0cm9FbXVtLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VMb2NhbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJhbWV0cm8ubG9jYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnRpcG8gPSBQYXJhbWV0cm9UaXBvLlNUUklORztcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXQgPSBuZXcgUGFyYW1ldHJvUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucmV0LnN1Y2Vzc28gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cC50aXBvID0gdGhpcy5wYXJhbWV0cm8udGlwbztcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAubG9jYWwgPSB0aGlzLnBhcmFtZXRyby5sb2NhbDtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAubm9tZSA9IHRoaXMucGFyYW1ldHJvLm5vbWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwLmRlc2NyaWNhbyA9IHRoaXMucGFyYW1ldHJvLmRlc2NyaWNhbztcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAudmFsb3IgPSB0aGlzLnBhcmFtZXRyby52YWxvcjtcclxuICAgICAgICAgICAgdGhpcy5yZXQucmV0b3JubyA9IHRoaXMucGFyYW1ldHJvQmFja3VwO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLnJldG9ybm8odGhpcy5yZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ3NhdmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGljaW9uYVBhcmFtZXRyb1RyaWJ1dG9zKCkge1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFBhcmFtZXRyb1RyaWJ1dG9zKHRoaXMucGFyYW1ldHJvLm5vbWUpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYm9keS5zdWNlc3NvKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gdmFsdWUuYm9keS52YWxvcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dNZW5zYWdlbUVycm9yKHZhbHVlLmJvZHkuZXJybyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQYXJhbWV0cm8sIFBhcmFtZXRyb1RpcG99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7RGlhbG9nTGlzdGVuZXIsIERpYWxvZ1Jlc3VsdH0gZnJvbSAnLi4vbW9kYWwtZGlhbG9nJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NFZGl0Q29tcG9uZW50fSBmcm9tICcuL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb1Jlc3VsdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXJ9IGZyb20gJy4vcGFyYW1ldHJvLnJlc3VsdCc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFyYW1ldHJvcy1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFyYW1ldHJvcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyb3NDb21wb25lbnQgaW1wbGVtZW50cyBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lciwgRGlhbG9nTGlzdGVuZXIge1xyXG4gICAgcHVibGljIHBhcmFtZXRyb0VtdW0gPSBQYXJhbWV0cm9UaXBvO1xyXG4gICAgcHVibGljIHBhZ2luYTogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcGFyYW1ldHJvczogQXJyYXk8UGFyYW1ldHJvPjtcclxuICAgIHB1YmxpYyByZXQ6IFBhcmFtZXRyb1Jlc3VsdDtcclxuICAgIHB1YmxpYyBsaXN0ZW5lcjogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXI7XHJcbiAgICBwdWJsaWMgYnVzeTogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRyb3MgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluaXNoKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5saXN0ZW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnJldCA9IG5ldyBQYXJhbWV0cm9SZXN1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5yZXQuc3VjZXNzbyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmV0LnJldG9ybm8gPSB0aGlzLnBhcmFtZXRyb3M7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIucmV0b3Jubyh0aGlzLnJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnZmluaXNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExpc3RlbmVyKHBhcmVudDogUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RlbmVyID0gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KHRpdGxlOiBzdHJpbmcsIHBhZ2luYTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMucGFnaW5hID0gcGFnaW5hO1xyXG4gICAgICAgIHRoaXMuZ2V0UGFyYW1ldGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0UGFyYW1ldHJvc1RvRWRpdCh0aGlzLnBhZ2luYSlcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnNvcnQoKGEsIGIpID0+IGEubm9tZS5sb2NhbGVDb21wYXJlKGIubm9tZSkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdFBhcmFtZXRlcihwYXJhbWV0cm86IFBhcmFtZXRybykge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0VkaXRDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KCdFZGnDg8Knw4PCo28gZGUgUGFyw4PCom1ldHJvJywgcGFyYW1ldHJvKTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUGFyYW1ldGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0VkaXRDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtID0gbmV3IFBhcmFtZXRybygpO1xyXG4gICAgICAgIHBhcmFtLmxvY2FsID0gdHJ1ZTtcclxuICAgICAgICBwYXJhbS50ZWxhID0gdGhpcy5wYWdpbmE7XHJcbiAgICAgICAgcGFyYW0udGlwbyA9IFBhcmFtZXRyb1RpcG8uU1RSSU5HO1xyXG4gICAgICAgIHBhcmFtLnZhbG9yID0gJyc7XHJcbiAgICAgICAgcGFyYW0ubm9tZSA9ICcnO1xyXG4gICAgICAgIHBhcmFtLmRlc2NyaWNhbyA9ICcnO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KCdBZGnDg8Knw4PCo28gZGUgUGFyw4PCom1ldHJvJywgcGFyYW0pO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5zZXRMaXN0ZW5lcih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlUGFyYW1ldGVyKHBhcmFtZXRybzogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAuc2F2ZVBhcmFtZXRybyhwYXJhbWV0cm8pXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldHJvLmlkID0gcmVzdWx0LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnB1c2gocGFyYW1ldHJvKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qZGVsZXRlUGFyYW1ldGVyKHBhcmFtZXRybzogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgbGV0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogTW9kYWxEaWFsb2dDb21wb25lbnQ7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbERpYWxvZ0NvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLnNldExpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KHBhcmFtZXRybywgJ0NvbmZpcm1hw4PCp8ODwqNvJywgJ0Rlc2VqYSByZWFsbWVudGUgYXBhZ2FyIGVzc2UgcGFyw4PCom1ldHJvPycsICcnLCBEaWFsb2dUeXBlLlFVRVNUSU9OKTtcclxuICAgIH0qL1xyXG5cclxuICAgIHVwZGF0ZVBhcmFtZXRlcihwYXJhbWV0cm86IFBhcmFtZXRybykge1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLnVwZGF0ZVBhcmFtZXRybyhwYXJhbWV0cm8pXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaWFsb2dSZXR1cm5lZChyZXN1bHQ6IERpYWxvZ1Jlc3VsdCwgcGFyYW06IGFueSkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IERpYWxvZ1Jlc3VsdC5ZRVMpIHtcclxuICAgICAgICAgICAgbGV0IHBhcmFtZXRybzogUGFyYW1ldHJvO1xyXG4gICAgICAgICAgICBwYXJhbWV0cm8gPSBwYXJhbTtcclxuICAgICAgICAgICAgaWYgKHBhcmFtZXRyby5pZCA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtZXRyby5pZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhcmFtZXRyb3MuaW5kZXhPZihwYXJhbWV0cm8pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5kZWxldGVQYXJhbWV0cm8ocGFyYW1ldHJvLmlkKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhcmFtZXRyb3MuaW5kZXhPZihwYXJhbWV0cm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3IodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNlc3NvID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmV0b3Juby5pZCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5yZXRvcm5vLmlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVyKHJlc3VsdC5yZXRvcm5vKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVBhcmFtZXRlcihyZXN1bHQucmV0b3Jubyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3J0YWxBbGVydFNlcnZpY2UgfSBmcm9tICcuL3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYWxlcnQnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRzXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFsZXJ0IG9mIGFsZXJ0c1wiIFtuZ0NsYXNzXT1cInNldENsYXNzZXMoYWxlcnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0ICpuZ0lmPVwiYWxlcnQgJiYgYWxlcnQudHlwZSAmJiBhbGVydC5tc2dcIiBbdHlwZV09XCJhbGVydC50eXBlXCIgKGNsb3NlKT1cImFsZXJ0LmNsb3NlKGFsZXJ0cylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImFsZXJ0Lm1zZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlBbGVydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGFsZXJ0czogYW55W107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0cyA9IHRoaXMuYWxlcnRTZXJ2aWNlLmdldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENsYXNzZXMoYWxlcnQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b2FzdDogISFhbGVydC50b2FzdCxcclxuICAgICAgICAgICAgW2FsZXJ0LnBvc2l0aW9uXTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEpoaUV2ZW50TWFuYWdlciB9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBvcnRhbEFsZXJ0U2VydmljZSB9IGZyb20gJy4vcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1hbGVydC1lcnJvcicsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydHNcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWxlcnQgb2YgYWxlcnRzXCIgW25nQ2xhc3NdPVwic2V0Q2xhc3NlcyhhbGVydClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgKm5nSWY9XCJhbGVydCAmJiBhbGVydC50eXBlICYmIGFsZXJ0Lm1zZ1wiIFt0eXBlXT1cImFsZXJ0LnR5cGVcIiAoY2xvc2UpPVwiYWxlcnQuY2xvc2UoYWxlcnRzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmUgW2lubmVySFRNTF09XCJhbGVydC5tc2dcIj48L3ByZT5cclxuICAgICAgICAgICAgICAgIDwvbmdiLWFsZXJ0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlBbGVydEVycm9yQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIGFsZXJ0czogYW55W107XHJcbiAgICBjbGVhbkh0dHBFcnJvckxpc3RlbmVyOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYW5IdHRwRXJyb3JMaXN0ZW5lciA9IGV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ3BvcnRhbEdhdGV3YXlBcHAuaHR0cEVycm9yJywgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaTtcclxuICAgICAgICAgICAgY29uc3QgaHR0cEVycm9yUmVzcG9uc2UgPSByZXNwb25zZS5jb250ZW50O1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGh0dHBFcnJvclJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29ubmVjdGlvbiByZWZ1c2VkLCBzZXJ2ZXIgbm90IHJlYWNoYWJsZVxyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydCgnU2VydmVyIG5vdCByZWFjaGFibGUnLCAnZXJyb3Iuc2VydmVyLm5vdC5yZWFjaGFibGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQwMDpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBodHRwRXJyb3JSZXNwb25zZS5oZWFkZXJzLmtleXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JIZWFkZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbnRpdHlLZXkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyci5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2FwcC1lcnJvcicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhlYWRlciA9IGh0dHBFcnJvclJlc3BvbnNlLmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtcGFyYW1zJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUtleSA9IGh0dHBFcnJvclJlc3BvbnNlLmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckhlYWRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlOYW1lID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdnbG9iYWwubWVudS5lbnRpdGllcy4nICsgZW50aXR5S2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KGVycm9ySGVhZGVyLCBlcnJvckhlYWRlciwgeyBlbnRpdHlOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IgIT09ICcnICYmIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLmZpZWxkRXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IuZmllbGRFcnJvcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZEVycm9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZpZWxkRXJyb3JzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q6IEFycmF5PHN0cmluZz4gPSBbJ01pbicsICdNYXgnLCAnRGVjaW1hbE1pbicsICdEZWNpbWFsTWF4J107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QuaW5jbHVkZXMoZmllbGRFcnJvci5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3IubWVzc2FnZSA9ICdTaXplJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgJ3NvbWV0aGluZ1sxNF0ub3RoZXJbNF0uaWQnIHRvICdzb21ldGhpbmdbXS5vdGhlcltdLmlkJyBzbyB0cmFuc2xhdGlvbnMgY2FuIGJlIHdyaXR0ZW4gdG8gaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZEZpZWxkID0gZmllbGRFcnJvci5maWVsZC5yZXBsYWNlKC9cXFtcXGQqXFxdL2csICdbXScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdwb3J0YWxHYXRld2F5QXBwLicgKyBmaWVsZEVycm9yLm9iamVjdE5hbWUgKyAnLicgKyBjb252ZXJ0ZWRGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoJ0Vycm9yIG9uIGZpZWxkIFwiJyArIGZpZWxkTmFtZSArICdcIicsICdlcnJvci4nICsgZmllbGRFcnJvci5tZXNzYWdlLCB7IGZpZWxkTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IgIT09ICcnICYmIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5wYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlIDQwNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoJ05vdCBmb3VuZCcsICdlcnJvci51cmwubm90LmZvdW5kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IgIT09ICcnICYmIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydChodHRwRXJyb3JSZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2xhc3NlcyhhbGVydCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvYXN0OiAhIWFsZXJ0LnRvYXN0LFxyXG4gICAgICAgICAgICBbYWxlcnQucG9zaXRpb25dOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3kodGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyKTtcclxuICAgICAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXJyb3JBbGVydChtZXNzYWdlLCBrZXk/LCBkYXRhPykge1xyXG4gICAgICAgIGtleSA9IGtleSAmJiBrZXkgIT09IG51bGwgPyBrZXkgOiBtZXNzYWdlO1xyXG4gICAgICAgIHRoaXMuYWxlcnRzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIG1zZzoga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiA1MDAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmFsZXJ0U2VydmljZS5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgc2NvcGVkOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydHNcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuL3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7SmhpQWxlcnRDb21wb25lbnR9IGZyb20gJy4vYWxlcnQuY29tcG9uZW50JztcclxuaW1wb3J0IHtKaGlBbGVydEVycm9yQ29tcG9uZW50fSBmcm9tICcuL2FsZXJ0LWVycm9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEpoaUFsZXJ0Q29tcG9uZW50LFxyXG4gICAgSmhpQWxlcnRFcnJvckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSmhpQWxlcnRDb21wb25lbnQsXHJcbiAgICBKaGlBbGVydEVycm9yQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFV0aWxNZW5zYWdlbSwgUG9ydGFsQWxlcnRTZXJ2aWNlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBvcnRhbEFsZXJ0TW9kdWxlIHt9XHJcbiIsImltcG9ydCB7VGlwb0xvZ3JhZG91cm99IGZyb20gJy4vdGlwby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtUaXR1bG9Mb2dyYWRvdXJvfSBmcm9tICcuL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDYW1wb3NQcmVlbmNoaW1lbnRvIHtcclxuICAgIHB1YmxpYyB0aXBvc0xvZ3JhZG91cm8/OiBBcnJheTxUaXBvTG9ncmFkb3Vybz4gPSBbXTtcclxuICAgIHB1YmxpYyB0aXR1bG9zTG9ncmFkb3Vybz86IEFycmF5PFRpdHVsb0xvZ3JhZG91cm8+ID0gW107XHJcbn1cclxuIiwiaW1wb3J0IHtSZXNwb25zYXZlbH0gZnJvbSAnLi9yZXNwb25zYXZlbC5tb2RlbCc7XHJcbmltcG9ydCB7UGVzc29hSnVyaWRpY2F9IGZyb20gJy4vcGVzc29hLWp1cmlkaWNhLm1vZGVsJztcclxuaW1wb3J0IHtQZXNzb2FGaXNpY2F9IGZyb20gJy4vcGVzc29hLWZpc2ljYS5tb2RlbCc7XHJcbmltcG9ydCB7RW5kZXJlY299IGZyb20gJy4vZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQge1NpdHVhY2FvQ29udHJpYnVpbnRlLCBUaXBvUGVzc29hfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb250cmlidWludGUge1xyXG4gICAgcHVibGljIGlkPzogbnVtYmVyO1xyXG4gICAgcHVibGljIHRpcG9QZXNzb2E/OiBUaXBvUGVzc29hO1xyXG4gICAgcHVibGljIGRvY3VtZW50bz86IHN0cmluZztcclxuICAgIHB1YmxpYyBub21lPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpdHVhY2FvPzogU2l0dWFjYW9Db250cmlidWludGU7XHJcbiAgICBwdWJsaWMgdGVsZWZvbmVDZWx1bGFyPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHRlbGVmb25lUmVzaWRlbmNpYWw/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGVsZWZvbmVDb21lcmNpYWw/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZW1haWw/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGF0YUFsdGVyYWNhbz86IERhdGU7XHJcbiAgICBwdWJsaWMgdXN1YXJpb0FsdGVyYWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyB1dGlsaXphckVuZGVyZWNvUHJpbmNpcGFsUGFyYUNvcnJlc3BvbmRlbmNpYT86IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcGVzc29hRmlzaWNhPzogUGVzc29hRmlzaWNhO1xyXG4gICAgcHVibGljIHBlc3NvYUp1cmlkaWNhPzogUGVzc29hSnVyaWRpY2E7XHJcbiAgICBwdWJsaWMgZW5kZXJlY29zPzogRW5kZXJlY29bXTtcclxuICAgIHB1YmxpYyBlbmRlcmVjbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBpbnNjcmljYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYXJlYU9jdXBhZGE/OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGRkPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGF0dWFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgcmVzcG9uc2F2ZWlzPzogQXJyYXk8UmVzcG9uc2F2ZWw+ID0gW107XHJcbn1cclxuXHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvfSBmcm9tICcuLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7UGFnaW5hQWp1ZGF9IGZyb20gJy4uLy4uL21vZGVsL3BhZ2luYUFqdWRhLm1vZGVsJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktYWp1ZGEtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hanVkYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2FqdWRhLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignYW5pbWFjYW8nLCBbXHJcbiAgICAgIHN0YXRlKCdzaG93bicsIHN0eWxlKHtcclxuICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ2hpZGRlbicsIHN0eWxlKHtcclxuICAgICAgICBvcGFjaXR5OiAwXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignKiA9PiAqJywgYW5pbWF0ZSgnLjNzJykpXHJcbiAgICBdKVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBanVkYUNvbXBvbmVudCB7XHJcbiAgcHVibGljIHRpdGxlOiBzdHJpbmc7XHJcbiAgcHVibGljIGJ1c3k6IGJvb2xlYW47XHJcbiAgcHVibGljIHBhcmFtZXRyb3M6IEFycmF5PFBhcmFtZXRybz47XHJcbiAgcHVibGljIHBhZ2luYXNBanVkYTogQXJyYXk8UGFnaW5hQWp1ZGE+ID0gW107XHJcbiAgcHVibGljIHBhZ2luYUF0dWFsOiBudW1iZXI7XHJcbiAgcHVibGljIGZhZGUgPSAnc2hvd24nO1xyXG5cclxuICBAVmlld0NoaWxkKCdib3Rhb05hdmVnYWNhbycpXHJcbiAgYm90YW9OYXZlZ2FjYW86IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbFxyXG4gICkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9zID0gW107XHJcbiAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZmluaXNoKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdmaW5pc2gnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHRpdGxlOiBzdHJpbmcsIHBhZ2luYXNBanVkYTogQXJyYXk8UGFnaW5hQWp1ZGE+KSB7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICB0aGlzLnBhZ2luYXNBanVkYSA9IHBhZ2luYXNBanVkYTtcclxuICAgIHRoaXMucGFnaW5hQXR1YWwgPSAwO1xyXG5cclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c3VhcmlvVml1QWp1ZGEnLCAndHJ1ZScpO1xyXG5cclxuICAgIHRoaXMuYm90YW9OYXZlZ2FjYW8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gIH1cclxuXHJcbiAgcHJveGltbygpIHtcclxuICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5hQXR1YWwgPT0gdGhpcy5wYWdpbmFzQWp1ZGEubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuZmluaXNoKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmFBdHVhbCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBhbnRlcmlvcigpIHtcclxuICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wYWdpbmFBdHVhbC0tO1xyXG4gICAgICB0aGlzLmFsdGVybmFyVmlzaWJpbGlkYWRlKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhbHRlcm5hclZpc2liaWxpZGFkZSgpIHtcclxuICAgIHRoaXMuZmFkZSA9IHRoaXMuZmFkZSA9PSAnc2hvd24nID8gJ2hpZGRlbicgOiAnc2hvd24nO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1BhcmFtZXRyb1Jlc3VsdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXJ9IGZyb20gJy4vcGFyYW1ldHJvLnJlc3VsdCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc0NvbXBvbmVudH0gZnJvbSAnLi9wYXJhbWV0cm9zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q2FtcG9zUHJlZW5jaGltZW50b30gZnJvbSAnLi4vLi4vbW9kZWwvY2FtcG9zLXByZWVuY2hpbWVudG8ubW9kZWwnO1xyXG5pbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi4vLi4vbW9kZWwvY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtBanVkYUNvbXBvbmVudH0gZnJvbSAnLi4vYWp1ZGEvYWp1ZGEuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYWdpbmFBanVkYX0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnaW5hQWp1ZGEubW9kZWwnO1xyXG5pbXBvcnQge0pveXJpZGVTZXJ2aWNlfSBmcm9tICduZ3gtam95cmlkZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgR2xvYmFsU2VydmljZSBpbXBsZW1lbnRzIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyIHtcclxuXHJcbiAgICBwcml2YXRlIHJlc291cmNlVXJsR2VyYWw6IHN0cmluZyA9ICcuL2FwaS9wdWJsaWMvZ2VyYWwnIDtcclxuXHJcbiAgICBwdWJsaWMgcGFyYW1ldHJvczogeyBba2V5OiBzdHJpbmddOiBQYXJhbWV0cm8gfTtcclxuICAgIHByaXZhdGUgdXN1YXJpb0xvZ2FkbzogQ29udHJpYnVpbnRlO1xyXG4gICAgcHJpdmF0ZSBjYW1wb3NQcmVlbmNoaW1lbnRvOiBDYW1wb3NQcmVlbmNoaW1lbnRvO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGpveXJpZGVTZXJ2aWNlOiBKb3lyaWRlU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQ2hhdmVWYWxvcignKicpLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3MgPSB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGFyYW1ldHJpemFyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0NvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGFyYW1ldHJvc0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoJ1BhcsODwqJtZXRyb3MgR2xvYmFpcycsICcqJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0b3JubyhyZXN1bHQ6IFBhcmFtZXRyb1Jlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb25zdWx0YXJDZXAoY2VwOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc291cmNlVXJsR2VyYWwgKyAnL3ZpYWNlcC8nICsgY2VwLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3VsdGFyQ2FtcG9zUHJlZW5jaGltZW50bygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvdXJjZVVybEdlcmFsICsgJy9jYW1wb3MtcHJlZW5jaGltZW50bycsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3VsdGFyVXN1YXJpb0xvZ2FkbygpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvdXJjZVVybEdlcmFsICsgJy91c3VhcmlvLWxvZ2FkbycsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDYW1wb3NQcmVlbmNoaW1lbnRvKCk6IFByb21pc2U8Q2FtcG9zUHJlZW5jaGltZW50bz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvKSkge1xyXG4gICAgICAgIHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byA9IG5ldyBDYW1wb3NQcmVlbmNoaW1lbnRvKCk7XHJcbiAgICAgICAgdGhpcy5jb25zdWx0YXJDYW1wb3NQcmVlbmNoaW1lbnRvKClcclxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvID0gdmFsdWUuYm9keTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFVzdWFyaW9Mb2dhZG8oKTogUHJvbWlzZTxDb250cmlidWludGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMudXN1YXJpb0xvZ2FkbykpIHtcclxuICAgICAgICB0aGlzLnVzdWFyaW9Mb2dhZG8gPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICAgICAgdGhpcy5jb25zdWx0YXJVc3VhcmlvTG9nYWRvKClcclxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUuYm9keTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjZXNzbykge1xyXG4gICAgICAgICAgICAgIHRoaXMudXN1YXJpb0xvZ2FkbyA9IHJlc3VsdC5jb250cmlidWludGU7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnVzdWFyaW9Mb2dhZG8pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJlamVjdChyZXN1bHQuZXJybyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSh0aGlzLnVzdWFyaW9Mb2dhZG8pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKSB7XHJcbiAgICAgIHRoaXMudXN1YXJpb0xvZ2FkbyA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWJyaXJBanVkYShwYWdpbmFzQWp1ZGE6IEFycmF5PFBhZ2luYUFqdWRhPikge1xyXG4gICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWp1ZGFDb21wb25lbnQsIHtcclxuICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgICAgICB3aW5kb3dDbGFzczogJ2FqdWRhJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogQWp1ZGFDb21wb25lbnQgPSBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoJ0FqdWRhJywgcGFnaW5hc0FqdWRhKTtcclxuXHJcbiAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKCgpID0+IHtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5qb3lyaWRlU2VydmljZS5zdGFydFRvdXIoe1xyXG4gICAgICAgICAgICAgIHN0ZXBzOiBbJ2ZpcnN0U3RlcCddLFxyXG4gICAgICAgICAgICAgIHNob3dDb3VudGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICB0aGVtZUNvbG9yOiAnI2ZmZidcclxuICAgICAgICAgIH0pLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBib3Rhb0VudGVuZGkgPSA8SFRNTEVsZW1lbnQ+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuam95cmlkZS1zdGVwX19kb25lLWNvbnRhaW5lciAuam95cmlkZS1idXR0b25cIik7XHJcbiAgICAgICAgICAgICAgYm90YW9FbnRlbmRpLmlubmVyVGV4dCA9ICdFbnRlbmRpJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFUaW1lc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVGltZXMnO1xyXG5pbXBvcnQge2ZhQmFufSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFCYW4nO1xyXG5pbXBvcnQge0FqdWRhQ29tcG9uZW50fSBmcm9tICcuL2FqdWRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmcyRml0dGV4dE1vZHVsZX0gZnJvbSAnbmcyLWZpdHRleHQnO1xyXG5pbXBvcnQge0Jyb3dzZXJBbmltYXRpb25zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xyXG5saWJyYXJ5LmFkZChmYVRpbWVzKTtcclxubGlicmFyeS5hZGQoZmFCYW4pO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBOZzJGaXR0ZXh0TW9kdWxlLFxyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgQWp1ZGFDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgQWp1ZGFDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEFqdWRhQ29tcG9uZW50XHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFqdWRhTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NDb21wb25lbnR9IGZyb20gJy4vcGFyYW1ldHJvcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NFZGl0Q29tcG9uZW50fSBmcm9tICcuL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtNb2RhbERpYWxvZ01vZHVsZX0gZnJvbSAnLi4vbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5tb2R1bGUnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi8uLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtHbG9iYWxTZXJ2aWNlfSBmcm9tICcuL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNT0RVTE9fT1BUSU9OUywgT3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge0FqdWRhTW9kdWxlfSBmcm9tICcuLi9hanVkYS9hanVkYS5tb2R1bGUnO1xyXG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNb2RhbERpYWxvZ01vZHVsZSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICBBanVkYU1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBQYXJhbWV0cm9zQ29tcG9uZW50LFxyXG4gICAgUGFyYW1ldHJvc0VkaXRDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgUGFyYW1ldHJvc0NvbXBvbmVudCxcclxuICAgIFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQYXJhbWV0cm9zQ29tcG9uZW50LFxyXG4gICAgUGFyYW1ldHJvc0VkaXRDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgT3B0aW9uc1Byb3ZpZGVyXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyb3NNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KG1vZHVsbz86IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFBhcmFtZXRyb3NNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtwcm92aWRlOiBNT0RVTE9fT1BUSU9OUywgdXNlVmFsdWU6IG1vZHVsb31cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi8uLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlcm1vTGdwZFNlcnZpY2Uge1xyXG4gIHB1YmxpYyByZXNvdXJjZVVybCA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaSc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVybW9MZ3BkKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUZXJtb0xncGQ+KHRoaXMucmVzb3VyY2VVcmwgKyAnL3B1YmxpYy9sZ3BkL3Rlcm1vTGdwZCcsIHtvYnNlcnZlOiAncmVzcG9uc2UnfSk7XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBUZXJtb0xncGQge1xyXG4gICAgcHVibGljIGlkPzogbnVtYmVyO1xyXG4gICAgcHVibGljIG5vbWU/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGVzY3JpY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGFuZXhvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIG9ic2VydmFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2l0dWFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvX2luYz86IHN0cmluZztcclxuICAgIHB1YmxpYyBkYXRhX2luYz86IERhdGU7XHJcbiAgICBwdWJsaWMgdXN1YXJpb19pcF9pbmM/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZXJyb3M/OiB7XHJcbiAgICAgIGNvX3JldG9ybm8/OiBzdHJpbmdcclxuICAgICAgZHNfcmV0b3Jubz86IHN0cmluZ1xyXG4gICAgICBkc192YWxvcj86IHN0cmluZ1xyXG4gICAgfVxyXG4gICAgcHVibGljIGhhYmlsaXRhZG8/OiBib29sZWFuO1xyXG4gICAgcHVibGljIGFjZWl0bz86IGJvb2xlYW47XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZFNlcnZpY2V9IGZyb20gJy4vdGVybW8tbGdwZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi8uLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlcm1vTGdwZENvbXBvbmVudCksXHJcbiAgbXVsdGk6IHRydWVcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXRlcm1vLWxncGQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXJtby1sZ3BkLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRlcm1vTGdwZENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICB0ZXJtb0xncGQ/OiBUZXJtb0xncGQ7XHJcblxyXG4gIEBJbnB1dCgpIGV4aWJpclRlcm1vOiBib29sZWFuO1xyXG5cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge1xyXG4gIH07XHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0ZXJtb0xncGRTZXJ2aWNlOiBUZXJtb0xncGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW1cclxuICApIHtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbmV3IFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKHZhbCkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSB2YWw7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XHJcbiAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlZCgkZXZlbnQpIHtcclxuICAgIHRoaXMudGVybW9MZ3BkLmFjZWl0byA9ICRldmVudCAmJiAkZXZlbnQudGFyZ2V0ICYmICRldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgIHRoaXMub25DaGFuZ2UodGhpcy50ZXJtb0xncGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUZXJtb0xncGQoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnSEFCSUxJVEFSX0xHUEQnKVxyXG4gICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICBpZiAocmVzcC52YWxvciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy50ZXJtb0xncGRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRUZXJtb0xncGQoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXJtb0xncGQgPSByZXNwLmJvZHk7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXJtb0xncGQuaGFiaWxpdGFkbyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy50ZXJtb0xncGQpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1vTGdwZC5lcnJvcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd01lbnNhZ2VtRXJyb3IodGhpcy50ZXJtb0xncGQuZXJyb3MuZHNfcmV0b3Jubyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKGVycik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkQ29tcG9uZW50fSBmcm9tICcuL3Rlcm1vLWxncGQuY29tcG9uZW50JztcclxuaW1wb3J0IHtUZXJtb0xncGRTZXJ2aWNlfSBmcm9tICcuL3Rlcm1vLWxncGQuc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KClcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgVGVybW9MZ3BkQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBUZXJtb0xncGRDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgVGVybW9MZ3BkQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFRlcm1vTGdwZFNlcnZpY2UsXHJcbiAgICBQYXJhbWV0cm9zU2VydmljZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXJtb0xncGRNb2R1bGUge1xyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtUZXJtb0xncGRTZXJ2aWNlfSBmcm9tICcuLi90ZXJtby1sZ3BkL3Rlcm1vLWxncGQuc2VydmljZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi8uLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLWNvb2tpZS1jb25zZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29va2llLWNvbnNlbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydjb29raWUtY29uc2VudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignc2ltcGxlRmFkZUFuaW1hdGlvbicsIFtcclxuICAgICAgc3RhdGUoJ2luJywgc3R5bGUoe29wYWNpdHk6IDF9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7b3BhY2l0eTogMH0pLFxyXG4gICAgICAgIGFuaW1hdGUoNDAwKVxyXG4gICAgICBdKSxcclxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJyxcclxuICAgICAgICBhbmltYXRlKDQwMCwgc3R5bGUoe29wYWNpdHk6IDB9KSkpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvb2tpZUNvbnNlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHRlcm1vTGdwZD86IFRlcm1vTGdwZDtcclxuICBlcnJvcnM/OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIHByaXZhdGUgdGVybW9MZ3BkU2VydmljZTogVGVybW9MZ3BkU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSBuZXcgVGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KCdjb29raWVTZWVuJykpIHtcclxuICAgICAgdGhpcy5nZXRUZXJtb0xncGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZlY2hhcigpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjb29raWVTZWVuJywgJ3RydWUnKTtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVybW9MZ3BkKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoJ0hBQklMSVRBUl9MR1BEJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3AudmFsb3IgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMudGVybW9MZ3BkU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0VGVybW9MZ3BkKClcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudGVybW9MZ3BkID0gcmVzcC5ib2R5O1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMudGVybW9MZ3BkLmVycm9zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IHRoaXMudGVybW9MZ3BkLmVycm9zLmRzX3JldG9ybm87XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudGVybW9MZ3BkLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMTAwMCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IFV0aWxGdW5jdGlvbnMuZ2V0SHR0cEVycm9yTWVzc2FnZShlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZFNlcnZpY2V9IGZyb20gJy4uL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtDb29raWVDb25zZW50Q29tcG9uZW50fSBmcm9tICcuL2Nvb2tpZS1jb25zZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIENvb2tpZUNvbnNlbnRDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIENvb2tpZUNvbnNlbnRDb21wb25lbnRcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgQ29va2llQ29uc2VudENvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBUZXJtb0xncGRTZXJ2aWNlLFxyXG4gICAgUGFyYW1ldHJvc1NlcnZpY2VcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29va2llQ29uc2VudE1vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50U2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZ2V0KCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFjY291bnQ+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QWNjb3VudD4oU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZShhY2NvdW50OiBhbnkpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY2NvdW50JywgYWNjb3VudCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZVNlcnZpY2V9IGZyb20gJ25neC13ZWJzdG9yYWdlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUHJpbmNpcGFsIHtcclxuICAgIHByaXZhdGUgdXNlcklkZW50aXR5OiBhbnk7XG4gICAgcHJpdmF0ZSBhdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhdXRoZW50aWNhdGlvblN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm90YUF0dWFsaXphY2FvQ2FkYXN0cmFsID0gJy9zZXR0aW5ncyc7XG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBKaGlMYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY2NvdW50OiBBY2NvdW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxuICAgICkge31cblxyXG4gICAgYXV0aGVudGljYXRlKGlkZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy51c2VySWRlbnRpdHkgPSBpZGVudGl0eTtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBpZGVudGl0eSAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUubmV4dCh0aGlzLnVzZXJJZGVudGl0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQW55QXV0aG9yaXR5KGF1dGhvcml0aWVzOiBzdHJpbmdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5oYXNBbnlBdXRob3JpdHlEaXJlY3QoYXV0aG9yaXRpZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlBdXRob3JpdHlEaXJlY3QoYXV0aG9yaXRpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQgfHwgIXRoaXMudXNlcklkZW50aXR5IHx8ICF0aGlzLnVzZXJJZGVudGl0eS5hdXRob3JpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF1dGhvcml0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJJZGVudGl0eS5hdXRob3JpdGllcy5pbmNsdWRlcyhhdXRob3JpdGllc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQXV0aG9yaXR5KGF1dGhvcml0eTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eSgpLnRoZW4oXHJcbiAgICAgICAgICAgIGlkID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaWQuYXV0aG9yaXRpZXMgJiYgaWQuYXV0aG9yaXRpZXMuaW5jbHVkZXMoYXV0aG9yaXR5KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZGVudGl0eShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChmb3JjZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGFuZCBzZWUgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhlIHVzZXJJZGVudGl0eSBkYXRhIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAgICAvLyBpZiB3ZSBoYXZlLCByZXVzZSBpdCBieSBpbW1lZGlhdGVseSByZXNvbHZpbmdcclxuICAgICAgICBpZiAodGhpcy51c2VySWRlbnRpdHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnVzZXJJZGVudGl0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXRyaWV2ZSB0aGUgdXNlcklkZW50aXR5IGRhdGEgZnJvbSB0aGUgc2VydmVyLCB1cGRhdGUgdGhlIGlkZW50aXR5IG9iamVjdCwgYW5kIHRoZW4gcmVzb2x2ZS5cclxuICAgICAgICByZXR1cm4gdGhpcy5hY2NvdW50XHJcbiAgICAgICAgICAgIC5nZXQoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gYWNjb3VudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciByZXRyaWV2ZSB0aGUgYWNjb3VudCBpbmZvLCB0aGUgbGFuZ3VhZ2Ugd2lsbCBiZSBjaGFuZ2VkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UgY29uZmlndXJlZCBpbiB0aGUgYWNjb3VudCBzZXR0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ0tleSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2xvY2FsZScpIHx8IHRoaXMudXNlcklkZW50aXR5LmxhbmdLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuY2hhbmdlTGFuZ3VhZ2UobGFuZ0tleSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUubmV4dCh0aGlzLnVzZXJJZGVudGl0eSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjaW9uYXJQYXJhQXR1YWxpemFjYW9DYWRhc3RyYWxTZU5lY2Vzc2FyaW8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VySWRlbnRpdHk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5uZXh0KHRoaXMudXNlcklkZW50aXR5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBpc0lkZW50aXR5UmVzb2x2ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklkZW50aXR5ICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0lkZW50aXR5UmVzb2x2ZWQoKSA/IHRoaXMudXNlcklkZW50aXR5LmltYWdlVXJsIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySWRlbnRpdHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklkZW50aXR5O1xuICAgIH1cblxuICAgIHByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbChpZGVudGl0eT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250YSA9IGlkZW50aXR5IHx8IHRoaXMudXNlcklkZW50aXR5O1xuICAgICAgICByZXR1cm4gISEoY29udGEgJiYgY29udGEuYXR1YWxpemFjYW9DYWRhc3RyYWxPYnJpZ2F0b3JpYSk7XG4gICAgfVxuXG4gICAgZ2V0Um90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdGFBdHVhbGl6YWNhb0NhZGFzdHJhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZGlyZWNpb25hclBhcmFBdHVhbGl6YWNhb0NhZGFzdHJhbFNlTmVjZXNzYXJpbygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbCgpIHx8ICF0aGlzLnJvdXRlciB8fCAhdGhpcy5yb3V0ZXIudXJsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsICE9PSB0aGlzLnJvdGFBdHVhbGl6YWNhb0NhZGFzdHJhbCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdGFBdHVhbGl6YWNhb0NhZGFzdHJhbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtQYXJhbWV0cm9SZXN1bHQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyby5yZXN1bHQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi8uLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zQ29tcG9uZW50fSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1wYWdpbmEtcGFyYW1ldHJpemFkYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYS1wYXJhbWV0cml6YWRhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wYWdpbmEtcGFyYW1ldHJpemFkYS5zdHlsZS5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hUGFyYW1ldHJpemFkYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIge1xyXG4gIHBhcmFtZXRyb3M6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldHJvIH0gPSB7fTtcclxuICBpc0J1c3k6IGJvb2xlYW47XHJcbiAgZGVzYWJpbGl0YWRvID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHBhZ2luYSA9ICcnO1xyXG4gIEBJbnB1dCgpIGNsYXNzTWFpbkNvbnRhaW5lciA9ICcnO1xyXG4gIEBJbnB1dCgpIGNsYXNzQ2FyZENvbnRhaW5lciA9ICcnO1xyXG4gIEBJbnB1dCgpIGhpZGVNYWluQ29udGVudCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGVCYWNrQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVBhZ2VUaXRsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGVQYWdlU3ViVGl0bGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0aXR1bG9EZWZhdWx0ID0gJyc7XHJcbiAgQElucHV0KCkgc3ViVGl0dWxvRGVmYXVsdCA9ICcnO1xyXG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJzUmVhZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHBhcmFtZXRyb3NTZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHVibGljIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtLFxyXG4gICAgcHVibGljIGhpc3Rvcnk6IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgIHB1YmxpYyBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge1xyXG5cclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhcnJlZ2FyUGFyYW1ldHJvcyhmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KTogYW55IHtcclxuICAgIHRoaXMuY2FycmVnYXJQYXJhbWV0cm9zKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcGFyYW1ldHJpemFyKCkge1xyXG4gICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBQYXJhbWV0cm9zQ29tcG9uZW50ID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQYXJhbWV0cm9zQ29tcG9uZW50LCB7XHJcbiAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdChcIlBhcsODwqJtZXRyb3MgZGEgUMODwqFnaW5hXCIsIHRoaXMucGFnaW5hKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FycmVnYXJQYXJhbWV0cm9zKGNoYW5nZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNCdXN5ID0gdHJ1ZTtcclxuICAgIHRoaXMucGFyYW1ldHJvc1NlcnZpY2VcclxuICAgICAgLmdldFBhcmFtZXRyb3NDaGF2ZVZhbG9yKHRoaXMucGFnaW5hKVxyXG4gICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5kZXNhYmlsaXRhZG8gPSBVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydIQUJJTElUQURPJ10pID09PSB0cnVlICYmIHRoaXMucGFyYW1ldHJvc1snSEFCSUxJVEFETyddLnZhbG9yID09PSBmYWxzZSA7XHJcbiAgICAgICAgaWYgKGNoYW5nZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnNSZWFkLmVtaXQodGhpcy5wYXJhbWV0cm9zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzQ2hhbmdlZC5lbWl0KHRoaXMucGFyYW1ldHJvcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNCdXN5ID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VUaXRsZSgpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fVElUVUxPX1RFTEEnXSkgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fVElUVUxPX1RFTEEnXS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fVElUVUxPX1RFTEEnXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudGl0dWxvRGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRTdWJUaXRsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhpZGVQYWdlU3ViVGl0bGUgPT09IGZhbHNlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19DQUJFQ0FMSE9fVEVMQSddKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX0NBQkVDQUxIT19URUxBJ10udmFsb3IpID09PSB0cnVlIHx8XHJcbiAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5zdWJUaXR1bG9EZWZhdWx0KTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VTdWJUaXRsZSgpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXSkgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3ViVGl0dWxvRGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VEZXNjcmlwdGlvbigpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0RFU0NSSUNBTyddKSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfREVTQ1JJQ0FPJ10udmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9ERVNDUklDQU8nXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlSW5mb3JtYXRpb24oKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9JTkZPUk1BQ0FPJ10pID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9JTkZPUk1BQ0FPJ10udmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9JTkZPUk1BQ0FPJ10udmFsb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xCYXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWRlUGFnZVRpdGxlID09PSB0cnVlICYmIHRoaXMuaGlkZUJhY2tCdXR0b24gJiYgdGhpcy5wcmluY2lwYWwuaGFzQW55QXV0aG9yaXR5RGlyZWN0KFtcIlJPTEVfQURNSU5cIl0pID09PSBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi9wcmluY2lwYWwuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQHdoYXRJdERvZXMgQ29uZGl0aW9uYWxseSBpbmNsdWRlcyBhbiBIVE1MIGVsZW1lbnQgaWYgY3VycmVudCB1c2VyIGhhcyBhbnlcclxuICogb2YgdGhlIGF1dGhvcml0aWVzIHBhc3NlZCBhcyB0aGUgYGV4cHJlc3Npb25gLlxyXG4gKlxyXG4gKiBAaG93VG9Vc2VcclxuICogYGBgXHJcbiAqICAgICA8c29tZS1lbGVtZW50ICpqaGlIYXNBbnlBdXRob3JpdHk9XCInUk9MRV9BRE1JTidcIj4uLi48L3NvbWUtZWxlbWVudD5cclxuICpcclxuICogICAgIDxzb21lLWVsZW1lbnQgKmpoaUhhc0FueUF1dGhvcml0eT1cIlsnUk9MRV9BRE1JTicsICdST0xFX1BPUlRBTCddXCI+Li4uPC9zb21lLWVsZW1lbnQ+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tqaGlIYXNBbnlBdXRob3JpdHldJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlIHtcclxuICAgIHByaXZhdGUgYXV0aG9yaXRpZXM6IHN0cmluZ1tdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGpoaUhhc0FueUF1dGhvcml0eSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLmF1dGhvcml0aWVzID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IFt2YWx1ZV0gOiB2YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgICAgICAvLyBHZXQgbm90aWZpZWQgZWFjaCB0aW1lIGF1dGhlbnRpY2F0aW9uIHN0YXRlIGNoYW5nZXMuXHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpLnN1YnNjcmliZShpZGVudGl0eSA9PiB0aGlzLnVwZGF0ZVZpZXcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVWaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmhhc0FueUF1dGhvcml0eSh0aGlzLmF1dGhvcml0aWVzKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICduZ3gtd2Vic3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgU3RhdGVTdG9yYWdlU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlICRzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGdldFByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKCdwcmV2aW91c1N0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRQcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLmNsZWFyKCdwcmV2aW91c1N0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVQcmV2aW91c1N0YXRlKHByZXZpb3VzU3RhdGVOYW1lLCBwcmV2aW91c1N0YXRlUGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHsgbmFtZTogcHJldmlvdXNTdGF0ZU5hbWUsIHBhcmFtczogcHJldmlvdXNTdGF0ZVBhcmFtcyB9O1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLnN0b3JlKCdwcmV2aW91c1N0YXRlJywgcHJldmlvdXNTdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGVzdGluYXRpb25TdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2Rlc3RpbmF0aW9uU3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVybCh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLnN0b3JlKCdwcmV2aW91c1VybCcsIHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgncHJldmlvdXNVcmwnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZURlc3RpbmF0aW9uU3RhdGUoZGVzdGluYXRpb25TdGF0ZSwgZGVzdGluYXRpb25TdGF0ZVBhcmFtcywgZnJvbVN0YXRlKSB7XHJcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25JbmZvID0ge1xyXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZGVzdGluYXRpb25TdGF0ZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGVzdGluYXRpb25TdGF0ZS5kYXRhXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmFtczogZGVzdGluYXRpb25TdGF0ZVBhcmFtcyxcclxuICAgICAgICAgICAgZnJvbToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZnJvbVN0YXRlLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoJ2Rlc3RpbmF0aW9uU3RhdGUnLCBkZXN0aW5hdGlvbkluZm8pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2ZXJQcm92aWRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgJGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSwgcHJpdmF0ZSAkc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSkge31cclxuXHJcbiAgICBnZXRUb2tlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kbG9jYWxTdG9yYWdlLnJldHJpZXZlKCdhdXRoZW50aWNhdGlvblRva2VuJykgfHwgdGhpcy4kc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbihjcmVkZW50aWFscyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hdXRoZW50aWNhdGUnLCBjcmVkZW50aWFscywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnBpcGUobWFwKGF1dGhlbnRpY2F0ZVN1Y2Nlc3MuYmluZCh0aGlzKSkpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBhdXRoZW50aWNhdGVTdWNjZXNzKHJlc3ApIHtcclxuICAgICAgICAgICAgY29uc3QgYmVhcmVyVG9rZW4gPSByZXNwLmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChiZWFyZXJUb2tlbiAmJiBiZWFyZXJUb2tlbi5zbGljZSgwLCA3KSA9PT0gJ0JlYXJlciAnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqd3QgPSBiZWFyZXJUb2tlbi5zbGljZSg3LCBiZWFyZXJUb2tlbi5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZUF1dGhlbnRpY2F0aW9uVG9rZW4oand0LCBjcmVkZW50aWFscy5yZW1lbWJlck1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBqd3Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW5XaXRoVG9rZW4oand0LCByZW1lbWJlck1lKSB7XHJcbiAgICAgICAgaWYgKGp3dCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlQXV0aGVudGljYXRpb25Ub2tlbihqd3QsIHJlbWVtYmVyTWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGp3dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdhdXRoLWp3dC1zZXJ2aWNlIFByb21pc2UgcmVqZWN0Jyk7IC8vIFB1dCBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGhlcmVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVBdXRoZW50aWNhdGlvblRva2VuKGp3dCwgcmVtZW1iZXJNZSkge1xyXG4gICAgICAgIGlmIChyZW1lbWJlck1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2FsU3RvcmFnZS5zdG9yZSgnYXV0aGVudGljYXRpb25Ub2tlbicsIGp3dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nLCBqd3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2dvdXQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhbFN0b3JhZ2UuY2xlYXIoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgICAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2UuY2xlYXIoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgICAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2UuY2xlYXIoJ2xvY2tQYWdlc05hdmlnYXRpb24nKTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIYXNBbnlBdXRob3JpdHlEaXJlY3RpdmV9IGZyb20gJy4vaGFzLWFueS1hdXRob3JpdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7U3RhdGVTdG9yYWdlU2VydmljZX0gZnJvbSAnLi9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0F1dGhTZXJ2ZXJQcm92aWRlcn0gZnJvbSAnLi9hdXRoLWp3dC5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlXHJcbiAgICBdLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlXHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIEFjY291bnRTZXJ2aWNlLFxyXG4gICAgICBQcmluY2lwYWwsXHJcbiAgICAgIFN0YXRlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgIEF1dGhTZXJ2ZXJQcm92aWRlclxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aE1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYWdpbmFQYXJhbWV0cml6YWRhQ29tcG9uZW50fSBmcm9tICcuL3BhZ2luYS1wYXJhbWV0cml6YWRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0F1dGhNb2R1bGV9IGZyb20gJy4uLy4uL2F1dGgvYXV0aC5tb2R1bGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBBdXRoTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1BhZ2luYVBhcmFtZXRyaXphZGFDb21wb25lbnRdLFxyXG4gICAgZXhwb3J0czogW1BhZ2luYVBhcmFtZXRyaXphZGFDb21wb25lbnRdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdpbmFQYXJhbWV0cml6YWRhTW9kdWxlIHsgfVxyXG4iLCJleHBvcnQgZW51bSBDYXB0Y2hhUHJvdmlkZXJFbnVtIHtcclxuICAgIFJFQ0FQVENIQV9WMiA9ICdSRUNBUFRDSEFfVjInLFxyXG4gICAgUkVDQVBUQ0hBX1YzID0gJ1JFQ0FQVENIQV9WMycsXHJcbiAgICBUVVJOU1RJTEUgPSAnVFVSTlNUSUxFJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFDb25maWdNb2RlbCB7XHJcbiAgICBwcm92aWRlcjogQ2FwdGNoYVByb3ZpZGVyRW51bSB8IHN0cmluZztcclxuICAgIHNpdGVLZXk6IHN0cmluZztcclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtmb3JrSm9pbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Q2FwdGNoYUNvbmZpZ01vZGVsLCBDYXB0Y2hhUHJvdmlkZXJFbnVtfSBmcm9tICcuL211bHRpcGxlLWNhcHRjaGEubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb30gZnJvbSAnLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE11bHRpcGxlQ2FwdGNoYVNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9TSVRFX0tFWSA9ICc2TGRYWFgwVUFBQUFBQWtRMms2dXdETEstU0w1U3pfVW54NWFjOFd4JztcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXRDb25maWcoKTogUHJvbWlzZTxDYXB0Y2hhQ29uZmlnTW9kZWw+IHtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKFtcclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldDxQYXJhbWV0cm8+KCcvYXBpL3B1YmxpYy9wYXJhbWV0cm9zL0NBUFRDSEFfUFJPVklERVIvKicpLFxyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PFBhcmFtZXRybz4oJy9hcGkvcHVibGljL3BhcmFtZXRyb3MvQ0FQVENIQV9TSVRFX0tFWS8qJylcclxuICAgICAgICBdKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4oKFtwcm92aWRlclBhcmFtLCBzaXRlS2V5UGFyYW1dKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnOiBDYXB0Y2hhQ29uZmlnTW9kZWwgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyUGFyYW0udmFsb3IgYXMgQ2FwdGNoYVByb3ZpZGVyRW51bSxcclxuICAgICAgICAgICAgICAgICAgICBzaXRlS2V5OiBzaXRlS2V5UGFyYW0udmFsb3JcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShjb25maWcucHJvdmlkZXIpID09PSBmYWxzZSB8fCAhVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShjb25maWcuc2l0ZUtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcucHJvdmlkZXIgPSAnUkVDQVBUQ0hBX1YyJztcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcuc2l0ZUtleSA9IHRoaXMuREVGQVVMVF9TSVRFX0tFWTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gY2FycmVnYXIgY29uZmlndXJhw4PCp8ODwqNvIGRlIGNhcHRjaGEnLCBlcnIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXI6ICdSRUNBUFRDSEFfVjInLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpdGVLZXk6IHRoaXMuREVGQVVMVF9TSVRFX0tFWVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNvbnN0IE1VTFRJUExFX0NBUFRDSEFfUFRfQlIgPSB7XHJcbiAgXCJtdWx0aXBsZUNhcHRjaGFcIjoge1xyXG4gICAgXCJ0dXJuc1RpbGVcIiA6IHtcclxuICAgICAgXCJsb2FkRXJyb3JcIjogXCJFcnJvIGFvIGNhcnJlZ2FyIFR1cm5zdGlsZVwiXHJcbiAgICB9LFxyXG4gICAgXCJyZUNhcHRjaGFWM1wiIDoge1xyXG4gICAgICBcImxvYWRFcnJvclwiOiBcIk7Dg8KjbyBmb2kgcG9zc8ODwq12ZWwgY2FycmVnYXIgbyByZUNBUFRDSEEgdjNcIixcclxuICAgICAgXCJpbnZhbGlkS2V5XCI6IFwiQ2hhdmUgZG8gcmVDQVBUQ0hBIGludsODwqFsaWRhIG91IGRvbcODwq1uaW8gbsODwqNvIGF1dG9yaXphZG9cIixcclxuICAgICAgXCJ2YWxpZGF0aW9uRXJyb3JcIjogXCJGYWxoYSBuYSB2YWxpZGHDg8Knw4PCo28gZG8gY2FwdGNoYVwiLFxyXG4gICAgICBcImh1bWFuVmVyaWZpY2F0aW9uc1wiOiBcIlZlcmlmaWNhbmRvIHNlIHZvY8ODwqogw4PCqSBodW1hbm/DosKAwqZcIixcclxuICAgICAgXCJzdWNjZXNzVmVyaWZpY2F0aW9uXCI6IFwiQ2FwdGNoYSB2ZXJpZmljYWRvIGNvbSBzdWNlc3NvXCJcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDYXB0Y2hhQ29uZmlnTW9kZWwsIENhcHRjaGFQcm92aWRlckVudW19IGZyb20gJy4vbXVsdGlwbGUtY2FwdGNoYS5tb2RlbCc7XHJcbmltcG9ydCB7TXVsdGlwbGVDYXB0Y2hhU2VydmljZX0gZnJvbSAnLi9tdWx0aXBsZS1jYXB0Y2hhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5pbXBvcnQge01VTFRJUExFX0NBUFRDSEFfUFRfQlJ9IGZyb20gJy4vaTE4bi9wdC1icic7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICB0dXJuc3RpbGU6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLW11bHRpcGxlLWNhcHRjaGEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpcGxlQ2FwdGNoYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgndHVybnN0aWxlQ29udGFpbmVyJykgdHVybnN0aWxlQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3JlY2FwdGNoYVYyJykgcmVjYXB0Y2hhVjI6IGFueTtcclxuICBwcml2YXRlIF9hY3Rpb24gPSAnaW5pdCc7XHJcbiAgQElucHV0KCkgdmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY3VzdG9tRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSB2YWxpZGF0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHJlc29sdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSB0dXJuc3RpbGVXaWRnZXRJZDogYW55O1xyXG4gIHByaXZhdGUgY2FwdGNoYVRyYW5zbGF0aW9uc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBhY3Rpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3Rpb247XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBhY3Rpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgdmFsdWUgPSBVdGlsRnVuY3Rpb25zLnNhbml0aXplUmVjYXB0Y2hhQWN0aW9uKHZhbHVlKTtcclxuICAgIHRoaXMuX2FjdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgY3VzdG9tRXJyb3IoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tRXJyb3I7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjdXN0b21FcnJvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fY3VzdG9tRXJyb3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjb25maWc6IENhcHRjaGFDb25maWdNb2RlbDtcclxuICBlcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIG5vdm8gY2FtcG8gbm8gY29tcG9uZW50ZVxyXG4gIHByaXZhdGUgdHVybnN0aWxlUmVuZGVyZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHR1cm5zdGlsZUxvYWRpbmc/OiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NhcHRjaGFTZXJ2aWNlOiBNdWx0aXBsZUNhcHRjaGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy52YWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLl9jYXB0Y2hhU2VydmljZS5nZXRDb25maWcoKS50aGVuKGFzeW5jIGNvbmZpZyA9PiB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcucHJvdmlkZXIgPT09IENhcHRjaGFQcm92aWRlckVudW0uVFVSTlNUSUxFKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVHVybnN0aWxlU2NyaXB0KCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJUdXJuc3RpbGUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5wcm92aWRlciA9PT0gQ2FwdGNoYVByb3ZpZGVyRW51bS5SRUNBUFRDSEFfVjMpIHtcclxuICAgICAgICB0aGlzLmV4ZWN1dGVWMygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAvLyBUVVJOU1RJTEVcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIHByaXZhdGUgbG9hZFR1cm5zdGlsZVNjcmlwdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh3aW5kb3cudHVybnN0aWxlKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50dXJuc3RpbGVMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnR1cm5zdGlsZUxvYWRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50dXJuc3RpbGVMb2FkaW5nID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgc2NyaXB0LnNyYyA9ICdodHRwczovL2NoYWxsZW5nZXMuY2xvdWRmbGFyZS5jb20vdHVybnN0aWxlL3YwL2FwaS5qcyc7XHJcbiAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XHJcbiAgICAgIHNjcmlwdC5kZWZlciA9IHRydWU7XHJcblxyXG4gICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xyXG4gICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHJlamVjdCh0aGlzLmdldFRyYW5zbGF0aW9uKCdtdWx0aXBsZUNhcHRjaGEudHVybnNUaWxlLmxvYWRFcnJvcicpKTtcclxuXHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnR1cm5zdGlsZUxvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclR1cm5zdGlsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnR1cm5zdGlsZVJlbmRlcmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMudHVybnN0aWxlQ29udGFpbmVyKSB7XHJcbiAgICAgIC8vIHRlbnRhIG5vdmFtZW50ZSBuYSBwcsODwrN4aW1hIGl0ZXJhw4PCp8ODwqNvIGRvIEFuZ3VsYXJcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbmRlclR1cm5zdGlsZSgpLCAxMCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnR1cm5zdGlsZVJlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnR1cm5zdGlsZVdpZGdldElkID0gd2luZG93LnR1cm5zdGlsZS5yZW5kZXIodGhpcy50dXJuc3RpbGVDb250YWluZXIubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBzaXRla2V5OiB0aGlzLmNvbmZpZy5zaXRlS2V5LFxyXG4gICAgICBjYWxsYmFjazogKHRva2VuOiBzdHJpbmcpID0+IHRoaXMucmVzb2x2ZSh0b2tlbiksXHJcbiAgICAgICdlcnJvci1jYWxsYmFjayc6ICgpID0+IHRoaXMudmFsaWRhdGVkID0gZmFsc2UsXHJcbiAgICAgICdleHBpcmVkLWNhbGxiYWNrJzogKCkgPT4gdGhpcy52YWxpZGF0ZWQgPSBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgLy8gUkVDQVBUQ0hBICh2MiAvIHYzKVxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgb25Ub2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc29sdmUodG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVjYXB0Y2hhVjMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLmdyZWNhcHRjaGEpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgICAgc2NyaXB0LnNyYyA9IGBodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanM/cmVuZGVyPSR7dGhpcy5jb25maWcuc2l0ZUtleX1gO1xyXG4gICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xyXG4gICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xyXG4gICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHJlamVjdCgpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4ZWN1dGVWMygpIHtcclxuICAgIHRoaXMubG9hZFJlY2FwdGNoYVYzKClcclxuICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgKHdpbmRvdyBhcyBhbnkpLmdyZWNhcHRjaGEucmVhZHkoKCkgPT4ge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZXhlY1Byb21pc2UgPSAod2luZG93IGFzIGFueSkuZ3JlY2FwdGNoYS5leGVjdXRlKFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5zaXRlS2V5LFxyXG4gICAgICAgICAgICB7IGFjdGlvbjogdGhpcy5fYWN0aW9uIH1cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGV4ZWNQcm9taXNlKVxyXG4gICAgICAgICAgLnRoZW4oKHRva2VuOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSh0b2tlbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDYXB0Y2hhRXJyb3IoZXJyKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgIC8vIMOwwp/ClMKlIEVSUk8gU8ODwo1OQ1JPTk8gKGVzc2Ugw4PCqSBvIHNldSBjYXNvKVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVDYXB0Y2hhRXJyb3IoZXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH0pXHJcbiAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDYXB0Y2hhRXJyb3IoZXJyLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDYXB0Y2hhRXJyb3IoZXJyOiBhbnksIHNjcmlwdEVycm9yID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIHJlQ0FQVENIQSB2MzonLCBlcnIpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKHNjcmlwdEVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS5yZUNhcHRjaGFWMy5sb2FkRXJyb3InKTtcclxuICAgICAgfSBlbHNlIGlmIChTdHJpbmcoZXJyKS5pbmNsdWRlcygnSW52YWxpZCBzaXRlIGtleScpKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS5yZUNhcHRjaGFWMy5pbnZhbGlkS2V5Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS5yZUNhcHRjaGFWMy52YWxpZGF0aW9uRXJyb3InKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVycm9yICs9ICc6ICcgKyBlcnI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZSh0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB0aGlzLnZhbGlkYXRlZENoYW5nZS5lbWl0KHRoaXMudmFsaWRhdGVkKTtcclxuICAgIHRoaXMucmVzb2x2ZWQuZW1pdCh0b2tlbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGFuZyA9XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyB8fFxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0RGVmYXVsdExhbmcoKSB8fFxyXG4gICAgICAncHQtYnInO1xyXG5cclxuICAgIGxldCB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSk7XHJcbiAgICBjb25zdCBub3RGb3VuZCA9XHJcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgdmFsdWUuc3RhcnRzV2l0aCgndHJhbnNsYXRpb24tbm90LWZvdW5kWycpO1xyXG5cclxuICAgIC8vIG5neC10cmFuc2xhdGUgcmV0b3JuYSBhIHByw4PCs3ByaWEga2V5IHF1YW5kbyBuw4PCo28gZW5jb250cmFcclxuICAgIGlmIChub3RGb3VuZCAmJiAhdGhpcy5jYXB0Y2hhVHJhbnNsYXRpb25zTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbihsYW5nLCBNVUxUSVBMRV9DQVBUQ0hBX1BUX0JSLCB0cnVlKTtcclxuICAgICAgdGhpcy5jYXB0Y2hhVHJhbnNsYXRpb25zTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIHRlbnRhIG5vdmFtZW50ZSBhcMODwrNzIHJlZ2lzdHJhclxyXG4gICAgICB2YWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICB0aGlzLl9jdXN0b21FcnJvciA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLnZhbGlkYXRlZENoYW5nZS5lbWl0KGZhbHNlKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAodGhpcy5jb25maWcucHJvdmlkZXIpIHtcclxuXHJcbiAgICAgICAgY2FzZSBDYXB0Y2hhUHJvdmlkZXJFbnVtLlJFQ0FQVENIQV9WMjpcclxuICAgICAgICAgIHRoaXMucmVzZXRSZWNhcHRjaGFWMigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ2FwdGNoYVByb3ZpZGVyRW51bS5SRUNBUFRDSEFfVjM6XHJcbiAgICAgICAgICB0aGlzLnJlc2V0UmVjYXB0Y2hhVjMoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENhcHRjaGFQcm92aWRlckVudW0uVFVSTlNUSUxFOlxyXG4gICAgICAgICAgdGhpcy5yZXNldFR1cm5zdGlsZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlc2V0UmVjYXB0Y2hhVjIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNhcHRjaGFWMikge1xyXG4gICAgICB0aGlzLnJlY2FwdGNoYVYyLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UmVjYXB0Y2hhVjMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4ZWN1dGVWMygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldFR1cm5zdGlsZSgpOiB2b2lkIHtcclxuICAgIGlmICh3aW5kb3cudHVybnN0aWxlICYmIHRoaXMudHVybnN0aWxlV2lkZ2V0SWQpIHtcclxuICAgICAgd2luZG93LnR1cm5zdGlsZS5yZXNldCh0aGlzLnR1cm5zdGlsZVdpZGdldElkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TXVsdGlwbGVDYXB0Y2hhQ29tcG9uZW50fSBmcm9tICcuL211bHRpcGxlLWNhcHRjaGEuY29tcG9uZW50JztcclxuaW1wb3J0IHtSZWNhcHRjaGFNb2R1bGV9IGZyb20gJ25nLXJlY2FwdGNoYSc7XHJcbmltcG9ydCB7UmVjYXB0Y2hhQ29tbW9uTW9kdWxlfSBmcm9tICduZy1yZWNhcHRjaGEvcmVjYXB0Y2hhL3JlY2FwdGNoYS1jb21tb24ubW9kdWxlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSwgUmVjYXB0Y2hhQ29tbW9uTW9kdWxlLCBSZWNhcHRjaGFNb2R1bGVdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbTXVsdGlwbGVDYXB0Y2hhQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtNdWx0aXBsZUNhcHRjaGFDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZUNhcHRjaGFNb2R1bGUge31cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcbmltcG9ydCB7TGlzdGFDb2RpZ29zfSBmcm9tICcuLi8uLi9tb2RlbC9saXN0YS1jb2RpZ29zJztcclxuaW1wb3J0IHtCYXNpY1Jlc3Bvc3RhfSBmcm9tICcuLi8uLi9tb2RlbC9iYXNpYy1yZXNwb3N0YS5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhY29lc1NlcnZpY2Uge1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL25vdGlmaWNhY29lcyc7XHJcbiAgICBwcml2YXRlIG5vdGlmaWNhY29lc0VtQ2FjaGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vdGlmaWNhY2FvW10+KFtdKTtcclxuICAgIHByaXZhdGUgdWx0aW1vQ2FycmVnYW1lbnRvRW1NczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBvVmlkYUNhY2hlTXMgPSA2MDAwMDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgIH1cclxuXHJcbiAgICBidXNjYXJOb3RpZmljYWNvZXMoZm9yY2FyQXR1YWxpemFjYW86IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Tm90aWZpY2FjYW9bXT4ge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlQXR1YWwgPSB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUuZ2V0VmFsdWUoKTtcclxuICAgICAgICBjb25zdCBkYXRhQXR1YWwgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGlmICghZm9yY2FyQXR1YWxpemFjYW8gJiYgY2FjaGVBdHVhbCAmJiB0aGlzLnVsdGltb0NhcnJlZ2FtZW50b0VtTXMgJiYgKGRhdGFBdHVhbCAtIHRoaXMudWx0aW1vQ2FycmVnYW1lbnRvRW1NcykgPCB0aGlzLnRlbXBvVmlkYUNhY2hlTXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjYWNoZUF0dWFsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldDxOb3RpZmljYWNhb1tdPih0aGlzLnJlc291cmNlVXJsLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbigocmVzcDogSHR0cFJlc3BvbnNlPE5vdGlmaWNhY2FvW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0YSA9IHJlc3AuYm9keSA/IHJlc3AuYm9keSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0aXJMaXN0YUF0dWFsaXphZGEobGlzdGEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlck5vdGlmaWNhY29lc0VtQ2FjaGUoKTogTm90aWZpY2FjYW9bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXRpckxpc3RhQXR1YWxpemFkYShsaXN0YTogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5uZXh0KGxpc3RhID8gbGlzdGEgOiBbXSk7XHJcbiAgICAgICAgdGhpcy51bHRpbW9DYXJyZWdhbWVudG9FbU1zID0gRGF0ZS5ub3coKTtcclxuICAgIH1cclxuXHJcbiAgICBsaW1wYXJDYWNoZSgpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy51bHRpbW9DYXJyZWdhbWVudG9FbU1zID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhcGxpY2FyTmFvRXhpYmlyTG9jYWwoY29kaWdvczogbnVtYmVyW10pOiBOb3RpZmljYWNhb1tdIHtcclxuICAgICAgICBpZiAoIWNvZGlnb3MgfHwgY29kaWdvcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2J0ZXJOb3RpZmljYWNvZXNFbUNhY2hlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFnb3JhID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGNvbmp1bnRvQ29kaWdvcyA9IG5ldyBTZXQoY29kaWdvcyk7XHJcbiAgICAgICAgY29uc3QgYXR1YWxpemFkYSA9ICh0aGlzLm9idGVyTm90aWZpY2Fjb2VzRW1DYWNoZSgpIHx8IFtdKS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBpdGVtIGFzIGFueTtcclxuICAgICAgICAgICAgY29uc3QgY29kaWdvID0gdmFsb3IgPyB2YWxvci5jb2RpZ28gOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY29kaWdvICE9PSBudWxsICYmIGNvZGlnbyAhPT0gdW5kZWZpbmVkICYmIGNvbmp1bnRvQ29kaWdvcy5oYXMoY29kaWdvKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5pdGVtLCBkYXRhTmFvRXhpYmlyOiBhZ29yYX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lbWl0aXJMaXN0YUF0dWFsaXphZGEoYXR1YWxpemFkYSk7XHJcbiAgICAgICAgcmV0dXJuIGF0dWFsaXphZGE7XHJcbiAgICB9XHJcblxyXG4gICAgbWFyY2FyTmFvRXhpYmlyKGRhZG9zOiBMaXN0YUNvZGlnb3MpOiBQcm9taXNlPEJhc2ljUmVzcG9zdGE+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5wb3N0PEJhc2ljUmVzcG9zdGE+KHRoaXMucmVzb3VyY2VVcmwgKyAnL21hcmNhci1uYW8tZXhpYmlyJywgZGFkb3MsIHtvYnNlcnZlOiAncmVzcG9uc2UnfSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwOiBIdHRwUmVzcG9uc2U8QmFzaWNSZXNwb3N0YT4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwLmJvZHkgYXMgQmFzaWNSZXNwb3N0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2JzZXJ2YXJOb3RpZmljYWNvZXMoKTogT2JzZXJ2YWJsZTxOb3RpZmljYWNhb1tdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtOb3RpZmljYWNhb30gZnJvbSAnLi4vLi4vbW9kZWwvbm90aWZpY2FjYW8ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1ub3RpZmljYWNvZXMtZGV0YWxoZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudCB7XHJcbiAgICBub3RpZmljYWNhbzogTm90aWZpY2FjYW87XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge1xyXG4gICAgfVxyXG5cclxuICAgIGluaWNpYXIobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNhbyA9IG5vdGlmaWNhY2FvO1xyXG4gICAgfVxyXG5cclxuICAgIGZlY2hhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJUaXR1bG8oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gJ05vdGlmaWNhw4PCp8ODwqNvJztcclxuICAgIH1cclxuXHJcbiAgICBvYnRlck1lbnNhZ2VtKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IHRoaXMubm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLm1lbnNhZ2VtIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJEYXRhQ2FkYXN0cm8oKTogYW55IHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gdGhpcy5ub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuZGF0YUNhZGFzdHJvIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlckRhdGFOYW9FeGliaXIoKTogYW55IHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gdGhpcy5ub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuZGF0YU5hb0V4aWJpciA6IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge2ZhRXllfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzU2VydmljZX0gZnJvbSAnLi9ub3RpZmljYWNvZXMuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50fSBmcm9tICcuL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW5vdGlmaWNhY29lcy1wb3B1cCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbm90aWZpY2Fjb2VzLXBvcHVwLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCB7XHJcbiAgICBub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10gPSBbXTtcclxuICAgIG5vdGlmaWNhY29lc05vdmFzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBub3RpZmljYWNvZXNBbnRpZ2FzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBzZWxlY2lvbmFkb3M6IHsgW2tleTogbnVtYmVyXTogYm9vbGVhbiB9ID0ge307XHJcblxyXG4gICAgY29kaWdvc1Zpc3VhbGl6YWRvcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgY2FycmVnYW5kbyA9IGZhbHNlO1xyXG4gICAgZmFFeWUgPSBmYUV5ZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhY29lc1NlcnZpY2U6IE5vdGlmaWNhY29lc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pY2lhcihub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10pIHtcclxuICAgICAgICB0aGlzLmF0dWFsaXphckxpc3Rhcyhub3RpZmljYWNvZXMgPyBub3RpZmljYWNvZXMgOiBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmVjaGFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2xvc2UnKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXN1YWxpemFyKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbykge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnbyA9IHRoaXMub2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbyk7XHJcbiAgICAgICAgaWYgKGNvZGlnbyAhPT0gbnVsbCAmJiBjb2RpZ28gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvZGlnb3NWaXN1YWxpemFkb3MuYWRkKGNvZGlnbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlOiBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50ID0gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5pY2lhcihub3RpZmljYWNhbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWx0ZXJuYXJTZWxlY2lvbmFkbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8sIGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIGlmIChjb2RpZ28gPT09IG51bGwgfHwgY29kaWdvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjaW9uYWRvc1tjb2RpZ29dID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQgPT09IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTZWxlY2lvbmFkbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIHJldHVybiBjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY2lvbmFkb3NbY29kaWdvXSA9PT0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwb2RlU2VsZWNpb25hcihub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIHJldHVybiBjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybWFyKCkge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnb3MgPSB0aGlzLm9idGVyQ29kaWdvc1NlbGVjaW9uYWRvcygpO1xyXG4gICAgICAgIGlmIChjb2RpZ29zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHthdHVhbGl6YXI6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UubWFyY2FyTmFvRXhpYmlyKHtsaXN0YTogY29kaWdvc30pXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3Bvc3RhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb3N0YSAmJiByZXNwb3N0YS5zdWNlc3NvID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvcihyZXNwb3N0YS5lcnJvKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0YUF0dWFsaXphZGEgPSB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UuYXBsaWNhck5hb0V4aWJpckxvY2FsKGNvZGlnb3MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdHVhbGl6YXJMaXN0YXMobGlzdGFBdHVhbGl6YWRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWNpb25hZG9zID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2Uoe2F0dWFsaXphcjogZmFsc2V9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyTWVuc2FnZW0obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLm1lbnNhZ2VtIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJEYXRhQ2FkYXN0cm8obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYW55IHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLmRhdGFDYWRhc3RybyA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb3RpZmljYWNhb05vdmEobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IG5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gIXZhbG9yIHx8IHZhbG9yLmRhdGFOYW9FeGliaXIgPT09IG51bGwgfHwgdmFsb3IuZGF0YU5hb0V4aWJpciA9PT0gdW5kZWZpbmVkIHx8IHZhbG9yLmRhdGFOYW9FeGliaXIgPT09ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTm90aWZpY2FjYW9WaXN1YWxpemFkYShub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIHJldHVybiBjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb2RpZ29zVmlzdWFsaXphZG9zLmhhcyhjb2RpZ28pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXR1YWxpemFyTGlzdGFzKG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gbm90aWZpY2Fjb2VzID8gbm90aWZpY2Fjb2VzIDogW107XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNOb3ZhcyA9IHRoaXMubm90aWZpY2Fjb2VzLmZpbHRlcihpdGVtID0+IHRoaXMuaXNOb3RpZmljYWNhb05vdmEoaXRlbSkpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzQW50aWdhcyA9IHRoaXMubm90aWZpY2Fjb2VzLmZpbHRlcihpdGVtID0+ICF0aGlzLmlzTm90aWZpY2FjYW9Ob3ZhKGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9idGVyQ29kaWdvc1NlbGVjaW9uYWRvcygpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc2VsZWNpb25hZG9zKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGtleSA9PiB0aGlzLnNlbGVjaW9uYWRvc1sra2V5XSA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgLm1hcChrZXkgPT4gK2tleSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuY29kaWdvIDogbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9ub3RpZmljYWNvZXMtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50fSBmcm9tICcuL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gXCJAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgICBGb250QXdlc29tZU1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgICBOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhY29lc01vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQ1NSRlNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGdldENTUkYobmFtZSA9ICdYU1JGLVRPS0VOJykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KG5hbWUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0F1dGhTZXJ2ZXJQcm92aWRlcn0gZnJvbSAnLi4vYXV0aC9hdXRoLWp3dC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvZ2luU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLCBwcml2YXRlIGF1dGhTZXJ2ZXJQcm92aWRlcjogQXV0aFNlcnZlclByb3ZpZGVyKSB7fVxyXG5cclxuICAgIGxvZ2luKGNyZWRlbnRpYWxzLCBjYWxsYmFjaz8pIHtcclxuICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZlclByb3ZpZGVyLmxvZ2luKGNyZWRlbnRpYWxzKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSh0cnVlKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbldpdGhUb2tlbihqd3QsIHJlbWVtYmVyTWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmVyUHJvdmlkZXIubG9naW5XaXRoVG9rZW4oand0LCByZW1lbWJlck1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmVyUHJvdmlkZXIubG9nb3V0KCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuYXV0aGVudGljYXRlKG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBzYXZlKGFjY291bnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9yZWdpc3RlcicsIGFjY291bnQpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge1JlZ2lzdGVyfSBmcm9tICcuL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlYWxUaW1lTWFza1R5cGV9IGZyb20gJy4uL21vZGVsL2NwZi1jbnBqLm1vZGVsJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gXCIuLi9hbGVydC91dGlsLW1lbnNhZ2VtXCI7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXJlZ2lzdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVnaXN0ZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgY29uZmlybUVtYWlsOiBzdHJpbmc7XHJcbiAgcmVnaXN0ZXJBY2NvdW50OiBhbnk7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcbiAgcmVhbFRpbWVNYXNrVHlwZSA9IFJlYWxUaW1lTWFza1R5cGUuQ0xBU1NJQztcclxuICB0ZXJtb0xncGQ6IFRlcm1vTGdwZDtcclxuICBAVmlld0NoaWxkKCdjb25maXJtRW1haWxkSW5wdXQnKVxyXG4gIGNvbmZpcm1FbWFpbGRJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogSmhpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWdpc3RlclNlcnZpY2U6IFJlZ2lzdGVyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLFxyXG4gICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbSxcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWxcclxuICApIHtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbmV3IFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50ID0ge307XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkb2N1bWVudG8nKSwgJ2ZvY3VzJywgW10pO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5yZWdpc3RlckFjY291bnQucGFzc3dvcmQgPT09IHRoaXMuY29uZmlybVBhc3N3b3JkICYmIHRoaXMucmVnaXN0ZXJBY2NvdW50LmVtYWlsID09PSB0aGlzLmNvbmZpcm1FbWFpbCkge1xyXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRDdXJyZW50KCkudGhlbihrZXkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50LmxhbmdLZXkgPSBrZXk7XHJcbiAgICAgICAgaWYgKHRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8pIHtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50LnRlcm1vTGdwZEFjZWl0byA9IHRoaXMudGVybW9MZ3BkLmlkO1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFjY291bnQuZG9jdW1lbnRvTGdwZCA9IHRoaXMudGVybW9MZ3BkLmRvY3VtZW50b19pbmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJTZXJ2aWNlLnNhdmUodGhpcy5yZWdpc3RlckFjY291bnQpLnN1YnNjcmliZShcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZXNwb25zZSA9PiB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChyZXNwb25zZSlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5yZWdpc3RlckFjY291bnQucGFzc3dvcmQgIT09IHRoaXMuY29uZmlybVBhc3N3b3JkKSB7XHJcbiAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvclN3YWwoJ0FzIHNlbmhhcyBuw4PCo28gY29uZmVyZW0hJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVnaXN0ZXJBY2NvdW50LmVtYWlsICE9PSB0aGlzLmNvbmZpcm1FbWFpbCkge1xyXG4gICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JTd2FsKCdPcyBlbWFpbHMgbsODwqNvIGNvbmZlcmVtIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYXN0ZUNvbmZpcm1FbWFpbChldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXJtb0FjZWl0b091RGVzYWJpbGl0YWRvKCkge1xyXG4gICAgaWYgKCF0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICEhdGhpcy50ZXJtb0xncGQuYWNlaXRvO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtSZWdpc3RlckNvbXBvbmVudH0gZnJvbSAnLi9yZWdpc3Rlci5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyTW9kYWxTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgaXNPcGVuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gICAgb3BlbigpOiBOZ2JNb2RhbFJlZiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZWdpc3RlckNvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGFsUmVmO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SVVzZXJ9IGZyb20gJy4uL21vZGVsL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSB7XHJcbiAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3VzZXJzJztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBjcmVhdGUodXNlcjogSVVzZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJVXNlcj4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxJVXNlcj4odGhpcy5yZXNvdXJjZVVybCwgdXNlciwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKHVzZXI6IElVc2VyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SVVzZXI+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJVXNlcj4odGhpcy5yZXNvdXJjZVVybCwgdXNlciwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgZmluZChsb2dpbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SVVzZXI+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJVXNlcj4oYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtsb2dpbn1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICBxdWVyeShyZXE/OiBhbnksIGZpbHRlcj86IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElVc2VyW10+PiB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgbGV0IHVybCA9IHRoaXMucmVzb3VyY2VVcmw7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheShmaWx0ZXIpKSB7XHJcbiAgICAgIHVybCArPSAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsdGVyKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElVc2VyW10+KHVybCwgeyBwYXJhbXM6IG9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGUobG9naW46IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMucmVzb3VyY2VVcmx9LyR7bG9naW59YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgYXV0aG9yaXRpZXMoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8c3RyaW5nW10+KFNFUlZFUl9BUElfVVJMICsgJ2FwaS91c2Vycy9hdXRob3JpdGllcycpO1xyXG4gIH1cclxuXHJcbiAgb2J0ZXJBY2VpdGVMZ3BkKGxvZ2luOiBzdHJpbmcsIHRlcm1vSWQ6IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2FwaS9wdWJsaWMvdXNlcnMvYWNlaXRlLWxncGQvJyArIGxvZ2luICsgJy8nICsgdGVybW9JZCwge29ic2VydmU6ICdyZXNwb25zZSd9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0xvZ2luU2VydmljZX0gZnJvbSAnLi9sb2dpbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdGF0ZVN0b3JhZ2VTZXJ2aWNlfSBmcm9tICcuLi9hdXRoL3N0YXRlLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2RhbFNlcnZpY2V9IGZyb20gJy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzL2ludGVybmFsL1N1YnNjcmlwdGlvbic7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uL3VzZXIvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZH0gZnJvbSAnLi4vbW9kZWwvdGVybW8tbGdwZC5tb2RlbCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0VNQUlMX05PVF9GT1VORF9UWVBFLCBJTlZBTElEX1BBU1NXT1JEX1RZUEV9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7RG9jdW1lbnRvVXRpbH0gZnJvbSAnLi4vdXRpbC9kb2N1bWVudG8udXRpbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktbG9naW4tbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2xvZ2luLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaUxvZ2luTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgYXV0aGVudGljYXRpb25FcnJvcjogYm9vbGVhbjtcclxuICBhdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gIHBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgcmVtZW1iZXJNZTogYm9vbGVhbjtcclxuICB1c2VybmFtZTogc3RyaW5nO1xyXG4gIGNyZWRlbnRpYWxzOiBhbnk7XHJcbiAgbW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG4gIGhpbnQ6IHN0cmluZztcclxuICB0ZXJtb0xncGRKYUFjZWl0bzogbnVtYmVyO1xyXG4gIGxncGRIYWJpbGl0YWRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZXhpYmlyVGVybW86IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXJtb0xncGQ6IFRlcm1vTGdwZDtcclxuICBkZWJvdW5jZVRpbWUgPSA1MDA7XHJcbiAgbW9kZWxDaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG4gIHBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9ICcnO1xyXG4gIGlzT2N1bHRhckNyaWFyTm92YUNvbnRhID0gZmFsc2U7XHJcbiAgbWVuc2FnZW1UZWxhTG9naW4gPSAnJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RhdGVTdG9yYWdlU2VydmljZTogU3RhdGVTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVnaXN0ZXJNb2RhbFNlcnZpY2U6IFJlZ2lzdGVyTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBvcHRpb25zUHJvdmlkZXI/OiBPcHRpb25zUHJvdmlkZXJcclxuICApIHtcclxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7fTtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbmV3IFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbmRlcmVyLmludm9rZUVsZW1lbnRNZXRob2QodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI3VzZXJuYW1lJyksICdmb2N1cycsIFtdKSwgMCk7XHJcbiAgICB0aGlzLmV4aWJpclRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHtcclxuICAgICAgdXNlcm5hbWU6IG51bGwsXHJcbiAgICAgIHBhc3N3b3JkOiBudWxsLFxyXG4gICAgICByZW1lbWJlck1lOiB0cnVlLFxyXG4gICAgICB0ZXJtb0xncGRBY2VpdG86IG51bGwsXHJcbiAgICAgIGRvY3VtZW50b0xncGQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XHJcbiAgfVxyXG5cclxuICBsb2dpbigpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBsb2dpbiA9IHRoaXMubm9ybWFsaXphckxvZ2luKHRoaXMudXNlcm5hbWUpO1xyXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHtcclxuICAgICAgdXNlcm5hbWU6IGxvZ2luLFxyXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgcmVtZW1iZXJNZTogdGhpcy5yZW1lbWJlck1lLFxyXG4gICAgICB0ZXJtb0xncGRBY2VpdG86IHRoaXMudGVybW9MZ3BkLmlkICYmIHRoaXMudGVybW9MZ3BkLmFjZWl0byA/IHRoaXMudGVybW9MZ3BkLmlkIDogdGhpcy50ZXJtb0xncGRKYUFjZWl0byAhPT0gbnVsbCA/IHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gOiBudWxsLFxyXG4gICAgICBkb2N1bWVudG9MZ3BkOiB0aGlzLnRlcm1vTGdwZC5kb2N1bWVudG9faW5jXHJcbiAgICB9O1xyXG4gICAgdGhpcy5sb2dpblNlcnZpY2UubG9naW4odGhpcy5jcmVkZW50aWFscylcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnbG9naW4gc3VjY2VzcycpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgPT09ICcvcmVnaXN0ZXInIHx8IHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnYWN0aXZhdGUnKSB8fCB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ3Jlc2V0JykpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdFJvb3QoKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUGFnZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtcclxuICAgICAgICAgIG5hbWU6ICdhdXRoZW50aWNhdGlvblN1Y2Nlc3MnLFxyXG4gICAgICAgICAgY29udGVudDogJ1NlbmRpbmcgQXV0aGVudGljYXRpb24gU3VjY2VzcydcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBwcmV2aW91c1N0YXRlIHdhcyBzZXQgaW4gdGhlIGF1dGhFeHBpcmVkSW50ZXJjZXB0b3IgYmVmb3JlIGJlaW5nIHJlZGlyZWN0ZWQgdG8gbG9naW4gbW9kYWwuXHJcbiAgICAgICAgLy8gc2luY2UgbG9naW4gaXMgc3VjY2VzZnVsLCBnbyB0byBzdG9yZWQgcHJldmlvdXNTdGF0ZSBhbmQgY2xlYXIgcHJldmlvdXNTdGF0ZVxyXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gdGhpcy5zdGF0ZVN0b3JhZ2VTZXJ2aWNlLmdldFVybCgpO1xyXG4gICAgICAgIGlmIChyZWRpcmVjdCkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZVN0b3JhZ2VTZXJ2aWNlLnN0b3JlVXJsKG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JlZGlyZWN0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiByZXNwb25zZS5lcnJvci50eXBlID09PSBFTUFJTF9OT1RfRk9VTkRfVFlQRSkge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZSA9ICdsb2dpbi5tZXNzYWdlcy5lcnJvci5pbnZhbGlkLWxvZ2luJztcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IElOVkFMSURfUEFTU1dPUkRfVFlQRSkge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZSA9ICdsb2dpbi5tZXNzYWdlcy5lcnJvci5pbnZhbGlkLXBhc3N3b3JkJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZSA9ICdsb2dpbi5tZXNzYWdlcy5lcnJvci5hdXRoZW50aWNhdGlvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0F0Um9vdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJvdXRlci51cmwgPT09ICcvJyB8fCB0aGlzLnJvdXRlci51cmwgPT09ICcnO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFBhZ2UoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlci51cmxdKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ3RvIHN0YXRlIHJlZ2lzdGVyJyk7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5yZWdpc3Rlck1vZGFsU2VydmljZS5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzZXRQYXNzd29yZCgpIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygndG8gc3RhdGUgcmVxdWVzdFJlc2V0Jyk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9yZXNldCcsICdyZXF1ZXN0J10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLmhpbnQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhpbnQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5KTtcclxuICAgIGlmICh0cmFuc2xhdGVkLnN0YXJ0c1dpdGgoJ3RyYW5zbGF0aW9uLW5vdC1mb3VuZCcpKSB7XHJcbiAgICAgIHRoaXMuaGludCA9IGRlZmF1bHRWYWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGludCA9IHRyYW5zbGF0ZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oaW50O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gICAgdGhpcy5nZXRVc2VybmFtZVBsYWNlaG9sZGVyKCk7XHJcbiAgICB0aGlzLm9jdWx0YXJDcmlhck5vdmFDb250YSgpO1xyXG4gICAgdGhpcy5jYXJyZWdhck1lbnNhZ2VtVGVsYUxvZ2luKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgaGFiaWxpdGFyQm90YW9FbnRyYXIoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoYWJpbGl0YXIgPSBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMubm9ybWFsaXphckxvZ2luKHRoaXMudXNlcm5hbWUpKSA9PT0gdHJ1ZSAmJiBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFzc3dvcmQpID09PSB0cnVlICYmXHJcbiAgICAgICgoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8pID09PSBmYWxzZSB8fCB0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvID09PSBmYWxzZSkgPyB0cnVlIDpcclxuICAgICAgICAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMudGVybW9MZ3BkSmFBY2VpdG8pID09PSB0cnVlIHx8IHRoaXMudGVybW9MZ3BkLmFjZWl0byA9PT0gdHJ1ZSkpO1xyXG4gICAgcmV0dXJuIGhhYmlsaXRhcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhpYmlyVGVybW9MZ3BkKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoJ0hBQklMSVRBUl9MR1BEJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3AudmFsb3IgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMubGdwZEhhYmlsaXRhZGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm1vZGVsQ2hhbmdlZFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tUZXJtb0FjZWl0bygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKGVycik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Rlcm1vQWNlaXRvKCkge1xyXG4gICAgaWYgKHRoaXMudGVybW9MZ3BkLmlkICYmICF0aGlzLnRlcm1vTGdwZC5lcnJvcykge1xyXG4gICAgICB0aGlzLnRlcm1vTGdwZC5hY2VpdG8gPSB0aGlzLmV4aWJpclRlcm1vID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IGxvZ2luID0gdGhpcy5ub3JtYWxpemFyTG9naW4odGhpcy51c2VybmFtZSk7XHJcbiAgICAgIGlmIChsb2dpbiAmJiBsb2dpbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5vYnRlckFjZWl0ZUxncGQobG9naW4sIHRoaXMudGVybW9MZ3BkLmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy50ZXJtb0xncGRKYUFjZWl0byA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXJtb0xncGRKYUFjZWl0byA9PT0gbnVsbCB8fCAodGhpcy50ZXJtb0xncGRKYUFjZWl0byAhPT0gK3RoaXMudGVybW9MZ3BkLmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmV4aWJpclRlcm1vID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1Rlcm1vQWNlaXRvKCk7XHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcm5hbWVQbGFjZWhvbGRlcigpIHtcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyUGFkcmFvID0gdGhpcy5nZXRUcmFuc2xhdGlvbignZ2xvYmFsLmxvZ2luLnBsYWNlaG9sZGVyJywgJ0NQRi9DTlBKIG91IGVtYWlsJyk7XHJcblxyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlXHJcbiAgICAgIC5nZXRQYXJhbWV0cm9zQnlOYW1lKCdERVNDUklDQU9fQ0FNUE9fTE9HSU4nKVxyXG4gICAgICAudGhlbih2YWxvciA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzcCA9IHZhbG9yLnZhbG9yO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3AgfHwgcmVzcC50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9IHBsYWNlaG9sZGVyUGFkcmFvO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9IHJlc3AudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9IHBsYWNlaG9sZGVyUGFkcmFvO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvY3VsdGFyQ3JpYXJOb3ZhQ29udGEoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2VcclxuICAgICAgLmdldFBhcmFtZXRyb3NCeU5hbWUoJ09DVUxUQVJfTElOS19DUklBQ0FPX0NPTlRBJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgdGhpcy5pc09jdWx0YXJDcmlhck5vdmFDb250YSA9IHJlc3AudmFsb3IgJiYgcmVzcC52YWxvciA9PT0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8nLCBlcnIpO1xyXG4gICAgICAgIHRoaXMuaXNPY3VsdGFyQ3JpYXJOb3ZhQ29udGEgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYXJyZWdhck1lbnNhZ2VtVGVsYUxvZ2luKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlXHJcbiAgICAgIC5nZXRQYXJhbWV0cm9zQnlOYW1lKCdNRU5TQUdFTV9URUxBX0xPR0lOJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChyZXNwKSA9PT0gdHJ1ZSAmJiB0eXBlb2YgcmVzcC52YWxvciA9PT0gJ3N0cmluZycgJiYgcmVzcC52YWxvci50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5tZW5zYWdlbVRlbGFMb2dpbiA9IHJlc3AudmFsb3IudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6YXJMb2dpbih2YWxvcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxvZ2luID0gKHZhbG9yIHx8ICcnKS50cmltKCk7XHJcbiAgICBpZiAoIWxvZ2luKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0VtYWlsKGxvZ2luKSkge1xyXG4gICAgICByZXR1cm4gbG9naW4udG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoRG9jdW1lbnRvVXRpbC5pc0RvY3VtZW50b1ZhbGlkbyhsb2dpbiwgdGhpcy5pc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCkpKSB7XHJcbiAgICAgIHJldHVybiBEb2N1bWVudG9VdGlsLm5vcm1hbGl6YXJEb2N1bWVudG8obG9naW4sIHRoaXMuaXNDbnBqQWxmYW51bWVyaWNvSGFiaWxpdGFkbygpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9naW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzRW1haWwodmFsb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbG9yLmluZGV4T2YoJ0AnKSA+PSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NucGpBbGZhbnVtZXJpY29IYWJpbGl0YWRvKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhKHRoaXMub3B0aW9uc1Byb3ZpZGVyICYmIHRoaXMub3B0aW9uc1Byb3ZpZGVyLmNucGpBbGZhbnVtZXJpY28pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUxvZ2luTW9kYWxDb21wb25lbnR9IGZyb20gJy4vbG9naW4uY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZGFsU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGlzT3BlbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIG9wZW4oKTogTmdiTW9kYWxSZWYge1xyXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpTG9naW5Nb2RhbENvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGFsUmVmO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZSwgaXNEZXZNb2RlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4vcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N0YXRlU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4vc3RhdGUtc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgc3RhdGVTdG9yYWdlU2VydmljZTogU3RhdGVTdG9yYWdlU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBhdXRob3JpdGllcyA9IHJvdXRlLmRhdGFbJ2F1dGhvcml0aWVzJ107XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tMb2dpbihhdXRob3JpdGllcywgc3RhdGUudXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0xvZ2luKGF1dGhvcml0aWVzOiBzdHJpbmdbXSwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBwcmluY2lwYWwgPSB0aGlzLnByaW5jaXBhbDtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgICAgICBwcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpdGllcyB8fCBhdXRob3JpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJpbmNpcGFsLnByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbChhY2NvdW50KSAmJiB1cmwgIT09IHByaW5jaXBhbC5nZXRSb3RhQXR1YWxpemFjYW9DYWRhc3RyYWwoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwcmluY2lwYWwuZ2V0Um90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHkoYXV0aG9yaXRpZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNlciBoYXMgbm90IGFueSBvZiByZXF1aXJlZCBhdXRob3JpdGllczogJywgYXV0aG9yaXRpZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RvcmFnZVNlcnZpY2Uuc3RvcmVVcmwodXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWNjZXNzZGVuaWVkJ10pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBBY2NvdW50IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFjdGl2YXRlZDogYm9vbGVhbixcbiAgICAgICAgcHVibGljIGF1dGhvcml0aWVzOiBzdHJpbmdbXSxcbiAgICAgICAgcHVibGljIGVtYWlsOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBmaXJzdE5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmdLZXk6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhc3ROYW1lOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBsb2dpbjogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgaW1hZ2VVcmw6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHRlbGVmb25lPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZGF0YVVsdGltYUF0dWFsaXphY2FvQ2FkYXN0cmFsPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYXR1YWxpemFjYW9DYWRhc3RyYWxPYnJpZ2F0b3JpYT86IGJvb2xlYW5cbiAgICApIHt9XG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgaWQ/OiBhbnk7XHJcbiAgICBsb2dpbj86IHN0cmluZztcclxuICAgIGZpcnN0TmFtZT86IHN0cmluZztcclxuICAgIGxhc3ROYW1lPzogc3RyaW5nO1xyXG4gICAgZW1haWw/OiBzdHJpbmc7XHJcbiAgICBhY3RpdmF0ZWQ/OiBib29sZWFuO1xyXG4gICAgbGFuZ0tleT86IHN0cmluZztcclxuICAgIGF1dGhvcml0aWVzPzogYW55W107XHJcbiAgICBjcmVhdGVkQnk/OiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkRGF0ZT86IERhdGU7XHJcbiAgICBsYXN0TW9kaWZpZWRCeT86IHN0cmluZztcclxuICAgIGxhc3RNb2RpZmllZERhdGU/OiBEYXRlO1xyXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XHJcbiAgICBhY2VpdGVMZ3BkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBhbnksXHJcbiAgICAgICAgcHVibGljIGxvZ2luPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBmaXJzdE5hbWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxhc3ROYW1lPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBlbWFpbD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYWN0aXZhdGVkPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgbGFuZ0tleT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYXV0aG9yaXRpZXM/OiBhbnlbXSxcclxuICAgICAgICBwdWJsaWMgY3JlYXRlZEJ5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjcmVhdGVkRGF0ZT86IERhdGUsXHJcbiAgICAgICAgcHVibGljIGxhc3RNb2RpZmllZEJ5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsYXN0TW9kaWZpZWREYXRlPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGFzc3dvcmQ/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGFjZWl0ZUxncGQ/OiBib29sZWFuXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQgPyBpZCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5sb2dpbiA9IGxvZ2luID8gbG9naW4gOiBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lID8gZmlyc3ROYW1lIDogbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWUgPyBsYXN0TmFtZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsID8gZW1haWwgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkID0gYWN0aXZhdGVkID8gYWN0aXZhdGVkIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sYW5nS2V5ID0gbGFuZ0tleSA/IGxhbmdLZXkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXRpZXMgPSBhdXRob3JpdGllcyA/IGF1dGhvcml0aWVzIDogbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRCeSA9IGNyZWF0ZWRCeSA/IGNyZWF0ZWRCeSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0ZSA9IGNyZWF0ZWREYXRlID8gY3JlYXRlZERhdGUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE1vZGlmaWVkQnkgPSBsYXN0TW9kaWZpZWRCeSA/IGxhc3RNb2RpZmllZEJ5IDogbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlID8gbGFzdE1vZGlmaWVkRGF0ZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkID8gcGFzc3dvcmQgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYWNlaXRlTGdwZCA9IGFjZWl0ZUxncGQgPyBhY2VpdGVMZ3BkIDogZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBJRW1wcmVzYSB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIHJhemFvU29jaWFsPzogc3RyaW5nO1xyXG4gICAgbm9tZUZhbnRhc2lhPzogc3RyaW5nO1xyXG4gICAgdGVsZWZvbmU/OiBzdHJpbmc7XHJcbiAgICBsb2dvQ29udGVudFR5cGU/OiBzdHJpbmc7XHJcbiAgICBsb2dvPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYSBpbXBsZW1lbnRzIElFbXByZXNhIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgcmF6YW9Tb2NpYWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVGYW50YXNpYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdGVsZWZvbmU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxvZ29Db250ZW50VHlwZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG9nbz86IGFueVxyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSU1lbnUge1xyXG4gICAgaWQ/OiBudW1iZXI7XHJcbiAgICBub21lPzogc3RyaW5nO1xyXG4gICAgcm90YT86IHN0cmluZztcclxuICAgIGljb25lPzogc3RyaW5nO1xyXG4gICAgY29yPzogc3RyaW5nO1xyXG4gICAgbW9kdWxvPzogc3RyaW5nO1xyXG4gICAgc2Vydmljbz86IHN0cmluZztcclxuICAgIGF0aXZvPzogYm9vbGVhbjtcclxuICAgIGV4aWJpcj86IGJvb2xlYW47XHJcbiAgICBwZXJpb2RvSW5pY2lhbD86IERhdGU7XHJcbiAgICBwZXJpb2RvRmluYWw/OiBEYXRlO1xyXG4gICAgcGFpPzogSU1lbnU7XHJcbiAgICBzdWJNZW51cz86IElNZW51W107XHJcbiAgICBsb2dpblBlbG9BcHA/OiBib29sZWFuO1xyXG4gICAgc2VtcHJlVmlzaXZlbD86IGJvb2xlYW47XHJcbiAgICB2aXNpdmVsU29tZW50ZVBhcmFHZXN0b3I/OiBib29sZWFuO1xyXG4gICAgc2VxdWVuY2lhPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVudSBpbXBsZW1lbnRzIElNZW51IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgbm9tZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcm90YT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgaWNvbmU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNvcj86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbW9kdWxvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBzZXJ2aWNvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhdGl2bz86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIGV4aWJpcj86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHBlcmlvZG9JbmljaWFsPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGVyaW9kb0ZpbmFsPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGFpPzogTWVudSxcclxuICAgICAgICBwdWJsaWMgc3ViTWVudXM/OiBJTWVudVtdLFxyXG4gICAgICAgIHB1YmxpYyBsb2dpblBlbG9BcHA/OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBzZW1wcmVWaXNpdmVsPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgdmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgc2VxdWVuY2lhPzogbnVtYmVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmF0aXZvID0gdGhpcy5hdGl2byB8fCBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgR2F0ZXdheVJvdXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXRoOiBzdHJpbmcsIHB1YmxpYyBzZXJ2aWNlSWQ6IHN0cmluZywgcHVibGljIHNlcnZpY2VJbnN0YW5jZXM6IGFueVtdKSB7fVxyXG59XHJcbiIsImltcG9ydCB7IEF1ZGl0RGF0YSB9IGZyb20gJy4vYXVkaXQtZGF0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXVkaXQge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IEF1ZGl0RGF0YSwgcHVibGljIHByaW5jaXBhbDogc3RyaW5nLCBwdWJsaWMgdGltZXN0YW1wOiBzdHJpbmcsIHB1YmxpYyB0eXBlOiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEF1ZGl0RGF0YSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVtb3RlQWRkcmVzczogc3RyaW5nLCBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmcsIHB1YmxpYyBsb2c6IHN0cmluZykge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBsZXZlbDogc3RyaW5nKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQcm9maWxlSW5mbyB7XHJcbiAgICBhY3RpdmVQcm9maWxlczogc3RyaW5nW107XHJcbiAgICByaWJib25FbnY6IHN0cmluZztcclxuICAgIGluUHJvZHVjdGlvbjogYm9vbGVhbjtcclxuICAgIHN3YWdnZXJFbmFibGVkOiBib29sZWFuO1xyXG59XHJcbiIsIlxyXG5pbXBvcnQge1BhaXN9IGZyb20gJy4vcGFpcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTXVuaWNpcGlvIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgaWQ/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBlc3RhZG8/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBwYWlzPzogUGFpc1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImltcG9ydCB7VGlwb0xvZ3JhZG91cm99IGZyb20gJy4vdGlwby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtUaXR1bG9Mb2dyYWRvdXJvfSBmcm9tICcuL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtNdW5pY2lwaW99IGZyb20gJy4vbXVuaWNpcGlvLm1vZGVsJztcclxuaW1wb3J0IHtQYWlzfSBmcm9tICcuL3BhaXMubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9FbmRlcmVjb30gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW5kZXJlY28ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBkYXRhPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgdGlwbz86IFRpcG9FbmRlcmVjbyxcclxuICAgICAgICBwdWJsaWMgdGlwb0xvZ3JhZG91cm8/OiBUaXBvTG9ncmFkb3VybyxcclxuICAgICAgICBwdWJsaWMgdGl0dWxvTG9ncmFkb3Vybz86IFRpdHVsb0xvZ3JhZG91cm8sXHJcbiAgICAgICAgcHVibGljIGxvZ3JhZG91cm8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG51bWVybz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYmFpcnJvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjaWRhZGU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHVmPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjaWRhZGVSZWdpYW8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNvbXBsZW1lbnRvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjZXA/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG11bmljaXBpbz86IE11bmljaXBpbyxcclxuICAgICAgICBwdWJsaWMgcGFpcz86IFBhaXMsXHJcbiAgICAgICAgcHVibGljIHF1YWRyYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG90ZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG90ZWFtZW50bz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgY29uanVudG9IYWJpdGFjaW9uYWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGJsb2NvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhcGFydGFtZW50bz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgb2JzZXJ2YWNvZXM/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGliZ2U/OiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubXVuaWNpcGlvID0gbmV3IE11bmljaXBpbygpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQYWlzIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmdcclxuICAgICkge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVGlwb0xvZ3JhZG91cm8ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgcHVibGljIHNpZ2xhPzogc3RyaW5nLFxyXG4gICAgICBwdWJsaWMgZGVzY3JpY2FvPzogc3RyaW5nXHJcbiAgICApIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFRpdHVsb0xvZ3JhZG91cm8ge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkPzogbnVtYmVyLCBwdWJsaWMgc2lnbGE/OiBzdHJpbmcsIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtNdW5pY2lwaW99IGZyb20gJy4vbXVuaWNpcGlvLm1vZGVsJztcclxuaW1wb3J0IHtTZXhvfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQZXNzb2FGaXNpY2Ege1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyByZXNpZGVudGVFeHRlcmlvcj86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIG5vbWVNYWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVQYWk/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRhdGFOYXNjaW1lbnRvPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgc2V4bz86IFNleG8sXHJcbiAgICAgICAgcHVibGljIGFub09iaXRvPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBlc3RyYW5nZWlybz86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHJnPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjbmg/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG11bmljaXBpb05hdHVyYWxpZGFkZT86IE11bmljaXBpb1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQZXNzb2FKdXJpZGljYSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGluc2NyaWNhb0VzdGFkdWFsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBub21lRmFudGFzaWE/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRhdGFBYmVydHVyYT86IERhdGUsXHJcbiAgICAgICAgcHVibGljIGNhcGl0YWxTb2NpYWw/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGNwZlJlc3BvbnNhdmVsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBub21lUmVzcG9uc2F2ZWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHV0aWxpemFyRW5kUHJpUGFyYUNvcnJlc3A/OiBib29sZWFuXHJcbiAgICApIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4vY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtUaXBvUmVzcG9uc2F2ZWx9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNhdmVsIHtcclxuICAgIHB1YmxpYyBjb250cmlidWludGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyB0aXBvOiBUaXBvUmVzcG9uc2F2ZWw7XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFZpYUNlcCB7XHJcbiAgICBjZXA6IHN0cmluZztcclxuICAgIGxvZ3JhZG91cm86IHN0cmluZztcclxuICAgIGNvbXBsZW1lbnRvOiBzdHJpbmc7XHJcbiAgICBiYWlycm86IHN0cmluZztcclxuICAgIGxvY2FsaWRhZGU6IHN0cmluZztcclxuICAgIHVmOiBzdHJpbmc7XHJcbiAgICB1bmlkYWRlOiBzdHJpbmc7XHJcbiAgICBpYmdlOiBzdHJpbmc7XHJcbiAgICBnaWE6IHN0cmluZztcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ2VydGlkYW8ge1xyXG4gICAgcHVibGljIHRpcG86IHN0cmluZztcclxuICAgIHB1YmxpYyB2YWxvckJ1c2NhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm9tZVNvbGljaXRhbnRlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvU29saWNpdGFudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBhbm86IG51bWJlcjtcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ29uZmlndXJhY2FvUGFyY2VsYW1lbnRvIHtcclxuICAgIHB1YmxpYyBjb2RpZ286IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWFudGlkYWRlTWF4aW1hUGFyY2VsYXM6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwcmF6b1ByaW1laXJhUGFyY2VsYTogbnVtYmVyO1xyXG4gICAgcHVibGljIGRhdGFNaW5pbWFQcmltZWlyYVBhcmNlbGE6IERhdGU7XHJcbn1cclxuIiwiaW1wb3J0IHtFbmRlcmVjb30gZnJvbSAnLi9lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7UmVzcG9uc2F2ZWx9IGZyb20gJy4vcmVzcG9uc2F2ZWwubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9JbW92ZWx9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEltb3ZlbCB7XHJcbiAgICBwdWJsaWMgY29kaWdvPzogbnVtYmVyO1xyXG4gICAgcHVibGljIGluc2NyaWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmRlcmVjbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBub21lUHJvcHJpZXRhcmlvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b1Byb3ByaWV0YXJpbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpcG8/OiBUaXBvSW1vdmVsO1xyXG4gICAgcHVibGljIG1hdHJpY3VsYT86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmRlcmVjb1ByaW5jaXBhbD86IEVuZGVyZWNvID0gbmV3IEVuZGVyZWNvKCk7XHJcbiAgICBwdWJsaWMgZW5kZXJlY29Db2JyYW5jYT86IEVuZGVyZWNvID0gbmV3IEVuZGVyZWNvKCk7XHJcbiAgICBwdWJsaWMgcmVzcG9uc2F2ZWlzPzogQXJyYXk8UmVzcG9uc2F2ZWw+ID0gW107XHJcbn1cclxuIiwiaW1wb3J0IHtJbW92ZWx9IGZyb20gJy4vaW1vdmVsLm1vZGVsJztcclxuaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4vY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtEZWJpdG99IGZyb20gJy4vZGViaXRvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBEYWRvc0RlYml0byB7XHJcbiAgICBwdWJsaWMgZGViaXRvczogQXJyYXk8RGViaXRvPiA9IFtdO1xyXG4gICAgcHVibGljIGltb3ZlbDogSW1vdmVsID0gbmV3IEltb3ZlbCgpO1xyXG4gICAgcHVibGljIGNvbnRyaWJ1aW50ZTogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHBvc3N1aURlYml0b3NBanVpemFkb3M6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpRGViaXRvc1ZlbmNpZG9zOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1NYWlzRGViaXRvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBleGlzdGVtRGViaXRvc0ltb2JpbGlhcmlvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBleGlzdGVtRGViaXRvc0VtQ0RBOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1EZWJpdG9zTmFvTW9zdHJhZG9zRGl2aWRhQ29ycmVudGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpUGVuZGVuY2lhc0p1cmlkaWNhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlQYXJjZWxhbWVudG9BdGl2bzogYm9vbGVhbjtcclxufVxyXG4iLCJpbXBvcnQge1NpdHVhY2FvRGl2aWRhRGViaXRvLCBTaXR1YWNhb1BhZ2FtZW50b0RlYml0bywgVGlwb1Blc3NvYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7UGFyY2VsYX0gZnJvbSAnLi9wYXJjZWxhLm1vZGVsJztcclxuaW1wb3J0IHtCYXNpY1Jlc3Bvc3RhfSBmcm9tICcuL2Jhc2ljLXJlc3Bvc3RhLm1vZGVsJztcclxuaW1wb3J0IHtPYnJhfSBmcm9tICcuL29icmEubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERlYml0byB7XHJcbiAgICBwdWJsaWMgY29kaWdvQ29udHJpYnVpbnRlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm9tZUNvbnRyaWJ1aW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGluc2NyaWNhb011bmljaXBhbDogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b0NvbnRyaWJ1aW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpcG9QZXNzb2E6IFRpcG9QZXNzb2E7XHJcbiAgICBwdWJsaWMgY29kaWdvRGViaXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZXhlcmNpY2lvRGViaXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2l0dWFjYW9EZWJpdG86IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvO1xyXG4gICAgcHVibGljIHNpdHVhY2FvRGl2aWRhOiBTaXR1YWNhb0RpdmlkYURlYml0bztcclxuICAgIHB1YmxpYyBjb2RpZ29UcmlidXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGVzY3JpY2FvVHJpYnV0bzogc3RyaW5nO1xyXG4gICAgcHVibGljIG9icmE6IE9icmE7XHJcbiAgICBwdWJsaWMgdmFsb3I6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvckFiZXJ0bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yQXR1YWxpemFkbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHBhcmNlbGFzOiBBcnJheTxQYXJjZWxhPiA9IFtdO1xyXG4gICAgcHVibGljIGluc2NyaWNhb0ltb3ZlbDogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvZGlnb0ltb3ZlbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvZGVTZXJTZWxlY2lvbmFkbzogQmFzaWNSZXNwb3N0YTtcclxuICAgIHB1YmxpYyB0ZW1DREE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbnVtZXJvUHJvY2Vzc286IHN0cmluZztcclxuICAgIHB1YmxpYyBwZXJtaXRpclNlbGVjYW9QYXJjZWxhc0dlcmFjYW9HdWlhOiBib29sZWFuO1xyXG5cclxuICAgIC8vQ2FtcG9zIEZvcmEgZG8gRFRPXHJcbiAgICBwdWJsaWMgcG9zc3VpUGFyY2VsYXNWZW5jaWRhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlDb3RhVW5pY2E6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpQ290YVVuaWNhQWJlcnRhOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBvc3N1aVBhcmNlbGFzQWJlcnRhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwZXJtaXRlUmVmaXM6IGJvb2xlYW47XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gVGlwb1Blc3NvYSB7XHJcbiAgRklTSUNBID0gJ0ZJU0lDQScsXHJcbiAgSlVSSURJQ0EgPSAnSlVSSURJQ0EnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNpdHVhY2FvQ29udHJpYnVpbnRlIHtcclxuICBBVElWTyA9ICdBVElWTycsXHJcbiAgSU5BVElWTyA9ICdJTkFUSVZPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb0RpdmlkYURlYml0byB7XHJcbiAgRElWSURBX0NPUlJFTlRFID0gJ0RJVklEQV9DT1JSRU5URScsXHJcbiAgRElWSURBX0FUSVZBID0gJ0RJVklEQV9BVElWQScsXHJcbiAgRElWSURBX0FKVUlaQURBID0gJ0RJVklEQV9BSlVJWkFEQSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8ge1xyXG4gIEFCRVJUTyA9ICdBQkVSVE8nLFxyXG4gIFBBR08gPSAnUEFHTycsXHJcbiAgUFJPVEVTVEFETyA9ICdQUk9URVNUQURPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEge1xyXG4gIEFCRVJUTyA9ICdBQkVSVE8nLFxyXG4gIFBBR08gPSAnUEFHTycsXHJcbiAgRU1fRElWSURBX0FUSVZBID0gJ0VNX0RJVklEQV9BVElWQScsXHJcbiAgRU1fRVhFQ1VDQU9fRklTQ0FMID0gJ0VNX0VYRUNVQ0FPX0ZJU0NBTCcsXHJcbiAgQ0FOQ0VMQURPID0gJ0NBTkNFTEFETycsXHJcbiAgQUdSVVBBRE9fRU1fUEFSQ0VMQU1FTlRPID0gJ0FHUlVQQURPX0VNX1BBUkNFTEFNRU5UTycsXHJcbiAgUFJPVEVTVEFETyA9ICdQUk9URVNUQURPJyxcclxuICBFWENMVUlETyA9ICdFWENMVUlETycsXHJcbiAgSU1VTkVfSVNFTlRPID0gJ0lNVU5FX0lTRU5UTycsXHJcbiAgRElGRVJFTkNBX0RFX1ZBTE9SX0NBTkNFTEFET19QQVJDSUFMTUVOVEUgPSAnRElGRVJFTkNBX0RFX1ZBTE9SX0NBTkNFTEFET19QQVJDSUFMTUVOVEUnLFxyXG4gIEJMT1FVRUFETyA9ICdCTE9RVUVBRE8nLFxyXG4gIEFHUlVQQURPX0VNX09VVFJBX1BBUkNFTEEgPSAnQUdSVVBBRE9fRU1fT1VUUkFfUEFSQ0VMQScsXHJcbiAgUFJFU0NSSVRPID0gJ1BSRVNDUklUTycsXHJcbiAgRU1fRklTQ0FMSVpBQ0FPID0gJ0VNX0ZJU0NBTElaQUNBTycsXHJcbiAgQkFJWEFfU0VNX01PVklNRU5UTyA9ICdCQUlYQV9TRU1fTU9WSU1FTlRPJyxcclxuICBFTV9SRUNVUlNPX0FETUlOSVNUUkFUSVZPID0gJ0VNX1JFQ1VSU09fQURNSU5JU1RSQVRJVk8nLFxyXG4gIFNVU1BFTlNPID0gJ1NVU1BFTlNPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTZXhvIHtcclxuICBGRU1JTklOTyA9ICdGRU1JTklOTycsXHJcbiAgTUFTQ1VMSU5PID0gJ01BU0NVTElOTydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGlwb0VuZGVyZWNvIHtcclxuICBQUklOQ0lQQUwgPSAnUFJJTkNJUEFMJyxcclxuICBDT1JSRVNQT05ERU5DSUEgPSAnQ09SUkVTUE9OREVOQ0lBJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBUaXBvUmVzcG9uc2F2ZWwge1xyXG4gIFBSSU5DSVBBTCA9ICdQUklOQ0lQQUwnLFxyXG4gIFNPQ0lPID0gJ1NPQ0lPJyxcclxuICBQUk9DVVJBRE9SID0gJyBQUk9DVVJBRE9SJyxcclxuICBSRVNQT05TQVZFTF9JTU9CSUxJQVJJTyA9ICdSRVNQT05TQVZFTF9JTU9CSUxJQVJJTydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGlwb0ltb3ZlbCB7XHJcbiAgVVJCQU5PID0gJ1VSQkFOTycsXHJcbiAgUlVSQUwgPSAnUlVSQUwnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVudW1QaXBlVHlwZSB7XHJcbiAgU0lUVUFDQU9fRElWSURBX0RFQklUTyxcclxuICBTSVRVQUNBT19QQUdBTUVOVE9fREVCSVRPLFxyXG4gIFNJVFVBQ0FPX1BBR0FNRU5UT19QQVJDRUxBLFxyXG4gIFRJUE9fUEVTU09BLFxyXG4gIFNJVFVBQ0FPX0NPTlRSSUJVSU5URSxcclxuICBTRVhPLFxyXG4gIFRJUE9fRU5ERVJFQ08sXHJcbiAgVElQT19SRVNQT05TQVZFTCxcclxuICBUSVBPX0lNT1ZFTFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBDdXN0b21IVFRQU3RhdHVzIHtcclxuICBMT0NLX1BBR0UgPSAyOTYsXHJcbiAgUkVMRUFTRV9QQUdFID0gMjk3LFxyXG4gIFJFRElSRUNUX1BBR0UgPSAyOTgsXHJcbiAgQ0hFQ0tfQUxFUlQgPSAyOTlcclxufVxyXG5cclxuIiwiaW1wb3J0IHtQYXJjZWxhfSBmcm9tICcuL3BhcmNlbGEubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSBcIi4vZGViaXRvLm1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1pc3Nhb0d1aWEge1xyXG4gIGRlYml0bzogRGViaXRvO1xyXG4gIHBhcmNlbGFzOiBBcnJheTxQYXJjZWxhPjtcclxuICBkYXRhVmVuY2ltZW50bzogRGF0ZTtcclxuICByZWZpczogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnBhcmNlbGFzID0gW107XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1pc3Nhb0d1aWFEZWJpdG9zQWdydXBhZG9zIHtcclxuICBkZWJpdG9zOiBBcnJheTxEZWJpdG8+O1xyXG5cclxuICBkYXRhVmVuY2ltZW50bzogRGF0ZTtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZGViaXRvcyA9IFtdO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1NpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7QmFzaWNSZXNwb3N0YX0gZnJvbSAnLi9iYXNpYy1yZXNwb3N0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyY2VsYSB7XHJcbiAgICBwdWJsaWMgY29kaWdvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFyY2VsYTogc3RyaW5nO1xyXG4gICAgcHVibGljIHZlbmNpbWVudG86IERhdGU7XHJcbiAgICBwdWJsaWMgdmFsb3I6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50bzogU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhO1xyXG4gICAgcHVibGljIGVzdGFWZW5jaWRhOiBib29sZWFuO1xyXG4gICAgcHVibGljIGVoVW5pY2E6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZGFtOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JBdHVhbGl6YWRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JEZXNjb250bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvZGVTZXJTZWxlY2lvbmFkbzogQmFzaWNSZXNwb3N0YTtcclxufVxyXG4iLCJpbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi9jb250cmlidWludGUubW9kZWwnO1xyXG5pbXBvcnQge0ltb3ZlbH0gZnJvbSAnLi9pbW92ZWwubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSAnLi9kZWJpdG8ubW9kZWwnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYWNhb1BhcmNlbGFtZW50b30gZnJvbSAnLi9jb25maWd1cmFjYW8tcGFyY2VsYW1lbnRvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJjZWxhbWVudG8ge1xyXG4gICAgcHVibGljIGNvZGlnbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb3ByaWV0YXJpbzogQ29udHJpYnVpbnRlO1xyXG4gICAgcHVibGljIGNwZlJlcXVlcmVudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyByZXNwb25zYXZlbDogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHJlcXVlcmVudGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyBjb250cmliUG9ydGFsOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgaW1vdmVsOiBJbW92ZWw7XHJcbiAgICBwdWJsaWMgY29udHJpYnVpbnRlOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgZGViaXRvczogQXJyYXk8RGViaXRvPiA9IFtdO1xyXG4gICAgcHVibGljIG51bWVyb1BhcmNlbGFzOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmVuY2ltZW50b1ByaW1laXJhUGFyY2VsYTogRGF0ZTtcclxuICAgIHB1YmxpYyB2YWxvclRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JUb3RhbE9yaWdpbmFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JUb3RhbEFiZXJ0bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yUHJpbWVpcmFQYXJjZWxhOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JEZW1haXNQYXJjZWxhczogbnVtYmVyO1xyXG4gICAgcHVibGljIGNhZGFzdHJvVmFsaWRvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHRlcm1vQWNlaXRvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHZhbG9yUGFyY2lhbFRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JQYXJjaWFsVG90YWxPcmlnaW5hbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yUGFyY2lhbFRvdGFsQWJlcnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJvdG9jb2xvOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY29uZmlndXJhY2FvUGFyY2VsYW1lbnRvOiBDb25maWd1cmFjYW9QYXJjZWxhbWVudG87XHJcbiAgICBwdWJsaWMgdmFsb3JEZXNjb250bzogbnVtYmVyO1xyXG4gICAgcHVibGljIGRlYml0b0dlcmFkb3I6IERlYml0bztcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEVudW1QaXBlVHlwZSxcclxuICBTZXhvLFxyXG4gIFNpdHVhY2FvQ29udHJpYnVpbnRlLFxyXG4gIFNpdHVhY2FvRGl2aWRhRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSwgVGlwb0VuZGVyZWNvLCBUaXBvSW1vdmVsLFxyXG4gIFRpcG9QZXNzb2EsIFRpcG9SZXNwb25zYXZlbFxyXG59IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0VudW0ge1xyXG4gIHB1YmxpYyBlbnVtUGlwZVR5cGUgPSBFbnVtUGlwZVR5cGU7XHJcbiAgcHVibGljIHRpcG9QZXNzb2EgPSBUaXBvUGVzc29hO1xyXG4gIHB1YmxpYyBzaXR1YWNhb0NvbnRyaWJ1aW50ZSA9IFNpdHVhY2FvQ29udHJpYnVpbnRlO1xyXG4gIHB1YmxpYyBzaXR1YWNhb0RpdmlkYURlYml0byA9IFNpdHVhY2FvRGl2aWRhRGViaXRvO1xyXG4gIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50b0RlYml0byA9IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvO1xyXG4gIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEgPSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGE7XHJcbiAgcHVibGljIHNleG8gPSBTZXhvO1xyXG4gIHB1YmxpYyB0aXBvRW5kZXJlY28gPSBUaXBvRW5kZXJlY287XHJcbiAgcHVibGljIHRpcG9SZXNwb25zYXZlbCA9IFRpcG9SZXNwb25zYXZlbDtcclxuICBwdWJsaWMgdGlwb0ltb3ZlbCA9IFRpcG9JbW92ZWw7XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQtc3RyZW5ndGgtYmFyJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBpZD1cInN0cmVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbD5Gb3LDg8KnYSBkYSBTZW5oYTo8L3NtYWxsPlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJzdHJlbmd0aEJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZVVybHM6IFsncGFzc3dvcmQtc3RyZW5ndGgtYmFyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudCB7XHJcbiAgICBjb2xvcnMgPSBbJyNGMDAnLCAnI0Y5MCcsICcjRkYwJywgJyM5RjAnLCAnIzBGMCddO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gICAgbWVhc3VyZVN0cmVuZ3RoKHA6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGZvcmNlID0gMDtcclxuICAgICAgICBjb25zdCByZWdleCA9IC9bJC0vOi0/ey1+IVwiXl9gXFxbXFxdXS9nOyAvLyBcIlxyXG4gICAgICAgIGNvbnN0IGxvd2VyTGV0dGVycyA9IC9bYS16XSsvLnRlc3QocCk7XHJcbiAgICAgICAgY29uc3QgdXBwZXJMZXR0ZXJzID0gL1tBLVpdKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCBudW1iZXJzID0gL1swLTldKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCBzeW1ib2xzID0gcmVnZXgudGVzdChwKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbbG93ZXJMZXR0ZXJzLCB1cHBlckxldHRlcnMsIG51bWJlcnMsIHN5bWJvbHNdO1xyXG4gICAgICAgIGNvbnN0IHBhc3NlZE1hdGNoZXMgPSBmbGFncy5maWx0ZXIoKGlzTWF0Y2hlZEZsYWc6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTWF0Y2hlZEZsYWcgPT09IHRydWU7XHJcbiAgICAgICAgfSkubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3JjZSArPSAyICogcC5sZW5ndGggKyAocC5sZW5ndGggPj0gMTAgPyAxIDogMCk7XHJcbiAgICAgICAgZm9yY2UgKz0gcGFzc2VkTWF0Y2hlcyAqIDEwO1xyXG5cclxuICAgICAgICAvLyBwZW5hbHR5IChzaG9ydCBwYXNzd29yZClcclxuICAgICAgICBmb3JjZSA9IHAubGVuZ3RoIDw9IDYgPyBNYXRoLm1pbihmb3JjZSwgMTApIDogZm9yY2U7XHJcblxyXG4gICAgICAgIC8vIHBlbmFsdHkgKHBvb3IgdmFyaWV0eSBvZiBjaGFyYWN0ZXJzKVxyXG4gICAgICAgIGZvcmNlID0gcGFzc2VkTWF0Y2hlcyA9PT0gMSA/IE1hdGgubWluKGZvcmNlLCAxMCkgOiBmb3JjZTtcclxuICAgICAgICBmb3JjZSA9IHBhc3NlZE1hdGNoZXMgPT09IDIgPyBNYXRoLm1pbihmb3JjZSwgMjApIDogZm9yY2U7XHJcbiAgICAgICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAzID8gTWF0aC5taW4oZm9yY2UsIDQwKSA6IGZvcmNlO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9yY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29sb3IoczogbnVtYmVyKTogYW55IHtcclxuICAgICAgICBsZXQgaWR4ID0gMDtcclxuICAgICAgICBpZiAocyA8PSAxMCkge1xyXG4gICAgICAgICAgICBpZHggPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSAyMCkge1xyXG4gICAgICAgICAgICBpZHggPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSAzMCkge1xyXG4gICAgICAgICAgICBpZHggPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSA0MCkge1xyXG4gICAgICAgICAgICBpZHggPSAzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGlkeDogaWR4ICsgMSwgY29sOiB0aGlzLmNvbG9yc1tpZHhdIH07XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBwYXNzd29yZFRvQ2hlY2socGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChwYXNzd29yZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy5nZXRDb2xvcih0aGlzLm1lYXN1cmVTdHJlbmd0aChwYXNzd29yZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3MoZWxlbWVudCwgZWxlbWVudC5jbGFzc05hbWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaXMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBjLmlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudFN0eWxlKGxpc1tpXSwgJ2JhY2tncm91bmRDb2xvcicsIGMuY29sKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUobGlzW2ldLCAnYmFja2dyb3VuZENvbG9yJywgJyNEREQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLWJhci5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1Bhc3N3b3JkU3RyZW5ndGhCYXJDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogW10sXHJcbiAgICBleHBvcnRzOiBbUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkU3RyZW5ndGhNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtSZWdpc3RlckNvbXBvbmVudH0gZnJvbSAnLi9yZWdpc3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge1JlZ2lzdGVyTW9kYWxTZXJ2aWNlfSBmcm9tICcuL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlZ2lzdGVyfSBmcm9tICcuL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NwZkNucGpNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvY3BmLWNucGovY3BmLWNucGoubW9kdWxlJztcclxuaW1wb3J0IHtOZ3hNYXNrTW9kdWxlfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCB7ZmFVc2VyUGx1c30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVXNlclBsdXMnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUnO1xyXG5cclxubGlicmFyeS5hZGQoZmFVc2VyUGx1cyk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgQ3BmQ25wak1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgTmd4TWFza01vZHVsZSxcclxuICAgICAgUGFzc3dvcmRTdHJlbmd0aE1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIFRlcm1vTGdwZE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgUmVnaXN0ZXJDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgUmVnaXN0ZXIsXHJcbiAgICAgIFJlZ2lzdGVyTW9kYWxTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3Rlck1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhVXNlcn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVXNlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SmhpTG9naW5Nb2RhbENvbXBvbmVudH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2R1bGV9IGZyb20gJy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUnO1xyXG5pbXBvcnQge05neE1hc2tNb2R1bGV9IGZyb20gJ25neC1tYXNrJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSBcIm5nLWpoaXBzdGVyXCI7XHJcblxyXG5saWJyYXJ5LmFkZChmYVVzZXIpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIFJlZ2lzdGVyTW9kdWxlLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICBOZ3hNYXNrTW9kdWxlLFxyXG4gICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICBUZXJtb0xncGRNb2R1bGUsXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlXHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIEpoaUxvZ2luTW9kYWxDb21wb25lbnRcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZHVsZSB7XHJcbn1cclxuIiwiLypcclxuICAgIExhbmd1YWdlcyBjb2RlcyBhcmUgSVNPXzYzOS0xIGNvZGVzLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0lTT182MzktMV9jb2Rlc1xyXG4gICAgVGhleSBhcmUgd3JpdHRlbiBpbiBFbmdsaXNoIHRvIGF2b2lkIGNoYXJhY3RlciBlbmNvZGluZyBpc3N1ZXMgKG5vdCBhIHBlcmZlY3Qgc29sdXRpb24pXHJcbiovXHJcbmV4cG9ydCBjb25zdCBMQU5HVUFHRVM6IHN0cmluZ1tdID0gW1xyXG4gICAgJ3B0LWJyJ1xyXG4gICAgLy8gamhpcHN0ZXItbmVlZGxlLWkxOG4tbGFuZ3VhZ2UtY29uc3RhbnQgLSBKSGlwc3RlciB3aWxsIGFkZC9yZW1vdmUgbGFuZ3VhZ2VzIGluIHRoaXMgYXJyYXlcclxuXTtcclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1RpdGxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TGFuZ0NoYW5nZUV2ZW50LCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xBTkdVQUdFU30gZnJvbSAnLi9sYW5ndWFnZS5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaUxhbmd1YWdlSGVscGVyIHtcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC12YXJpYWJsZVxyXG4gICAgICAgIHByaXZhdGUgcm9vdFJlbmRlcmVyOiBSZW5kZXJlckZhY3RvcnkyLFxyXG4gICAgICAgIHByaXZhdGUgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByb290UmVuZGVyZXIuY3JlYXRlUmVuZGVyZXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLCBudWxsKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKExBTkdVQUdFUyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxhbmd1YWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSB3aW5kb3cgdGl0bGUgdXNpbmcgcGFyYW1zIGluIHRoZSBmb2xsb3dpbmdcclxuICAgICAqIG9yZGVyOlxyXG4gICAgICogMS4gdGl0bGVLZXkgcGFyYW1ldGVyXHJcbiAgICAgKiAyLiAkc3RhdGUuJGN1cnJlbnQuZGF0YS5wYWdlVGl0bGUgKGN1cnJlbnQgc3RhdGUgcGFnZSB0aXRsZSlcclxuICAgICAqIDMuICdnbG9iYWwudGl0bGUnXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVRpdGxlKHRpdGxlS2V5Pzogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aXRsZUtleSkge1xyXG4gICAgICAgICAgICB0aXRsZUtleSA9IHRoaXMuZ2V0UGFnZVRpdGxlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aXRsZUtleSkuc3Vic2NyaWJlKHRpdGxlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKCd0cmFuc2xhdGlvbi1ub3QtZm91bmQnKSkge1xyXG4gICAgICAgICAgICAgIHRpdGxlID0gdGl0bGVLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZS5uZXh0KHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgJ2xhbmcnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlVGl0bGUocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nID0gcm91dGVTbmFwc2hvdC5kYXRhICYmIHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gPyByb3V0ZVNuYXBzaG90LmRhdGFbJ3BhZ2VUaXRsZSddIDogJ3BvcnRhbEdhdGV3YXlBcHAnO1xyXG4gICAgICAgIGlmIChyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHx8IHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdhdGV3YXlSb3V0ZSB9IGZyb20gJy4uLy4uL21vZGVsL2dhdGV3YXktcm91dGUubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR2F0ZXdheVJvdXRlc1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGZpbmRBbGwoKTogT2JzZXJ2YWJsZTxHYXRld2F5Um91dGVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdhdGV3YXlSb3V0ZVtdPihTRVJWRVJfQVBJX1VSTCArICdhcGkvZ2F0ZXdheS9yb3V0ZXMvJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEdhdGV3YXlSb3V0ZXNTZXJ2aWNlIH0gZnJvbSAnLi9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2F0ZXdheVJvdXRlIH0gZnJvbSAnLi4vLi4vbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWdhdGV3YXknLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhdGV3YXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOiBbR2F0ZXdheVJvdXRlc1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlHYXRld2F5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGdhdGV3YXlSb3V0ZXM6IEdhdGV3YXlSb3V0ZVtdO1xyXG4gICAgdXBkYXRpbmdSb3V0ZXM6IEJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBnYXRld2F5Um91dGVzU2VydmljZTogR2F0ZXdheVJvdXRlc1NlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0aW5nUm91dGVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdhdGV3YXlSb3V0ZXNTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUoZ2F0ZXdheVJvdXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZXdheVJvdXRlcyA9IGdhdGV3YXlSb3V0ZXM7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdSb3V0ZXMgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBKaGlHYXRld2F5Q29tcG9uZW50IH0gZnJvbSAnLi9nYXRld2F5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBnYXRld2F5Um91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2dhdGV3YXknLFxyXG4gICAgY29tcG9uZW50OiBKaGlHYXRld2F5Q29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0dhdGV3YXknLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlHYXRld2F5Q29tcG9uZW50fSBmcm9tICcuL2dhdGV3YXkuY29tcG9uZW50JztcclxuaW1wb3J0IHtnYXRld2F5Um91dGV9IGZyb20gJy4vZ2F0ZXdheS5yb3V0ZSdcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4vZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmdhdGV3YXlSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaUdhdGV3YXlDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpR2F0ZXdheUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2F0ZXdheU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uLy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtBdWRpdH0gZnJvbSAnLi4vLi4vbW9kZWwvYXVkaXQubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAgJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdHNTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBxdWVyeShyZXE6IGFueSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEF1ZGl0W10+PiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBIdHRwUGFyYW1zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgICAgIHBhcmFtcy5zZXQoJ2Zyb21EYXRlJywgcmVxLmZyb21EYXRlKTtcclxuICAgICAgICBwYXJhbXMuc2V0KCd0b0RhdGUnLCByZXEudG9EYXRlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBdWRpdFtdPihTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2F1ZGl0cycsIHtcclxuICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNTZXJ2aWNlfSBmcm9tICcuL2F1ZGl0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uLy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7QXVkaXR9IGZyb20gJy4uLy4uL21vZGVsL2F1ZGl0Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYXVkaXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0cy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGF1ZGl0czogQXVkaXRbXTtcclxuICAgIGZyb21EYXRlOiBzdHJpbmc7XHJcbiAgICBpdGVtc1BlclBhZ2U6IGFueTtcclxuICAgIGxpbmtzOiBhbnk7XHJcbiAgICBxdWVyeUNvdW50OiBudW1iZXI7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICByb3V0ZURhdGE6IGFueTtcclxuICAgIHByZWRpY2F0ZTogYW55O1xyXG4gICAgcHJldmlvdXNQYWdlOiBhbnk7XHJcbiAgICByZXZlcnNlOiBib29sZWFuO1xyXG4gICAgdG9EYXRlOiBzdHJpbmc7XHJcbiAgICB0b3RhbEl0ZW1zOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhdWRpdHNTZXJ2aWNlOiBBdWRpdHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJzZUxpbmtzOiBKaGlQYXJzZUxpbmtzLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wcmVkaWNhdGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50b2RheSgpO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNNb250aCgpIHtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xyXG4gICAgICAgIGxldCBmcm9tRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIGlmIChmcm9tRGF0ZS5nZXRNb250aCgpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGUuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCBmcm9tRGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGUuZ2V0RnVsbFllYXIoKSwgZnJvbURhdGUuZ2V0TW9udGgoKSAtIDEsIGZyb21EYXRlLmdldERhdGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZnJvbURhdGUsIGRhdGVGb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZGF5KCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAneXl5eS1NTS1kZCc7XHJcbiAgICAgICAgLy8gVG9kYXkgKyAxIGRheSAtIG5lZWRlZCBpZiB0aGUgY3VycmVudCBkYXkgbXVzdCBiZSBpbmNsdWRlZFxyXG4gICAgICAgIGNvbnN0IHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0b2RheS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZGF0ZUZvcm1hdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLmF1ZGl0c1NlcnZpY2VcclxuICAgICAgICAgICAgLnF1ZXJ5KHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSAtIDEsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydCgpLFxyXG4gICAgICAgICAgICAgICAgZnJvbURhdGU6IHRoaXMuZnJvbURhdGUsXHJcbiAgICAgICAgICAgICAgICB0b0RhdGU6IHRoaXMudG9EYXRlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8QXVkaXRbXT4pID0+IHRoaXMub25TdWNjZXNzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8YW55PikgPT4gdGhpcy5vbkVycm9yKHJlcy5ib2R5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW3RoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKV07XHJcbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlICE9PSAnaWQnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdpZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FkbWluL2F1ZGl0cyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TdWNjZXNzKGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy5wYXJzZUxpbmtzLnBhcnNlKGhlYWRlcnMuZ2V0KCdsaW5rJykpO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50Jyk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMuYXVkaXRzID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRXJyb3IoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5lcnJvciwgZXJyb3IubWVzc2FnZSwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7QXVkaXRzQ29tcG9uZW50fSBmcm9tICcuL2F1ZGl0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgYXVkaXRzUm91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2F1ZGl0cycsXHJcbiAgICBjb21wb25lbnQ6IEF1ZGl0c0NvbXBvbmVudCxcclxuICAgIHJlc29sdmU6IHtcclxuICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgIH0sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnQXVkaXRvcmlhcycsXHJcbiAgICAgICAgZGVmYXVsdFNvcnQ6ICdhdWRpdEV2ZW50RGF0ZSxkZXNjJyxcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJ11cclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7YXVkaXRzUm91dGV9IGZyb20gJy4vYXVkaXRzLnJvdXRlJ1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNDb21wb25lbnR9IGZyb20gJy4vYXVkaXRzLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmF1ZGl0c1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgQXVkaXRzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEF1ZGl0c0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSmhpQ29uZmlndXJhdGlvblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvY29uZmlncHJvcHMnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc09iamVjdCA9IHRoaXMuZ2V0Q29uZmlnUHJvcGVydGllc09iamVjdHMocmVzLmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllc09iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnRpZXNPYmplY3Rba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLnNvcnQoKHByb3BlcnR5QSwgcHJvcGVydHlCKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5QS5wcmVmaXggPT09IHByb3BlcnR5Qi5wcmVmaXggPyAwIDogcHJvcGVydHlBLnByZWZpeCA8IHByb3BlcnR5Qi5wcmVmaXggPyAtMSA6IDE7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmZpZ1Byb3BlcnRpZXNPYmplY3RzKHJlczogT2JqZWN0KSB7XHJcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIGZvciBTcHJpbmcgQm9vdCAyXHJcbiAgICAgICAgaWYgKHJlc1snY29udGV4dHMnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlc1snY29udGV4dHMnXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBub3QgYm9vdHN0cmFwLCBpdCB3aWxsIGJlIHRoZSBBcHBsaWNhdGlvbkNvbnRleHQgSWRcclxuICAgICAgICAgICAgICAgIC8vIEZvciBkZWZhdWx0IGFwcCwgaXQgaXMgYmFzZU5hbWVcclxuICAgICAgICAgICAgICAgIC8vIEZvciBtaWNyb3NlcnZpY2UsIGl0IGlzIGJhc2VOYW1lLTFcclxuICAgICAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoJ2Jvb3RzdHJhcCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc1snY29udGV4dHMnXVtrZXldWydiZWFucyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQsIHVzZSB0aGUgZGVmYXVsdCBBcHBsaWNhdGlvbkNvbnRleHQgSWRcclxuICAgICAgICByZXR1cm4gcmVzWydjb250ZXh0cyddWydwb3J0YWxHYXRld2F5J11bJ2JlYW5zJ107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW52KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9lbnYnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5U291cmNlcyA9IHJlcy5ib2R5Wydwcm9wZXJ0eVNvdXJjZXMnXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5T2JqZWN0IG9mIHByb3BlcnR5U291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU9iamVjdFsnbmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbFByb3BlcnRpZXMgPSBwcm9wZXJ0eU9iamVjdFsncHJvcGVydGllcyddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXlEZXRhaWwgaW4gZGV0YWlsUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXlEZXRhaWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzLnB1c2goeyBrZXk6IGtleURldGFpbCwgdmFsOiBkZXRhaWxQcm9wZXJ0aWVzW2tleURldGFpbF1bJ3ZhbHVlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IHZhbHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpoaUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1jb25maWd1cmF0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBhbGxDb25maWd1cmF0aW9uOiBhbnkgPSBudWxsO1xyXG4gICAgY29uZmlndXJhdGlvbjogYW55ID0gbnVsbDtcclxuICAgIGNvbmZpZ0tleXM6IGFueVtdO1xyXG4gICAgZmlsdGVyOiBzdHJpbmc7XHJcbiAgICBvcmRlclByb3A6IHN0cmluZztcclxuICAgIHJldmVyc2U6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogSmhpQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0tleXMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMub3JkZXJQcm9wID0gJ3ByZWZpeCc7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAga2V5cyhkaWN0KTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIGRpY3QgPT09IHVuZGVmaW5lZCA/IFtdIDogT2JqZWN0LmtleXMoZGljdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXQoKS5zdWJzY3JpYmUoY29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnS2V5cy5wdXNoKE9iamVjdC5rZXlzKGNvbmZpZy5wcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnYoKS5zdWJzY3JpYmUoY29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7SmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBjb25maWd1cmF0aW9uUm91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2poaS1jb25maWd1cmF0aW9uJyxcclxuICAgIGNvbXBvbmVudDogSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdDb25maWd1cmHDg8Knw4PCo28nLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7SmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Y29uZmlndXJhdGlvblJvdXRlfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24ucm91dGUnXHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmNvbmZpZ3VyYXRpb25Sb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaUNvbmZpZ3VyYXRpb25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbk1vZHVsZSB7fVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWV0cmljcy1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy1tb2RhbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdGhyZWFkRHVtcEZpbHRlcjogYW55O1xyXG4gICAgdGhyZWFkRHVtcDogYW55O1xyXG4gICAgdGhyZWFkRHVtcEFsbCA9IDA7XHJcbiAgICB0aHJlYWREdW1wQmxvY2tlZCA9IDA7XHJcbiAgICB0aHJlYWREdW1wUnVubmFibGUgPSAwO1xyXG4gICAgdGhyZWFkRHVtcFRpbWVkV2FpdGluZyA9IDA7XHJcbiAgICB0aHJlYWREdW1wV2FpdGluZyA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRocmVhZER1bXAuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1JVTk5BQkxFJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wUnVubmFibGUgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1dBSVRJTkcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZER1bXBXYWl0aW5nICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudGhyZWFkU3RhdGUgPT09ICdUSU1FRF9XQUlUSU5HJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wVGltZWRXYWl0aW5nICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudGhyZWFkU3RhdGUgPT09ICdCTE9DS0VEJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wQmxvY2tlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudGhyZWFkRHVtcEFsbCA9IHRoaXMudGhyZWFkRHVtcFJ1bm5hYmxlICsgdGhpcy50aHJlYWREdW1wV2FpdGluZyArIHRoaXMudGhyZWFkRHVtcFRpbWVkV2FpdGluZyArIHRoaXMudGhyZWFkRHVtcEJsb2NrZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFkZ2VDbGFzcyh0aHJlYWRTdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aHJlYWRTdGF0ZSA9PT0gJ1JVTk5BQkxFJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXN1Y2Nlc3MnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdXQUlUSU5HJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWluZm8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdUSU1FRF9XQUlUSU5HJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXdhcm5pbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdCTE9DS0VEJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXRNZXRyaWNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9tZXRyaWNzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyZWFkRHVtcCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvdGhyZWFkZHVtcCcpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuaW1wb3J0IHsgSmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vbWV0cmljcy1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBKaGlNZXRyaWNzU2VydmljZSB9IGZyb20gJy4vbWV0cmljcy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWV0cmljcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NNb25pdG9yaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1ldHJpY3M6IGFueSA9IHt9O1xyXG4gICAgY2FjaGVzU3RhdHM6IGFueSA9IHt9O1xyXG4gICAgc2VydmljZXNTdGF0czogYW55ID0ge307XHJcbiAgICB1cGRhdGluZ01ldHJpY3MgPSB0cnVlO1xyXG4gICAgSkNBQ0hFX0tFWTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgbWV0cmljc1NlcnZpY2U6IEpoaU1ldHJpY3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5KQ0FDSEVfS0VZID0gJ2pjYWNoZS5zdGF0aXN0aWNzJztcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdNZXRyaWNzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLmdldE1ldHJpY3MoKS5zdWJzY3JpYmUobWV0cmljcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWV0cmljcyA9IG1ldHJpY3M7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdNZXRyaWNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXNTdGF0cyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlc1N0YXRzID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3MudGltZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldHJpY3MudGltZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd3ZWIucmVzdCcpIHx8IGtleS5pbmNsdWRlcygnc2VydmljZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1N0YXRzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3MuZ2F1Z2VzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdqY2FjaGUuc3RhdGlzdGljcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXRyaWNzLmdhdWdlc1trZXldLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBnZXRzIG9yIHB1dHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IGtleS5zdWJzdHIoMCwgaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBuYW1lIG9mIHRoZSBkb21haW5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlc1N0YXRzW25ld0tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuSkNBQ0hFX0tFWS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaFRocmVhZER1bXBEYXRhKCkge1xyXG4gICAgICAgIHRoaXMubWV0cmljc1NlcnZpY2UudGhyZWFkRHVtcCgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQsIHsgc2l6ZTogJ2xnJyB9KTtcclxuICAgICAgICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGhyZWFkRHVtcCA9IGRhdGEudGhyZWFkcztcclxuICAgICAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck5hTihpbnB1dCkge1xyXG4gICAgICAgIGlmIChpc05hTihpbnB1dCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBtZXRyaWNzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2poaS1tZXRyaWNzJyxcclxuICAgIGNvbXBvbmVudDogSmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnTcODwql0cmljYXMnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7SmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnR9IGZyb20gJy4vbWV0cmljcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge21ldHJpY3NSb3V0ZX0gZnJvbSAnLi9tZXRyaWNzLnJvdXRlJ1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi5tZXRyaWNzUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50LFxyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50LFxyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZXRyaWNzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1kb2NzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb2NzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpRG9jc0NvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7SmhpRG9jc0NvbXBvbmVudH0gZnJvbSAnLi9kb2NzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBkb2NzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2RvY3MnLFxyXG4gICAgY29tcG9uZW50OiBKaGlEb2NzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ2dsb2JhbC5tZW51LmFkbWluLmFwaWRvY3MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlEb2NzQ29tcG9uZW50fSBmcm9tICcuL2RvY3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtkb2NzUm91dGV9IGZyb20gJy4vZG9jcy5yb3V0ZSdcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uZG9jc1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpRG9jc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlEb2NzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2NzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaUhlYWx0aFNlcnZpY2Uge1xyXG4gICAgc2VwYXJhdG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSAnLic7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tIZWFsdGgoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2hlYWx0aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybUhlYWx0aERhdGEoZGF0YSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbXTtcclxuICAgICAgICB0aGlzLmZsYXR0ZW5IZWFsdGhEYXRhKHJlc3BvbnNlLCBudWxsLCBkYXRhLmRldGFpbHMpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNlTmFtZShuYW1lKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IG5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNwbGl0WzBdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdWJTeXN0ZW1OYW1lKG5hbWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBzcGxpdC5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHNwbGl0LmpvaW4oJy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA/ICcgLSAnICsgcmVtYWluZGVyIDogJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xyXG4gICAgcHJpdmF0ZSBhZGRIZWFsdGhPYmplY3QocmVzdWx0LCBpc0xlYWYsIGhlYWx0aE9iamVjdCwgbmFtZSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgaGVhbHRoRGF0YTogYW55ID0ge1xyXG4gICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGV0YWlscyA9IHt9O1xyXG4gICAgICAgIGxldCBoYXNEZXRhaWxzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhlYWx0aE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoaGVhbHRoT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGVhbHRoT2JqZWN0W2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnc3RhdHVzJyB8fCBrZXkgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFsdGhEYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGVhbHRoT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGV0YWlscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIGRldGFpbHNcclxuICAgICAgICBpZiAoaGFzRGV0YWlscykge1xyXG4gICAgICAgICAgICBoZWFsdGhEYXRhLmRldGFpbHMgPSBkZXRhaWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT25seSBhZGQgbm9kZXMgaWYgdGhleSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cclxuICAgICAgICBpZiAoaXNMZWFmIHx8IGhhc0RldGFpbHMgfHwgaGVhbHRoRGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChoZWFsdGhEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlYWx0aERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmbGF0dGVuSGVhbHRoRGF0YShyZXN1bHQsIHBhdGgsIGRhdGEpOiBhbnkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0hlYWx0aE9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTdWJTeXN0ZW0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGVhbHRoT2JqZWN0KHJlc3VsdCwgZmFsc2UsIHZhbHVlLCB0aGlzLmdldE1vZHVsZU5hbWUocGF0aCwga2V5KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlbkhlYWx0aERhdGEocmVzdWx0LCB0aGlzLmdldE1vZHVsZU5hbWUocGF0aCwga2V5KSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGVhbHRoT2JqZWN0KHJlc3VsdCwgdHJ1ZSwgdmFsdWUsIHRoaXMuZ2V0TW9kdWxlTmFtZShwYXRoLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1vZHVsZU5hbWUocGF0aCwgbmFtZSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICBpZiAocGF0aCAmJiBuYW1lKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhdGggKyB0aGlzLnNlcGFyYXRvciArIG5hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXRoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhdGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5hbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNTdWJTeXN0ZW0oaGVhbHRoT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBoZWFsdGhPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGhlYWx0aE9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWx0aE9iamVjdFtrZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSGVhbHRoT2JqZWN0KGhlYWx0aE9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaGVhbHRoT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChoZWFsdGhPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXR1cycpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBKaGlIZWFsdGhTZXJ2aWNlIH0gZnJvbSAnLi9oZWFsdGguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWhlYWx0aC1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGVhbHRoLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpSGVhbHRoTW9kYWxDb21wb25lbnQge1xyXG4gICAgY3VycmVudEhlYWx0aDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGhlYWx0aFNlcnZpY2U6IEpoaUhlYWx0aFNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWxcclxuICAgICkge31cclxuXHJcbiAgICBiYXNlTmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhbHRoU2VydmljZS5nZXRCYXNlTmFtZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJTeXN0ZW1OYW1lKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldFN1YlN5c3RlbU5hbWUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZGFibGVWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEhlYWx0aC5uYW1lID09PSAnZGlza1NwYWNlJykge1xyXG4gICAgICAgICAgICAvLyBTaG91bGQgZGlzcGxheSBzdG9yYWdlIHNwYWNlIGluIGFuIGh1bWFuIHJlYWRhYmxlIHVuaXRcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdmFsdWUgLyAxMDczNzQxODI0O1xyXG4gICAgICAgICAgICBpZiAodmFsID4gMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWwudG9GaXhlZCgyKSArICcgR0InO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSAvIDEwNDg1NzYpLnRvRml4ZWQoMikgKyAnIE1CJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5pbXBvcnQgeyBKaGlIZWFsdGhTZXJ2aWNlIH0gZnJvbSAnLi9oZWFsdGguc2VydmljZSc7XHJcbmltcG9ydCB7IEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9oZWFsdGgtbW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktaGVhbHRoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oZWFsdGguY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBoZWFsdGhEYXRhOiBhbnk7XHJcbiAgICB1cGRhdGluZ0hlYWx0aDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgaGVhbHRoU2VydmljZTogSmhpSGVhbHRoU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldEJhc2VOYW1lKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhZGdlQ2xhc3Moc3RhdHVzU3RhdGUpIHtcclxuICAgICAgICBpZiAoc3RhdHVzU3RhdGUgPT09ICdVUCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdiYWRnZS1zdWNjZXNzJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0hlYWx0aCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaGVhbHRoU2VydmljZS5jaGVja0hlYWx0aCgpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgaGVhbHRoID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhbHRoRGF0YSA9IHRoaXMuaGVhbHRoU2VydmljZS50cmFuc2Zvcm1IZWFsdGhEYXRhKGhlYWx0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhbHRoRGF0YSA9IHRoaXMuaGVhbHRoU2VydmljZS50cmFuc2Zvcm1IZWFsdGhEYXRhKGVycm9yLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dIZWFsdGgoaGVhbHRoOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpSGVhbHRoTW9kYWxDb21wb25lbnQpO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRIZWFsdGggPSBoZWFsdGg7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViU3lzdGVtTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldFN1YlN5c3RlbU5hbWUobmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQgfSBmcm9tICcuL2hlYWx0aC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgaGVhbHRoUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2poaS1oZWFsdGgnLFxyXG4gICAgY29tcG9uZW50OiBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdFc3RhZG8gZG8gU2lzdGVtYScsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59XTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0poaUhlYWx0aENoZWNrQ29tcG9uZW50fSBmcm9tICcuL2hlYWx0aC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0poaUhlYWx0aE1vZGFsQ29tcG9uZW50fSBmcm9tICcuL2hlYWx0aC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge2hlYWx0aFJvdXRlfSBmcm9tICcuL2hlYWx0aC5yb3V0ZSdcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmhlYWx0aFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQsXHJcbiAgICAgIEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEpoaUhlYWx0aENoZWNrQ29tcG9uZW50LFxyXG4gICAgICBKaGlIZWFsdGhNb2RhbENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW0poaUhlYWx0aE1vZGFsQ29tcG9uZW50XSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhbHRoTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TG9nfSBmcm9tICcuLi8uLi9tb2RlbC9sb2cubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvZ3NTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBjaGFuZ2VMZXZlbChsb2c6IExvZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2xvZ3MnLCBsb2csIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kQWxsKCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPExvZ1tdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PExvZ1tdPihTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2xvZ3MnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0xvZ3NTZXJ2aWNlfSBmcm9tICcuL2xvZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7TG9nfSBmcm9tICcuLi8uLi9tb2RlbC9sb2cubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1sb2dzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2dzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBsb2dnZXJzOiBMb2dbXTtcclxuICAgIGZpbHRlcjogc3RyaW5nO1xyXG4gICAgb3JkZXJQcm9wOiBzdHJpbmc7XHJcbiAgICByZXZlcnNlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nc1NlcnZpY2U6IExvZ3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSAnJztcclxuICAgICAgICB0aGlzLm9yZGVyUHJvcCA9ICduYW1lJztcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4gKHRoaXMubG9nZ2VycyA9IHJlc3BvbnNlLmJvZHkpKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VMZXZlbChuYW1lOiBzdHJpbmcsIGxldmVsOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBsb2cgPSBuZXcgTG9nKG5hbWUsIGxldmVsKTtcclxuICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmNoYW5nZUxldmVsKGxvZykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dzU2VydmljZS5maW5kQWxsKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+ICh0aGlzLmxvZ2dlcnMgPSByZXNwb25zZS5ib2R5KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7TG9nc0NvbXBvbmVudH0gZnJvbSAnLi9sb2dzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBsb2dzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2xvZ3MnLFxyXG4gICAgY29tcG9uZW50OiBMb2dzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0xvZ3MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7bG9nc1JvdXRlfSBmcm9tICcuL2xvZ3Mucm91dGUnXHJcbmltcG9ydCB7TG9nc0NvbXBvbmVudH0gZnJvbSAnLi9sb2dzLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmxvZ3NSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIExvZ3NDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTG9nc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nc01vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5pbXBvcnQge0h0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7Q3VzdG9tSFRUUFN0YXR1c30gZnJvbSAnLi4vbW9kZWwvZW51bXMubW9kZWwnO1xyXG5pbXBvcnQge0xvY2tQYWdlfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tIFwicnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3JcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7RGlhbG9nVHlwZSwgTW9kYWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBwcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyKSB7fVxyXG4gIFxyXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIFxyXG4gICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL3B1YmxpY1wiKT49MCkge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgc2V0SGVhZGVyczoge1xyXG4gICAgICAgICAgdG9rZW46IFV0aWxGdW5jdGlvbnMuZ2VyYXJUb2tlbkFuZ3VsYXIoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJsIHx8ICgvXmh0dHAvLnRlc3QocmVxdWVzdC51cmwpICYmICEoU0VSVkVSX0FQSV9VUkwgJiYgcmVxdWVzdC51cmwuc3RhcnRzV2l0aChTRVJWRVJfQVBJX1VSTCkpKSkge1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5hbHlzZUh0dHBTdGF0dXMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL2FjY291bnRcIik+PTApIHtcclxuICAgICAgICAgICAgTG9ja1BhZ2UucmVtb3ZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmxvY2FsU3RvcmFnZS5yZXRyaWV2ZSgnYXV0aGVudGljYXRpb25Ub2tlbicpIHx8IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgIFxyXG4gICAgaWYgKCEhdG9rZW4pIHtcclxuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xyXG4gICAgICAgIHNldEhlYWRlcnM6IHtcclxuICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5hbmFseXNlSHR0cFN0YXR1cyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnVybC5pbmRleE9mKFwiL2FwaS9hY2NvdW50XCIpPj0wKSB7XHJcbiAgICAgICAgICBMb2NrUGFnZS5yZW1vdmVGcm9tU3RvcmFnZSh0aGlzLnNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgYW5hbHlzZUh0dHBTdGF0dXMoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KSB7XG4gICAgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5MT0NLX1BBR0UpIHtcclxuICAgICAgY29uc3QgcGFnZSA9IGV2ZW50LmhlYWRlcnMuZ2V0KCdyZWRpcmVjdFBhZ2UnKTtcclxuICAgICAgY29uc3QgbW9kdWxlID0gZXZlbnQuaGVhZGVycy5nZXQoJ21vZHVsZScpO1xyXG4gICAgICBsZXQgbG9ja2VkUGFnZTogTG9ja1BhZ2UgPSBMb2NrUGFnZS5yZXRyaWV2ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChsb2NrZWRQYWdlKSkge1xyXG4gICAgICAgIGxvY2tlZFBhZ2UgPSBuZXcgTG9ja1BhZ2UobW9kdWxlLCBwYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBMb2NrUGFnZS5zYXZlVG9TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UsIGxvY2tlZFBhZ2UpO1xyXG4gICAgICBjb25zdCByZWRpcmVjdFBhZ2UgPSBsb2NrZWRQYWdlLmdldFJlZGlyZWN0UGFnZSh3aW5kb3cubG9jYXRpb24sIHRoaXMucHJvdmlkZXIubW9kdWxvKTtcclxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFBhZ2U7XHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICAgIFxyXG4gICAgfSBlbHNlIGlmIChldmVudC5zdGF0dXMgPT09IEN1c3RvbUhUVFBTdGF0dXMuUkVMRUFTRV9QQUdFKSB7XHJcbiAgICAgIExvY2tQYWdlLnJlbW92ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5zdGF0dXMgPT09IEN1c3RvbUhUVFBTdGF0dXMuUkVESVJFQ1RfUEFHRSkge1xyXG4gICAgICBjb25zdCBwYWdlID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvJyArIGV2ZW50LmhlYWRlcnMuZ2V0KCdyZWRpcmVjdFBhZ2UnKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYWdlO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5zdGF0dXMgPT09IEN1c3RvbUhUVFBTdGF0dXMuQ0hFQ0tfQUxFUlQpIHtcbiAgICAgIGNvbnN0IGFsZXJ0ID0gZXZlbnQuaGVhZGVycy5nZXQoJ2FsZXJ0TWVzc2FnZScpO1xuICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbERpYWxvZ0NvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSkuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdCh1bmRlZmluZWQsICdBbGVydGEnLCB0aGlzLmZvcm1hdEFsZXJ0TWVzc2FnZShhbGVydCksICcnLCBEaWFsb2dUeXBlLklORk8pO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdEFsZXJ0TWVzc2FnZShhbGVydDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWFsZXJ0KSB7XG4gICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxuICAgIHJldHVybiBhbGVydC5yZXBsYWNlKC9cXFxcbi9nLCAnXFxuJyk7XG4gIH1cbn1cbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtMb2dpblNlcnZpY2V9IGZyb20gJy4uL2xvZ2luL2xvZ2luLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXV0aEV4cGlyZWRJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlKSB7fVxyXG5cclxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICAgICAgdGFwKFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSmhpRXZlbnRNYW5hZ2VyIH0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBFcnJvckhhbmRsZXJJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyKSB7fVxyXG5cclxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICAgICAgdGFwKFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXJyLnN0YXR1cyA9PT0gNDAxICYmIChlcnIubWVzc2FnZSA9PT0gJycgfHwgKGVyci51cmwgJiYgZXJyLnVybC5pbmNsdWRlcygnL2FwaS9hY2NvdW50JykpKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7IG5hbWU6ICdwb3J0YWxHYXRld2F5QXBwLmh0dHBFcnJvcicsIGNvbnRlbnQ6IGVyciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGV2ZW50LmhlYWRlcnMua2V5cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxlcnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxlcnRQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnYXBwLWFsZXJ0JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCA9IGV2ZW50LmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnYXBwLXBhcmFtcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRQYXJhbXMgPSBldmVudC5oZWFkZXJzLmdldChlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxlcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWxlcnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhhbGVydCwgeyBwYXJhbTogYWxlcnRQYXJhbXMgfSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7fVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtjcmVhdGVSZXF1ZXN0T3B0aW9ufSBmcm9tICcuLi91dGlsL3JlcXVlc3QtdXRpbCc7XHJcbmltcG9ydCB7SU1lbnV9IGZyb20gJy4uL21vZGVsL21lbnUubW9kZWwnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbnR5cGUgRW50aXR5UmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlPElNZW51PjtcclxudHlwZSBFbnRpdHlBcnJheVJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZTxJTWVudVtdPjtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSB7XHJcbiAgICBwdWJsaWMgbW9kdWxvO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsUHVibGljO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL21lbnVzJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIG9wdGlvbnNQcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tb2R1bG8gPSBvcHRpb25zUHJvdmlkZXIubWVudU1vZHVsbztcclxuICAgICAgdGhpcy5yZXNvdXJjZVVybFB1YmxpYyA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvbWVudXMvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShtZW51OiBJTWVudSk6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElNZW51Pih0aGlzLnJlc291cmNlVXJsLCBtZW51LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKG1lbnU6IElNZW51KTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJTWVudT4odGhpcy5yZXNvdXJjZVVybCwgbWVudSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SU1lbnU+KGAke3RoaXMucmVzb3VyY2VVcmx9L2ZpbmQvJHtpZH1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnkocmVxPzogYW55KTogT2JzZXJ2YWJsZTxFbnRpdHlBcnJheVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVSZXF1ZXN0T3B0aW9uKHJlcSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SU1lbnVbXT4odGhpcy5yZXNvdXJjZVVybCArICcvJyArIHRoaXMubW9kdWxvLCB7IHBhcmFtczogb3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxNZW51cyhsaW1pdGVFeGliaWNhbyk6IE9ic2VydmFibGU8RW50aXR5QXJyYXlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudVtdPih0aGlzLnJlc291cmNlVXJsUHVibGljLmNvbmNhdCgnLycsIGxpbWl0ZUV4aWJpY2FvKSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbE1lbnVzUGFpcygpOiBPYnNlcnZhYmxlPEVudGl0eUFycmF5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SU1lbnVbXT4oU0VSVkVSX0FQSV9VUkwgKyAnYXBpL21lbnVzLXBhaXMvJyArIHRoaXMubW9kdWxvLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLnJlc291cmNlVXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0lFbXByZXNhfSBmcm9tICcuLi9tb2RlbC9lbXByZXNhLm1vZGVsJztcclxuaW1wb3J0IHtjcmVhdGVSZXF1ZXN0T3B0aW9ufSBmcm9tICcuLi91dGlsL3JlcXVlc3QtdXRpbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG50eXBlIEVudGl0eVJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZTxJRW1wcmVzYT47XHJcbnR5cGUgRW50aXR5QXJyYXlSZXNwb25zZVR5cGUgPSBIdHRwUmVzcG9uc2U8SUVtcHJlc2FbXT47XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYVNlcnZpY2Uge1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2VtcHJlc2FzJztcclxuICAgIHB1YmxpYyByZXNvdXJjZVVybFB1YmxpYyA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvZW1wcmVzYSc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGNyZWF0ZShlbXByZXNhOiBJRW1wcmVzYSk6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElFbXByZXNhPih0aGlzLnJlc291cmNlVXJsLCBlbXByZXNhLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKGVtcHJlc2E6IElFbXByZXNhKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxJRW1wcmVzYT4odGhpcy5yZXNvdXJjZVVybCwgZW1wcmVzYSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8RW50aXR5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUVtcHJlc2E+KGAke3RoaXMucmVzb3VyY2VVcmx9LyR7aWR9YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5KHJlcT86IGFueSk6IE9ic2VydmFibGU8RW50aXR5QXJyYXlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElFbXByZXNhW10+KHRoaXMucmVzb3VyY2VVcmwsIHsgcGFyYW1zOiBvcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZShpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPGFueT4oYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtpZH1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW1wcmVzYSgpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJRW1wcmVzYT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJRW1wcmVzYT4odGhpcy5yZXNvdXJjZVVybFB1YmxpYywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi4vbW9kZWwvYWNjb3VudC5tb2RlbCc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4uL21lbnUvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbXByZXNhU2VydmljZX0gZnJvbSAnLi4vZW1wcmVzYS9lbXByZXNhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IFFVQU5USURBREVfTUFYX1NVQl9NRU5VUyA9IDM7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWhvbWUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hvbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2hvbWUuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb21lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGFjY291bnQ6IEFjY291bnQ7XHJcbiAgICBtZW51czogSU1lbnVbXTtcclxuICAgIGVtcHJlc2E6IElFbXByZXNhO1xyXG4gICAgbW9zdHJhckltYWdlbUZ1bmRvOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIG1lbnNhZ2VtQm9hc1ZpbmRhczogc3RyaW5nID0gJ0JlbSB2aW5kbywgUG9ydGFsIGRlIFNlcnZpw4PCp29zISc7XHJcbiAgICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2dpbk1vZGFsU2VydmljZTogTG9naW5Nb2RhbFNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zWydhZG1pbi1sb2dvbiddICE9PSB1bmRlZmluZWQgJiYgIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2luKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLnNvbGljaXRhck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQXV0aGVudGljYXRpb25TdWNjZXNzKCk7XHJcbiAgICAgICAgdGhpcy5yZWNhcnJlZ2FyTWVudXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5lbXByZXNhU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0RW1wcmVzYSgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihlbXByZXNhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1wcmVzYSA9IGVtcHJlc2EuYm9keTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIk1PU1RSQVJfSU1BR0VNX0ZVTkRPXCIpXHJcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZSkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3N0cmFySW1hZ2VtRnVuZG8gPSB2YWx1ZS52YWxvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoXCJNRU5TQUdFTV9CT0FTX1ZJTkRBU1wiKVxyXG4gICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodmFsdWUpID09PSB0cnVlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUudmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVuc2FnZW1Cb2FzVmluZGFzID0gdmFsdWUudmFsb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbigpIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5sb2dpbk1vZGFsU2VydmljZS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJBdXRoZW50aWNhdGlvblN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdhdXRoZW50aWNhdGlvblN1Y2Nlc3MnLCBtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50ID0gYWNjb3VudDtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjYXJyZWdhck1lbnVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvbGljaXRhck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlY2FycmVnYXJNZW51cygpIHtcclxuICAgICAgdGhpcy5tZW51U2VydmljZVxyXG4gICAgICAgIC5nZXRBbGxNZW51cyhRVUFOVElEQURFX01BWF9TVUJfTUVOVVMpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgLnRoZW4obWVudXMgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tZW51cyA9IG1lbnVzLmJvZHk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJVcmwobWVudSkge1xyXG4gICAgICAgIHJldHVybiBtb250YXJVcmwobWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNRdWFudGlkYWRlTWF4U3ViTWVudXMobWVudSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHN1Yk1lbnVzID0gbWVudS5zdWJNZW51cy5maWx0ZXIoc3ViID0+IHN1Yi5hdGl2byk7XHJcbiAgICAgICAgcmV0dXJuIHN1Yk1lbnVzLmxlbmd0aCA+IFFVQU5USURBREVfTUFYX1NVQl9NRU5VUztcclxuICAgIH1cclxuXHJcbiAgICBpZGVudGlmeShpbmRleCwgaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm5vbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb2xpY2l0YXJOb3RpZmljYWNvZXNTZVRpdmVyTm92YXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7bmFtZTogJ2FicmlyTm90aWZpY2Fjb2VzU2VUaXZlck5vdmFzJ30pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9udGFyVXJsID0gKG1lbnU6IElNZW51KTogc3RyaW5nID0+IHtcclxuICAgIGlmIChtZW51LnNlcnZpY28gJiYgbWVudS5zZXJ2aWNvLmluY2x1ZGVzKCdodHRwJykpIHtcclxuICAgICAgICByZXR1cm4gbWVudS5zZXJ2aWNvO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VydmljbyA9IG1lbnUuc2VydmljbyA/IG1lbnUuc2VydmljbyA6ICcnO1xyXG4gICAgY29uc3Qgcm90YSA9IG1lbnUucm90YSA/IG1lbnUucm90YSArICcvIy8nIDogJyMvJztcclxuICAgIHJldHVybiByb3RhICsgc2VydmljbztcclxufTtcclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSG9tZUNvbXBvbmVudCB9IGZyb20gJy4vaG9tZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhPTUVfUk9VVEU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJycsXHJcbiAgICBjb21wb25lbnQ6IEhvbWVDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0JlbSB2aW5kbywgUG9ydGFsIGRlIFNlcnZpw4PCp29zISdcclxuICAgIH1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtIb21lQ29tcG9uZW50fSBmcm9tICcuL2hvbWUuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7SE9NRV9ST1VURX0gZnJvbSAnLi9ob21lLnJvdXRlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChbLi4uSE9NRV9ST1VURV0pXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEhvbWVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEhvbWVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHtHYXRld2F5Um91dGV9IGZyb20gJy4uL21vZGVsL2dhdGV3YXktcm91dGUubW9kZWwnO1xyXG5pbXBvcnQge0dhdGV3YXlSb3V0ZXNTZXJ2aWNlfSBmcm9tICcuLi9hZG1pbi9nYXRld2F5L2dhdGV3YXktcm91dGVzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZW51LXVwZGF0ZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS11cGRhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51VXBkYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1lbnU6IElNZW51O1xyXG4gICAgaXNTYXZpbmc6IGJvb2xlYW47XHJcbiAgICBwYWlzOiBJTWVudVtdO1xyXG4gICAgcm91dGVzOiBHYXRld2F5Um91dGVbXTtcclxuXHJcbiAgICBwcml2YXRlIHBhaXNEaXNwb25pdmVpcyhwYWlzOiBJTWVudVtdKTogSU1lbnVbXSB7XHJcbiAgICAgICAgaWYgKCFwYWlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhaXMuZmlsdGVyKHAgPT4gcC5pZCAhPT0gdGhpcy5tZW51LmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIGdhdGV3YXlSb3V0ZXNTZXJ2aWNlOiBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRBbGxNZW51c1BhaXMoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4obWVudXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWlzID0gdGhpcy5wYWlzRGlzcG9uaXZlaXMobWVudXMuYm9keSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IG1lbnUgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUgPSBtZW51O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdhdGV3YXlSb3V0ZXNTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUoZ2F0ZXdheVJvdXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVzID0gZ2F0ZXdheVJvdXRlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLm1lbnUuaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvU2F2ZVJlc3BvbnNlKHRoaXMubWVudVNlcnZpY2UudXBkYXRlKHRoaXMubWVudSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudS5hdGl2byA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5tZW51U2VydmljZS5jcmVhdGUodGhpcy5tZW51KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UocmVzdWx0OiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJTWVudT4+KSB7XHJcbiAgICAgICAgcmVzdWx0LnN1YnNjcmliZSgocmVzOiBIdHRwUmVzcG9uc2U8SU1lbnU+KSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MoKSwgKHJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMub25TYXZlRXJyb3IoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNhdmVTdWNjZXNzKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXJ9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1lbnUtZGVsZXRlLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCB7XHJcbiAgICBtZW51OiBJTWVudTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge31cclxuXHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5icm9hZGNhc3Qoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ21lbnVMaXN0TW9kaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEZWxldGVkIGFuIG1lbnUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3ModHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudS1kZWxldGUtcG9wdXAnLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51RGVsZXRlUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIG5nYk1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgbWVudSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCBhcyBDb21wb25lbnQsIHsgc2l6ZTogJ2xnJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5tZW51ID0gbWVudTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudS1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUtZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudURldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBtZW51OiBJTWVudTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IG1lbnUgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUgPSBtZW51O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyLCBKaGlQYXJzZUxpbmtzfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lURU1TX1BFUl9QQUdFfSBmcm9tICcuLi91dGlsL3BhZ2luYXRpb24uY29uc3RhbnRzJztcclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1lbnUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgY3VycmVudEFjY291bnQ6IGFueTtcclxuICAgIG1lbnVzOiBJTWVudVtdO1xyXG4gICAgZXJyb3I6IGFueTtcclxuICAgIHN1Y2Nlc3M6IGFueTtcclxuICAgIGV2ZW50U3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcm91dGVEYXRhOiBhbnk7XHJcbiAgICBsaW5rczogYW55O1xyXG4gICAgdG90YWxJdGVtczogYW55O1xyXG4gICAgcXVlcnlDb3VudDogYW55O1xyXG4gICAgaXRlbXNQZXJQYWdlOiBhbnk7XHJcbiAgICBwYWdlOiBhbnk7XHJcbiAgICBwcmVkaWNhdGU6IGFueTtcclxuICAgIHByZXZpb3VzUGFnZTogYW55O1xyXG4gICAgcmV2ZXJzZTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyc2VMaW5rczogSmhpUGFyc2VMaW5rcyxcclxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IElURU1TX1BFUl9QQUdFO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gZGF0YS5wYWdpbmdQYXJhbXMucGFnZTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnJldmVyc2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5hc2NlbmRpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJlZGljYXRlID0gZGF0YS5wYWdpbmdQYXJhbXMucHJlZGljYXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlID09PSAnaWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWRpY2F0ZSA9ICdzZXF1ZW5jaWEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY2NvdW50ID0gYWNjb3VudDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlSW5NZW51cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZVxyXG4gICAgICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlIC0gMSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0KClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxJTWVudVtdPikgPT4gdGhpcy5wYWdpbmF0ZU1lbnVzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vbkVycm9yKHJlcy5tZXNzYWdlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShtZW51LCBpc0FjdGl2YXRlZCkge1xyXG4gICAgICAgIG1lbnUuYXRpdm8gPSBpc0FjdGl2YXRlZDtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS51cGRhdGUobWVudSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExvZ2luUGVsb0FwcChtZW51LCBpc0xvZ2luUGVsb0FwcCkge1xyXG4gICAgICAgIG1lbnUubG9naW5QZWxvQXBwID0gaXNMb2dpblBlbG9BcHA7XHJcblxyXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2UudXBkYXRlKG1lbnUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgc2V0VmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yKG1lbnUsIGlzVmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yKSB7XHJcbiAgICAgIG1lbnUudmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yID0gaXNWaXNpdmVsU29tZW50ZVBhcmFHZXN0b3I7XHJcblxyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLnVwZGF0ZShtZW51KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTZW1wcmVWaXNpdmVsKG1lbnUsIGlzU2VtcHJlVmlzaXZlbCkge1xyXG4gICAgICBtZW51LnNlbXByZVZpc2l2ZWwgPSBpc1NlbXByZVZpc2l2ZWw7XHJcblxyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLnVwZGF0ZShtZW51KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21lbnUnXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xyXG4gICAgICAgICAgICAnL21lbnUnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3kodGhpcy5ldmVudFN1YnNjcmliZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrSWQoaW5kZXg6IG51bWJlciwgaXRlbTogSU1lbnUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pZDtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNoYW5nZUluTWVudXMoKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudFN1YnNjcmliZXIgPSB0aGlzLmV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ21lbnVMaXN0TW9kaWZpY2F0aW9uJywgKCkgPT4gdGhpcy5sb2FkQWxsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdzZXF1ZW5jaWEsYXNjJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFnaW5hdGVNZW51cyhkYXRhOiBJTWVudVtdLCBoZWFkZXJzOiBIdHRwSGVhZGVycykge1xyXG4gICAgICAgIHRoaXMubGlua3MgPSB0aGlzLnBhcnNlTGlua3MucGFyc2UoaGVhZGVycy5nZXQoJ2xpbmsnKSk7XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcGFyc2VJbnQoaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKSwgMTApO1xyXG4gICAgICAgIHRoaXMucXVlcnlDb3VudCA9IHRoaXMudG90YWxJdGVtcztcclxuICAgICAgICB0aGlzLm1lbnVzID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRXJyb3IoZXJyb3JNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UsIG51bGwsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNvcnRJY29uKHByb3BlcnR5OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJlZGljYXRlIHx8IHRoaXMucmV2ZXJzZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnc29ydCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgPT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJldmVyc2UgPyAnc29ydC11cCcgOiAnc29ydC1kb3duJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdzb3J0JztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3QsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZW51Q29tcG9uZW50fSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51RGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9tZW51LXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtJTWVudSwgTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNZW51UmVzb2x2ZSBpbXBsZW1lbnRzIFJlc29sdmU8SU1lbnU+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogTWVudVNlcnZpY2UpIHt9XHJcblxyXG4gICAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPE1lbnU+IHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtc1snaWQnXSA/IHJvdXRlLnBhcmFtc1snaWQnXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZmluZChpZCkucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxNZW51PikgPT4gcmVzcG9uc2Uub2spLFxyXG4gICAgICAgICAgICAgICAgbWFwKChtZW51OiBIdHRwUmVzcG9uc2U8TWVudT4pID0+IG1lbnUuYm9keSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKG5ldyBNZW51KCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbWVudVJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogJ2lkLGFzYycsXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdtZW51LzppZC92aWV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IE1lbnVEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBtZW51OiBNZW51UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdNZW51J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnbWVudS9uZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdtZW51LzppZC9lZGl0JyxcclxuICAgICAgICBjb21wb25lbnQ6IE1lbnVVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBtZW51OiBNZW51UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdNZW51J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IG1lbnVQb3B1cFJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUvOmlkL2RlbGV0ZScsXHJcbiAgICAgICAgY29tcG9uZW50OiBNZW51RGVsZXRlUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBtZW51OiBNZW51UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdNZW51J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXSxcclxuICAgICAgICBvdXRsZXQ6ICdwb3B1cCdcclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtNZW51Q29tcG9uZW50fSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51RGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9tZW51LXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZWxldGVEaWFsb2dDb21wb25lbnQsIE1lbnVEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHttZW51UG9wdXBSb3V0ZSwgbWVudVJvdXRlfSBmcm9tICcuL21lbnUucm91dGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtNRU5VX01PRFVMT19PUFRJT05TLCBPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4uL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi5tZW51Um91dGUsIC4uLm1lbnVQb3B1cFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIE1lbnVDb21wb25lbnQsXHJcbiAgICAgIE1lbnVEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgIE1lbnVVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgIE1lbnVEZWxldGVEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIE1lbnVEZWxldGVQb3B1cENvbXBvbmVudF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgTWVudUNvbXBvbmVudCxcclxuICAgICAgTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZVBvcHVwQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIE9wdGlvbnNQcm92aWRlcixcclxuICAgICAgR2F0ZXdheVJvdXRlc1NlcnZpY2VcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KG1vZHVsbz86c3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogTWVudU1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge3Byb3ZpZGU6IE1FTlVfTU9EVUxPX09QVElPTlMsIHVzZVZhbHVlOiBtb2R1bG99XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBKaGlEYXRhVXRpbHMgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQgeyBFbXByZXNhU2VydmljZSB9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtdXBkYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FVcGRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGRhdGFVdGlsczogSmhpRGF0YVV0aWxzLFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGVtcHJlc2EgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHJlc2EgPSBlbXByZXNhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ5dGVTaXplKGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLmJ5dGVTaXplKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMub3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWxlRGF0YShldmVudCwgZW50aXR5LCBmaWVsZCwgaXNJbWFnZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVV0aWxzLnNldEZpbGVEYXRhKGV2ZW50LCBlbnRpdHksIGZpZWxkLCBpc0ltYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcklucHV0SW1hZ2UoZmllbGQ6IHN0cmluZywgZmllbGRDb250ZW50VHlwZTogc3RyaW5nLCBpZElucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRhdGFVdGlscy5jbGVhcklucHV0SW1hZ2UodGhpcy5lbXByZXNhLCB0aGlzLmVsZW1lbnRSZWYsIGZpZWxkLCBmaWVsZENvbnRlbnRUeXBlLCBpZElucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmVtcHJlc2EuaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvU2F2ZVJlc3BvbnNlKHRoaXMuZW1wcmVzYVNlcnZpY2UudXBkYXRlKHRoaXMuZW1wcmVzYSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5lbXByZXNhU2VydmljZS5jcmVhdGUodGhpcy5lbXByZXNhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UocmVzdWx0OiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJRW1wcmVzYT4+KSB7XHJcbiAgICAgICAgcmVzdWx0LnN1YnNjcmliZSgocmVzOiBIdHRwUmVzcG9uc2U8SUVtcHJlc2E+KSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MoKSwgKHJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMub25TYXZlRXJyb3IoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNhdmVTdWNjZXNzKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsLCBOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgSmhpRXZlbnRNYW5hZ2VyIH0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHsgRW1wcmVzYVNlcnZpY2UgfSBmcm9tICcuL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1lbXByZXNhLWRlbGV0ZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQge1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHt9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjYW5jZWwnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmVtcHJlc2FTZXJ2aWNlLmRlbGV0ZShpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdlbXByZXNhTGlzdE1vZGlmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnRGVsZXRlZCBhbiBlbXByZXNhJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtZGVsZXRlLXBvcHVwJyxcclxuICAgIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYURlbGV0ZVBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGVtcHJlc2EgfSkgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQgYXMgQ29tcG9uZW50LCB7IHNpemU6ICdsZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZW1wcmVzYSA9IGVtcHJlc2E7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmLnJlc3VsdC50aGVuKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgcG9wdXA6IG51bGwgfSB9XSwgeyByZXBsYWNlVXJsOiB0cnVlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgcG9wdXA6IG51bGwgfSB9XSwgeyByZXBsYWNlVXJsOiB0cnVlLCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlEYXRhVXRpbHN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbXByZXNhLWRldGFpbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FEZXRhaWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhVXRpbHM6IEpoaURhdGFVdGlscywgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyBlbXByZXNhIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbXByZXNhID0gZW1wcmVzYTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBieXRlU2l6ZShmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5ieXRlU2l6ZShmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLm9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCk7XHJcbiAgICB9XHJcbiAgICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0poaURhdGFVdGlscywgSmhpRXZlbnRNYW5hZ2VyLCBKaGlQYXJzZUxpbmtzfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQge0VtcHJlc2FTZXJ2aWNlfSBmcm9tICcuL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7SVRFTVNfUEVSX1BBR0V9IGZyb20gJy4uL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1lbXByZXNhJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lbXByZXNhLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGN1cnJlbnRBY2NvdW50OiBhbnk7XHJcbiAgICBlbXByZXNhczogSUVtcHJlc2FbXTtcclxuICAgIGVycm9yOiBhbnk7XHJcbiAgICBzdWNjZXNzOiBhbnk7XHJcbiAgICBldmVudFN1YnNjcmliZXI6IFN1YnNjcmlwdGlvbjtcclxuICAgIHJvdXRlRGF0YTogYW55O1xyXG4gICAgbGlua3M6IGFueTtcclxuICAgIHRvdGFsSXRlbXM6IGFueTtcclxuICAgIHF1ZXJ5Q291bnQ6IGFueTtcclxuICAgIGl0ZW1zUGVyUGFnZTogYW55O1xyXG4gICAgcGFnZTogYW55O1xyXG4gICAgcHJlZGljYXRlOiBhbnk7XHJcbiAgICBwcmV2aW91c1BhZ2U6IGFueTtcclxuICAgIHJldmVyc2U6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGVtcHJlc2FTZXJ2aWNlOiBFbXByZXNhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBhcnNlTGlua3M6IEpoaVBhcnNlTGlua3MsXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVV0aWxzOiBKaGlEYXRhVXRpbHMsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IElURU1TX1BFUl9QQUdFO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gZGF0YS5wYWdpbmdQYXJhbXMucGFnZTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnJldmVyc2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5hc2NlbmRpbmc7XHJcbiAgICAgICAgICAgIHRoaXMucHJlZGljYXRlID0gZGF0YS5wYWdpbmdQYXJhbXMucHJlZGljYXRlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5lbXByZXNhU2VydmljZVxyXG4gICAgICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlIC0gMSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0KClcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxJRW1wcmVzYVtdPikgPT4gdGhpcy5wYWdpbmF0ZUVtcHJlc2FzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vbkVycm9yKHJlcy5tZXNzYWdlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2VtcHJlc2EnXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xyXG4gICAgICAgICAgICAnL2VtcHJlc2EnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KCkudGhlbihhY2NvdW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNoYW5nZUluRW1wcmVzYXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KHRoaXMuZXZlbnRTdWJzY3JpYmVyKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0lkKGluZGV4OiBudW1iZXIsIGl0ZW06IElFbXByZXNhKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYnl0ZVNpemUoZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMuYnl0ZVNpemUoZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5vcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ2hhbmdlSW5FbXByZXNhcygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaWJlciA9IHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnZW1wcmVzYUxpc3RNb2RpZmljYXRpb24nLCByZXNwb25zZSA9PiB0aGlzLmxvYWRBbGwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbdGhpcy5wcmVkaWNhdGUgKyAnLCcgKyAodGhpcy5yZXZlcnNlID8gJ2FzYycgOiAnZGVzYycpXTtcclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0ZUVtcHJlc2FzKGRhdGE6IElFbXByZXNhW10sIGhlYWRlcnM6IEh0dHBIZWFkZXJzKSB7XHJcbiAgICAgICAgdGhpcy5saW5rcyA9IHRoaXMucGFyc2VMaW5rcy5wYXJzZShoZWFkZXJzLmdldCgnbGluaycpKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBwYXJzZUludChoZWFkZXJzLmdldCgnWC1Ub3RhbC1Db3VudCcpLCAxMCk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMuZW1wcmVzYXMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25FcnJvcihlcnJvck1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgbnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSZXNvbHZlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtmaWx0ZXIsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0VtcHJlc2FTZXJ2aWNlfSBmcm9tICcuL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7RW1wcmVzYUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYURldGFpbENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FVcGRhdGVDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYSwgSUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYVJlc29sdmUgaW1wbGVtZW50cyBSZXNvbHZlPElFbXByZXNhPiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlKSB7fVxyXG5cclxuICAgIHJlc29sdmUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogT2JzZXJ2YWJsZTxFbXByZXNhPiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSByb3V0ZS5wYXJhbXNbJ2lkJ10gPyByb3V0ZS5wYXJhbXNbJ2lkJ10gOiBudWxsO1xyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmZpbmQoaWQpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8RW1wcmVzYT4pID0+IHJlc3BvbnNlLm9rKSxcclxuICAgICAgICAgICAgICAgIG1hcCgoZW1wcmVzYTogSHR0cFJlc3BvbnNlPEVtcHJlc2E+KSA9PiBlbXByZXNhLmJvZHkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihuZXcgRW1wcmVzYSgpKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGVtcHJlc2FSb3V0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhJyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgZGVmYXVsdFNvcnQ6ICdpZCxhc2MnLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZW1wcmVzYS86aWQvdmlldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBFbXByZXNhRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgZW1wcmVzYTogRW1wcmVzYVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnRW1wcmVzYSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2VtcHJlc2EvbmV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZW1wcmVzYS86aWQvZWRpdCcsXHJcbiAgICAgICAgY29tcG9uZW50OiBFbXByZXNhVXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgZW1wcmVzYTogRW1wcmVzYVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnRW1wcmVzYSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH1cclxuXTtcclxuXHJcbmV4cG9ydCBjb25zdCBlbXByZXNhUG9wdXBSb3V0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhLzppZC9kZWxldGUnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRW1wcmVzYURlbGV0ZVBvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgZW1wcmVzYTogRW1wcmVzYVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnRW1wcmVzYSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV0sXHJcbiAgICAgICAgb3V0bGV0OiAncG9wdXAnXHJcbiAgICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge2VtcHJlc2FQb3B1cFJvdXRlLCBlbXByZXNhUm91dGV9IGZyb20gJy4vZW1wcmVzYS5yb3V0ZSc7XHJcbmltcG9ydCB7RW1wcmVzYUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYURldGFpbENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FVcGRhdGVDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGVsZXRlRGlhbG9nQ29tcG9uZW50LCBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnR9IGZyb20gJy4vZW1wcmVzYS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmVtcHJlc2FSb3V0ZSwgLi4uZW1wcmVzYVBvcHVwUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBFbXByZXNhQ29tcG9uZW50LFxyXG4gICAgICAgIEVtcHJlc2FEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgICAgRW1wcmVzYVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBFbXByZXNhRGVsZXRlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICAgIEVtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBFbXByZXNhQ29tcG9uZW50LFxyXG4gICAgICBFbXByZXNhVXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICBFbXByZXNhRGVsZXRlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtcHJlc2FNb2R1bGUge31cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JQYWdpbmF0aW9uQ29uZmlnfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SVRFTVNfUEVSX1BBR0V9IGZyb20gJy4uL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db25maWcge1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bnVzZWQtdmFyaWFibGVcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBOZ2JQYWdpbmF0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgY29uZmlnLmJvdW5kYXJ5TGlua3MgPSB0cnVlO1xyXG4gICAgICAgIGNvbmZpZy5tYXhTaXplID0gNTtcclxuICAgICAgICBjb25maWcucGFnZVNpemUgPSBJVEVNU19QRVJfUEFHRTtcclxuICAgICAgICBjb25maWcuc2l6ZSA9ICdzbSc7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtlbmFibGVQcm9kTW9kZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUHJvZENvbmZpZyhkZWJ1ZzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFkZWJ1Zykge1xyXG4gICAgICAgIGVuYWJsZVByb2RNb2RlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFUlJfVU5BVVRIT1JJWkVEX0VESVRfREVMRVRJT059IGZyb20gXCIuLi91dGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdC1kZWxldGUtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNZ210RGVsZXRlRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIHVzZXI6IFVzZXI7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShsb2dpbikge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZGVsZXRlKGxvZ2luKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICd1c2VyTGlzdE1vZGlmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEZWxldGVkIGEgdXNlcidcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3ModHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgfSxyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdC1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdERldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyOiBVc2VyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgdXNlciB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXIuYm9keSA/IHVzZXIuYm9keSA6IHVzZXI7XHJcblxyXG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHRoaXMudXNlcikpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnVzZXJbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1VzZXJ9IGZyb20gJy4uL21vZGVsL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VIZWxwZXJ9IGZyb20gJy4uL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlcic7XHJcbmltcG9ydCB7RVJSX1VOQVVUSE9SSVpFRF9FRElUX0RFTEVUSU9OfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS11c2VyLW1nbXQtdXBkYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQtdXBkYXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1nbXRVcGRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdXNlcjogVXNlcjtcclxuICAgIGxhbmd1YWdlczogYW55W107XHJcbiAgICBhdXRob3JpdGllczogYW55W107XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbjtcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZUhlbHBlcjogSmhpTGFuZ3VhZ2VIZWxwZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IHVzZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyLmJvZHkgPyB1c2VyLmJvZHkgOiB1c2VyO1xyXG5cclxuICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh0aGlzLnVzZXIpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdGhpcy51c2VyWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRob3JpdGllcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuYXV0aG9yaXRpZXMoKS5zdWJzY3JpYmUoYXV0aG9yaXRpZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml0aWVzID0gYXV0aG9yaXRpZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZUhlbHBlci5nZXRBbGwoKS50aGVuKGxhbmd1YWdlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VzID0gbGFuZ3VhZ2VzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlci5pZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZSh0aGlzLnVzZXIpLnN1YnNjcmliZShyZXNwb25zZSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MocmVzcG9uc2UpLCByZXNwb25zZSA9PiB0aGlzLm9uU2F2ZUVycm9yKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5jcmVhdGUodGhpcy51c2VyKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4gdGhpcy5vblNhdmVTdWNjZXNzKHJlc3BvbnNlKSwgcmVzcG9uc2UgPT4gdGhpcy5vblNhdmVFcnJvcihyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZVN1Y2Nlc3MocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlRXJyb3IocmVzcG9uc2UpIHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTikge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlciwgSmhpUGFyc2VMaW5rc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHtVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJ9IGZyb20gJy4uL21vZGVsL3VzZXIubW9kZWwnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vdXRpbCc7XHJcbmltcG9ydCB7R2xvYmFsU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS11c2VyLW1nbXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBjdXJyZW50QWNjb3VudDogYW55O1xyXG4gIHVzZXJzOiBVc2VyW107XHJcbiAgZXJyb3I6IGFueTtcclxuICBzdWNjZXNzOiBhbnk7XHJcbiAgcm91dGVEYXRhOiBhbnk7XHJcbiAgbGlua3M6IGFueTtcclxuICB0b3RhbEl0ZW1zOiBhbnk7XHJcbiAgcXVlcnlDb3VudDogYW55O1xyXG4gIGl0ZW1zUGVyUGFnZTogYW55O1xyXG4gIHBhZ2U6IGFueTtcclxuICBwcmVkaWNhdGU6IGFueTtcclxuICBwcmV2aW91c1BhZ2U6IGFueTtcclxuICByZXZlcnNlOiBhbnk7XHJcbiAgZmlsdGVyVXNlcnM6IHN0cmluZztcclxuICBzaG93RmlsdGVyVXNlciA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICBwcml2YXRlIHBhcnNlTGlua3M6IEpoaVBhcnNlTGlua3MsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGdsb2JhbDogR2xvYmFsU2VydmljZSxcclxuICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICApIHtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnBhZ2U7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucGFnZTtcclxuICAgICAgdGhpcy5yZXZlcnNlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10uYXNjZW5kaW5nO1xyXG4gICAgICB0aGlzLnByZWRpY2F0ZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnByZWRpY2F0ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudEFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgdGhpcy5yZWdpc3RlckNoYW5nZUluVXNlcnMoKTtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsXHJcbiAgICAgICAgICAuaW5pdCgpXHJcbiAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5nbG9iYWwucGFyYW1ldHJvc1snTU9TVFJBUl9GSUxUUk9fVVNVQVJJT1MnXSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlclVzZXIgPSB0aGlzLmdsb2JhbC5wYXJhbWV0cm9zWydNT1NUUkFSX0ZJTFRST19VU1VBUklPUyddLnZhbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3NbJ01PU1RSQVJfRklMVFJPX1VTVUFSSU9TJ10pID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlclVzZXIgPSB0aGlzLmdsb2JhbC5wYXJhbWV0cm9zWydNT1NUUkFSX0ZJTFRST19VU1VBUklPUyddLnZhbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJvdXRlRGF0YS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJDaGFuZ2VJblVzZXJzKCkge1xyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCd1c2VyTGlzdE1vZGlmaWNhdGlvbicsIHJlc3BvbnNlID0+IHRoaXMubG9hZEFsbCgpKTtcclxuICB9XHJcblxyXG4gIHNldEFjdGl2ZSh1c2VyLCBpc0FjdGl2YXRlZCkge1xyXG4gICAgdXNlci5hY3RpdmF0ZWQgPSBpc0FjdGl2YXRlZDtcclxuXHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZSh1c2VyKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEFsbChwYWdlPzogbnVtYmVyKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHBhZ2UpID09PSB0cnVlICYmIHBhZ2UgPiAwKSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgLnF1ZXJ5KHtcclxuICAgICAgICBwYWdlOiB0aGlzLnBhZ2UgLSAxLFxyXG4gICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgIHNvcnQ6IHRoaXMuc29ydCgpXHJcbiAgICAgIH0sIHRoaXMuZmlsdGVyVXNlcnMpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPFVzZXJbXT4pID0+IHRoaXMub25TdWNjZXNzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPGFueT4pID0+IHRoaXMub25FcnJvcihyZXMuYm9keSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHRyYWNrSWRlbnRpdHkoaW5kZXgsIGl0ZW06IFVzZXIpIHtcclxuICAgIHJldHVybiBpdGVtLmlkO1xyXG4gIH1cclxuXHJcbiAgc29ydCgpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IFt0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJyldO1xyXG4gICAgaWYgKHRoaXMucHJlZGljYXRlICE9PSAnaWQnKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKCdpZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2l0aW9uKCkge1xyXG4gICAgLypcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FkbWluL3VzZXItbWFuYWdlbWVudCddLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxyXG4gICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgICovXHJcbiAgICB0aGlzLmxvYWRBbGwoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXIodXNlcjogVXNlcikge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFVzZXJNZ210RGVsZXRlRGlhbG9nQ29tcG9uZW50LCB7c2l6ZTogJ2xnJywgYmFja2Ryb3A6ICdzdGF0aWMnfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VyID0gdXNlcjtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKFxyXG4gICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TdWNjZXNzKGRhdGEsIGhlYWRlcnMpIHtcclxuICAgIHRoaXMubGlua3MgPSB0aGlzLnBhcnNlTGlua3MucGFyc2UoaGVhZGVycy5nZXQoJ2xpbmsnKSk7XHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSBwYXJzZUludChoZWFkZXJzLmdldCgnWC1Ub3RhbC1Db3VudCcpLCAxMCk7XHJcbiAgICB0aGlzLnF1ZXJ5Q291bnQgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICB0aGlzLnVzZXJzID0gZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25FcnJvcihlcnJvcikge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3IuZXJyb3IsIGVycm9yLm1lc3NhZ2UsIG51bGwpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3QsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7VXNlck1nbXRDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXREZXRhaWxDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJNZ210VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVXNlck1nbXRSZXNvbHZlIGltcGxlbWVudHMgUmVzb2x2ZTxhbnk+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogVXNlclNlcnZpY2UpIHt9XHJcblxyXG4gICAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtc1snbG9naW4nXSA/IHJvdXRlLnBhcmFtc1snbG9naW4nXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZmluZChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgVXNlcigpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXNlck1nbXRSb3V0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICd1c2VyLW1hbmFnZW1lbnQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogVXNlck1nbXRDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnVXN1w4PCoXJpb3MnLFxyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogJ2lkLGFzYydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudC86bG9naW4vdmlldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBVc2VyTWdtdERldGFpbENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHVzZXI6IFVzZXJNZ210UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdVc3XDg8KhcmlvcydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudC9uZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogVXNlck1nbXRVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHVzZXI6IFVzZXJNZ210UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAndXNlci1tYW5hZ2VtZW50Lzpsb2dpbi9lZGl0JyxcclxuICAgICAgICBjb21wb25lbnQ6IFVzZXJNZ210VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTicsICdST0xFX0FETUlOX0NMSUVOVEUnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICB1c2VyOiBVc2VyTWdtdFJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtFbmRlcmVjb30gZnJvbSAnLi4vbW9kZWwvZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9FbmRlcmVjb30gZnJvbSAnLi4vbW9kZWwnO1xyXG5cclxuQFBpcGUoeyBuYW1lOiAnZW5kZXJlY29QcmluY2lwYWxGb3JtYXRhZG8nIH0pXHJcbmV4cG9ydCBjbGFzcyBFbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkb1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcbiAgICB0cmFuc2Zvcm0oZW5kZXJlY29zOiBFbmRlcmVjb1tdKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWVuZGVyZWNvcykge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByaW5jaXBhbCA9IGVuZGVyZWNvc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUudGlwbyA9PT0gVGlwb0VuZGVyZWNvLlBSSU5DSVBBTDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBvcCgpO1xyXG5cclxuICAgICAgICBpZiAoIXByaW5jaXBhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0aXBvTG9ncmFkb3VybyA9IHByaW5jaXBhbC50aXBvTG9ncmFkb3VybyAmJiBwcmluY2lwYWwudGlwb0xvZ3JhZG91cm8uZGVzY3JpY2FvID8gcHJpbmNpcGFsLnRpcG9Mb2dyYWRvdXJvLmRlc2NyaWNhbyArICcgJyA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHRpdHVsb0xvZ3JhZG91cm8gPSBwcmluY2lwYWwudGl0dWxvTG9ncmFkb3VybyAmJiBwcmluY2lwYWwudGl0dWxvTG9ncmFkb3Vyby5zaWdsYSA/IHByaW5jaXBhbC50aXR1bG9Mb2dyYWRvdXJvLnNpZ2xhICsgJyAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgbG9ncmFkb3VybyA9IHByaW5jaXBhbC5sb2dyYWRvdXJvID8gcHJpbmNpcGFsLmxvZ3JhZG91cm8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgbnVtZXJvID0gcHJpbmNpcGFsLm51bWVybyA/IHByaW5jaXBhbC5udW1lcm8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgY29tcGxlbWVudG8gPSBwcmluY2lwYWwuY29tcGxlbWVudG8gPyBwcmluY2lwYWwuY29tcGxlbWVudG8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgYmFpcnJvID0gcHJpbmNpcGFsLmJhaXJybyA/IHByaW5jaXBhbC5iYWlycm8gKyAnLCAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgbXVuaWNpcGlvID0gcHJpbmNpcGFsLm11bmljaXBpbyAmJiBwcmluY2lwYWwubXVuaWNpcGlvLmRlc2NyaWNhbyA/IHByaW5jaXBhbC5tdW5pY2lwaW8uZGVzY3JpY2FvICsgJy0nIDogJyc7XHJcbiAgICAgICAgY29uc3QgZXN0YWRvID0gcHJpbmNpcGFsLm11bmljaXBpbyAmJiBwcmluY2lwYWwubXVuaWNpcGlvLmVzdGFkbyA/IHByaW5jaXBhbC5tdW5pY2lwaW8uZXN0YWRvIDogJyc7XHJcbiAgICAgICAgY29uc3QgZW5kZXJlY28gPSB0aXBvTG9ncmFkb3VybyArIHRpdHVsb0xvZ3JhZG91cm8gKyBsb2dyYWRvdXJvICsgbnVtZXJvICsgY29tcGxlbWVudG8gKyBiYWlycm8gKyBtdW5pY2lwaW8gKyBlc3RhZG87XHJcblxyXG4gICAgICAgIHJldHVybiBlbmRlcmVjb1xyXG4gICAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oLCQpL2csICcnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvKC0kKS9nLCAnJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBFbnVtUGlwZVR5cGUsXHJcbiAgU2V4byxcclxuICBTaXR1YWNhb0NvbnRyaWJ1aW50ZSxcclxuICBTaXR1YWNhb0RpdmlkYURlYml0byxcclxuICBTaXR1YWNhb1BhZ2FtZW50b0RlYml0byxcclxuICBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEsXHJcbiAgVGlwb0VuZGVyZWNvLFxyXG4gIFRpcG9JbW92ZWwsXHJcbiAgVGlwb1Blc3NvYSxcclxuICBUaXBvUmVzcG9uc2F2ZWxcclxufSBmcm9tICcuLi9tb2RlbCc7XHJcbmltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AUGlwZSh7bmFtZTogJ2VudW1Ub1N0cmluZyd9KVxyXG5leHBvcnQgY2xhc3MgRW51bVRvU3RyaW5nUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55LCB0eXBlOiBFbnVtUGlwZVR5cGUpOiBzdHJpbmcge1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19ESVZJREFfREVCSVRPOlxyXG4gICAgICAgIHJldHVybiBTaXR1YWNhb0RpdmlkYURlYml0b05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgY2FzZSBFbnVtUGlwZVR5cGUuU0lUVUFDQU9fUEFHQU1FTlRPX0RFQklUTzpcclxuICAgICAgICByZXR1cm4gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG9OYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19QQUdBTUVOVE9fUEFSQ0VMQTpcclxuICAgICAgICByZXR1cm4gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19QRVNTT0E6XHJcbiAgICAgICAgcmV0dXJuIFRpcG9QZXNzb2FOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19DT05UUklCVUlOVEU6XHJcbiAgICAgICAgcmV0dXJuIFNpdHVhY2FvQ29udHJpYnVpbnRlTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuU0VYTzpcclxuICAgICAgICByZXR1cm4gU2V4b05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlRJUE9fRU5ERVJFQ086XHJcbiAgICAgICAgcmV0dXJuIFRpcG9FbmRlcmVjb05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlRJUE9fUkVTUE9OU0FWRUw6XHJcbiAgICAgICAgcmV0dXJuIFRpcG9SZXNwb25zYXZlbE5hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlRJUE9fSU1PVkVMOlxyXG4gICAgICAgIHJldHVybiBUaXBvSW1vdmVsTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2l0dWFjYW9EaXZpZGFEZWJpdG9OYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogU2l0dWFjYW9EaXZpZGFEZWJpdG8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb0RpdmlkYURlYml0by5ESVZJREFfQ09SUkVOVEUpIHtcclxuICAgICAgcmV0dXJuICdEw4PCrXZpZGEgQ29ycmVudGUnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9EaXZpZGFEZWJpdG8uRElWSURBX0FKVUlaQURBKSB7XHJcbiAgICAgIHJldHVybiAnRMODwq12aWRhIEFqdWl6YWRhJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvRGl2aWRhRGViaXRvLkRJVklEQV9BVElWQSkge1xyXG4gICAgICByZXR1cm4gJ0TDg8KtdmlkYSBBdGl2YSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2l0dWFjYW9QYWdhbWVudG9EZWJpdG9OYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0by5BQkVSVE8pIHtcclxuICAgICAgcmV0dXJuICdBYmVydG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8uUEFHTykge1xyXG4gICAgICByZXR1cm4gJ1BhZ28nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8uUFJPVEVTVEFETykge1xyXG4gICAgICByZXR1cm4gJ1Byb3Rlc3RhZG8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubmFtZXNwYWNlIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYU5hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQUJFUlRPKSB7XHJcbiAgICAgIHJldHVybiAnQWJlcnRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5QQUdPKSB7XHJcbiAgICAgIHJldHVybiAnUGFnbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRU1fRElWSURBX0FUSVZBKSB7XHJcbiAgICAgIHJldHVybiAnRW0gRMODwq12aWRhIEF0aXZhJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5FTV9FWEVDVUNBT19GSVNDQUwpIHtcclxuICAgICAgcmV0dXJuICdFbSBFeGVjdcODwqfDg8KjbyBGaXNjYWwnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkNBTkNFTEFETykge1xyXG4gICAgICByZXR1cm4gJ0NhbmNlbGFkbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQUdSVVBBRE9fRU1fUEFSQ0VMQU1FTlRPKSB7XHJcbiAgICAgIHJldHVybiAnRW0gUGFyY2VsYW1lbnRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5QUk9URVNUQURPKSB7XHJcbiAgICAgIHJldHVybiAnUHJvdGVzdGFkbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRVhDTFVJRE8pIHtcclxuICAgICAgcmV0dXJuICdFeGNsdcODwq1kbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuSU1VTkVfSVNFTlRPKSB7XHJcbiAgICAgIHJldHVybiAnSW11bmUvSXNlbnRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5ESUZFUkVOQ0FfREVfVkFMT1JfQ0FOQ0VMQURPX1BBUkNJQUxNRU5URSkge1xyXG4gICAgICByZXR1cm4gJ0RpZmVyZW7Dg8KnYSBkZSBWYWxvciBDYW5jZWxhZG8gUGFyY2lhbG1lbnRlJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5CTE9RVUVBRE8pIHtcclxuICAgICAgcmV0dXJuICdCbG9xdWVhZG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkFHUlVQQURPX0VNX09VVFJBX1BBUkNFTEEpIHtcclxuICAgICAgcmV0dXJuICdBZ3J1cGFkbyBlbSBPdXRyYSBQYXJjZWxhJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5QUkVTQ1JJVE8pIHtcclxuICAgICAgcmV0dXJuICdQcmVzY3JpdG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkVNX0ZJU0NBTElaQUNBTykge1xyXG4gICAgICByZXR1cm4gJ0VtIEZpc2NhbGl6YcODwqfDg8Kjbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQkFJWEFfU0VNX01PVklNRU5UTykge1xyXG4gICAgICByZXR1cm4gJ0JhaXhhIHNlbSBNb3ZpbWVudG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkVNX1JFQ1VSU09fQURNSU5JU1RSQVRJVk8pIHtcclxuICAgICAgcmV0dXJuICdFbSBSZWN1cnNvIEFkbWluaXN0cmF0aXZvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5TVVNQRU5TTykge1xyXG4gICAgICByZXR1cm4gJ1N1c3BlbnNvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgVGlwb1Blc3NvYU5hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBUaXBvUGVzc29hKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb1Blc3NvYS5GSVNJQ0EpIHtcclxuICAgICAgcmV0dXJuICdGw4PCrXNpY2EnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Blc3NvYS5KVVJJRElDQSkge1xyXG4gICAgICByZXR1cm4gJ0p1csODwq1kaWNhJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgU2l0dWFjYW9Db250cmlidWludGVOYW1lc3BhY2UgIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFNpdHVhY2FvQ29udHJpYnVpbnRlKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9Db250cmlidWludGUuQVRJVk8pIHtcclxuICAgICAgcmV0dXJuICdBdGl2byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb0NvbnRyaWJ1aW50ZS5JTkFUSVZPKSB7XHJcbiAgICAgIHJldHVybiAnSW5hdGl2byc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2V4b05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTZXhvKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gU2V4by5GRU1JTklOTykge1xyXG4gICAgICByZXR1cm4gJ0ZlbWluaW5vJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNleG8uTUFTQ1VMSU5PKSB7XHJcbiAgICAgIHJldHVybiAnTWFzY3VsaW5vJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBUaXBvRW5kZXJlY29OYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogVGlwb0VuZGVyZWNvKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb0VuZGVyZWNvLlBSSU5DSVBBTCkge1xyXG4gICAgICByZXR1cm4gJ1ByaW5jaXBhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvRW5kZXJlY28uQ09SUkVTUE9OREVOQ0lBKSB7XHJcbiAgICAgIHJldHVybiAnQ29ycmVzcG9uZMODwqpuY2lhJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgVGlwb1Jlc3BvbnNhdmVsTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFRpcG9SZXNwb25zYXZlbCk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFRpcG9SZXNwb25zYXZlbC5QUklOQ0lQQUwpIHtcclxuICAgICAgcmV0dXJuICdQcmluY2lwYWwnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlNPQ0lPKSB7XHJcbiAgICAgIHJldHVybiAnU8ODwrNjaW8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlBST0NVUkFET1IpIHtcclxuICAgICAgcmV0dXJuICdQcm9jdXJhZG9yJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFRpcG9SZXNwb25zYXZlbC5SRVNQT05TQVZFTF9JTU9CSUxJQVJJTykge1xyXG4gICAgICByZXR1cm4gJ1Jlc3BvbnPDg8KhdmVsIEltb2JpbGnDg8KhcmlvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgVGlwb0ltb3ZlbE5hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBUaXBvSW1vdmVsKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb0ltb3ZlbC5VUkJBTk8pIHtcclxuICAgICAgcmV0dXJuICdVcmJhbm8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb0ltb3ZlbC5SVVJBTCkge1xyXG4gICAgICByZXR1cm4gJ1J1cmFsJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnZmlsdGVyJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICB0cmFuc2Zvcm0oaXRlbXM6IGFueVtdLCBmaWx0ZXJzOntba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogYW55W10ge1xyXG4gICAgaWYoIWl0ZW1zKSByZXR1cm4gW107XHJcbiAgICBpZighZmlsdGVycykgcmV0dXJuIGl0ZW1zO1xyXG4gICAgaWYgKCFGaWx0ZXJQaXBlLnZhbGlkYXRlKGZpbHRlcnMpKSByZXR1cm4gaXRlbXM7XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgZm9yKGxldCBmaWVsZCBpbiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgaWYoRmlsdGVyUGlwZS5pc0VxdWFscyhmaWx0ZXJzW2ZpZWxkXSwgdmFsdWVbZmllbGRdKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZShmaWx0ZXJzOntba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XHJcbiAgICBsZXQgaXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgZmllbGQgaW4gZmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyc1tmaWVsZF0gIT09IHVuZGVmaW5lZCAmJiBmaWx0ZXJzW2ZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgICBpc1ZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpc0VxdWFscyhmaWx0ZXIsIHZhbHVlKSB7XHJcbiAgICB2YWx1ZSA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlQWNjZW50cyh2YWx1ZS50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgZmlsdGVyID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVBY2NlbnRzKGZpbHRlci50b1N0cmluZygpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKGZpbHRlcik7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0VuZGVyZWNvUHJpbmNpcGFsRm9ybWF0YWRvUGlwZX0gZnJvbSAnLi9lbmRlcmVjby1wcmluY2lwYWwtZm9ybWF0YWRvLnBpcGUnO1xyXG5pbXBvcnQge0VudW1Ub1N0cmluZ1BpcGV9IGZyb20gJy4vZW51bS1zdHJpbmcucGlwZSc7XHJcbmltcG9ydCB7RmlsdGVyUGlwZX0gZnJvbSAnLi9maWx0ZXIucGlwZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRW5kZXJlY29QcmluY2lwYWxGb3JtYXRhZG9QaXBlLCBFbnVtVG9TdHJpbmdQaXBlLCBGaWx0ZXJQaXBlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBFbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkb1BpcGUsIEVudW1Ub1N0cmluZ1BpcGUsIEZpbHRlclBpcGVcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGlwZU1vZHVsbyB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7dXNlck1nbXRSb3V0ZX0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQucm91dGUnO1xyXG5pbXBvcnQge1VzZXJNZ210Q29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJNZ210RGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC1kZXRhaWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtdXBkYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7RmluZExhbmd1YWdlTW9kdWxvfSBmcm9tICcuLi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLm1vZHVsbyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGlwZU1vZHVsb30gZnJvbSAnLi4vcGlwZS9waXBlLm1vZHVsbyc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi51c2VyTWdtdFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgICAgRmluZExhbmd1YWdlTW9kdWxvLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUyksXHJcbiAgICAgIFBpcGVNb2R1bG9cclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgVXNlck1nbXRDb21wb25lbnQsXHJcbiAgICAgIFVzZXJNZ210RGV0YWlsQ29tcG9uZW50LFxyXG4gICAgICBVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VtZW50TW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1BsYXRmb3JtTG9jYXRpb259IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZXJyb3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Vycm9yLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRXJyb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBlcnJvcjQwMzogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgbG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24pIHtcclxuICAgICAgICBsb2NhdGlvbi5vblBvcFN0YXRlKCgpID0+IHtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy4uLyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUocm91dGVEYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKHJvdXRlRGF0YS5lcnJvcjQwMykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcjQwMyA9IHJvdXRlRGF0YS5lcnJvcjQwMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocm91dGVEYXRhLmVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByb3V0ZURhdGEuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBFcnJvckNvbXBvbmVudCB9IGZyb20gJy4vZXJyb3IuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBlcnJvclJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2Vycm9yJyxcclxuICAgICAgICBjb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdPY29ycmV1IHVtIGVycm8nXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnYWNjZXNzZGVuaWVkJyxcclxuICAgICAgICBjb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdGYcODwqdhIGxvZ2luIG5vdmFtZW50ZScsXHJcbiAgICAgICAgICAgIGVycm9yNDAzOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1Byb2ZpbGVJbmZvfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9maWxlLWluZm8ubW9kZWwnO1xyXG5cclxuY29uc3QgIFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGluZm9VcmwgPSBTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2luZm8nO1xyXG4gICAgcHJpdmF0ZSBwcm9maWxlSW5mbzogUHJvbWlzZTxQcm9maWxlSW5mbz47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldFByb2ZpbGVJbmZvKCk6IFByb21pc2U8UHJvZmlsZUluZm8+IHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvZmlsZUluZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9maWxlSW5mbyA9IHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAgICAgLmdldDxQcm9maWxlSW5mbz4odGhpcy5pbmZvVXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzOiBIdHRwUmVzcG9uc2U8UHJvZmlsZUluZm8+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXMuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGkgPSBuZXcgUHJvZmlsZUluZm8oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGkuYWN0aXZlUHJvZmlsZXMgPSBkYXRhWydhY3RpdmVQcm9maWxlcyddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5UmliYm9uT25Qcm9maWxlcyA9IGRhdGFbJ2Rpc3BsYXktcmliYm9uLW9uLXByb2ZpbGVzJ10uc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpLmFjdGl2ZVByb2ZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWJib25Qcm9maWxlcyA9IGRpc3BsYXlSaWJib25PblByb2ZpbGVzLmZpbHRlcihwcm9maWxlID0+IHBpLmFjdGl2ZVByb2ZpbGVzLmluY2x1ZGVzKHByb2ZpbGUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWJib25Qcm9maWxlcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaS5yaWJib25FbnYgPSByaWJib25Qcm9maWxlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpLmluUHJvZHVjdGlvbiA9IHBpLmFjdGl2ZVByb2ZpbGVzLmluY2x1ZGVzKCdwcm9kJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaS5zd2FnZ2VyRW5hYmxlZCA9IHBpLmFjdGl2ZVByb2ZpbGVzLmluY2x1ZGVzKCdzd2FnZ2VyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2ZpbGVJbmZvO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TmdiTW9kYWwsIE5nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGVzL3Byb2ZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uLy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge0xvZ2luU2VydmljZX0gZnJvbSAnLi4vLi4vbG9naW4vbG9naW4uc2VydmljZSc7XHJcbmltcG9ydCB7RW1wcmVzYVNlcnZpY2V9IGZyb20gJy4uLy4uL2VtcHJlc2EvZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2dpbk1vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vbG9naW4vbG9naW4tbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2RhbFNlcnZpY2V9IGZyb20gJy4uLy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dsb2JhbFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi8uLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtQYWdpbmFBanVkYX0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnaW5hQWp1ZGEubW9kZWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLnNlcnZpY2UnO1xyXG5pbXBvcnQge05vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50fSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMtcG9wdXAuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbmF2YmFyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXZiYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ25hdmJhci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hdmJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGluUHJvZHVjdGlvbjogYm9vbGVhbjtcclxuICAgIGlzTmF2YmFyQ29sbGFwc2VkOiBib29sZWFuO1xyXG4gICAgcGFnaW5hc0FqdWRhOiBBcnJheTxQYWdpbmFBanVkYT4gPSBbXTtcclxuICAgIGlzUmVtb3ZlQWNhbzogYm9vbGVhbjtcclxuICAgIGVtcHJlc2E6IElFbXByZXNhO1xyXG4gICAgc3dhZ2dlckVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcbiAgICBoYWJpbGl0YXJOb3RpZmljYWNvZXMgPSBmYWxzZTtcclxuICAgIG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSA9IFtdO1xyXG4gICAgcXVhbnRpZGFkZU5vdGlmaWNhY29lc05vdmFzID0gMDtcclxuICAgIHByaXZhdGUgbm90aWZpY2Fjb2VzTGlzdGVuZXJzUmVnaXN0cmFkb3MgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgb3BlbmVkT25UaGlzTG9naW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGFicmlyUG9wdXBTZVRpdmVyTm92YXNRdWFuZG9DYXJyZWdhciA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNvZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGVtcHJlc2FTZXJ2aWNlOiBFbXByZXNhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlZ2lzdGVyTW9kYWxTZXJ2aWNlOiBSZWdpc3Rlck1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZ2xvYmFsOiBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbSxcclxuICAgICAgICBwdWJsaWMgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhY29lc1NlcnZpY2U6IE5vdGlmaWNhY29lc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlzTmF2YmFyQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUmVtb3ZlQWNhbyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLm9ic2VydmFyTm90aWZpY2Fjb2VzKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShsaXN0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhY29lcyA9IGxpc3RhID8gbGlzdGEgOiBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVhbnRpZGFkZU5vdGlmaWNhY29lc05vdmFzID0gdGhpcy5jb250YXJOb3Zhc05vdGlmaWNhY29lcyh0aGlzLm5vdGlmaWNhY29lcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFByb2ZpbGVJbmZvKCkudGhlbihwcm9maWxlSW5mbyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5Qcm9kdWN0aW9uID0gcHJvZmlsZUluZm8uaW5Qcm9kdWN0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLnN3YWdnZXJFbmFibGVkID0gcHJvZmlsZUluZm8uc3dhZ2dlckVuYWJsZWQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1wcmVzYVNlcnZpY2VcclxuICAgICAgICAgICAgLmdldEVtcHJlc2EoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4oZW1wcmVzYSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHJlc2EgPSBlbXByZXNhLmJvZHk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIlJFTU9WRVJfQUNBT19OQVZCQVJcIilcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1JlbW92ZUFjYW8gPSB2YWx1ZS52YWxvcjtcclxuICAgICAgICAgICAgfSkuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIkpTT05fQUpVREFcIilcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUudmFsb3IpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXNBanVkYSA9IEpTT04ucGFyc2UodmFsdWUudmFsb3IpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXN1YXJpb1ZpdUFqdWRhKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpckFqdWRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdHJhckxpc3RlbmVyc05vdGlmaWNhY29lcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sbGFwc2VOYXZiYXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc05hdmJhckNvbGxhcHNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBdXRoZW50aWNhdGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0FkbWluKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHlEaXJlY3QoW1wiUk9MRV9BRE1JTlwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubG9naW5Nb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLnJlZ2lzdGVyTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dvdXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsYXBzZU5hdmJhcigpO1xyXG4gICAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsLmxvZ291dCgpO1xyXG4gICAgICAgIHRoaXMucmVzZXRhck5vdGlmaWNhY29lcygpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU2VydmljZS5saW1wYXJDYWNoZSgpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy4uLyc7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlTmF2YmFyKCkge1xyXG4gICAgICAgIHRoaXMuaXNOYXZiYXJDb2xsYXBzZWQgPSAhdGhpcy5pc05hdmJhckNvbGxhcHNlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbWFnZVVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSA/IHRoaXMucHJpbmNpcGFsLmdldEltYWdlVXJsKCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtZXRyaXphcigpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbC5wYXJhbWV0cml6YXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVzdWFyaW9WaXVBanVkYSgpIHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KCd1c3VhcmlvVml1QWp1ZGEnKTtcclxuICAgIH1cclxuXHJcbiAgICBhYnJpckFqdWRhKCkge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsLmFicmlyQWp1ZGEodGhpcy5wYWdpbmFzQWp1ZGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFicmlyTm90aWZpY2Fjb2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYWJpbGl0YXJOb3RpZmljYWNvZXMgfHwgIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5idXNjYXJOb3RpZmljYWNvZXMoZmFsc2UsIHRydWUsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZXh0b1F1YW50aWRhZGVOb3RpZmljYWNvZXMoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPiA5OSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJys5OSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3Zhcy50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVnaXN0cmFyTGlzdGVuZXJzTm90aWZpY2Fjb2VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhY29lc0xpc3RlbmVyc1JlZ2lzdHJhZG9zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNMaXN0ZW5lcnNSZWdpc3RyYWRvcyA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnYXV0aGVudGljYXRpb25TdWNjZXNzJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5lZE9uVGhpc0xvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnYWJyaXJOb3RpZmljYWNvZXNTZVRpdmVyTm92YXMnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmdldEF1dGhlbnRpY2F0aW9uU3RhdGUoKS5zdWJzY3JpYmUoYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QoYWNjb3VudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIoZmFsc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldGFyTm90aWZpY2Fjb2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UubGltcGFyQ2FjaGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmluY2lwYWwuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcihmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmVyaWZpY2FySGFiaWxpdGFjYW9FQ2FycmVnYXIoYWJyaXJQb3B1cFNlVGl2ZXJOb3ZhczogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnJlZ2FuZG9IYWJpbGl0YWNhbykge1xyXG4gICAgICAgICAgICBpZiAoYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiSEFCSUxJVEFSX05PVElGSUNBQ09FU1wiKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcyA9IFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZSkgPT09IHRydWUgJiYgdmFsdWUudmFsb3IgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYWJpbGl0YXJOb3RpZmljYWNvZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1c2Nhck5vdGlmaWNhY29lcyhhYnJpclBvcHVwU2VUaXZlck5vdmFzLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0YXJOb3RpZmljYWNvZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb0hhYmlsaXRhY2FvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRhck5vdGlmaWNhY29lcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1c2Nhck5vdGlmaWNhY29lcyhhYnJpclBvcHVwU2VUaXZlck5vdmFzOiBib29sZWFuLCBhYnJpclBvcHVwU2VtcHJlOiBib29sZWFuLCBmb3JjZVJlZnJlc2g6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFiaWxpdGFyTm90aWZpY2Fjb2VzIHx8ICF0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKSB8fCB0aGlzLmNhcnJlZ2FuZG9Ob3RpZmljYWNvZXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFicmlyUG9wdXBTZW1wcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLmJ1c2Nhck5vdGlmaWNhY29lcyhmb3JjZVJlZnJlc2gpXHJcbiAgICAgICAgICAgIC50aGVuKGxpc3RhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gbGlzdGEgPyBsaXN0YSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSB0aGlzLmNvbnRhck5vdmFzTm90aWZpY2Fjb2VzKHRoaXMubm90aWZpY2Fjb2VzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3N1aU5vdmFzID0gdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV2ZUFicmlyU2VUaXZlck5vdmFzID0gKGFicmlyUG9wdXBTZVRpdmVyTm92YXMgfHwgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcG9zc3VpTm92YXNcclxuICAgICAgICAgICAgICAgICAgICAmJiAhdGhpcy5vcGVuZWRPblRoaXNMb2dpbjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRldmVBYnJpciA9IGRldmVBYnJpclNlVGl2ZXJOb3Zhc1xyXG4gICAgICAgICAgICAgICAgICAgIHx8IGFicmlyUG9wdXBTZW1wcmVcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhcjtcclxuICAgICAgICAgICAgICAgIGlmIChkZXZlQWJyaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGV2ZUFicmlyU2VUaXZlck5vdmFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbmVkT25UaGlzTG9naW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwTm90aWZpY2Fjb2VzKHRoaXMubm90aWZpY2Fjb2VzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhYnJpclBvcHVwTm90aWZpY2Fjb2VzKG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCB0ZWxhTm90aWZpY2Fjb2VzUG9wdXA6IE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50ID0gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgdGVsYU5vdGlmaWNhY29lc1BvcHVwLmluaWNpYXIobm90aWZpY2Fjb2VzKTtcclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmF0dWFsaXphcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXNjYXJOb3RpZmljYWNvZXMoZmFsc2UsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udGFyTm92YXNOb3RpZmljYWNvZXMobm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoIW5vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5vdGlmaWNhY29lcy5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzTm92YU5vdGlmaWNhY2FvKGl0ZW0pKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc05vdmFOb3RpZmljYWNhbyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWx1ZTogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiAhdmFsdWUgfHwgdmFsdWUuZGF0YU5hb0V4aWJpciA9PT0gbnVsbCB8fCB2YWx1ZS5kYXRhTmFvRXhpYmlyID09PSB1bmRlZmluZWQgfHwgdmFsdWUuZGF0YU5hb0V4aWJpciA9PT0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNldGFyTm90aWZpY2Fjb2VzKCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gW107XHJcbiAgICAgICAgdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSAwO1xyXG4gICAgICAgIHRoaXMub3BlbmVkT25UaGlzTG9naW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFicmlyUG9wdXBRdWFuZG9DYXJyZWdhciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgTmF2YmFyQ29tcG9uZW50IH0gZnJvbSAnLi9uYXZiYXIuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBuYXZiYXJSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAnJyxcclxuICAgIGNvbXBvbmVudDogTmF2YmFyQ29tcG9uZW50LFxyXG4gICAgb3V0bGV0OiAnbmF2YmFyJ1xyXG59O1xyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VIZWxwZXJ9IGZyb20gJy4uLy4uL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlcic7XHJcbmltcG9ydCB7U2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwibmd4LXdlYnN0b3JhZ2VcIjtcclxuaW1wb3J0IHtMb2NrUGFnZSwgVXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tYWluJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tYWluLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWydtYWluLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpTWFpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGpoaUxhbmd1YWdlSGVscGVyOiBKaGlMYW5ndWFnZUhlbHBlciwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHByb3ZpZGVyOiBPcHRpb25zUHJvdmlkZXIpIHt9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlVGl0bGUocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nID0gcm91dGVTbmFwc2hvdC5kYXRhICYmIHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gPyByb3V0ZVNuYXBzaG90LmRhdGFbJ3BhZ2VUaXRsZSddIDogJ3BvcnRhbEdhdGV3YXlBcHAnO1xyXG4gICAgICAgIGlmIChyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHx8IHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC51cmwuaW5kZXhPZignL2FjY2Vzc2RlbmllZCcpIDwgMCAmJiBldmVudC51cmwgIT09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2tlZFBhZ2U6IExvY2tQYWdlID0gTG9ja1BhZ2UucmV0cmlldmVGcm9tU3RvcmFnZSh0aGlzLnNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGxvY2tlZFBhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NrZWRQYWdlLmlzTG9ja2VkUGFnZSh3aW5kb3cubG9jYXRpb24sIHRoaXMucHJvdmlkZXIubW9kdWxvKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0UGFnZSA9IGxvY2tlZFBhZ2UuZ2V0UmVkaXJlY3RQYWdlKHdpbmRvdy5sb2NhdGlvbiwgdGhpcy5wcm92aWRlci5tb2R1bG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RQYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmpoaUxhbmd1YWdlSGVscGVyLnVwZGF0ZVRpdGxlKHRoaXMuZ2V0UGFnZVRpdGxlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgT25Jbml0LCBFbGVtZW50UmVmLCBSZW5kZXJlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSwgTGFuZ0NoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2poaUFjdGl2ZU1lbnVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZlTWVudURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgamhpQWN0aXZlTWVudTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGbGFnKGV2ZW50LmxhbmcpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmxhZyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFjdGl2ZUZsYWcoc2VsZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmpoaUFjdGl2ZU1lbnUgPT09IHNlbGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnYWN0aXZlJywgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnYWN0aXZlJywgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9maWxlU2VydmljZSB9IGZyb20gJy4vcHJvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcm9maWxlSW5mb30gZnJvbSAnLi4vLi4vbW9kZWwvcHJvZmlsZS1pbmZvLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFnZS1yaWJib24nLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicmliYm9uXCIgKm5nSWY9XCJyaWJib25FbnZcIj48YSBocmVmPVwiXCIgamhpVHJhbnNsYXRlPVwiZ2xvYmFsLnJpYmJvbi57e3JpYmJvbkVudn19XCI+e3tyaWJib25FbnZ9fTwvYT48L2Rpdj5gLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3BhZ2UtcmliYm9uLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnZVJpYmJvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwcm9maWxlSW5mbzogUHJvZmlsZUluZm87XHJcbiAgICByaWJib25FbnY6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFByb2ZpbGVJbmZvKCkudGhlbihwcm9maWxlSW5mbyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZUluZm8gPSBwcm9maWxlSW5mbztcclxuICAgICAgICAgICAgdGhpcy5yaWJib25FbnYgPSBwcm9maWxlSW5mby5yaWJib25FbnY7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tIFwiLi4vLi4vdXRpbFwiO1xyXG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZm9vdGVyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2Zvb3Rlci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvb3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgdmVyc2lvbjogc3RyaW5nO1xyXG4gICAgYW5vOiBudW1iZXI7XHJcbiAgICBleHRyYUhUTUw6IHN0cmluZztcclxuICAgIGNoZWNrZWRIVE1MID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnNQcm92aWRlcjpPcHRpb25zUHJvdmlkZXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb24gPSBvcHRpb25zUHJvdmlkZXIudmVyc2lvbjtcclxuICAgICAgICB0aGlzLmFubyA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2hlY2tlZEhUTUwgPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuZ2V0SHRtbEZvb3RlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjaGFuZ2VDb250ZW50SGVpZ2h0KCkge1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKXtcclxuICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2poaS1mb290ZXInKS5pdGVtKDApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgY29uc3QgaGVpZ3RoU3R5bGUgPSAnY2FsYygxMDB2aCAtIDgwcHggLSAnICsgZm9vdGVySGVpZ2h0ICsgJ3B4KSc7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyLWZsdWlkJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnRlbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ3RoU3R5bGU7XHJcbiAgICAgIGNvbnRlbnQuc3R5bGUubWluSGVpZ2h0ID0gaGVpZ3RoU3R5bGU7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0SHRtbEZvb3RlcigpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgdXJsID0gJy9hcGkvcHVibGljL3BhcmFtZXRyb3MtY2hhdmUtdmFsb3IvKi8qJztcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZEhUTUwgPSB0cnVlO1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodmFsdWUuYm9keVsnTUVOU0FHRU1fSFRNTF9GT09URVInXSkgPT09IHRydWUgJiZcclxuICAgICAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuYm9keVsnTUVOU0FHRU1fSFRNTF9GT09URVInXS52YWxvcikgPT09IHRydWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZXh0cmFIVE1MID0gdmFsdWUuYm9keVsnTUVOU0FHRU1fSFRNTF9GT09URVInXS52YWxvci5yZXBsYWNlKCd7e3llYXJ9fScsIHRoaXMuYW5vKS5yZXBsYWNlKCd7e3ZlcnNpb259fScsIHRoaXMudmVyc2lvbik7XHJcbiAgICAgICAgICAvL3RoaXMuY2hhbmdlQ29udGVudEhlaWdodCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pLmNhdGNoKCgpID0+e1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZEhUTUwgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7ZXJyb3JSb3V0ZX0gZnJvbSAnLi9lcnJvci9lcnJvci5yb3V0ZSc7XHJcbmltcG9ydCB7bmF2YmFyUm91dGV9IGZyb20gJy4vbmF2YmFyL25hdmJhci5yb3V0ZSc7XHJcbmltcG9ydCB7RXJyb3JDb21wb25lbnR9IGZyb20gJy4vZXJyb3IvZXJyb3IuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge0poaU1haW5Db21wb25lbnR9IGZyb20gJy4vbWFpbi9tYWluLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmF2YmFyQ29tcG9uZW50fSBmcm9tICcuL25hdmJhci9uYXZiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtBY3RpdmVNZW51RGlyZWN0aXZlfSBmcm9tICcuL25hdmJhci9hY3RpdmUtbWVudS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge1BhZ2VSaWJib25Db21wb25lbnR9IGZyb20gJy4vcHJvZmlsZXMvcGFnZS1yaWJib24uY29tcG9uZW50JztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtBdXRoTW9kdWxlfSBmcm9tICcuLi9hdXRoL2F1dGgubW9kdWxlJztcclxuaW1wb3J0IHtGb290ZXJDb21wb25lbnR9IGZyb20gJy4vZm9vdGVyL2Zvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge0xvYWRpbmdCYXJIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAbmd4LWxvYWRpbmctYmFyL2h0dHAtY2xpZW50JztcbmltcG9ydCB7Sm95cmlkZU1vZHVsZSwgSm95cmlkZVN0ZXBDb21wb25lbnR9IGZyb20gJ25neC1qb3lyaWRlJztcbmltcG9ydCB7Q29va2llQ29uc2VudE1vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9jb29raWUtY29uc2VudC9jb29raWUtY29uc2VudC5tb2R1bGUnO1xuaW1wb3J0IHtOb3RpZmljYWNvZXNNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy5tb2R1bGUnO1xuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5jb25zdCBMQVlPVVRfUk9VVEVTID0gW25hdmJhclJvdXRlLCAuLi5lcnJvclJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIEF1dGhNb2R1bGUsXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgTG9hZGluZ0Jhckh0dHBDbGllbnRNb2R1bGUsXG4gICAgICBDb29raWVDb25zZW50TW9kdWxlLFxuICAgICAgTm90aWZpY2Fjb2VzTW9kdWxlLFxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JSb290KFsuLi5MQVlPVVRfUk9VVEVTXSwgeyB1c2VIYXNoOiB0cnVlLCBlbmFibGVUcmFjaW5nOiB0cnVlIH0pLFxyXG4gICAgICBKb3lyaWRlTW9kdWxlLmZvclJvb3QoKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBFcnJvckNvbXBvbmVudCxcclxuICAgICAgSmhpTWFpbkNvbXBvbmVudCxcclxuICAgICAgTmF2YmFyQ29tcG9uZW50LFxyXG4gICAgICBGb290ZXJDb21wb25lbnQsXHJcbiAgICAgIEFjdGl2ZU1lbnVEaXJlY3RpdmUsXHJcbiAgICAgIFBhZ2VSaWJib25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIFJvdXRlck1vZHVsZSxcclxuICAgICAgRXJyb3JDb21wb25lbnQsXHJcbiAgICAgIEpoaU1haW5Db21wb25lbnQsXHJcbiAgICAgIE5hdmJhckNvbXBvbmVudCxcclxuICAgICAgRm9vdGVyQ29tcG9uZW50LFxyXG4gICAgICBBY3RpdmVNZW51RGlyZWN0aXZlLFxyXG4gICAgICBQYWdlUmliYm9uQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIE9wdGlvbnNQcm92aWRlclxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW0pveXJpZGVTdGVwQ29tcG9uZW50XSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0c01vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY3RpdmF0ZScsIHtcclxuICAgICAgICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgna2V5Jywga2V5KVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZVNlcnZpY2UgfSBmcm9tICcuL2FjdGl2YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYWN0aXZhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjdGl2YXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhY3RpdmF0ZVNlcnZpY2U6IEFjdGl2YXRlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBsb2dpbk1vZGFsU2VydmljZTogTG9naW5Nb2RhbFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVNlcnZpY2UuZ2V0KHBhcmFtc1sna2V5J10pLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZUNvbXBvbmVudCB9IGZyb20gJy4vYWN0aXZhdGUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBhY3RpdmF0ZVJvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICdhY3RpdmF0ZScsXHJcbiAgICBjb21wb25lbnQ6IEFjdGl2YXRlQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdBdGl2YcODwqfDg8KjbydcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBzYXZlKG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGN1cnJlbnRQYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvY2hhbmdlLXBhc3N3b3JkJywgeyBjdXJyZW50UGFzc3dvcmQsIG5ld1Bhc3N3b3JkIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4vcGFzc3dvcmQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi8uLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Bhc3N3b3JkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZG9Ob3RNYXRjaDogc3RyaW5nO1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIGFjY291bnQ6IGFueTtcclxuICAgIGN1cnJlbnRQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgbmV3UGFzc3dvcmQ6IHN0cmluZztcclxuICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHBhc3N3b3JkU2VydmljZTogUGFzc3dvcmRTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBhc3N3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5ld1Bhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1QYXNzd29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5kb05vdE1hdGNoID0gJ0VSUk9SJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkU2VydmljZS5zYXZlKHRoaXMubmV3UGFzc3dvcmQsIHRoaXMuY3VycmVudFBhc3N3b3JkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7UGFzc3dvcmRDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ3Bhc3N3b3JkJyxcclxuICAgIGNvbXBvbmVudDogUGFzc3dvcmRDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnLCdST0xFX0FETUlOJ10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnU2VuaGEnXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59O1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFJlc2V0RmluaXNoU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgc2F2ZShrZXlBbmRQYXNzd29yZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvcmVzZXQtcGFzc3dvcmQvZmluaXNoJywga2V5QW5kUGFzc3dvcmQpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1Bhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2dpbk1vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9naW4vbG9naW4tbW9kYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXBhc3N3b3JkLXJlc2V0LWZpbmlzaCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtcmVzZXQtZmluaXNoLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBjb25maXJtUGFzc3dvcmQ6IHN0cmluZztcclxuICAgIGRvTm90TWF0Y2g6IHN0cmluZztcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcbiAgICBrZXlNaXNzaW5nOiBib29sZWFuO1xyXG4gICAgcmVzZXRBY2NvdW50OiBhbnk7XHJcbiAgICBzdWNjZXNzOiBzdHJpbmc7XHJcbiAgICBtb2RhbFJlZjogTmdiTW9kYWxSZWY7XHJcbiAgICBrZXk6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlOiBQYXNzd29yZFJlc2V0RmluaXNoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXJcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmtleSA9IHBhcmFtc1sna2V5J107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZXNldEFjY291bnQgPSB7fTtcclxuICAgICAgICB0aGlzLmtleU1pc3NpbmcgPSAhdGhpcy5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjcGFzc3dvcmQnKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjcGFzc3dvcmQnKSwgJ2ZvY3VzJywgW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaW5pc2hSZXNldCgpIHtcclxuICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLnJlc2V0QWNjb3VudC5wYXNzd29yZCAhPT0gdGhpcy5jb25maXJtUGFzc3dvcmQpIHtcclxuICAgICAgICAgICAgdGhpcy5kb05vdE1hdGNoID0gJ0VSUk9SJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlLnNhdmUoeyBrZXk6IHRoaXMua2V5LCBuZXdQYXNzd29yZDogdGhpcy5yZXNldEFjY291bnQucGFzc3dvcmQgfSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50IH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlc2V0RmluaXNoUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ3Jlc2V0L2ZpbmlzaCcsXHJcbiAgICBjb21wb25lbnQ6IFBhc3N3b3JkUmVzZXRGaW5pc2hDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ1NlbmhhJ1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFJlc2V0SW5pdFNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgc2F2ZVR3b0ZhY3RvcihyZXNldEFjY291bnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvcmVzZXQtcGFzc3dvcmQtdHdvZmFjdG9yL2luaXQnLCByZXNldEFjY291bnQpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZShtYWlsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY2NvdW50L3Jlc2V0LXBhc3N3b3JkL2luaXQnLCBtYWlsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFJlbmRlcmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYXNzd29yZFJlc2V0SW5pdFNlcnZpY2V9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQtaW5pdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtFTUFJTF9OT1RfRk9VTkRfVFlQRX0gZnJvbSAnLi4vLi4vLi4vdXRpbC9lcnJvci5jb25zdGFudHMnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gXCIuLi8uLi8uLi91dGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1wYXNzd29yZC1yZXNldC1pbml0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtcmVzZXQtaW5pdC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBlcnJvcjogc3RyaW5nO1xyXG4gIGVycm9yRW1haWxOb3RFeGlzdHM6IHN0cmluZztcclxuICByZXNldEFjY291bnQ6IGFueTtcclxuICB0d29GYWN0b3I6IGJvb2xlYW47XHJcbiAgcmVzZXRCeUxvZ2luT3JFbWFpbDogYm9vbGVhbjtcclxuICBzdWNjZXNzOiBzdHJpbmc7XHJcbiAgZW1haWxTdWNlc3M6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhc3N3b3JkUmVzZXRJbml0U2VydmljZTogUGFzc3dvcmRSZXNldEluaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvcHRpb25zUHJvdmlkZXI6IE9wdGlvbnNQcm92aWRlcixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVzZXRBY2NvdW50ID0ge307XHJcbiAgICB0aGlzLnR3b0ZhY3RvciA9IHRoaXMub3B0aW9uc1Byb3ZpZGVyLnR3b0ZhY3RvcjtcclxuICAgIHRoaXMucmVzZXRCeUxvZ2luT3JFbWFpbCA9IHRoaXMub3B0aW9uc1Byb3ZpZGVyLnJlc2V0QnlMb2dpbk9yRW1haWw7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmludm9rZUVsZW1lbnRNZXRob2QodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2VtYWlsSW5wdXQnKSwgJ2ZvY3VzJywgW10pO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdFJlc2V0KCkge1xyXG4gICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICB0aGlzLmVycm9yRW1haWxOb3RFeGlzdHMgPSBudWxsO1xyXG5cclxuICAgIGxldCByZXN1bHQ6IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgICBpZiAodGhpcy50d29GYWN0b3IpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wYXNzd29yZFJlc2V0SW5pdFNlcnZpY2Uuc2F2ZVR3b0ZhY3Rvcih0aGlzLnJlc2V0QWNjb3VudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLnBhc3N3b3JkUmVzZXRJbml0U2VydmljZS5zYXZlKHRoaXMucmVzZXRBY2NvdW50LmVtYWlsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXN1bHQuc3Vic2NyaWJlKFxyXG4gICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChyZXNwb25zZS5ib2R5KSA9PT0gdHJ1ZSAmJiBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHJlc3BvbnNlLmJvZHkuZW1haWwpKXtcclxuICAgICAgICAgIHRoaXMuZW1haWxTdWNlc3MgPSAnICgnICsgcmVzcG9uc2UuYm9keS5lbWFpbCArICcpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgfSxcclxuICAgICAgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IEVNQUlMX05PVF9GT1VORF9UWVBFKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yRW1haWxOb3RFeGlzdHMgPSAnRVJST1InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50IH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgY29uc3QgcGFzc3dvcmRSZXNldEluaXRSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAncmVzZXQvcmVxdWVzdCcsXHJcbiAgICBjb21wb25lbnQ6IFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdTZW5oYSdcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XG5pbXBvcnQge0poaUxhbmd1YWdlSGVscGVyfSBmcm9tICcuLi8uLi9sYW5ndWFnZS9sYW5ndWFnZS5oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2poaS1zZXR0aW5ncycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmdzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBzdWNjZXNzOiBzdHJpbmc7XG4gICAgc2V0dGluZ3NBY2NvdW50OiBhbnk7XG4gICAgbGFuZ3VhZ2VzOiBhbnlbXTtcbiAgICBtZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhY2NvdW50OiBBY2NvdW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IEpoaUxhbmd1YWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZUhlbHBlcjogSmhpTGFuZ3VhZ2VIZWxwZXIsXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvc1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KCkudGhlbihhY2NvdW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50ID0gdGhpcy5jb3B5QWNjb3VudChhY2NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuYnVzY2FyTWVuc2FnZW1BdHVhbGl6YWNhb0NhZGFzdHJhbCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYW5ndWFnZUhlbHBlci5nZXRBbGwoKS50aGVuKGxhbmd1YWdlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcyA9IGxhbmd1YWdlcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NBY2NvdW50ICYmIHRoaXMuc2V0dGluZ3NBY2NvdW50LnRlbGVmb25lKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzQWNjb3VudC50ZWxlZm9uZSA9IHRoaXMuc2V0dGluZ3NBY2NvdW50LnRlbGVmb25lLnJlcGxhY2UoL1xcRC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY2NvdW50LnNhdmUodGhpcy5zZXR0aW5nc0FjY291bnQpLnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xuICAgICAgICAgICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KHRydWUpLnRoZW4oYWNjb3VudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50ID0gdGhpcy5jb3B5QWNjb3VudChhY2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXNjYXJNZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpLnRoZW4oY3VycmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzQWNjb3VudC5sYW5nS2V5ICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5jaGFuZ2VMYW5ndWFnZSh0aGlzLnNldHRpbmdzQWNjb3VudC5sYW5nS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvcHlBY2NvdW50KGFjY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGl2YXRlZDogYWNjb3VudC5hY3RpdmF0ZWQsXG4gICAgICAgICAgICBlbWFpbDogYWNjb3VudC5lbWFpbCxcbiAgICAgICAgICAgIGZpcnN0TmFtZTogYWNjb3VudC5maXJzdE5hbWUsXG4gICAgICAgICAgICBsYW5nS2V5OiBhY2NvdW50LmxhbmdLZXksXG4gICAgICAgICAgICBsYXN0TmFtZTogYWNjb3VudC5sYXN0TmFtZSxcbiAgICAgICAgICAgIGxvZ2luOiBhY2NvdW50LmxvZ2luLFxuICAgICAgICAgICAgaW1hZ2VVcmw6IGFjY291bnQuaW1hZ2VVcmwsXG4gICAgICAgICAgICB0ZWxlZm9uZTogYWNjb3VudC50ZWxlZm9uZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVzY2FyTWVuc2FnZW1BdHVhbGl6YWNhb0NhZGFzdHJhbCgpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9zU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKCdNRU5TQUdFTV9BVFVBTElaQUNBT19DQURBU1RSQUwnKVxuICAgICAgICAgICAgLnRoZW4ocGFyYW1ldHJvID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnNhZ2VtQXR1YWxpemFjYW9DYWRhc3RyYWwgPSBwYXJhbWV0cm8gJiYgcGFyYW1ldHJvLnZhbG9yO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7U2V0dGluZ3NDb21wb25lbnR9IGZyb20gJy4vc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ3NldHRpbmdzJyxcclxuICAgIGNvbXBvbmVudDogU2V0dGluZ3NDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnLCAnUk9MRV9BRE1JTiddLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0NvbmZpZ3VyYcODwqfDg8KjbydcclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbn07XHJcbiIsImltcG9ydCB7Um91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge2FjdGl2YXRlUm91dGV9IGZyb20gJy4vYWN0aXZhdGUvYWN0aXZhdGUucm91dGUnO1xyXG5pbXBvcnQge3Bhc3N3b3JkUm91dGV9IGZyb20gJy4vcGFzc3dvcmQvcGFzc3dvcmQucm91dGUnO1xyXG5pbXBvcnQge3Bhc3N3b3JkUmVzZXRGaW5pc2hSb3V0ZX0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLnJvdXRlJztcclxuaW1wb3J0IHtwYXNzd29yZFJlc2V0SW5pdFJvdXRlfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5yb3V0ZSc7XHJcbmltcG9ydCB7c2V0dGluZ3NSb3V0ZX0gZnJvbSAnLi9zZXR0aW5ncy9zZXR0aW5ncy5yb3V0ZSc7XHJcblxyXG5jb25zdCBBQ0NPVU5UX1JPVVRFUyA9IFthY3RpdmF0ZVJvdXRlLCBwYXNzd29yZFJvdXRlLCBwYXNzd29yZFJlc2V0RmluaXNoUm91dGUsIHBhc3N3b3JkUmVzZXRJbml0Um91dGUsIHNldHRpbmdzUm91dGVdO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFjY291bnRTdGF0ZTogUm91dGVzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgIGNoaWxkcmVuOiBBQ0NPVU5UX1JPVVRFU1xyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge2FjY291bnRTdGF0ZX0gZnJvbSAnLi9hY2NvdW50LnJvdXRlJztcclxuaW1wb3J0IHtBY3RpdmF0ZUNvbXBvbmVudH0gZnJvbSAnLi9hY3RpdmF0ZS9hY3RpdmF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1Bhc3N3b3JkQ29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkL3Bhc3N3b3JkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFzc3dvcmRSZXNldEluaXRDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7U2V0dGluZ3NDb21wb25lbnR9IGZyb20gJy4vc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VNb2R1bG99IGZyb20gJy4uL2xhbmd1YWdlL2ZpbmQtbGFuZ3VhZ2UubW9kdWxvJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFTYXZlfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFTYXZlJztcclxuaW1wb3J0IHtmYUNoZWNrfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFDaGVjayc7XHJcbmltcG9ydCB7UGFzc3dvcmRTdHJlbmd0aE1vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aC9wYXNzd29yZC1zdHJlbmd0aC5tb2R1bGUnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSBcIi4uL3V0aWwvb3B0aW9ucy1wcm92aWRlclwiO1xyXG5cclxubGlicmFyeS5hZGQoZmFTYXZlKTtcclxubGlicmFyeS5hZGQoZmFDaGVjayk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBGaW5kTGFuZ3VhZ2VNb2R1bG8sXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBQYXNzd29yZFN0cmVuZ3RoTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoYWNjb3VudFN0YXRlKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBBY3RpdmF0ZUNvbXBvbmVudCxcclxuICAgICAgUGFzc3dvcmRDb21wb25lbnQsXHJcbiAgICAgIFBhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50LFxyXG4gICAgICBQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50LFxyXG4gICAgICBTZXR0aW5nc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBPcHRpb25zUHJvdmlkZXJcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGaWx0ZXJQaXBlfSBmcm9tICcuLi8uLi9waXBlL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHtHcmlkQWN0aW9uc30gZnJvbSAnLi9ncmlkLmFjdGlvbnMnO1xyXG5pbXBvcnQge0dyaWRQcmludH0gZnJvbSAnLi9ncmlkLnByaW50JztcclxuaW1wb3J0IHtHcmlkTWFza30gZnJvbSAnLi9ncmlkLm1hc2snO1xyXG5pbXBvcnQge01hc2tQaXBlfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZ3JpZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IHtcclxuICBwdWJsaWMgc2VhcmNoOiBzdHJpbmc7XHJcbiAgcHVibGljIHBhZ2VTaXplID0gNTtcclxuICBwdWJsaWMgcGFnZSA9IDE7XHJcbiAgcHVibGljIGlzVmlldyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0VkaXQgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEZWxldGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNTYXZlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2VhcmNoID0gdHJ1ZTtcclxuICBwdWJsaWMgaXNQcmludCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpdGVuczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHB1YmxpYyBjb2x1bW5zOkFycmF5PHN0cmluZz4gPSBbXTtcclxuICBwdWJsaWMgaGVhZGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gIHB1YmxpYyBncmlkQWN0aW9uczogR3JpZEFjdGlvbnM7XHJcbiAgcHVibGljIGdyaWRQcmludDogR3JpZFByaW50O1xyXG4gIHB1YmxpYyBncmlkTWFzazogR3JpZE1hc2s7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnUGVzcXVpc2FyIHBvciBxdWFscXVlciBjYW1wby4uLic7XHJcbiAgcHVibGljIGl0ZW5zU2luZ2xldG9uOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJQaXBlOiBGaWx0ZXJQaXBlLFxyXG4gICAgcHJpdmF0ZSBtYXNrUGlwZTogTWFza1BpcGUpIHtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9WaWV3KGlzVG9WaWV3OiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMuaXNWaWV3ID0gaXNUb1ZpZXc7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvRWRpdChpc0VkaXQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNFZGl0ID0gaXNFZGl0O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb0RlbGV0ZShpc0RlbGV0ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0RlbGV0ZSA9IGlzRGVsZXRlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb1NhdmUoaXNTYXZlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9TZWFyY2goaXNTZWFyY2g6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNTZWFyY2ggPSBpc1NlYXJjaDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9QcmludChpc1ByaW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzUHJpbnQgPSBpc1ByaW50O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZykge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRJdGVucyhpdGVucykge1xyXG4gICAgdGhpcy5pdGVucyA9IGl0ZW5zO1xyXG4gICAgdGhpcy5pdGVuc1NpbmdsZXRvbiA9IGl0ZW5zO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0Q29sdW1ucyhjb2x1bW5zOiBbXSkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNldEhlYWRlcnMoaGVhZGVyczogW10pIHtcclxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRNYXNrKGdyaWRNYXNrOiBHcmlkTWFzaykge1xyXG4gICAgdGhpcy5ncmlkTWFzayA9IGdyaWRNYXNrO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYWRkTGlzdGVuZXIoY29tcG9uZW50OiBHcmlkQWN0aW9ucyB8IEdyaWRQcmludCkge1xyXG4gICAgaWYgKChjb21wb25lbnQgYXMgR3JpZEFjdGlvbnMpLnRvVmlldykge1xyXG4gICAgICB0aGlzLmdyaWRBY3Rpb25zID0gY29tcG9uZW50IGFzIEdyaWRBY3Rpb25zO1xyXG4gICAgfVxyXG4gICAgaWYgKChjb21wb25lbnQgYXMgR3JpZFByaW50KS50b1ByaW50KSB7XHJcbiAgICAgIHRoaXMuZ3JpZFByaW50ID0gY29tcG9uZW50IGFzIEdyaWRQcmludDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2ggIT09ICcnICYmIHRoaXMuc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLml0ZW5zID0gdGhpcy5nZXRJdGVucygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmFsdWVJdGVtKGl0ZW06IGFueSwgY29sdW1uOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgbWFzayA9IHRoaXMuZ2V0TWFzayhjb2x1bW4pO1xyXG4gICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl07XHJcbiAgICBpZiAobWFzayAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hc2tQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgbWFzaylcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVucygpOiBBcnJheTxhbnk+IHtcclxuICAgIHRoaXMuaXRlbnMgPSB0aGlzLml0ZW5zU2luZ2xldG9uO1xyXG4gICAgbGV0IGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBjb2x1bW4gb2YgdGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgIGZpbHRlcnNbY29sdW1uXSA9IHRoaXMuc2VhcmNoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaC5sZW5ndGggPiAyKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlclBpcGUudHJhbnNmb3JtKHRoaXMuaXRlbnMsIGZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLml0ZW5zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXNrKGNvbHVtbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBncmlkTWFzayA9IHRoaXMuZ3JpZE1hc2s7XHJcbiAgICBpZiAoZ3JpZE1hc2sgIT0gbnVsbCAmJiBjb2x1bW4gPT09IGdyaWRNYXNrLmNvbHVtbikge1xyXG4gICAgICByZXR1cm4gZ3JpZE1hc2subWFzaztcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9WaWV3KGl0ZW0pIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZEFjdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmdyaWRBY3Rpb25zLnRvVmlldyhpdGVtKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9FZGl0KGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdyaWRBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9FZGl0KGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9EZWxldGUoaXRlbSkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFjdGlvbnMpIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICB0aXRsZTogJ0Rlc2VqYSBleGNsdWlyPycsXHJcbiAgICAgICAgdGV4dDogXCJPcGVyYcODwqfDg8KjbyBuw4PCo28gcG9kZSBzZXIgZGVzZmVpdGEhXCIsXHJcbiAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiAnIzMwODVkNicsXHJcbiAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6ICcjZDMzJyxcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ1NpbSEnLFxyXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICdOw4PCo28nXHJcbiAgICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9EZWxldGUoaXRlbSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvU2F2ZSgpIHtcclxuICAgIGlmICh0aGlzLmdyaWRBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9TYXZlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1ByaW50KGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdyaWRQcmludCkge1xyXG4gICAgICB0aGlzLmdyaWRQcmludC50b1ByaW50KGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5pdGVucyA9IHRoaXMuaXRlbnNTaW5nbGV0b247XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFUaW1lc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVGltZXMnO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7RmlsdGVyUGlwZX0gZnJvbSAnLi4vLi4vcGlwZS9maWx0ZXIucGlwZSc7XHJcbmltcG9ydCB7R3JpZENvbXBvbmVudH0gZnJvbSAnLi9ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge01hc2tQaXBlLCBOZ3hNYXNrTW9kdWxlfSBmcm9tICduZ3gtbWFzayc7XHJcblxyXG5saWJyYXJ5LmFkZChmYVRpbWVzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBOZ3hNYXNrTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbR3JpZENvbXBvbmVudF0sXHJcbiAgICBleHBvcnRzOiBbR3JpZENvbXBvbmVudF0sXHJcbiAgICBwcm92aWRlcnM6IFtGaWx0ZXJQaXBlLCBNYXNrUGlwZV0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRNb2R1bGUgeyB9XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSUdyaWRNYXNrIHtcclxuICBjb2x1bW4/OiBzdHJpbmc7XHJcbiAgbWFzaz86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRNYXNrIGltcGxlbWVudHMgSUdyaWRNYXNrIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgY29sdW1uPzogc3RyaW5nLFxyXG4gICAgICBwdWJsaWMgbWFzaz86IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbInRzbGliXzEuX192YWx1ZXMiLCJJbmplY3Rpb25Ub2tlbiIsIkluamVjdGFibGUiLCJJbmplY3QiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsIkV2ZW50RW1pdHRlciIsIkRpcmVjdGl2ZSIsIk5HX1ZBTElEQVRPUlMiLCJFbGVtZW50UmVmIiwiT3B0aW9uYWwiLCJJbnB1dCIsIk91dHB1dCIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiQ3J5cHRvSlMuZW5jIiwiQ3J5cHRvSlMuQUVTIiwiQ3J5cHRvSlMucGFkIiwiQ3J5cHRvSlMubW9kZSIsIkh0dHBQYXJhbXMiLCJOZ2JEYXRlQWRhcHRlciIsIk5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIiLCJMb2NrUGFnZSIsIkNvbXBvbmVudCIsIk5nYkFjdGl2ZU1vZGFsIiwiVmlld0NoaWxkIiwiTmdiTW9kYWwiLCJsaWJyYXJ5IiwiZmFzIiwiUGRmSnNWaWV3ZXJNb2R1bGUiLCJOZ2JNb2R1bGUiLCJGb250QXdlc29tZU1vZHVsZSIsIkNVU1RPTV9FTEVNRU5UU19TQ0hFTUEiLCJQaXBlIiwiZmFUaW1lcyIsImZhQmFuIiwiZmFCZWxsIiwiQ29tbW9uTW9kdWxlIiwiTmdKaGlwc3Rlck1vZHVsZSIsIkh0dHBDbGllbnQiLCJTZWN1cml0eUNvbnRleHQiLCJTYW5pdGl6ZXIiLCJKaGlDb25maWdTZXJ2aWNlIiwiVHJhbnNsYXRlU2VydmljZSIsIkpoaUV2ZW50TWFuYWdlciIsIkZvcm1zTW9kdWxlIiwidHJpZ2dlciIsInN0YXRlIiwic3R5bGUiLCJ0cmFuc2l0aW9uIiwiYW5pbWF0ZSIsIkpveXJpZGVTZXJ2aWNlIiwiTmcyRml0dGV4dE1vZHVsZSIsIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiwiU0VSVkVSX0FQSV9VUkwiLCJOR19WQUxVRV9BQ0NFU1NPUiIsImZvcndhcmRSZWYiLCJTdWJqZWN0IiwiSmhpTGFuZ3VhZ2VTZXJ2aWNlIiwiU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIiwiUm91dGVyIiwiTG9jYXRpb24iLCJEb21TYW5pdGl6ZXIiLCJUZW1wbGF0ZVJlZiIsIlZpZXdDb250YWluZXJSZWYiLCJtYXAiLCJPYnNlcnZhYmxlIiwiTG9jYWxTdG9yYWdlU2VydmljZSIsImZvcmtKb2luIiwiTmdab25lIiwiQ2hhbmdlRGV0ZWN0b3JSZWYiLCJSZWNhcHRjaGFDb21tb25Nb2R1bGUiLCJSZWNhcHRjaGFNb2R1bGUiLCJCZWhhdmlvclN1YmplY3QiLCJmYUV5ZSIsIkNvb2tpZVNlcnZpY2UiLCJSZW5kZXJlciIsImRlYm91bmNlVGltZSIsImlzRGV2TW9kZSIsImZhVXNlclBsdXMiLCJOZ3hNYXNrTW9kdWxlIiwiZmFVc2VyIiwiUmVuZGVyZXJGYWN0b3J5MiIsIlRpdGxlIiwiUm91dGVyTW9kdWxlIiwiSmhpUGFyc2VMaW5rcyIsIkFjdGl2YXRlZFJvdXRlIiwiRGF0ZVBpcGUiLCJKaGlSZXNvbHZlUGFnaW5nUGFyYW1zIiwiRU5USVRZX1NUQVRFUyIsIkh0dHBSZXNwb25zZSIsImNhdGNoRXJyb3IiLCJ0aHJvd0Vycm9yIiwidGFwIiwiSHR0cEVycm9yUmVzcG9uc2UiLCJmaWx0ZXIiLCJvZiIsIkpoaURhdGFVdGlscyIsIk5nYlBhZ2luYXRpb25Db25maWciLCJlbmFibGVQcm9kTW9kZSIsIlRpcG9QZXNzb2FOYW1lc3BhY2UiLCJTaXR1YWNhb0NvbnRyaWJ1aW50ZU5hbWVzcGFjZSIsIlRpcG9SZXNwb25zYXZlbE5hbWVzcGFjZSIsIlRpcG9JbW92ZWxOYW1lc3BhY2UiLCJQbGF0Zm9ybUxvY2F0aW9uIiwiTmF2aWdhdGlvbkVuZCIsIkxvYWRpbmdCYXJIdHRwQ2xpZW50TW9kdWxlIiwiSm95cmlkZU1vZHVsZSIsIkpveXJpZGVTdGVwQ29tcG9uZW50IiwiZmFTYXZlIiwiZmFDaGVjayIsIk1hc2tQaXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7SUFBQTs7Ozs7Ozs7Ozs7Ozs7SUFjQTtJQUVBLElBQUksYUFBYSxHQUFHLFVBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO2FBQ2hDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVFLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0FBRUYsYUFBZ0IsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFCLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEIsU0FBUyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxF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QUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxNQUFNO3dCQUM5QixLQUFLLENBQUM7NEJBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzt3QkFDeEQsS0FBSyxDQUFDOzRCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pELEtBQUssQ0FBQzs0QkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pEOzRCQUNJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUFDLFNBQVM7NkJBQUU7NEJBQzVHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dD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
|