tnx-shared 5.3.145 → 5.3.146
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/tnx-shared.umd.js +748 -748
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +2 -0
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/esm2015/components/common-app-component/common-app-component.js +7 -6
- package/esm2015/tnx-shared.js +48 -48
- package/fesm2015/tnx-shared.js +1169 -1169
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.d.ts +47 -47
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -25,6 +25,7 @@ import { StorageService } from '../../services/storage.service';
|
|
|
25
25
|
import { TnClientService } from '../../services/tn-client.service';
|
|
26
26
|
import { UserService } from '../../services/user.service';
|
|
27
27
|
import { UserOnlineDetailsService } from '../../services/useronlinedetails.service';
|
|
28
|
+
import { ReportQueueComponent } from '../report-queue/report-queue.component';
|
|
28
29
|
import { TnCustomScrollbarComponent } from '../tn-custom-scrollbar/tn-custom-scrollbar.component';
|
|
29
30
|
export declare class CommonAppComponentComponent implements OnInit, AfterViewInit, AfterContentInit, OnDestroy {
|
|
30
31
|
private document;
|
|
@@ -57,6 +58,7 @@ export declare class CommonAppComponentComponent implements OnInit, AfterViewIni
|
|
|
57
58
|
private _customizeUiService;
|
|
58
59
|
okButton: ElementRef;
|
|
59
60
|
cancelButton: ElementRef;
|
|
61
|
+
reportQueue: ReportQueueComponent;
|
|
60
62
|
scrollBarMenu: TnCustomScrollbarComponent;
|
|
61
63
|
children: QueryList<TemplateRef<any>>;
|
|
62
64
|
showQuickNote: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-app-component.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/common-app-component/common-app-component.ts"],"names":[],"mappings":"AACA,OAAO,EACH,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EAEjB,UAAU,EACV,YAAY,EAIZ,SAAS,EACT,MAAM,EAEN,SAAS,EACT,SAAS,EACT,WAAW,
|
|
1
|
+
{"version":3,"file":"common-app-component.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/components/common-app-component/common-app-component.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { Title } from '@angular/platform-browser';
|
|
|
5
5
|
import { ActivatedRoute, NavigationStart, Router } from '@angular/router';
|
|
6
6
|
import { TranslateService } from '@ngx-translate/core';
|
|
7
7
|
import { OAuthService } from 'angular-oauth2-oidc';
|
|
8
|
+
import * as Hammer from 'hammerjs';
|
|
8
9
|
import { DeviceDetectorService } from 'ngx-device-detector';
|
|
9
10
|
import { Subject } from 'rxjs';
|
|
10
11
|
import { PrimeNGConfig } from 'tn-custom-primeng/api';
|
|
@@ -31,8 +32,8 @@ import { StorageService } from '../../services/storage.service';
|
|
|
31
32
|
import { TnClientService } from '../../services/tn-client.service';
|
|
32
33
|
import { UserService } from '../../services/user.service';
|
|
33
34
|
import { UserOnlineDetailsService } from '../../services/useronlinedetails.service';
|
|
35
|
+
import { ReportQueueComponent } from '../report-queue/report-queue.component';
|
|
34
36
|
import { TnCustomScrollbarComponent } from '../tn-custom-scrollbar/tn-custom-scrollbar.component';
|
|
35
|
-
import * as Hammer from 'hammerjs';
|
|
36
37
|
export class CommonAppComponentComponent {
|
|
37
38
|
constructor(document, _globalService, _commonService, renderer, translate, _oauthService, _authenService, _userService, _router, _title, _signalRService, _storageUpdatedService, _applicationContext, _componentContextService, _activatedRoute, _deviceDetectorService, _cd, _tnClientService, _coreConfigService, _notifierService, _entityMetadataService, _moduleConfigService, _menuService, _primengConfig, _storageService, _permissionService, _userOnlineDetailsService, _customizeUiService) {
|
|
38
39
|
var _a;
|
|
@@ -68,7 +69,6 @@ export class CommonAppComponentComponent {
|
|
|
68
69
|
this.allowAnonymous = false;
|
|
69
70
|
this.autoRenderMenu = true;
|
|
70
71
|
this.onUserLoaded = new EventEmitter();
|
|
71
|
-
// routerOutlet: TemplateRef<any>;
|
|
72
72
|
this._unsubscribeAll = new Subject();
|
|
73
73
|
// rootVersionDeploy = '1.3';
|
|
74
74
|
this.currentRoute = '';
|
|
@@ -343,8 +343,8 @@ export class CommonAppComponentComponent {
|
|
|
343
343
|
ngAfterViewInit() {
|
|
344
344
|
this._cd.detach();
|
|
345
345
|
this.detectChanges();
|
|
346
|
-
|
|
347
|
-
|
|
346
|
+
const root = this._applicationContext.getRootContext();
|
|
347
|
+
root.reportQueue = this.reportQueue;
|
|
348
348
|
this.menuModel = this._menuService.getMenuItems();
|
|
349
349
|
}
|
|
350
350
|
defaultRedirect() {
|
|
@@ -662,7 +662,7 @@ export class CommonAppComponentComponent {
|
|
|
662
662
|
CommonAppComponentComponent.decorators = [
|
|
663
663
|
{ type: Component, args: [{
|
|
664
664
|
selector: 'common-app-component',
|
|
665
|
-
template: "<ng-container *ngIf=\"!pageLoaded\">\n <ng-container [ngSwitch]=\"layoutLoadingPage\">\n
|
|
665
|
+
template: "<ng-container *ngIf=\"!pageLoaded\">\n <ng-container [ngSwitch]=\"layoutLoadingPage\">\n <ng-container *ngSwitchDefault>\n <loading-page-v1></loading-page-v1>\n </ng-container>\n </ng-container>\n</ng-container>\n\n<div *ngIf=\"pageLoaded\" [style.display]=\"pageLoaded ? '' : 'none'\" class=\"layout-wrapper\"\n (click)=\"_commonService.onLayoutClick()\" [ngClass]=\"{'menu-layout-static': !_commonService.isOverlay(),\n 'menu-layout-overlay': _commonService.isOverlay(),\n 'layout-menu-overlay-active': _commonService.overlayMenuActive,\n 'menu-layout-horizontal': _commonService.isHorizontal(),\n 'menu-layout-slim': _commonService.isSlim(),\n 'layout-menu-static-desktop-inactive': _commonService.staticMenuDesktopInactive,\n 'layout-menu-static-desktop-active': !_commonService.staticMenuDesktopInactive,\n 'layout-menu-static-mobile-inactive': !_commonService.staticMenuMobileActive,\n 'layout-menu-static-mobile-active': _commonService.staticMenuMobileActive,\n 'layout-menu-static-inactive': _commonService.staticMenuDesktopInactive,\n 'layout-menu-static-active': _commonService.staticMenuMobileActive,\n 'show-menu-icon-inactive': showMenuIconInactive}\">\n\n <app-topbar *ngIf=\"_globalService.getHeaderState()\"></app-topbar>\n\n <div *ngIf=\"_globalService.getMenuState()\" class=\"layout-menu-container\"\n [ngClass]=\"{'layout-menu-dark':_commonService.darkMenu}\" (click)=\"_commonService.onMenuClick($event)\">\n <app-root-menu></app-root-menu>\n <div class=\"layout-menu-block\">\n <tn-custom-scrollbar #scrollbar [style]=\"{'padding-top': '16px'}\">\n <app-inline-profile *ngIf=\"_commonService.profileMode == 'inline' &&!_commonService.isHorizontal()\">\n </app-inline-profile>\n <ng-container *ngIf=\"!showMenuIconInactive\">\n <app-menu [autoRenderMenu]=\"autoRenderMenu\" [reset]=\"_commonService.resetMenu\"\n (onMenuActive)=\"handleMenuActive($event)\"></app-menu>\n </ng-container>\n <ng-container *ngIf=\"showMenuIconInactive\">\n <app-menu-v2 [autoRenderMenu]=\"autoRenderMenu\" [reset]=\"_commonService.resetMenu\"\n (onMenuActive)=\"handleMenuActive($event)\"></app-menu-v2>\n </ng-container>\n </tn-custom-scrollbar>\n </div>\n <div class=\"search-area layout-menu-search-area\">\n <p-autoComplete class=\"search-input\" field=\"label\" [style]=\"{'width':'100%'}\"\n [suggestions]=\"searchMenuResult\" (completeMethod)=\"onSearchMenu($event)\" [autoHighlight]=\"true\"\n [placeholder]=\"'T\u00ECm ki\u1EBFm ch\u1EE9c n\u0103ng' | translate\" [delay]=\"200\" [scrollHeight]=\"'400px'\"\n [readonly]=\"!(menuModel && menuModel.length)\" [(ngModel)]=\"searchMenuInput\"\n (onSelect)=\"onSelectMenuSuggestion($event)\" (onFocus)=\"searchIconClick()\">\n <ng-template let-item pTemplate=\"item\">\n <div innerHTML=\"{{ item.label | highlight : searchMenuInput}}\"></div>\n </ng-template>\n </p-autoComplete>\n <span class=\"icon-search\" (click)=\"searchIconClick()\"><i class=\"pi pi-search\"></i></span>\n </div>\n </div>\n\n <div [class]=\"'layout-main'\" [ngClass]=\"{'no-header': _globalService.getHeaderState() ? false : true}\">\n <router-outlet></router-outlet>\n </div>\n\n <div class=\"layout-mask\"></div>\n\n <report-queue [header]=\"'Xu\u1EA5t d\u1EEF li\u1EC7u'\">\n </report-queue>\n</div>\n<div class=\"waiting-box\" [class.show]=\"waiting\">\n <div class=\"overlay\"></div>\n <div class=\"content-loading\">\n <div class=\"lds-ellipsis\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n <div class=\"message-loading\">\n <span *ngFor=\"let x of messageWaiting\">{{x}}</span>\n </div>\n </div>\n</div>\n<p-toast [position]=\"'top-right'\" [autoZIndex]=\"true\"></p-toast>\n<p-confirmDialog #cd [closable]=\"false\">\n <p-footer>\n <button #okButton type=\"button\" pButton icon=\"pi pi-check\" class=\"p-button-rounded p-button-text\"\n [label]=\"cd.acceptButtonLabel\" (keydown.shift.tab)=\"focusTrap($event, false)\"\n (click)=\"cd.accept()\"></button>\n <button *ngIf=\"showRejectConfirm\" #cancelButton type=\"button\" pButton\n class=\"p-button-rounded p-button-text p-button-secondary\" icon=\"pi pi-times\" [label]=\"cd.rejectButtonLabel\"\n (keydown.tab)=\"focusTrap($event, true)\" (click)=\"cd.reject()\"></button>\n </p-footer>\n</p-confirmDialog>\n<!-- <user-action-manager></user-action-manager> -->\n<permission-utils *ngIf=\"rootData.showPermissionUtils\"></permission-utils>\n<ng-template #abc>\n <div>1</div>\n</ng-template>\n<ng-template #def>\n <div>2</div>\n</ng-template>\n",
|
|
666
666
|
providers: [ComponentContextService, EntityMetadataService],
|
|
667
667
|
styles: [".layout-menu-search-area{position:relative}.icon-search{background-color:transparent;box-shadow:none;position:absolute;right:0;top:0;color:#888;width:30px;font-size:14px;height:100%;display:flex;align-items:center;justify-content:center}.layout-menu-static-inactive .search-area{margin-left:-303px}.layout-menu-container{overflow:hidden;display:flex;flex-direction:column;top:60px;bottom:0;height:auto}.layout-menu-block{display:flex;overflow:hidden;flex:1}.layout-menu-block>tn-custom-scrollbar{width:100%}::ng-deep .layout-menu-search-area .ui-inputtext{width:calc(100% + 1px);border-radius:0;border-color:#dadada;padding-right:40px}::ng-deep .layout-menu-search-area .ui-inputtext:not(:focus){box-shadow:none}::ng-deep .layout-menu-search-area input{width:100%;border-radius:0;border-left:0;border-right:0}::ng-deep .layout-menu-search-area .p-autocomplete-panel{max-width:100%}::ng-deep .layout-menu-search-area .p-autocomplete-item{white-space:normal}::ng-deep .layout-menu-search-area .p-autocomplete-item mark{background-color:var(--tn-primary-color);padding:0;color:#fff;border-radius:0}.waiting-box{position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;display:none}.waiting-box .overlay{background-color:red;background-color:hsla(0,0%,42.7%,.5019607843137255);width:100%;height:100%}.waiting-box .content-loading{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center}.waiting-box .content-loading .lds-ellipsis{display:inline-block;position:relative;width:80px;height:60px}.waiting-box .content-loading .lds-ellipsis div{position:absolute;top:33px;width:13px;height:13px;border-radius:50%;background:#fff;animation-timing-function:cubic-bezier(0,1,1,0)}.waiting-box .content-loading .lds-ellipsis div:first-child{left:8px;animation:lds-ellipsis1 .6s infinite}.waiting-box .content-loading .lds-ellipsis div:nth-child(2){left:8px;animation:lds-ellipsis2 .6s infinite}.waiting-box .content-loading .lds-ellipsis div:nth-child(3){left:32px;animation:lds-ellipsis2 .6s infinite}.waiting-box .content-loading .lds-ellipsis div:nth-child(4){left:56px;animation:lds-ellipsis3 .6s infinite}.waiting-box .message-loading{font-size:1.75em}.waiting-box .message-loading span{color:#fff;animation:message-opacity 1s infinite;margin-right:1px}.waiting-box .message-loading span:last-child{margin-right:0}.waiting-box .message-loading span:nth-child(16n+1){animation-delay:0;animation-delay:0s}.waiting-box .message-loading span:nth-child(16n+2){animation-delay:.1s}.waiting-box .message-loading span:nth-child(16n+3){animation-delay:.2s}.waiting-box .message-loading span:nth-child(16n+4){animation-delay:.3s}.waiting-box .message-loading span:nth-child(16n+5){animation-delay:.4s}.waiting-box .message-loading span:nth-child(16n+6){animation-delay:.5s}.waiting-box .message-loading span:nth-child(16n+7){animation-delay:.6s}.waiting-box .message-loading span:nth-child(16n+8){animation-delay:.7s}.waiting-box .message-loading span:nth-child(16n+9){animation-delay:.8s}.waiting-box .message-loading span:nth-child(16n+10){animation-delay:.9s}.waiting-box .message-loading span:nth-child(16n+11){animation-delay:1s}.waiting-box .message-loading span:nth-child(16n+12){animation-delay:1.1s}.waiting-box .message-loading span:nth-child(16n+13){animation-delay:1.2s}.waiting-box .message-loading span:nth-child(16n+14){animation-delay:1.3s}.waiting-box .message-loading span:nth-child(16n+15){animation-delay:1.4s}.waiting-box .message-loading span:nth-child(16n+16){animation-delay:1.5s}.waiting-box.show{display:block}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu-container .rootMenu,::ng-deep common-app-component .show-menu-icon-inactive .layout-menu-container .rootMenu>.icon,::ng-deep common-app-component .show-menu-icon-inactive .layout-menu-container .rootMenu>label,::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li .active-menuitem-2,::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a,::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a .menu-icon{transition:all .3s}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a i.menuitem-toggle-icon{transition:all .2s}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li{min-height:3.1em;position:relative}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a{position:relative}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a .menu-icon{position:absolute;left:0;top:0;bottom:0;display:flex;align-items:center;background-color:#fff}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a .menu-label{margin-left:40px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li i[level=\"1\"]:first-child{flex:0 0 40px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li a .menu-icon{padding-left:30px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li a .menu-icon i{margin-right:0!important}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul li a .menu-icon{padding-left:30px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul li a .menu-icon i{margin-right:0!important}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul ul li a .menu-icon{padding-left:30px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul ul li a .menu-icon i{margin-right:0!important}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul ul ul li a .menu-icon{padding-left:30px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul ul ul li a .menu-icon i{margin-right:0!important}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul ul ul ul li a .menu-icon{padding-left:30px}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li ul li ul ul ul ul li a .menu-icon i{margin-right:0!important}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu>.active-menuitem>.active-menuitem-routerlink>span.menu-icon:first-child{background-color:#e8e8e8!important}::ng-deep common-app-component .show-menu-icon-inactive .layout-menu li a:hover .menu-icon{background-color:#f4f4f4}@media (min-width:1025px){::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container{margin-left:-245px!important}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container .rootMenu>.icon{left:245px}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover{margin-left:0!important}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .layout-menu li a .menu-icon,::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .rootMenu>.icon{left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .layout-menu li ul li a .menu-icon{padding-left:30px;left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .layout-menu li ul li ul li a .menu-icon{padding-left:45px;left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .layout-menu li ul li ul ul li a .menu-icon{padding-left:60px;left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .layout-menu li ul li ul ul ul li a .menu-icon{padding-left:75px;left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover .layout-menu li ul li ul ul ul ul li a .menu-icon{padding-left:90px;left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover i.menuitem-toggle-icon{visibility:visible}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu-container:hover~.layout-main{margin-left:285px!important}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-main{margin-left:40px!important}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu li a .menu-icon{left:245px;padding-left:0}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu li a .menu-icon i{flex:0 0 40px}::ng-deep common-app-component .show-menu-icon-inactive.layout-menu-static-inactive .layout-menu li a i.menuitem-toggle-icon{visibility:hidden}}::ng-deep common-app-component .show-menu-icon-inactive .tn-l-left-menu-toggle{padding:13px}::ng-deep common-app-component .show-menu-icon-inactive .ripplelink>span>i{padding:0 10px!important}::ng-deep common-app-component .show-menu-icon-inactive .ripplelink>span>i .menuitem-toggle-icon{margin-left:10px!important}::ng-deep common-app-component .show-menu-icon-inactive .icon-search{width:38px}@keyframes lds-ellipsis1{0%{transform:scale(0)}to{transform:scale(1)}}@keyframes lds-ellipsis3{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes lds-ellipsis2{0%{transform:translate(0)}to{transform:translate(24px)}}@keyframes message-opacity{0%{opacity:1}50%{opacity:.5}to{opacity:1}}"]
|
|
668
668
|
},] }
|
|
@@ -700,6 +700,7 @@ CommonAppComponentComponent.ctorParameters = () => [
|
|
|
700
700
|
CommonAppComponentComponent.propDecorators = {
|
|
701
701
|
okButton: [{ type: ViewChild, args: ['okButton',] }],
|
|
702
702
|
cancelButton: [{ type: ViewChild, args: ['cancelButton',] }],
|
|
703
|
+
reportQueue: [{ type: ViewChild, args: [ReportQueueComponent,] }],
|
|
703
704
|
scrollBarMenu: [{ type: ViewChild, args: ['scrollbar',] }],
|
|
704
705
|
children: [{ type: ViewChildren, args: [TemplateRef,] }],
|
|
705
706
|
showQuickNote: [{ type: Input }],
|
|
@@ -708,4 +709,4 @@ CommonAppComponentComponent.propDecorators = {
|
|
|
708
709
|
onUserLoaded: [{ type: Output }],
|
|
709
710
|
handleShowPopupPermissionUtils: [{ type: HostListener, args: ['document:keypress', ['$event'],] }]
|
|
710
711
|
};
|
|
711
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFMUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUs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TTtZQUQ5QyxLQUFLO1lBeUJMLGNBQWM7WUFDZCxxQkFBcUI7WUFuQnJCLHlCQUF5QjtZQUV6Qix1QkFBdUI7WUFSdkIsY0FBYztZQUdkLHFCQUFxQjtZQW5CMUIsaUJBQWlCO1lBMkNaLGVBQWU7WUFiZixpQkFBaUI7WUFRakIsZUFBZTtZQU5mLHFCQUFxQjtZQUtyQixtQkFBbUI7WUFEbkIsV0FBVztZQWZYLGFBQWE7WUFxQmIsY0FBYztZQUhkLGlCQUFpQjtZQU1qQix3QkFBd0I7WUFkeEIsa0JBQWtCOzs7dUJBMkJ4QixTQUFTLFNBQUMsVUFBVTsyQkFDcEIsU0FBUyxTQUFDLGNBQWM7NEJBRXhCLFNBQVMsU0FBQyxXQUFXO3VCQUNyQixZQUFZLFNBQUMsV0FBVzs0QkFFeEIsS0FBSzs2QkFDTCxLQUFLOzZCQUNMLEtBQUs7MkJBRUwsTUFBTTs2Q0Fzb0JOLFlBQVksU0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBdXRoQ29uZmlnLCBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmltZU5HQ29uZmlnIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBFbnVtQXBwU3dpdGNoZXJDb2RlLCBFbnVtVHlwZVNwbGFzaCwgRW51bVVzZXJTb3VyY2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIFRuQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uLy4uL21vZGVscy90bi1jbGllbnQtY29tbWFuZCc7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvcmVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29yZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21pemVVaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b21pemUtdWkuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLWd1YXJkLWNoaWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VuZXJpY0d1YXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VVcGRhdGVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2UtdXBkYXRlZC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJPbmxpbmVEZXRhaWxzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXJvbmxpbmVkZXRhaWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcbmltcG9ydCAqIGFzIEhhbW1lciBmcm9tICdoYW1tZXJqcyc7XG5cbmRlY2xhcmUgbGV0IHRpbnltY2U6IGFueTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjb21tb24tYXBwLWNvbXBvbmVudCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbW1vbi1hcHAtY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbW1vbi1hcHAtY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDb21tb25BcHBDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbmNlbEJ1dHRvbicpIGNhbmNlbEJ1dHRvbjogRWxlbWVudFJlZjtcbiAgLy8gQFZpZXdDaGlsZChSZXBvcnRRdWV1ZUNvbXBvbmVudCkgcmVwb3J0UXVldWU6IFJlcG9ydFF1ZXVlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzY3JvbGxiYXInKSBzY3JvbGxCYXJNZW51OiBUbkN1c3RvbVNjcm9sbGJhckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICBASW5wdXQoKSBzaG93UXVpY2tOb3RlID0gdHJ1ZTtcbiAgQElucHV0KCkgYWxsb3dBbm9ueW1vdXMgPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1JlbmRlck1lbnUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblVzZXJMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuLy8gICByb3V0ZXJPdXRsZXQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIC8vIHJvb3RWZXJzaW9uRGVwbG95ID0gJzEuMyc7XG4gIGN1cnJlbnRSb3V0ZSA9ICcnO1xuICBwYWdlTG9hZGVkID0gZmFsc2U7XG4gIGZpcnN0VGltZUxvZ2luID0gZmFsc2U7XG4gIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xuICBwaW5uZWROb3RlRGF0YTogYW55O1xuICBwaW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gZmFsc2U7XG4gIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xuICBlbnZpcm9ubWVudDogYW55O1xuICBjYXB0dXJlTW9kZSA9IGZhbHNlO1xuICBwMDogYW55O1xuICBwMTogYW55O1xuICBsb2dnZWRJbiA9IGZhbHNlO1xuICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XG4gIG9ubHlTaG93TWFpbkNvbnRlbnQgPSBmYWxzZTtcblxuICBhcHBDb2RlID0gJyc7XG5cbiAgc2VhcmNoTWVudVJlc3VsdDogYW55W107XG4gIHNlYXJjaE1lbnVJbnB1dDogc3RyaW5nO1xuXG4gIHNob3dQaW5uZWRNZW51ID0gZmFsc2U7XG4gIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XG4gIGlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSBmYWxzZTtcbiAgbWVudU1vZGVsOiBhbnk7XG4gIHdhaXRpbmcgPSBmYWxzZTtcbiAgbWVzc2FnZVdhaXRpbmc6IHN0cmluZ1tdID0gW107XG4gIHNob3dSZWplY3RDb25maXJtID0gdHJ1ZTtcblxuICByZWFkb25seSBrZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9ICdwcHBwcHBwcHAnO1xuICBjdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XG4gIHJvb3REYXRhOiBhbnk7XG5cbiAgRW51bVR5cGVTcGxhc2ggPSBFbnVtVHlwZVNwbGFzaDtcbiAgbGF5b3V0TG9hZGluZ1BhZ2U6IHN0cmluZyA9IEVudW1UeXBlU3BsYXNoLk5FV19WMTtcbiAgZmF2SWNvbjogSFRNTExpbmtFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYXBwRmF2aWNvbicpO1xuICBpY29uID0gJyc7XG4gIHNob3dNZW51SWNvbkluYWN0aXZlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudCxcbiAgICBwdWJsaWMgX2dsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2UsXG4gICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3RpdGxlOiBUaXRsZSxcbiAgICBwcml2YXRlIF9zaWduYWxSU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlOiBTdG9yYWdlVXBkYXRlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxuICAgIHB1YmxpYyBfY29tcG9uZW50Q29udGV4dFNlcnZpY2U6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIF9jb3JlQ29uZmlnU2VydmljZTogQ29yZUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcbiAgICBwcml2YXRlIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZSxcbiAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICBwcml2YXRlIF9wcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxuICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfdXNlck9ubGluZURldGFpbHNTZXJ2aWNlOiBVc2VyT25saW5lRGV0YWlsc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfY3VzdG9taXplVWlTZXJ2aWNlOiBDdXN0b21pemVVaVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlO1xuICAgIHRoaXMuaWNvbiA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEubWFpbi5mYXZpY29uO1xuICAgIGlmICh0aGlzLmZhdkljb24pIHtcbiAgICAgIHRoaXMuZmF2SWNvbi5ocmVmID0gdGhpcy5pY29uO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5rZXlQcmVzc1Blcm1pc3Npb25VdGlscykge1xuICAgICAgdGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9IHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc3RvcmFnZSA9PT0gJ3Nlc3Npb25TdG9yYWdlJykge1xuICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShzZXNzaW9uU3RvcmFnZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuX3ByaW1lbmdDb25maWcuc2V0VHJhbnNsYXRpb24oe1xuICAgICAgZGF5TmFtZXM6IFsnQ2jhu6cgbmjhuq10JywgJ1Ro4bupIDInLCAnVGjhu6kgMycsICdUaOG7qSA0JywgJ1Ro4bupIDUnLCAnVGjhu6kgNicsICdUaOG7qSA3J10sXG4gICAgICBkYXlOYW1lc1Nob3J0OiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXG4gICAgICBkYXlOYW1lc01pbjogWydDTicsICdUaDInLCAnVGgzJywgJ1RoNCcsICdUaDUnLCAnVGg2JywgJ1RoNyddLFxuICAgICAgbW9udGhOYW1lczogW1xuICAgICAgICAnVGjDoW5nIDEnLCAnVGjDoW5nIDInLCAnVGjDoW5nIDMnLCAnVGjDoW5nIDQnLCAnVGjDoW5nIDUnLCAnVGjDoW5nIDYnLCAnVGjDoW5nIDcnLCAnVGjDoW5nIDgnLCAnVGjDoW5nIDknLCAnVGjDoW5nIDEwJywgJ1Row6FuZyAxMScsICdUaMOhbmcgMTInXG4gICAgICBdLFxuICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXG4gICAgICB0b2RheTogJ0jDtG0gbmF5JyxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpKSB7XG4gICAgICB0aGlzLl9jdXN0b21pemVVaVNlcnZpY2Uuc2V0Q3VzdG9taXplKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5hZGRSb290Q29udGV4dChcbiAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxuICAgICAgX2FjdGl2YXRlZFJvdXRlLFxuICAgICk7XG5cbiAgICB0aGlzLl90aXRsZS5zZXRUaXRsZSh0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4ub3duZXIpO1xuXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ3ZuJyk7XG4gICAgdGhpcy50cmFuc2xhdGUudXNlKCd2bicpO1xuXG4gICAgdGhpcy5pbml0VGlueU1jZSgpO1xuXG4gICAgY29uc3QgY2ZnID0gdGhpcy5nZXRDb25maWdBdXRoZW4oKTtcbiAgICAvLyBDaHV54buDbiBzYW5nIHNlc3Npb24gc3RvcmFnZSwgbuG6v3Ug4buVbiB0aMOsIHjDs2EgZMOybmcgbsOgeSDEkWlcbiAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0U3RvcmFnZSh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRTdG9yYWdlKCkpO1xuICAgIHRoaXMuaW5qZWN0Q29uZmlnKGNmZyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKTtcblxuICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3BlcnNvbmFsaXplJyk7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TWVudUljb25JbmFjdGl2ZSA9IHRoaXMuZW52aXJvbm1lbnQuc2hvd01lbnVJY29uSW5hY3RpdmUgPz8gZmFsc2U7XG5cbiAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoXG4gICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCxcbiAgICAgIGFzeW5jIChyczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5zZXR1cFN5bmNDYWNoZUVudGl0eU1ldGFkYXRhKCk7XG5cbiAgICAgICAgLy8gdGhpcy5fcm91dGVyLmNvbmZpZy5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcbiAgICAgICAgY29uc3QgY2hlY2tGaXJzdExvZ2luID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmlzQ2hlY2tGaXJzdFRpbWVMb2dpbiAmJiB0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLmlzRmlyc3RMb2dpbjtcbiAgICAgICAgY29uc3QgY2hlY2tFeHBpcmF0aW9uUGFzc3dvcmQgPSB0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLmlzRXhwaXJhdGlvblBhc3N3b3JkO1xuICAgICAgICBpZiAoY2hlY2tGaXJzdExvZ2luIHx8IGNoZWNrRXhwaXJhdGlvblBhc3N3b3JkKSB7XG4gICAgICAgICAgY29uc3QgZG9tYWluID0gdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uYXBwRG9tYWluO1xuICAgICAgICAgIGxldCBzdWJQYXRoID0gJy91c2VyJztcbiAgICAgICAgICAvLyB2w6wgREhHVFZUIGTDuW5nIMSR4buTbmcgdGjhu51pIHVzZXJ2NSB2w6AgdXNlcnY0XG4gICAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQubWFUcnVvbmcgPT0gJ0RIR1RWVCcpIHtcbiAgICAgICAgICAgIHN1YlBhdGggPSAnL3VzZXJ2NSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGxpbmtSZWRpcmVjdCA9IGAke2RvbWFpbn0ke3N1YlBhdGh9L2NoYW5nZS1wYXNzd29yZGA7XG4gICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiAhPSBsaW5rUmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY2hlY2tGaXJzdExvZ2luKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiB2dWkgbMOybmcgxJHhu5VpIG3huq10IGto4bqpdSBt4bq3YyDEkeG7i25oIHRyb25nIGzhuqduIMSRxINuZyBuaOG6rXAgxJHhuqd1IHRpw6puIMSR4buDIHTEg25nIHTDrW5oIGLhuqNvIG3huq10IGPhu6dhIGjhu4cgdGjhu5FuZyEnKS50aGVuKGFzeW5jIChyczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmNoYW5nZUZpcnN0VGltZUxvZ2luKHRoaXMucm9vdERhdGEuY3VycmVudFVzZXIudXNlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfSU5GT19DSEFOR0VELCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gbGlua1JlZGlyZWN0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrRXhwaXJhdGlvblBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKGBN4bqtdCBraOG6qXUgxJHDoyBxdcOhICR7dGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmV4cGlyYXRpb25QYXNzd29yZE1vbnRoID8/IDZ9IHRow6FuZyBjaMawYSB0aGF5IMSR4buVaS4gQuG6oW4gdnVpIGzDsm5nIMSR4buVaSBt4bqtdCBraOG6qXUgxJHhu4MgdMSDbmcgdMOtbmggYuG6o28gbeG6rXQgY+G7p2EgaOG7hyB0aOG7kW5nIWApLnRoZW4oYXN5bmMgKHJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gbGlua1JlZGlyZWN0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlyc3RUaW1lTG9naW4pIHtcbiAgICAgICAgICAvLyBUaMOqbSB2w6BvIMSR4buDIMSRw6FuaCBk4bqldSBs4bqnbiBk4bqndSBsb2dpbiA9PiDEkeG7gyB44butIGzDvVxuICAgICAgICAgIC8vIFVzZXJBIMSRYWcg4bufIG3DoG4gaMOsbmggMSA9PiDEkcSDbmcgeHXhuqV0ID0+IMSRxINuZyBuaOG6rXAgdsOgbyB0w6BpIGtob+G6o24gVXNlckIga2jDtG5nIGPDsyBxdXnhu4FuIG3DoG4gaMOsbmggMSA9PiByZWRpcmVjdCB24buBIFwiL1wiXG4gICAgICAgICAgLy8gdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudF91c2VyX2luZm8nKTtcbiAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdmaXJzdFRpbWVMb2dpbicsIHRydWUpO1xuICAgICAgICAgIGNvbnN0IG9sZFVybCA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKTtcblxuICAgICAgICAgIGlmIChvbGRVcmwgJiYgb2xkVXJsICE9IHRvcC5sb2NhdGlvbi5ocmVmICsgJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRVcmwnKTtcbiAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7b2xkVXJsfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudD8udXNpbmdEZWZhdWx0UmVkaXJlY3RCeVNvdXJjZSkge1xuICAgICAgICAgICAgICBjb25zdCBhcHBTd2l0Y2hlciA9IHRoaXMuZW52aXJvbm1lbnQ/LmFwcE1ldGFkYXRhPy5hcHBTd2l0Y2hlciA/PyBbXTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucm9vdERhdGEuY3VycmVudFVzZXIuc291cmNlID09IEVudW1Vc2VyU291cmNlLkhPQ19WSUVOKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZ0hvY1ZpZW4gPSBhcHBTd2l0Y2hlci5maW5kKHggPT4geC5jb2RlLnRvVXBwZXJDYXNlKCkgPT0gRW51bUFwcFN3aXRjaGVyQ29kZS5DT05HTkdVT0lEVU5HKTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZ0hvY1ZpZW4pIHtcbiAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7Y29uZ0hvY1ZpZW4udXJsfS8ke2NvbmdIb2NWaWVuLmRlZmF1bHRSZWRpcmVjdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlZmF1bHRSZWRpcmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2UuaW5pdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXG4gICAgICAgICAgICAgICdDb25zaXN0ZW5jeUh1YicsXG4gICAgICAgICAgICAgICdCcm9hZGNhc3RNZXNzYWdlJyxcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dGhvcml6ZUNhY2hlLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxuICAgICAgICAgICAgICAnTm90aWZpY2F0aW9uSHViJyxcbiAgICAgICAgICAgICAgJ1JlZnJlc2hGb3JVcGRhdGUnLFxuICAgICAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT1JDRV9SRUxPQUQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVQYWdlcyA9IHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuZGVmYXVsdE1vZHVsZVBhZ2VzO1xuICAgIGlmIChkZWZhdWx0TW9kdWxlUGFnZXMgJiYgZGVmYXVsdE1vZHVsZVBhZ2VzLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5mb3JFYWNoKG0gPT4ge1xuICAgICAgICBjb25zdCBwYWdlID0gZGVmYXVsdE1vZHVsZVBhZ2VzLmZpbmQocCA9PiBwLmNvZGUgPT0gbS5jb2RlKTtcbiAgICAgICAgaWYgKHBhZ2UgJiYgcGFnZS5kZWZhdWx0UGFnZSkge1xuICAgICAgICAgIG0udXJsID0gcGFnZS5kZWZhdWx0UGFnZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgZGVsZXRlIEhhbW1lci5kZWZhdWx0cy5jc3NQcm9wcy51c2VyU2VsZWN0O1xuICAgIH1cblxuICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnR09fSE9NRScsIGRhdGEgPT4ge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcbiAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1RPR0dMRV9MQVlPVVQnLCBkYXRhID0+IHtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0ge307XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vbmx5U2hvd01haW5Db250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gZGF0YS5vbmx5U2hvd01haW5Db250ZW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdNQUlOX0NPTlRFTlRfT05MWScsIHJzID0+IHtcbiAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHJzO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfUkVKRUNUX0NPTkZJUk0sIGRhdGEgPT4ge1xuICAgICAgdGhpcy5zaG93UmVqZWN0Q29uZmlybSA9IGRhdGE7XG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiB8fCB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiA9PSAnJykge1xuICAgICAgdGhpcy5sYXlvdXRMb2FkaW5nUGFnZSA9IEVudW1UeXBlU3BsYXNoLkRFRkFVTFQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5sYXlvdXRMb2FkaW5nUGFnZSA9IHRoaXMuZW52aXJvbm1lbnQuc3BsYXNoU2NyZWVuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NVc2VySGVhcnRCZWF0KCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgLy8gU2V0IGR5bmFtaWMgYWxsIGNoaWxkcmVuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG4gICAgdGhpcy5yb290RGF0YSA9IHJvb3QuZGF0YTtcbiAgICByb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4geC5jb2RlLnRvTG93ZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvTG93ZXJDYXNlKCkpO1xuICAgIHJvb3QuZGF0YS5hcHBPcmlnaW4gPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke3Jvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xuICAgIHJvb3QuZGF0YS5hbGxvd0Fub255bW91cyA9IHRoaXMuYWxsb3dBbm9ueW1vdXM7XG5cbiAgICB0aGlzLl9yb3V0ZXIuY29uZmlnLmZvckVhY2gocm91dGUgPT4gdGhpcy5hZGRHdWFyZChyb3V0ZSkpO1xuXG4gICAgLy8gZ2V0IGN1cnJlbnQgVXNlclxuICAgIHRoaXMuX3VzZXJTZXJ2aWNlLnBvcHVsYXRlQ3VycmVudFVzZXIoKTtcbiAgICB0aGlzLm9uVXNlckxvYWRlZC5lbWl0KCk7XG4gICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULk5FRURfQ0xFQVJfUEVSTUlTU0lPTl9DQUNIRSwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoW10pO1xuICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB0cm9uZyBsw7pjIGNsZWFyIGNhY2hlIHBow6JuIHF1eeG7gW4nKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmdldEFsbEJhc2VQZXJtaXNzaW9uKCk7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5maXJlUmVwbGF5RXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQpO1xuICAgIH0pO1xuICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV0xFRlQsIChlKSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV1JJR0hULCAoZSkgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIHNlbmQgY3VycmVudCB2ZXJzaW9uIHRvIHRuIGNsaWVudFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKDxUbkNsaWVudENvbW1hbmQ+e1xuICAgICAgICBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuU3luY1ZlcmlvblRuQ2xpZW50LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLnZlcnNpb24sXG4gICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbiArICcvJyArIHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludFVwZGF0ZVxuICAgICAgICB9LFxuICAgICAgICBrZXk6IHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXlcbiAgICAgIH0pO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsID0gW107XG5cbiAgICAvLyBzdWJzY3JpYmUgY2hhbmdlIGVudGl0eSBtZXRhZGF0YVxuICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5zdWJzY3JpYmVDaGFuZ2VkTG9jYWxTdG9yYWdlKCdLRVlfRU5USVRZX01FVERBVEFfVVBEQVRFRCcsIChycykgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ2VudGl0eSBtZXRhZGF0YSBjaGFuZ2VkJywgcnMpO1xuICAgIH0pO1xuXG4gICAgLy8gdHJpZ2dlciB1cGRhdGUgc3RvcmFnZSBrZXlcbiAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwgZGF0YSA9PiB7XG4gICAgICB0aGlzLndhaXRpbmcgPSBkYXRhLnNob3c7XG4gICAgICB0aGlzLm1lc3NhZ2VXYWl0aW5nID0gWy4uLmRhdGEubWVzc2FnZV07XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgIGlmICh4IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIHRoaXMucm9vdERhdGEuaHR0cFJlcXVlc3RMaXN0ID0gW107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBu4bq/dSBhbGxvdyBhbm9ueW1vdXMgdGjDrCBsb2FkIHJhIGPDoWMgcGjDom4gaOG7hyBjaG8gcGjDqXAgdsOgbyBraMO0bmcgY+G6p24gxJHEg25nIG5o4bqtcFxuICAgIGlmICh0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XG4gICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcblxuICAgICAgcm9vdC5zdWJzY3JpYmUoJ0xPR0lOJywgKCkgPT4ge1xuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xuICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2NkLmRldGFjaCgpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcbiAgICAvLyByb290LnJlcG9ydFF1ZXVlID0gdGhpcy5yZXBvcnRRdWV1ZTtcbiAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xuICB9XG5cbiAgZGVmYXVsdFJlZGlyZWN0KCkge1xuICAgIC8vIGNoZWNrIGRlZmF1bHQgcmVkaXJlY3RcbiAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgY29uc3QgYXBwU2V0dGluZyA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmRhdGEuY3VycmVudEFwcE1ldGFkYXRhO1xuICAgICAgaWYgKCFhcHBTZXR0aW5nICYmIHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmRlZmF1bHRSZWRpcmVjdCAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtcbiAgICAgICAgICB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5kZWZhdWx0UmVkaXJlY3RcbiAgICAgICAgXSk7XG4gICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGF0aFRvQ2hlY2sgPSB0aGlzLmVudmlyb25tZW50LmVuYWJsZUJhc2VIcmVmID8gYC8ke2FwcFNldHRpbmcuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xuXG4gICAgICBpZiAoKGxvY2F0aW9uLnBhdGhuYW1lID09PSAnLycgfHwgbG9jYXRpb24ucGF0aG5hbWUgPT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSBwYXRoVG9DaGVjaykpIHtcbiAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCd1c2VyIG5vdCB2YWxpZCB0b2tlbicsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpKTtcbiAgICAgIC8vIFRPRE86IE5hbU5IIFjhu60gbMO9IHThuqFtIGNobyB0csaw4budbmcgaOG7o3AgxJHEg25nIG5o4bqtcCBs4bqnbiDEkeG6p3UgbmjGsG5nIGNo4bqheSDEkeG6v24gxJHDonkgbcOgIGFjY2VzcyB0b2tlbiB24bqrbiBraMO0bmcgaOG7o3AgbOG7h1xuICAgICAgLy8gWOG7rSBsw70gdHJp4buHdCDEkeG7gyBi4bqxbmcgY8OhY2ggdMOsbSBQQSBi4bqvdCBldmVudCBj4bunYSBhbmd1bGFyMiBvaWRjIMSR4buDIHjhu60gbMO9IHRyxrDhu5tjIGtoaSDEkeG6v24gYsaw4bubYyBkZWZhdWx0IHJlZGlyZWN0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdG9wLmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfSwgNTAwMCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5fY2RbJ2Rlc3Ryb3llZCddKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdleGNlcHRpb24gb24gZGV0ZWN0IGNoYW5nZScsIGUpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdXRob3JpemVDYWNoZSgpIHtcbiAgICBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiAvXkFVVEhPUklaQVRJT04vLnRlc3QoaXRlbSkpXG4gICAgICAuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShpdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZm9jdXNUcmFwKGV2ZW50LCBkaXJlY3QpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChkaXJlY3QpIHtcbiAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBpbml0VGlueU1jZSgpIHtcbiAgICB0aW55bWNlLmJhc2VVUkwgPSAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZSc7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKSB7XG4gICAgLy8gZm9yIGZpcnN0IGxvZ2luXG4gICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmV2ZW50cy5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlY2VpdmVkJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW4gPSB0cnVlO1xuICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXG4gICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSxcbiAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChldnQudHlwZSA9PT0gJ3Rva2VuX2V4cGlyZXMnKSB7XG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS50cnlMb2dpbigpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT09ICdsb2dvdXQnKSB7XG4gICAgICAgIC8vIGNsZWFudXAgc3RvcmFnZVxuICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhckxvY2FsVG9rZW4oKTtcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UucmV2b2tlVG9rZW5BbmRMb2dvdXQobnVsbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChldnQudHlwZSA9PSAnc2Vzc2lvbl90ZXJtaW5hdGVkJykge1xuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50X3VzZXJfaW5mbycpO1xuICAgICAgICAvLyBsb2dvdXRcbiAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICdkaXNjb3ZlcnlfZG9jdW1lbnRfbG9hZGVkJykge1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlZnJlc2hlZCcpIHtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnbG9naW4gZXZlbnQnLCBldnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCgpO1xuICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXG4gICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW5cbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZW5hYmxlU2lsZW50UmVmcmVzaCkge1xuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJykpIHtcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY3VycmVudFVybCcsIHRvcC5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZGVmYXVsdEN1c3RvbUxvZ2luKSB7XG4gICAgICAgIGNvbnN0IGxvZ2luVXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmN1c3RvbUxvZ2luQ29uZmlnPy5kb21haW59P2NsaWVudF9pZD0ke3RoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5jdXN0b21Mb2dpbkNvbmZpZz8uY2xpZW50SWR9JnNjb3BlPW9wZW5pZCZyZWRpcmVjdF91cmk9JHt0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuY3VzdG9tTG9naW5Db25maWc/LnJlZGlyZWN0VXJpfSZyZXNwb25zZV90eXBlPWNvZGVgO1xuICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGxvZ2luVXJsO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRUcnlMb2dpbigpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xuICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHThu5VuZyBo4bujcCBiaeG6v24gcG9zaXRpb25cbiAgICBpZiAodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnbXlpdGVtJykpIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudCgnUE9TSVRJT05fTE9BREVEJywgdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnbXlpdGVtJykpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIGfhu41pIGFwaSDEkeG7gyB04buVbmcgaOG7o3AgZOG7ryBsaXVlamUuLi5cbiAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudCgnUE9TSVRJT05fTE9BREVEJywge30pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0Q29uZmlnKGNmZzogQXV0aENvbmZpZykge1xuICAgIHRoaXMuX29hdXRoU2VydmljZS5jb25maWd1cmUoY2ZnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlnQXV0aGVuKCkge1xuICAgIGNvbnN0IGNmZyA9IHRoaXMuX2NvcmVDb25maWdTZXJ2aWNlLmdldEF1dGhDb25maWcoKTtcbiAgICBjb25zdCB0eXBlTG9naW4gPSB0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuYXV0aGVuVHlwZTtcbiAgICBpZiAodHlwZUxvZ2luICYmIHR5cGVMb2dpbi5pbmNsdWRlcygnaW1wbGljaXQnKSkge1xuICAgICAgcmV0dXJuIGNmZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjZmcucmVzcG9uc2VUeXBlID0gJ2NvZGUnO1xuICAgICAgcmV0dXJuIGNmZztcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNZW51QWN0aXZlKHRvcCkge1xuICAgIHRoaXMuc2Nyb2xsQmFyTWVudS5zY3JvbGxUb1RvcCh0b3ApO1xuICB9XG5cbiAgY2xvc2VUYWJXaW5kb3coKSB7XG4gICAgY29uc29sZS5sb2coJ2Nsb3NlVGFiV2luZG93Jyk7XG4gIH1cblxuICBnZXRBcHBTd2l0Y2hlclVybChhcHBDb2RlKSB7XG4gICAgY29uc3QgYXBwID0gdGhpcy5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4geC5jb2RlLnRvTG93ZXJDYXNlKCkgPT0gYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoYXBwKSB7XG4gICAgICByZXR1cm4gYXBwLnVybDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB1c2UtbGlmZS1jeWNsZS1pbnRlcmZhY2VcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX1RBU0tfREVUQUlMX0NPTVBPTkVOVCk7XG4gIH1cblxuICAvLyBzZWFyY2ggbWVudVxuICBvblNlYXJjaE1lbnUoZXZlbnQpIHtcbiAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSBbXTtcblxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnF1ZXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hNZW51UmVzdWx0ID0gdGhpcy5nZXRTZWFyY2hNZW51UmVzdWx0KGV2ZW50LnF1ZXJ5KTtcbiAgfVxuXG4gIGdldFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgdGhpcy5yZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkLCB0aGlzLm1lbnVNb2RlbCwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQ6IHN0cmluZywgbGlzdFRvR2V0OiBhbnlbXSwgbGlzdFRvUHVzaDogYW55W10pIHtcbiAgICBsaXN0VG9HZXQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgaXRlbS5pdGVtcywgbGlzdFRvUHVzaCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICgodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGl0ZW0ubGFiZWwpLmluZGV4T2YodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGtleXdvcmQpKSA+PSAwKSkge1xuICAgICAgICBsaXN0VG9QdXNoLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIG5vbkFjY2VudFZpZXRuYW1lc2Uoc3RyKSB7XG4gICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gICAgIFdlIGNhbiBhbHNvIHVzZSB0aGlzIGluc3RlYWQgb2YgZnJvbSBsaW5lIDExIHRvIGxpbmUgMTdcbiAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTB8XFx1MDBFMXxcXHUxRUExfFxcdTFFQTN8XFx1MDBFM3xcXHUwMEUyfFxcdTFFQTd8XFx1MUVBNXxcXHUxRUFEfFxcdTFFQTl8XFx1MUVBQnxcXHUwMTAzfFxcdTFFQjF8XFx1MUVBRnxcXHUxRUI3fFxcdTFFQjN8XFx1MUVCNS9nLCBcImFcIik7XG4gICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEU4fFxcdTAwRTl8XFx1MUVCOXxcXHUxRUJCfFxcdTFFQkR8XFx1MDBFQXxcXHUxRUMxfFxcdTFFQkZ8XFx1MUVDN3xcXHUxRUMzfFxcdTFFQzUvZywgXCJlXCIpO1xuICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFQ3xcXHUwMEVEfFxcdTFFQ0J8XFx1MUVDOXxcXHUwMTI5L2csIFwiaVwiKTtcbiAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjJ8XFx1MDBGM3xcXHUxRUNEfFxcdTFFQ0Z8XFx1MDBGNXxcXHUwMEY0fFxcdTFFRDN8XFx1MUVEMXxcXHUxRUQ5fFxcdTFFRDV8XFx1MUVEN3xcXHUwMUExfFxcdTFFRER8XFx1MUVEQnxcXHUxRUUzfFxcdTFFREZ8XFx1MUVFMS9nLCBcIm9cIik7XG4gICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEY5fFxcdTAwRkF8XFx1MUVFNXxcXHUxRUU3fFxcdTAxNjl8XFx1MDFCMHxcXHUxRUVCfFxcdTFFRTl8XFx1MUVGMXxcXHUxRUVEfFxcdTFFRUYvZywgXCJ1XCIpO1xuICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MUVGM3xcXHUwMEZEfFxcdTFFRjV8XFx1MUVGN3xcXHUxRUY5L2csIFwieVwiKTtcbiAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAxMTEvZywgXCJkXCIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DoHzDoXzhuqF84bqjfMOjfMOifOG6p3zhuqV84bqtfOG6qXzhuqt8xIN84bqxfOG6r3zhurd84bqzfOG6tS9nLCAnYScpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL8OsfMOtfOG7i3zhu4l8xKkvZywgJ2knKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7J8w7N84buNfOG7j3zDtXzDtHzhu5N84buRfOG7mXzhu5V84buXfMahfOG7nXzhu5t84bujfOG7n3zhu6EvZywgJ28nKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL+G7s3zDvXzhu7V84bu3fOG7uS9nLCAneScpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/EkS9nLCAnZCcpO1xuICAgIC8vIFNvbWUgc3lzdGVtIGVuY29kZSB2aWV0bmFtZXNlIGNvbWJpbmluZyBhY2NlbnQgYXMgaW5kaXZpZHVhbCB1dGYtOCBjaGFyYWN0ZXJzXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAzMDB8XFx1MDMwMXxcXHUwMzAzfFxcdTAzMDl8XFx1MDMyMy9nLCAnJyk7IC8vIEh1eeG7gW4gc+G6r2MgaOG7j2kgbmfDoyBu4bq3bmdcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDJDNnxcXHUwMzA2fFxcdTAzMUIvZywgJycpOyAvLyDDgiwgw4osIMSCLCDGoCwgxq9cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgb25TZWxlY3RNZW51U3VnZ2VzdGlvbihtZW51SXRlbU9iaikge1xuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKG1lbnVJdGVtT2JqLnJvdXRlckxpbmspO1xuICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcbiAgfVxuXG4gIG9uQmx1clNlYXJjaE1lbnVJbnB1dChldmVudCkge1xuICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlzSW5QaW5uZWRNZW51KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSAnJztcbiAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XG4gIH1cblxuICBvbkZvY3VzU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XG4gICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gdHJ1ZTtcbiAgfVxuXG4gIHNlYXJjaEljb25DbGljaygpIHtcbiAgICBpZiAodGhpcy5fY29tbW9uU2VydmljZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlKSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5cHJlc3MnLCBbJyRldmVudCddKVxuICBoYW5kbGVTaG93UG9wdXBQZXJtaXNzaW9uVXRpbHMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlsc1t0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4XSA9PT0gZXZlbnQua2V5KSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9PSB0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XG4gICAgICAgIHRoaXMucm9vdERhdGEuc2hvd1Blcm1pc3Npb25VdGlscyA9IHRydWU7XG5cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4Kys7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRHdWFyZChyb3V0ZTogUm91dGUpOiB2b2lkIHtcbiAgICBpZiAocm91dGUucGF0aCA9PT0gJycgfHwgcm91dGUucGF0aCA9PT0gJy8nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbikge1xuICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID0gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA/IHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgOiBbR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZSA9IHJvdXRlLmNhbkFjdGl2YXRlID8gcm91dGUuY2FuQWN0aXZhdGUgOiBbR2VuZXJpY0d1YXJkU2VydmljZV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb2Nlc3NVc2VySGVhcnRCZWF0KCkge1xuICAgIGNvbnN0IGhlYXJ0QmVhdCA9IHRoaXMuX3VzZXJPbmxpbmVEZXRhaWxzU2VydmljZS5nZXRIZWFydEJlYXRTZXR0aW5nKCk7XG4gICAgaWYgKGhlYXJ0QmVhdC5kaXNhYmxlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuX3VzZXJPbmxpbmVEZXRhaWxzU2VydmljZS5zZW5kSGVhcnRCZWF0KCkudGhlbihycyA9PiB7XG4gICAgICAgIGlmIChoZWFydEJlYXQuZGVidWcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnaGVhcnRiZWF0OicsIG5ldyBEYXRlKCksIG51bGwsIHJzKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgaWYgKGhlYXJ0QmVhdC5kZWJ1Zykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2hlYXJ0YmVhdDonLCBuZXcgRGF0ZSgpLCBudWxsLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBoZWFydEJlYXQuaW50ZXJ2YWwgKiAxMDAwKTtcbiAgICB0aGlzLnByb2Nlc3NCQ2FjaGUoKTtcbiAgfVxuXG4gIHByb2Nlc3NCQ2FjaGUoKSB7XG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5kb1Byb2Nlc3NCQ2FjaGUoKTtcbiAgICB9LCA2MDAwMDApO1xuXG4gICAgdGhpcy5kb1Byb2Nlc3NCQ2FjaGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZG9Qcm9jZXNzQkNhY2hlKCkge1xuICAgIGNvbnN0IGl0ZW1MYXN0TW9kaWZpZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmFnZV9sYXN0bW9kaWZpZWQnKTtcbiAgICBpZiAoaXRlbUxhc3RNb2RpZmllZCkge1xuICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShpdGVtTGFzdE1vZGlmaWVkKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKCdiY2FjaGVfJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmpba2V5XSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShvYmpba2V5XSk7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbW1vblNlcnZpY2UuaXNNb3JlVGhhbkRheXNGcm9tTm93KGR0KSkge1xuICAgICAgICAgICAgLy8gY2xlYXIgc3RvcmFnZVxuICAgICAgICAgICAgb2JqW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzdG9yYWdlX2xhc3Rtb2RpZmllZCcsIEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
|
|
712
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFTLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQVdsRyxNQUFNLE9BQU8sMkJBQTJCO0lBcURwQyxZQUM4QixRQUFRLEVBQzNCLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzdCLFFBQW1CLEVBQ2xCLFNBQTJCLEVBQzNCLGFBQTJCLEVBQzNCLGNBQTZCLEVBQzdCLFlBQXlCLEVBQ3pCLE9BQWUsRUFDZixNQUFhLEVBQ2IsZUFBK0IsRUFDL0Isc0JBQTZDLEVBQzdDLG1CQUE4QyxFQUMvQyx3QkFBaUQsRUFDaEQsZUFBK0IsRUFDaEMsc0JBQTZDLEVBQzVDLEdBQXNCLEVBQ3RCLGdCQUFpQyxFQUNqQyxrQkFBcUMsRUFDbkMsZ0JBQWlDLEVBQ25DLHNCQUE2QyxFQUM3QyxvQkFBeUMsRUFDekMsWUFBeUIsRUFDekIsY0FBNkIsRUFDN0IsZUFBK0IsRUFDL0Isa0JBQXFDLEVBQ3JDLHlCQUFtRCxFQUNuRCxtQkFBdUM7O1FBM0JyQixhQUFRLEdBQVIsUUFBUSxDQUFBO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQU87UUFDYixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBQy9DLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQ2hDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDNUMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ25DLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDbkMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFDbkQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQTFFMUMsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFckIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpDLG9CQUFlLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFDM0QsNkJBQTZCO1FBQzdCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLDhCQUF5QixHQUFHLElBQUksQ0FBQztRQUVqQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUU1QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBS2IsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBRS9CLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDOUIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWhCLDRCQUF1QixHQUFHLFdBQVcsQ0FBQztRQUMvQyx5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFHekIsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFDaEMsc0JBQWlCLEdBQVcsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUNsRCxZQUFPLEdBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RFLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFnQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDakM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUM7U0FDM0U7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLLGdCQUFnQixFQUFFO1lBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ25EO2FBQ0k7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqRDtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1lBQy9CLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUM1RSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDL0QsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQzdELFVBQVUsRUFBRTtnQkFDUixTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7YUFDeEk7WUFDRCxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUM1RixLQUFLLEVBQUUsU0FBUztTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN2RTtRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQ25DLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsZUFBZSxDQUNsQixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsMERBQTBEO1FBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDdkQ7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixtQ0FBSSxLQUFLLENBQUM7UUFFM0UsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ2hDLENBQU8sRUFBTyxFQUFFLEVBQUU7O1lBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFFM0QsOERBQThEO1lBQzlELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBQ2hJLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7WUFDL0UsSUFBSSxlQUFlLElBQUksdUJBQXVCLEVBQUU7Z0JBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQkFDdkQsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN0Qiw0Q0FBNEM7Z0JBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksUUFBUSxFQUFFO29CQUN2QyxPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUN2QjtnQkFDRCxNQUFNLFlBQVksR0FBRyxHQUFHLE1BQU0sR0FBRyxPQUFPLGtCQUFrQixDQUFDO2dCQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUU7b0JBQzdDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7O3dCQUNaLElBQUksZUFBZSxFQUFFOzRCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG9HQUFvRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQU8sRUFBTyxFQUFFLEVBQUU7Z0NBQzNKLElBQUksQ0FBQyxFQUFFLEVBQUU7b0NBQ0wsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUMvRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7b0NBQ3RGLE9BQU87aUNBQ1Y7Z0NBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQzs0QkFDL0MsQ0FBQyxDQUFBLENBQUMsQ0FBQzt5QkFDTjs2QkFDSSxJQUFJLHVCQUF1QixFQUFFOzRCQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixNQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLG1DQUFJLENBQUMsb0ZBQW9GLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBTyxFQUFPLEVBQUUsRUFBRTtnQ0FDbE8sSUFBSSxDQUFDLEVBQUUsRUFBRTtvQ0FDTCxPQUFPO2lDQUNWO2dDQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7NEJBQy9DLENBQUMsQ0FBQSxDQUFDLENBQUM7eUJBQ047b0JBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNaO2FBQ0o7WUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JCLGlEQUFpRDtnQkFDakQsb0hBQW9IO2dCQUNwSCx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFMUQsSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzlDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7aUJBQ25DO3FCQUNJO29CQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7b0JBQ2hDLElBQUksTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSw0QkFBNEIsRUFBRTt3QkFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsV0FBVywwQ0FBRSxXQUFXLG1DQUFJLEVBQUUsQ0FBQzt3QkFDckUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRTs0QkFDN0QsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7NEJBQ3JHLElBQUksV0FBVyxFQUFFO2dDQUNiLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7NkJBQzNFO3lCQUNKO3FCQUNKO2lCQUNKO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQzFCO1lBQ0QsSUFBSTtnQkFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUN0QixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ3RDLENBQUM7b0JBRUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQ3RCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLEVBQUU7d0JBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTs0QkFDekYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUNoRjtvQkFDTCxDQUFDLENBQ0osQ0FBQztnQkFDTixDQUFDLENBQUMsQ0FBQzthQUNOO1lBQ0QsT0FBTyxDQUFDLEVBQUU7YUFDVDtRQUNMLENBQUMsQ0FBQSxDQUNKLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQzdGLElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUMxQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7aUJBQzVCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1AsSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNiO1lBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2FBQ3ZEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzlELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDckYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7U0FDbkQ7YUFDSTtZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztTQUMxRDtRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0I7UUFDZCwyQkFBMkI7SUFDL0IsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNySCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRS9DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUzRCxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEdBQVMsRUFBRTtZQUNqRyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7YUFDaEY7WUFDRCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUEsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkYsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO2lCQUNJLElBQUksUUFBUSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEYsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFO2dCQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO2lCQUNJLElBQUksUUFBUSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0NBQW9DO1FBQ3BDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFrQjtnQkFDL0MsV0FBVyxFQUFFLFdBQVcsQ0FBQyxrQkFBa0I7Z0JBQzNDLElBQUksRUFBRTtvQkFDRixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTztvQkFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYztpQkFDcEc7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVM7YUFDMUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRVQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXRELG1DQUFtQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsNEJBQTRCLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUMxRixPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDL0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsWUFBWSxlQUFlLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzthQUN0QztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0VBQStFO1FBQy9FLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBRWhDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTt3QkFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUN0QztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlO1FBQ1gseUJBQXlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDckYsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7Z0JBQzdGLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxlQUFlO2lCQUNoRCxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE9BQU87YUFDVjtZQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBRWpHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLFdBQVcsQ0FBQyxFQUFFO2dCQUM5RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUMxQjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUMxQjtTQUNKO2FBQ0k7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbEYsNkdBQTZHO1lBQzdHLDJHQUEyRztZQUMzRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUssYUFBYTs7WUFDZixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3ZCLE9BQU87YUFDVjtZQUNELElBQUk7Z0JBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1QjtZQUNELE9BQU8sQ0FBQyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbEQ7WUFDRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDWCxDQUFDO0tBQUE7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNaLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQ25CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3ZDO2FBQ0k7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxDQUFDLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQztJQUMvQyxDQUFDO0lBRU8seUJBQXlCOztRQUM3QixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLElBQ0ksR0FBRyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFDOUI7Z0JBQ0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQy9CLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUM7YUFDTDtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO2lCQUNJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzVCLGtCQUFrQjtnQkFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN2RDtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3JELFNBQVM7Z0JBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNoQztpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksMkJBQTJCLEVBQUU7YUFDakQ7aUJBQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFO2FBQ3ZDO2lCQUNJO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ25DO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQy9CLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUM7WUFFRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLEVBQUUsQ0FBQzthQUNwRDtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixFQUFFO2dCQUM1RCxNQUFNLFFBQVEsR0FBRyxHQUFHLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsMENBQUUsTUFBTSxjQUFjLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsMENBQUUsUUFBUSw4QkFBOEIsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQiwwQ0FBRSxXQUFXLHFCQUFxQixDQUFDO2dCQUNoUyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTt3QkFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7NEJBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7eUJBQ3RDO3FCQUNKO2dCQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3RHO2FBQ0k7WUFDRCxtQ0FBbUM7WUFDbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNsRTtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBZTtRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sZUFBZTtRQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7UUFDckUsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM3QyxPQUFPLEdBQUcsQ0FBQztTQUNkO2FBQ0k7WUFDRCxHQUFHLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztZQUMxQixPQUFPLEdBQUcsQ0FBQztTQUNkO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUc7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGNBQWM7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQU87UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUcsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDbEI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsV0FBVztRQUNQLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELGNBQWM7SUFDZCxZQUFZLENBQUMsS0FBSztRQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDeEIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLE9BQU87UUFDdkIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBZSxFQUFFLFNBQWdCLEVBQUUsVUFBaUI7UUFDaEYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNqRTtpQkFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzdGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekI7UUFFTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxHQUFHO1FBQ25CLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsOERBQThEO1FBQzlELHlKQUF5SjtRQUN6SiwrR0FBK0c7UUFDL0cscUVBQXFFO1FBQ3JFLHlKQUF5SjtRQUN6SiwrR0FBK0c7UUFDL0cscUVBQXFFO1FBQ3JFLHlDQUF5QztRQUN6QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QixnRkFBZ0Y7UUFDaEYsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7UUFDdkYsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7UUFDaEUsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsc0JBQXNCLENBQUMsV0FBVztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQUs7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRTtZQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN2RDtJQUNMLENBQUM7SUFHRCw4QkFBOEIsQ0FBQyxLQUFvQjtRQUMvQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ3ZFLElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQzthQUU1QztpQkFDSTtnQkFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUMvQjtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFZO1FBQ3pCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7WUFDekMsT0FBTztTQUNWO2FBQ0k7WUFDRCxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7Z0JBQ3BCLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2FBQ3pHO2lCQUNJO2dCQUNELEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3JGO1NBQ0o7SUFDTCxDQUFDO0lBQ0Qsb0JBQW9CO1FBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3ZFLElBQUksU0FBUyxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNyQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDckQsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO29CQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDbkQ7WUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO29CQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDdEQ7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBRSxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtRQUNULFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDYixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRVgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3RFLElBQUksZ0JBQWdCLEVBQUU7WUFDbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pDLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDNUIsU0FBUztpQkFDWjtnQkFFRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM5QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLEVBQUU7d0JBQy9DLGdCQUFnQjt3QkFDaEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDaEIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDaEM7aUJBQ0o7cUJBQ0k7b0JBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7aUJBQ3pCO2FBQ0o7WUFFRCxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRTtJQUNMLENBQUM7OztZQXJ1QkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLG9tS0FBMEM7Z0JBRTFDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDOzthQUM5RDs7OzRDQXVEUSxNQUFNLFNBQUMsUUFBUTtZQTdFZixhQUFhO1lBTmIsYUFBYTtZQXBCbEIsU0FBUztZQU9KLGdCQUFnQjtZQUNKLFlBQVk7WUFXeEIsYUFBYTtZQWdCYixXQUFXO1lBN0I2QixNQUFNO1lBRDlDLEtBQUs7WUEwQkwsY0FBYztZQUNkLHFCQUFxQjtZQWxCckIseUJBQXlCO1lBQ3pCLHVCQUF1QjtZQVR2QixjQUFjO1lBSWQscUJBQXFCO1lBckIxQixpQkFBaUI7WUE2Q1osZUFBZTtZQWJmLGlCQUFpQjtZQVFqQixlQUFlO1lBTmYscUJBQXFCO1lBS3JCLG1CQUFtQjtZQURuQixXQUFXO1lBZlgsYUFBYTtZQXFCYixjQUFjO1lBSGQsaUJBQWlCO1lBTWpCLHdCQUF3QjtZQWR4QixrQkFBa0I7Ozt1QkE0QnRCLFNBQVMsU0FBQyxVQUFVOzJCQUNwQixTQUFTLFNBQUMsY0FBYzswQkFDeEIsU0FBUyxTQUFDLG9CQUFvQjs0QkFDOUIsU0FBUyxTQUFDLFdBQVc7dUJBQ3JCLFlBQVksU0FBQyxXQUFXOzRCQUV4QixLQUFLOzZCQUNMLEtBQUs7NkJBQ0wsS0FBSzsyQkFFTCxNQUFNOzZDQXFvQk4sWUFBWSxTQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgKiBhcyBIYW1tZXIgZnJvbSAnaGFtbWVyanMnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByaW1lTkdDb25maWcgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEVudW1BcHBTd2l0Y2hlckNvZGUsIEVudW1UeXBlU3BsYXNoLCBFbnVtVXNlclNvdXJjZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3JlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbWl6ZVVpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbWl6ZS11aS5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEdlbmVyaWNHdWFyZENoaWxkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQtY2hpbGQuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmljR3VhcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS11cGRhdGVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlck9ubGluZURldGFpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlcm9ubGluZWRldGFpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRRdWV1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcbmltcG9ydCB7IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vdG4tY3VzdG9tLXNjcm9sbGJhci90bi1jdXN0b20tc2Nyb2xsYmFyLmNvbXBvbmVudCc7XG5cblxuZGVjbGFyZSBsZXQgdGlueW1jZTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NvbW1vbi1hcHAtY29tcG9uZW50JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLWFwcC1jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tbW9uLWFwcC1jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlLCBFbnRpdHlNZXRhZGF0YVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vbkFwcENvbXBvbmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdva0J1dHRvbicpIG9rQnV0dG9uOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2NhbmNlbEJ1dHRvbicpIGNhbmNlbEJ1dHRvbjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKFJlcG9ydFF1ZXVlQ29tcG9uZW50KSByZXBvcnRRdWV1ZTogUmVwb3J0UXVldWVDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJykgc2Nyb2xsQmFyTWVudTogVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBJbnB1dCgpIHNob3dRdWlja05vdGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGFsbG93QW5vbnltb3VzID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b1JlbmRlck1lbnUgPSB0cnVlO1xuXG4gICAgQE91dHB1dCgpIG9uVXNlckxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICAvLyByb290VmVyc2lvbkRlcGxveSA9ICcxLjMnO1xuICAgIGN1cnJlbnRSb3V0ZSA9ICcnO1xuICAgIHBhZ2VMb2FkZWQgPSBmYWxzZTtcbiAgICBmaXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xuICAgIHBpbm5lZE5vdGVEYXRhOiBhbnk7XG4gICAgcGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9IGZhbHNlO1xuICAgIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xuICAgIGVudmlyb25tZW50OiBhbnk7XG4gICAgY2FwdHVyZU1vZGUgPSBmYWxzZTtcbiAgICBwMDogYW55O1xuICAgIHAxOiBhbnk7XG4gICAgbG9nZ2VkSW4gPSBmYWxzZTtcbiAgICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XG4gICAgb25seVNob3dNYWluQ29udGVudCA9IGZhbHNlO1xuXG4gICAgYXBwQ29kZSA9ICcnO1xuXG4gICAgc2VhcmNoTWVudVJlc3VsdDogYW55W107XG4gICAgc2VhcmNoTWVudUlucHV0OiBzdHJpbmc7XG5cbiAgICBzaG93UGlubmVkTWVudSA9IGZhbHNlO1xuICAgIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XG4gICAgaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgIG1lbnVNb2RlbDogYW55O1xuICAgIHdhaXRpbmcgPSBmYWxzZTtcbiAgICBtZXNzYWdlV2FpdGluZzogc3RyaW5nW10gPSBbXTtcbiAgICBzaG93UmVqZWN0Q29uZmlybSA9IHRydWU7XG5cbiAgICByZWFkb25seSBrZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9ICdwcHBwcHBwcHAnO1xuICAgIGN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcbiAgICByb290RGF0YTogYW55O1xuXG4gICAgRW51bVR5cGVTcGxhc2ggPSBFbnVtVHlwZVNwbGFzaDtcbiAgICBsYXlvdXRMb2FkaW5nUGFnZTogc3RyaW5nID0gRW51bVR5cGVTcGxhc2guTkVXX1YxO1xuICAgIGZhdkljb246IEhUTUxMaW5rRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2FwcEZhdmljb24nKTtcbiAgICBpY29uID0gJyc7XG4gICAgc2hvd01lbnVJY29uSW5hY3RpdmUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50LFxuICAgICAgICBwdWJsaWMgX2dsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGU6IFRpdGxlLFxuICAgICAgICBwcml2YXRlIF9zaWduYWxSU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VVcGRhdGVkU2VydmljZTogU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hcHBsaWNhdGlvbkNvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfY29tcG9uZW50Q29udGV4dFNlcnZpY2U6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvcmVDb25maWdTZXJ2aWNlOiBDb3JlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfcHJpbWVuZ0NvbmZpZzogUHJpbWVOR0NvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBfc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3VzZXJPbmxpbmVEZXRhaWxzU2VydmljZTogVXNlck9ubGluZURldGFpbHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jdXN0b21pemVVaVNlcnZpY2U6IEN1c3RvbWl6ZVVpU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlO1xuICAgICAgICB0aGlzLmljb24gPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4uZmF2aWNvbjtcbiAgICAgICAgaWYgKHRoaXMuZmF2SWNvbikge1xuICAgICAgICAgICAgdGhpcy5mYXZJY29uLmhyZWYgPSB0aGlzLmljb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMpIHtcbiAgICAgICAgICAgIHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSB0aGlzLmVudmlyb25tZW50LmtleVByZXNzUGVybWlzc2lvblV0aWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc3RvcmFnZSA9PT0gJ3Nlc3Npb25TdG9yYWdlJykge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShzZXNzaW9uU3RvcmFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRTdG9yYWdlKGxvY2FsU3RvcmFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmltZW5nQ29uZmlnLnNldFRyYW5zbGF0aW9uKHtcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0No4bunIG5o4bqtdCcsICdUaOG7qSAyJywgJ1Ro4bupIDMnLCAnVGjhu6kgNCcsICdUaOG7qSA1JywgJ1Ro4bupIDYnLCAnVGjhu6kgNyddLFxuICAgICAgICAgICAgZGF5TmFtZXNTaG9ydDogWydDTicsICdUaDInLCAnVGgzJywgJ1RoNCcsICdUaDUnLCAnVGg2JywgJ1RoNyddLFxuICAgICAgICAgICAgZGF5TmFtZXNNaW46IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICAgICAgICAgICAnVGjDoW5nIDEnLCAnVGjDoW5nIDInLCAnVGjDoW5nIDMnLCAnVGjDoW5nIDQnLCAnVGjDoW5nIDUnLCAnVGjDoW5nIDYnLCAnVGjDoW5nIDcnLCAnVGjDoW5nIDgnLCAnVGjDoW5nIDknLCAnVGjDoW5nIDEwJywgJ1Row6FuZyAxMScsICdUaMOhbmcgMTInXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXG4gICAgICAgICAgICB0b2RheTogJ0jDtG0gbmF5JyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbWl6ZVVpU2VydmljZS5zZXRDdXN0b21pemUodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuYWRkUm9vdENvbnRleHQoXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZSxcbiAgICAgICAgICAgIF9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl90aXRsZS5zZXRUaXRsZSh0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLm1haW4ub3duZXIpO1xuXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCd2bicpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoJ3ZuJyk7XG5cbiAgICAgICAgdGhpcy5pbml0VGlueU1jZSgpO1xuXG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuZ2V0Q29uZmlnQXV0aGVuKCk7XG4gICAgICAgIC8vIENodXnhu4NuIHNhbmcgc2Vzc2lvbiBzdG9yYWdlLCBu4bq/dSDhu5VuIHRow6wgeMOzYSBkw7JuZyBuw6B5IMSRaVxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0U3RvcmFnZSh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRTdG9yYWdlKCkpO1xuICAgICAgICB0aGlzLmluamVjdENvbmZpZyhjZmcpO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJlV2l0aE5ld0NvbmZpZ0FwaSgpO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3BlcnNvbmFsaXplJyk7XG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93TWVudUljb25JbmFjdGl2ZSA9IHRoaXMuZW52aXJvbm1lbnQuc2hvd01lbnVJY29uSW5hY3RpdmUgPz8gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKFxuICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsXG4gICAgICAgICAgICBhc3luYyAocnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5zZXR1cFN5bmNDYWNoZUVudGl0eU1ldGFkYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9yb3V0ZXIuY29uZmlnLmZvckVhY2gocm91dGUgPT4gdGhpcy5hZGRHdWFyZChyb3V0ZSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrRmlyc3RMb2dpbiA9IHRoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5pc0NoZWNrRmlyc3RUaW1lTG9naW4gJiYgdGhpcy5yb290RGF0YS5jdXJyZW50VXNlci5pc0ZpcnN0TG9naW47XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tFeHBpcmF0aW9uUGFzc3dvcmQgPSB0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLmlzRXhwaXJhdGlvblBhc3N3b3JkO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0ZpcnN0TG9naW4gfHwgY2hlY2tFeHBpcmF0aW9uUGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tYWluID0gdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uYXBwRG9tYWluO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViUGF0aCA9ICcvdXNlcic7XG4gICAgICAgICAgICAgICAgICAgIC8vIHbDrCBESEdUVlQgZMO5bmcgxJHhu5NuZyB0aOG7nWkgdXNlcnY1IHbDoCB1c2VydjRcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQubWFUcnVvbmcgPT0gJ0RIR1RWVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSAnL3VzZXJ2NSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua1JlZGlyZWN0ID0gYCR7ZG9tYWlufSR7c3ViUGF0aH0vY2hhbmdlLXBhc3N3b3JkYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiAhPSBsaW5rUmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0ZpcnN0TG9naW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiB2dWkgbMOybmcgxJHhu5VpIG3huq10IGto4bqpdSBt4bq3YyDEkeG7i25oIHRyb25nIGzhuqduIMSRxINuZyBuaOG6rXAgxJHhuqd1IHRpw6puIMSR4buDIHTEg25nIHTDrW5oIGLhuqNvIG3huq10IGPhu6dhIGjhu4cgdGjhu5FuZyEnKS50aGVuKGFzeW5jIChyczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuY2hhbmdlRmlyc3RUaW1lTG9naW4odGhpcy5yb290RGF0YS5jdXJyZW50VXNlci51c2VySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0lORk9fQ0hBTkdFRCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gbGlua1JlZGlyZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tFeHBpcmF0aW9uUGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKGBN4bqtdCBraOG6qXUgxJHDoyBxdcOhICR7dGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmV4cGlyYXRpb25QYXNzd29yZE1vbnRoID8/IDZ9IHRow6FuZyBjaMawYSB0aGF5IMSR4buVaS4gQuG6oW4gdnVpIGzDsm5nIMSR4buVaSBt4bqtdCBraOG6qXUgxJHhu4MgdMSDbmcgdMOtbmggYuG6o28gbeG6rXQgY+G7p2EgaOG7hyB0aOG7kW5nIWApLnRoZW4oYXN5bmMgKHJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rUmVkaXJlY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0VGltZUxvZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRow6ptIHbDoG8gxJHhu4MgxJHDoW5oIGThuqV1IGzhuqduIGThuqd1IGxvZ2luID0+IMSR4buDIHjhu60gbMO9XG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZXJBIMSRYWcg4bufIG3DoG4gaMOsbmggMSA9PiDEkcSDbmcgeHXhuqV0ID0+IMSRxINuZyBuaOG6rXAgdsOgbyB0w6BpIGtob+G6o24gVXNlckIga2jDtG5nIGPDsyBxdXnhu4FuIG3DoG4gaMOsbmggMSA9PiByZWRpcmVjdCB24buBIFwiL1wiXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2ZpcnN0VGltZUxvZ2luJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFVybCA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob2xkVXJsICYmIG9sZFVybCAhPSB0b3AubG9jYXRpb24uaHJlZiArICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke29sZFVybH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudD8udXNpbmdEZWZhdWx0UmVkaXJlY3RCeVNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFN3aXRjaGVyID0gdGhpcy5lbnZpcm9ubWVudD8uYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvb3REYXRhLmN1cnJlbnRVc2VyLnNvdXJjZSA9PSBFbnVtVXNlclNvdXJjZS5IT0NfVklFTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25nSG9jVmllbiA9IGFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9VcHBlckNhc2UoKSA9PSBFbnVtQXBwU3dpdGNoZXJDb2RlLkNPTkdOR1VPSURVTkcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZ0hvY1ZpZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7Y29uZ0hvY1ZpZW4udXJsfS8ke2NvbmdIb2NWaWVuLmRlZmF1bHRSZWRpcmVjdH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRSZWRpcmVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5pbml0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5zdGFydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lzdGVuY3lIdWInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCcm9hZGNhc3RNZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQXV0aG9yaXplQ2FjaGUuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbkh1YicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZnJlc2hGb3JVcGRhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT1JDRV9SRUxPQUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVQYWdlcyA9IHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuZGVmYXVsdE1vZHVsZVBhZ2VzO1xuICAgICAgICBpZiAoZGVmYXVsdE1vZHVsZVBhZ2VzICYmIGRlZmF1bHRNb2R1bGVQYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZm9yRWFjaChtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gZGVmYXVsdE1vZHVsZVBhZ2VzLmZpbmQocCA9PiBwLmNvZGUgPT0gbS5jb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLmRlZmF1bHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIG0udXJsID0gcGFnZS5kZWZhdWx0UGFnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBIYW1tZXIuZGVmYXVsdHMuY3NzUHJvcHMudXNlclNlbGVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnR09fSE9NRScsIGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnVE9HR0xFX0xBWU9VVCcsIGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEub25seVNob3dNYWluQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gZGF0YS5vbmx5U2hvd01haW5Db250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ01BSU5fQ09OVEVOVF9PTkxZJywgcnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gcnM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1JFSkVDVF9DT05GSVJNLCBkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlamVjdENvbmZpcm0gPSBkYXRhO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiB8fCB0aGlzLmVudmlyb25tZW50LnNwbGFzaFNjcmVlbiA9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRMb2FkaW5nUGFnZSA9IEVudW1UeXBlU3BsYXNoLkRFRkFVTFQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dExvYWRpbmdQYWdlID0gdGhpcy5lbnZpcm9ubWVudC5zcGxhc2hTY3JlZW47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzVXNlckhlYXJ0QmVhdCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IGR5bmFtaWMgYWxsIGNoaWxkcmVuXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcbiAgICAgICAgdGhpcy5yb290RGF0YSA9IHJvb3QuZGF0YTtcbiAgICAgICAgcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+IHguY29kZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuYXBwQ29kZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgcm9vdC5kYXRhLmFwcE9yaWdpbiA9IHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlQmFzZUhyZWYgPyBgLyR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XG4gICAgICAgIHJvb3QuZGF0YS5hbGxvd0Fub255bW91cyA9IHRoaXMuYWxsb3dBbm9ueW1vdXM7XG5cbiAgICAgICAgdGhpcy5fcm91dGVyLmNvbmZpZy5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcblxuICAgICAgICAvLyBnZXQgY3VycmVudCBVc2VyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlLnBvcHVsYXRlQ3VycmVudFVzZXIoKTtcbiAgICAgICAgdGhpcy5vblVzZXJMb2FkZWQuZW1pdCgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuTkVFRF9DTEVBUl9QRVJNSVNTSU9OX0NBQ0hFLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5jbGVhclBlcm1pc3Npb25DYWNoZShbXSk7XG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgdHJvbmcgbMO6YyBjbGVhciBjYWNoZSBwaMOibiBxdXnhu4FuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRBbGxCYXNlUGVybWlzc2lvbigpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZVJlcGxheUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVEKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9BUlJPV0xFRlQsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fQVJST1dSSUdIVCwgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2VuZCBjdXJyZW50IHZlcnNpb24gdG8gdG4gY2xpZW50XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKDxUbkNsaWVudENvbW1hbmQ+e1xuICAgICAgICAgICAgICAgIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5TeW5jVmVyaW9uVG5DbGllbnQsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmFwcERvbWFpbiArICcvJyArIHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5lbmRwb2ludFVwZGF0ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsID0gW107XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIGNoYW5nZSBlbnRpdHkgbWV0YWRhdGFcbiAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZWRMb2NhbFN0b3JhZ2UoJ0tFWV9FTlRJVFlfTUVUREFUQV9VUERBVEVEJywgKHJzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZW50aXR5IG1ldGFkYXRhIGNoYW5nZWQnLCBycyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRyaWdnZXIgdXBkYXRlIHN0b3JhZ2Uga2V5XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1dBSVRfQk9YLCBkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMud2FpdGluZyA9IGRhdGEuc2hvdztcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVdhaXRpbmcgPSBbLi4uZGF0YS5tZXNzYWdlXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuaHR0cFJlcXVlc3RMaXN0ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIG7hur91IGFsbG93IGFub255bW91cyB0aMOsIGxvYWQgcmEgY8OhYyBwaMOibiBo4buHIGNobyBwaMOpcCB2w6BvIGtow7RuZyBj4bqnbiDEkcSDbmcgbmjhuq1wXG4gICAgICAgIGlmICh0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgcm9vdC5zdWJzY3JpYmUoJ0xPR0lOJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRUcnlMb2dpbigpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLl9jZC5kZXRhY2goKTtcbiAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcbiAgICAgICAgcm9vdC5yZXBvcnRRdWV1ZSA9IHRoaXMucmVwb3J0UXVldWU7XG4gICAgICAgIHRoaXMubWVudU1vZGVsID0gdGhpcy5fbWVudVNlcnZpY2UuZ2V0TWVudUl0ZW1zKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdFJlZGlyZWN0KCkge1xuICAgICAgICAvLyBjaGVjayBkZWZhdWx0IHJlZGlyZWN0XG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICBjb25zdCBhcHBTZXR0aW5nID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGE7XG4gICAgICAgICAgICBpZiAoIWFwcFNldHRpbmcgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uZGVmYXVsdFJlZGlyZWN0ICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluLmRlZmF1bHRSZWRpcmVjdFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoVG9DaGVjayA9IHRoaXMuZW52aXJvbm1lbnQuZW5hYmxlQmFzZUhyZWYgPyBgLyR7YXBwU2V0dGluZy5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XG5cbiAgICAgICAgICAgIGlmICgobG9jYXRpb24ucGF0aG5hbWUgPT09ICcvJyB8fCBsb2NhdGlvbi5wYXRobmFtZSA9PT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgPT09IHBhdGhUb0NoZWNrKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndXNlciBub3QgdmFsaWQgdG9rZW4nLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSk7XG4gICAgICAgICAgICAvLyBUT0RPOiBOYW1OSCBY4butIGzDvSB04bqhbSBjaG8gdHLGsOG7nW5nIGjhu6NwIMSRxINuZyBuaOG6rXAgbOG6p24gxJHhuqd1IG5oxrBuZyBjaOG6oXkgxJHhur9uIMSRw6J5IG3DoCBhY2Nlc3MgdG9rZW4gduG6q24ga2jDtG5nIGjhu6NwIGzhu4dcbiAgICAgICAgICAgIC8vIFjhu60gbMO9IHRyaeG7h3QgxJHhu4MgYuG6sW5nIGPDoWNoIHTDrG0gUEEgYuG6r3QgZXZlbnQgY+G7p2EgYW5ndWxhcjIgb2lkYyDEkeG7gyB44butIGzDvSB0csaw4bubYyBraGkgxJHhur9uIGLGsOG7m2MgZGVmYXVsdCByZWRpcmVjdFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkZXRlY3RDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5fY2RbJ2Rlc3Ryb3llZCddKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignZXhjZXB0aW9uIG9uIGRldGVjdCBjaGFuZ2UnLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckF1dGhvcml6ZUNhY2hlKCkge1xuICAgICAgICBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSlcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAvXkFVVEhPUklaQVRJT04vLnRlc3QoaXRlbSkpXG4gICAgICAgICAgICAuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9jdXNUcmFwKGV2ZW50LCBkaXJlY3QpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0VGlueU1jZSgpIHtcbiAgICAgICAgdGlueW1jZS5iYXNlVVJMID0gJy9hc3NldHMvdmVuZG9yL3RpbnltY2UnO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlndXJlV2l0aE5ld0NvbmZpZ0FwaSgpIHtcbiAgICAgICAgLy8gZm9yIGZpcnN0IGxvZ2luXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5ldmVudHMuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlY2VpdmVkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwTG9jYWxTdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZVJlcGxheUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX1JFQURZLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAndG9rZW5fZXhwaXJlcycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UudHJ5TG9naW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAnbG9nb3V0Jykge1xuICAgICAgICAgICAgICAgIC8vIGNsZWFudXAgc3RvcmFnZVxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cExvY2FsU3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhckxvY2FsVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnJldm9rZVRva2VuQW5kTG9nb3V0KG51bGwsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50X3VzZXJfaW5mbycpO1xuICAgICAgICAgICAgICAgIC8vIGxvZ291dFxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PSAnZGlzY292ZXJ5X2RvY3VtZW50X2xvYWRlZCcpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICd0b2tlbl9yZWZyZXNoZWQnKSB7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbG9naW4gZXZlbnQnLCBldnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50KCk7XG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXG4gICAgICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSxcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmVuYWJsZVNpbGVudFJlZnJlc2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2N1cnJlbnRVcmwnLCB0b3AubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmRlZmF1bHRDdXN0b21Mb2dpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ2luVXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmN1c3RvbUxvZ2luQ29uZmlnPy5kb21haW59P2NsaWVudF9pZD0ke3RoaXMuZW52aXJvbm1lbnQuYXV0aGVudGljYXRpb25TZXR0aW5ncy5jdXN0b21Mb2dpbkNvbmZpZz8uY2xpZW50SWR9JnNjb3BlPW9wZW5pZCZyZWRpcmVjdF91cmk9JHt0aGlzLmVudmlyb25tZW50LmF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuY3VzdG9tTG9naW5Db25maWc/LnJlZGlyZWN0VXJpfSZyZXNwb25zZV90eXBlPWNvZGVgO1xuICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gbG9naW5Vcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93QW5vbnltb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB04buVbmcgaOG7o3AgYmnhur9uIHBvc2l0aW9uXG4gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSkge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBn4buNaSBhcGkgxJHhu4MgdOG7lW5nIGjhu6NwIGThu68gbGl1ZWplLi4uXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5qZWN0Q29uZmlnKGNmZzogQXV0aENvbmZpZykge1xuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuY29uZmlndXJlKGNmZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25maWdBdXRoZW4oKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuX2NvcmVDb25maWdTZXJ2aWNlLmdldEF1dGhDb25maWcoKTtcbiAgICAgICAgY29uc3QgdHlwZUxvZ2luID0gdGhpcy5lbnZpcm9ubWVudC5hdXRoZW50aWNhdGlvblNldHRpbmdzLmF1dGhlblR5cGU7XG4gICAgICAgIGlmICh0eXBlTG9naW4gJiYgdHlwZUxvZ2luLmluY2x1ZGVzKCdpbXBsaWNpdCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2ZnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2ZnLnJlc3BvbnNlVHlwZSA9ICdjb2RlJztcbiAgICAgICAgICAgIHJldHVybiBjZmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVNZW51QWN0aXZlKHRvcCkge1xuICAgICAgICB0aGlzLnNjcm9sbEJhck1lbnUuc2Nyb2xsVG9Ub3AodG9wKTtcbiAgICB9XG5cbiAgICBjbG9zZVRhYldpbmRvdygpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Nsb3NlVGFiV2luZG93Jyk7XG4gICAgfVxuXG4gICAgZ2V0QXBwU3dpdGNoZXJVcmwoYXBwQ29kZSkge1xuICAgICAgICBjb25zdCBhcHAgPSB0aGlzLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiB4LmNvZGUudG9Mb3dlckNhc2UoKSA9PSBhcHBDb2RlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoYXBwKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB1c2UtbGlmZS1jeWNsZS1pbnRlcmZhY2VcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5ERVNUUk9ZX1RBU0tfREVUQUlMX0NPTVBPTkVOVCk7XG4gICAgfVxuXG4gICAgLy8gc2VhcmNoIG1lbnVcbiAgICBvblNlYXJjaE1lbnUoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51UmVzdWx0ID0gW107XG5cbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IHRoaXMuZ2V0U2VhcmNoTWVudVJlc3VsdChldmVudC5xdWVyeSk7XG4gICAgfVxuXG4gICAgZ2V0U2VhcmNoTWVudVJlc3VsdChrZXl3b3JkKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgdGhpcy5tZW51TW9kZWwsIHJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQ6IHN0cmluZywgbGlzdFRvR2V0OiBhbnlbXSwgbGlzdFRvUHVzaDogYW55W10pIHtcbiAgICAgICAgbGlzdFRvR2V0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgaXRlbS5pdGVtcywgbGlzdFRvUHVzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGl0ZW0ubGFiZWwpLmluZGV4T2YodGhpcy5ub25BY2NlbnRWaWV0bmFtZXNlKGtleXdvcmQpKSA+PSAwKSkge1xuICAgICAgICAgICAgICAgIGxpc3RUb1B1c2gucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBub25BY2NlbnRWaWV0bmFtZXNlKHN0cikge1xuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgLy8gICAgIFdlIGNhbiBhbHNvIHVzZSB0aGlzIGluc3RlYWQgb2YgZnJvbSBsaW5lIDExIHRvIGxpbmUgMTdcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEUwfFxcdTAwRTF8XFx1MUVBMXxcXHUxRUEzfFxcdTAwRTN8XFx1MDBFMnxcXHUxRUE3fFxcdTFFQTV8XFx1MUVBRHxcXHUxRUE5fFxcdTFFQUJ8XFx1MDEwM3xcXHUxRUIxfFxcdTFFQUZ8XFx1MUVCN3xcXHUxRUIzfFxcdTFFQjUvZywgXCJhXCIpO1xuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTh8XFx1MDBFOXxcXHUxRUI5fFxcdTFFQkJ8XFx1MUVCRHxcXHUwMEVBfFxcdTFFQzF8XFx1MUVCRnxcXHUxRUM3fFxcdTFFQzN8XFx1MUVDNS9nLCBcImVcIik7XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFQ3xcXHUwMEVEfFxcdTFFQ0J8XFx1MUVDOXxcXHUwMTI5L2csIFwiaVwiKTtcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEYyfFxcdTAwRjN8XFx1MUVDRHxcXHUxRUNGfFxcdTAwRjV8XFx1MDBGNHxcXHUxRUQzfFxcdTFFRDF8XFx1MUVEOXxcXHUxRUQ1fFxcdTFFRDd8XFx1MDFBMXxcXHUxRUREfFxcdTFFREJ8XFx1MUVFM3xcXHUxRURGfFxcdTFFRTEvZywgXCJvXCIpO1xuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjl8XFx1MDBGQXxcXHUxRUU1fFxcdTFFRTd8XFx1MDE2OXxcXHUwMUIwfFxcdTFFRUJ8XFx1MUVFOXxcXHUxRUYxfFxcdTFFRUR8XFx1MUVFRi9nLCBcInVcIik7XG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MUVGM3xcXHUwMEZEfFxcdTFFRjV8XFx1MUVGN3xcXHUxRUY5L2csIFwieVwiKTtcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMTExL2csIFwiZFwiKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OgfMOhfOG6oXzhuqN8w6N8w6J84bqnfOG6pXzhuq184bqpfOG6q3zEg3zhurF84bqvfOG6t3zhurN84bq1L2csICdhJyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DqHzDqXzhurl84bq7fOG6vXzDqnzhu4F84bq/fOG7h3zhu4N84buFL2csICdlJyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DrHzDrXzhu4t84buJfMSpL2csICdpJyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DsnzDs3zhu4184buPfMO1fMO0fOG7k3zhu5F84buZfOG7lXzhu5d8xqF84budfOG7m3zhu6N84buffOG7oS9nLCAnbycpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw7l8w7p84bulfOG7p3zFqXzGsHzhu6t84bupfOG7sXzhu6184buvL2csICd1Jyk7XG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/hu7N8w7184bu1fOG7t3zhu7kvZywgJ3knKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8SRL2csICdkJyk7XG4gICAgICAgIC8vIFNvbWUgc3lzdGVtIGVuY29kZSB2aWV0bmFtZXNlIGNvbWJpbmluZyBhY2NlbnQgYXMgaW5kaXZpZHVhbCB1dGYtOCBjaGFyYWN0ZXJzXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMzAwfFxcdTAzMDF8XFx1MDMwM3xcXHUwMzA5fFxcdTAzMjMvZywgJycpOyAvLyBIdXnhu4FuIHPhuq9jIGjhu49pIG5nw6MgbuG6t25nXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMkM2fFxcdTAzMDZ8XFx1MDMxQi9nLCAnJyk7IC8vIMOCLCDDiiwgxIIsIMagLCDGr1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIG9uU2VsZWN0TWVudVN1Z2dlc3Rpb24obWVudUl0ZW1PYmopIHtcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwobWVudUl0ZW1PYmoucm91dGVyTGluayk7XG4gICAgICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25CbHVyU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0luUGlubmVkTWVudSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSAnJztcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uRm9jdXNTZWFyY2hNZW51SW5wdXQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IHRydWU7XG4gICAgfVxuXG4gICAgc2VhcmNoSWNvbkNsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5fY29tbW9uU2VydmljZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlwcmVzcycsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlU2hvd1BvcHVwUGVybWlzc2lvblV0aWxzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzW3RoaXMuY3VycmVudEtleVByZXNzSW5kZXhdID09PSBldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID09IHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuc2hvd1Blcm1pc3Npb25VdGlscyA9IHRydWU7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHdWFyZChyb3V0ZTogUm91dGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdXRlLnBhdGggPT09ICcnIHx8IHJvdXRlLnBhdGggPT09ICcvJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJvdXRlLmxvYWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID8gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA6IFtHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcm91dGUuY2FuQWN0aXZhdGUgPSByb3V0ZS5jYW5BY3RpdmF0ZSA/IHJvdXRlLmNhbkFjdGl2YXRlIDogW0dlbmVyaWNHdWFyZFNlcnZpY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NVc2VySGVhcnRCZWF0KCkge1xuICAgICAgICBjb25zdCBoZWFydEJlYXQgPSB0aGlzLl91c2VyT25saW5lRGV0YWlsc1NlcnZpY2UuZ2V0SGVhcnRCZWF0U2V0dGluZygpO1xuICAgICAgICBpZiAoaGVhcnRCZWF0LmRpc2FibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJPbmxpbmVEZXRhaWxzU2VydmljZS5zZW5kSGVhcnRCZWF0KCkudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhlYXJ0QmVhdC5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaGVhcnRiZWF0OicsIG5ldyBEYXRlKCksIG51bGwsIHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoZWFydEJlYXQuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignaGVhcnRiZWF0OicsIG5ldyBEYXRlKCksIG51bGwsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGhlYXJ0QmVhdC5pbnRlcnZhbCAqIDEwMDApO1xuICAgICAgICB0aGlzLnByb2Nlc3NCQ2FjaGUoKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzQkNhY2hlKCkge1xuICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvUHJvY2Vzc0JDYWNoZSgpO1xuICAgICAgICB9LCA2MDAwMDApO1xuXG4gICAgICAgIHRoaXMuZG9Qcm9jZXNzQkNhY2hlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkb1Byb2Nlc3NCQ2FjaGUoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1MYXN0TW9kaWZpZWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmFnZV9sYXN0bW9kaWZpZWQnKTtcbiAgICAgICAgaWYgKGl0ZW1MYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoaXRlbUxhc3RNb2RpZmllZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKCdiY2FjaGVfJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9ialtrZXldICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHQgPSBuZXcgRGF0ZShvYmpba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21tb25TZXJ2aWNlLmlzTW9yZVRoYW5EYXlzRnJvbU5vdyhkdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzdG9yYWdlX2xhc3Rtb2RpZmllZCcsIEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
|