tin-spa 2.9.7 → 2.9.8

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.
@@ -104,6 +104,7 @@ export class LoginComponent {
104
104
  this.storageService.store(Constants.AUTH_TENANT_NAME, apiResponse.data.tenantName);
105
105
  this.logService.info("logged in");
106
106
  this.dataService.ClearCache();
107
+ this.notifications();
107
108
  if (apiResponse.data.changePassword == true && apiResponse.data.authType == 'local') {
108
109
  this.router.navigate(["home/user/change-password"], {
109
110
  queryParams: { redirectTo: this.redirectPath },
@@ -135,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
135
136
  type: Component,
136
137
  args: [{ selector: "spa-login", template: "\r\n <div *ngIf=\"style=='old'\" class=\"tin-bg-login login-page\">\r\n\r\n <div *ngIf=\"appConfig.logo!=''\" class=\"d-flex justify-content-center row align-items-center\" style=\"margin-top:3em;margin-bottom:1em\">\r\n\r\n <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px;margin-right:3em;margin-left:3em\" />\r\n <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px;margin-right:3em;margin-left:3em\" />\r\n <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px; margin-right:3em;margin-left:3em\" />\r\n\r\n </div>\r\n\r\n\r\n <div *ngIf=\"appConfig.logo ==''\" style=\"margin-top:2em\">\r\n <!-- Add margin top when there is no logo -->\r\n </div>\r\n\r\n\r\n <div class=\"d-flex justify-content-center row align-items-center\" style=\"margin-top:3em;\">\r\n\r\n <div class=\"d-none d-sm-block\">\r\n </div>\r\n\r\n <div style=\"margin-left:1em\">\r\n\r\n <mat-card class=\"mat-elevation-z3 login-card\" style=\"width:400px; \">\r\n\r\n <mat-card-header>\r\n <mat-card-title>{{appConfig.appName}}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n\r\n <div class=\"tin-input mt-2\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\" ></spa-text>\r\n\r\n <mat-form-field >\r\n <mat-label>Password</mat-label>\r\n <input id=\"txtPassword\" matInput [type]=\"hide ? 'password' : 'text'\" (keyup.enter)=\"login()\" [(ngModel)]=\"user.password\" autocomplete=\"off\" >\r\n <button mat-icon-button matSuffix (click)=\"hide = !hide\" [attr.aria-label]=\"'Hide password'\" [attr.aria-pressed]=\"hide\">\r\n <mat-icon style=\"font-size: 18px;\">{{hide ? 'visibility_off' : 'visibility'}}</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n\r\n\r\n <mat-card-actions>\r\n\r\n <div class=\"row \">\r\n\r\n <div class=\"col d-flex justify-content-center\">\r\n <button id=\"btnLogin\" mat-raised-button [disabled]=\"isProcessing\" style=\"width: 100px;\" (click)=\"login()\" color=\"primary\">Login</button>\r\n </div>\r\n\r\n <div class=\"col d-flex justify-content-center\" *ngIf=\"appConfig.selfService\">\r\n <button id=\"btnSignup\" mat-stroked-button color=\"primary\" style=\"width: 100px;\" (click)=\"signup()\">Signup</button>\r\n </div>\r\n\r\n </div>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n <div *ngIf=\"appConfig.selfService\">\r\n <br />\r\n <a mat-button id=\"lnkRecover\" style=\"margin-left: 1em\" (click)=\"recoverAccount()\">Forgot your password ?</a>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div *ngIf=\"style=='default'\" class=\"login-page background tin-bg-login\">\r\n\r\n <div class=\"container\" >\r\n\r\n <div class=\"logo\">\r\n <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n </div>\r\n\r\n <mat-card class=\"mat-elevation-z3 \" style=\"width:400px; \">\r\n\r\n <mat-card-header>\r\n <mat-card-title style=\"font-size: 40px;margin-bottom: 10px; margin-top: 20px; font-weight: 300\">{{appConfig.appName}}</mat-card-title>\r\n </mat-card-header>\r\n\r\n <mat-card-content *ngIf=\"appConfig.localAuth || appConfig.ADAuth\">\r\n\r\n <div class=\"tin-input mt-2\">\r\n\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\"></spa-text>\r\n\r\n <spa-text id=\"txtPassword\" display=\"Password\" format=\"password\" [(value)]=\"user.password\" (enterPress)=\"login()\"></spa-text>\r\n\r\n </div>\r\n\r\n </mat-card-content>\r\n\r\n\r\n <mat-card-actions style=\"margin-bottom: 10px;\">\r\n\r\n <div class=\"button mt-0\" *ngIf=\"appConfig.localAuth || appConfig.ADAuth\">\r\n <button id=\"btnLogin\" mat-flat-button [disabled]=\"isProcessing\" style=\"width: 350px;\" (click)=\"login()\" color=\"primary\">Login</button>\r\n </div>\r\n\r\n <div class=\"button\" *ngIf=\"(appConfig.localAuth || appConfig.ADAuth) && appConfig.selfService\" >\r\n <button id=\"btnSignup\" mat-stroked-button color=\"primary\" style=\"width: 350px;\" (click)=\"signup()\">Sign up with Email</button>\r\n </div>\r\n\r\n <div class=\"button\" *ngIf=\"appConfig.googleAuth\">\r\n <asl-google-signin-button type='standard' width=\"350px\" size='medium' logo_alignment=\"center\" style=\"text-align: center;\"></asl-google-signin-button>\r\n </div>\r\n\r\n </mat-card-actions>\r\n\r\n </mat-card>\r\n\r\n <a *ngIf=\"appConfig.selfService\" mat-button id=\"lnkRecover\" style=\"margin-top: 1em\" (click)=\"recoverAccount()\">Forgot your password ?</a>\r\n\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div *ngIf=\"style=='bs'\">\r\n\r\n <div class=\"container\">\r\n\r\n <div class=\"image\">\r\n <img class=\"mb-4\" src=\"c:\\Tinashe\\Code\\Angular\\Junk\\bs-examples\\assets\\brand\\bootstrap-logo.svg\" alt=\"\" width=\"72\" height=\"57\">\r\n </div>\r\n\r\n <div class=\"details\">\r\n <h1 class=\"h3 mb-3 fw-normal\" >Please sign in</h1>\r\n\r\n <div class=\"form-floating\">\r\n <input class=\"form-control\" id=\"floatingInput\" placeholder=\"name@example.com\" [(ngModel)]=\"user.userName\">\r\n <label for=\"floatingInput\">Username</label>\r\n </div>\r\n\r\n <div class=\"form-floating\">\r\n <input type=\"password\" class=\"form-control\" id=\"floatingPassword\" placeholder=\"Password\" [(ngModel)]=\"user.password\">\r\n <label for=\"floatingPassword\">Password</label>\r\n </div>\r\n\r\n <div class=\"form-check text-start my-3\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"remember-me\" id=\"flexCheckDefault\" >\r\n <label class=\"form-check-label\" for=\"flexCheckDefault\">\r\n Remember me\r\n </label>\r\n </div>\r\n\r\n <button class=\"btn btn-primary w-100 py-2\" (click)=\"login()\">Sign in</button>\r\n\r\n </div>\r\n\r\n <p class=\"mt-5 mb-3 text-body-secondary\">&copy; 2017\u20132023</p>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n\r\n\r\n <div *ngIf=\"style=='modern'\" class=\"modern-login\">\r\n <mat-card class=\"login-card\">\r\n <!-- Logo -->\r\n <div class=\"logo-container\">\r\n <img *ngIf=\"appConfig.logoSize=='normal'\" [src]=\"appConfig.logo\" style=\"width: 100px\" />\r\n <img *ngIf=\"appConfig.logoSize=='medium'\" [src]=\"appConfig.logo\" style=\"width: 150px\" />\r\n <img *ngIf=\"appConfig.logoSize=='large'\" [src]=\"appConfig.logo\" style=\"width: 250px\" />\r\n </div>\r\n\r\n <!-- Welcome text -->\r\n <mat-card-header>\r\n <mat-card-title style=\"font-size: 30px;margin-bottom: 10px; margin-top: 20px; font-weight: 300\">{{appConfig.loginTitle ?? appConfig.appName}}</mat-card-title>\r\n <mat-card-subtitle class=\"mt-2\" *ngIf=\"appConfig.loginMessage\">{{appConfig.loginMessage}}</mat-card-subtitle>\r\n </mat-card-header>\r\n\r\n <mat-card-content>\r\n <div class=\"login-form\">\r\n <!-- Username -->\r\n <spa-text id=\"txtuserName\" display=\"Username\" [(value)]=\"user.userName\" [appearance]=\"'outline'\"></spa-text>\r\n\r\n <!-- Password -->\r\n <spa-text id=\"txtPassword\" display=\"Password\" format=\"password\" [(value)]=\"user.password\" [appearance]=\"'outline'\" (enterPress)=\"login()\"></spa-text>\r\n\r\n <!-- Login Button -->\r\n <div class=\"button-container\">\r\n <button id=\"btnLogin\" mat-flat-button color=\"primary\" [disabled]=\"isProcessing\" (click)=\"login()\">\r\n Login\r\n </button>\r\n </div>\r\n\r\n <!-- Divider -->\r\n <div class=\"divider\">\r\n <span>OR</span>\r\n </div>\r\n\r\n <!-- Social Login -->\r\n <div *ngIf=\"appConfig.googleAuth\" class=\"social-login\">\r\n <asl-google-signin-button type='standard' size='medium' width=\"350\" logo_alignment=\"center\"></asl-google-signin-button>\r\n </div>\r\n\r\n <!-- Links -->\r\n <div class=\"links-container mb-5\">\r\n <a *ngIf=\"appConfig.selfService\" mat-button id=\"lnkRecover\" color=\"primary\" (click)=\"recoverAccount()\">\r\n Forgot password?\r\n </a>\r\n\r\n <div *ngIf=\"appConfig.selfService\" class=\"signup-container\">\r\n <span>Don't have an account?</span>\r\n <a mat-button id=\"btnSignup\" color=\"primary\" (click)=\"signup()\">Sign up</a>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n\r\n <mat-card-footer>\r\n <div class=\"terms-container\">\r\n <mat-divider></mat-divider>\r\n <p class=\"terms-text\">\r\n By continuing, you acknowledge that you accept our\r\n <a mat-button color=\"primary\" class=\"terms-link\" [href]=\"appConfig.termsUrl\" target=\"_blank\">Terms and Conditions</a>\r\n and\r\n <a mat-button color=\"primary\" class=\"terms-link\" [href]=\"appConfig.privacyUrl\" target=\"_blank\">Privacy Policy</a>.\r\n </p>\r\n </div>\r\n </mat-card-footer>\r\n </mat-card>\r\n</div>\r\n\r\n\r\n\r\n", styles: [".login-page{position:absolute;inset:0;overflow:auto}.background{min-height:100%}.container{display:flex;flex-direction:column;align-items:center;height:100vh}.logo{margin-top:3em;margin-bottom:1em}.buttons{display:flex;flex-direction:row;justify-content:space-evenly}.button{display:flex;flex-direction:row;justify-content:center;margin-top:10px}.modern-login{min-height:100vh;display:flex;align-items:center;justify-content:center;background-color:#000}.login-card{width:100%;max-width:400px;padding:24px}.logo-container{text-align:center;margin-bottom:24px}.mat-card-header{text-align:center;justify-content:center;margin-bottom:24px}.mat-card-title{margin:0;font-size:24px;font-weight:400}.mat-card-subtitle{margin:8px 0 0}.login-form{display:flex;flex-direction:column}.button-container button{width:100%;margin-top:10px}.divider{position:relative;text-align:center;margin:10px 0}.divider:before{content:\"\";position:absolute;top:50%;left:0;right:0;height:1px;background:#e0e0e0}.divider span{background:white;padding:0 16px;color:#666;font-size:14px;position:relative}.social-login{display:flex;justify-content:center}.links-container{text-align:center;margin-top:16px}.signup-container{margin-top:16px;color:#0009}.signup-container span{margin-right:8px}.terms-container{margin-top:24px;padding:16px}.terms-text{color:#0009;font-size:12px;text-align:center;margin:16px 0 0;line-height:1.5}.terms-link{padding:0 4px;min-width:auto;line-height:inherit;height:auto}\n"] }]
137
138
  }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.StorageService }, { type: i3.Router }, { type: i4.MessageService }, { type: i5.DataServiceLib }, { type: i6.AuthService }, { type: i7.LogService }, { type: i3.ActivatedRoute }, { type: i8.SocialAuthService }, { type: i9.NotificationsService }]; } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3BhZ2VzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEQsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsV0FBd0IsRUFBVSxjQUE4QixFQUFTLE1BQWMsRUFBVSxjQUE4QixFQUFTLFdBQTJCLEVBQzlLLFdBQXdCLEVBQVUsVUFBc0IsRUFBVSxLQUFxQixFQUFVLGFBQWdDLEVBQVUsb0JBQTBDO1FBRDFLLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUM5SyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUFVLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUEyQzlMLFVBQUssR0FBVyxTQUFTLENBQUM7UUFFMUIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBSWYsU0FBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBdER3SyxDQUFDO0lBRXJNLFFBQVE7UUFHTixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtTQUNsRTthQUFJO1lBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUE7U0FDM0I7UUFJRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBc0IsRUFBRSxFQUFFO1lBRWhFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBRTdCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVk7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBRXpDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVmLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQztJQUVsRSxDQUFDO0lBa0JNLE1BQU07UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLEtBQUs7UUFHVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUMzRCxPQUFPO1NBQ1I7UUFHRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUd6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtRQUV2QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFO1lBRXZFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBRzFCLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFFdkIsMkVBQTJFO2dCQUMzRSwyRUFBMkU7Z0JBQzNFLFlBQVk7Z0JBQ1osSUFBSTtnQkFFSixxRUFBcUU7Z0JBQ3JFLDJFQUEyRTtnQkFDM0UsWUFBWTtnQkFDWixJQUFJO2dCQUdKLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV0QyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXhFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRXBGLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFFdkYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFHbkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRWxDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBRzlCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRTtvQkFFbkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO3dCQUNsRCxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTt3QkFDOUMsbUJBQW1CLEVBQUUsT0FBTzt3QkFDNUIsa0JBQWtCLEVBQUUsS0FBSztxQkFDMUIsQ0FBQyxDQUFDO29CQUNILE9BQU07aUJBQ1A7Z0JBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUkzQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7YUFDekI7UUFDSCxDQUFDLEVBQ0MsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBRTFCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLENBQUE7U0FDOUM7SUFFSCxDQUFDOzsyR0EvSlUsY0FBYzsrRkFBZCxjQUFjLGlEQ2xCM0IsMHpUQXNQQTsyRkRwT2EsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGF0YWxpYi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXBwQ29uZmlnLCBBcGlSZXNwb25zZSwgQ29uc3RhbnRzIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvQ2xhc3Nlc1wiO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU29jaWFsQXV0aFNlcnZpY2UsIFNvY2lhbFVzZXIgfSBmcm9tICdAYWJhY3JpdHQvYW5ndWxhcngtc29jaWFsLWxvZ2luJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL0xpYkNsYXNzZXNcIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9ucy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzcGEtbG9naW5cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2xvZ2luLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2xvZ2luLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlLCBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSwgcHVibGljIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHVibGljIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZUxpYixcclxuICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgbG9nU2VydmljZTogTG9nU2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgc29jaWFsU2VydmljZTogU29jaWFsQXV0aFNlcnZpY2UsIHByaXZhdGUgbm90aWZpY2F0aW9uc1NlcnZpY2U6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcblxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5hcHBDb25maWdPYnNlcnYuc3Vic2NyaWJlKHggPT4gdGhpcy5hcHBDb25maWcgPSB4KTtcclxuXHJcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInJlZGlyZWN0VG9cIl0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucmVkaXJlY3RQYXRoID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInJlZGlyZWN0VG9cIl1cclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnJlZGlyZWN0UGF0aCA9IFwiaG9tZVwiXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmF1dG9Mb2dpbk9ic2Vydi5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgIHRoaXMuYXV0b0xvZ2luID0geFxyXG4gICAgICBjb25zb2xlLmxvZyhcIkFVVE8gTE9HSU4gOlwiICsgdGhpcy5hdXRvTG9naW4pXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc29jaWFsVXNlciA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zb2NpYWxTZXJ2aWNlLmF1dGhTdGF0ZS5zdWJzY3JpYmUoKHNvY2lhbFVzZXI6IFNvY2lhbFVzZXIpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuc29jaWFsVXNlciA9IHNvY2lhbFVzZXI7XHJcblxyXG4gICAgICB0aGlzLnVzZXIudXNlck5hbWUgPSBzb2NpYWxVc2VyLmlkO1xyXG4gICAgICB0aGlzLnVzZXIucGFzc3dvcmQgPSBzb2NpYWxVc2VyLmlkOyAvL2R1bW15IGRhdGFcclxuICAgICAgdGhpcy51c2VyLnRva2VuID0gc29jaWFsVXNlci5pZFRva2VuO1xyXG4gICAgICB0aGlzLnVzZXIuYXV0aFR5cGUgPSBzb2NpYWxVc2VyLnByb3ZpZGVyO1xyXG5cclxuICAgICAgdGhpcy5sb2dpbigpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuYXV0aFNlcnZpY2UubG9nb2ZmKCk7XHJcbiAgICB0aGlzLnN0eWxlID0gdGhpcy5kYXRhU2VydmljZS5hcHBDb25maWcubG9naW5TdHlsZSA/PyAnZGVmYXVsdCc7XHJcblxyXG4gIH1cclxuXHJcbiAgYXV0b0xvZ2luOiBib29sZWFuO1xyXG4gIHNvY2lhbFVzZXI6IFNvY2lhbFVzZXIgfCBudWxsO1xyXG5cclxuICBzdHlsZTogc3RyaW5nID0gXCJkZWZhdWx0XCI7XHJcblxyXG4gIGVtYWlsOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICByZWRpcmVjdFBhdGhcclxuXHJcbiAgcHVibGljIHVzZXIgPSBuZXcgVXNlcigpO1xyXG4gIGhpZGUgPSB0cnVlO1xyXG4gIGlzUHJvY2Vzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhcHBDb25maWcgPSBuZXcgQXBwQ29uZmlnKCk7XHJcblxyXG4gIHB1YmxpYyBzaWdudXAoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJzaWdudXBcIl0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlY292ZXJBY2NvdW50KCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wicmVjb3Zlci1hY2NvdW50XCJdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dpbigpIHtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMudXNlci51c2VyTmFtZSA9PSBcIlwiIHx8IHRoaXMudXNlci5wYXNzd29yZCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgZW50ZXIgeW91ciBjcmVkZW50aWFsc1wiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmxvZ1NlcnZpY2UuaW5mbyhcImxvZ2dpbmcgaW5cIik7XHJcblxyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlO1xyXG5cclxuXHJcbiAgICB0aGlzLnVzZXIudXNlck5hbWUgPSB0aGlzLnVzZXIudXNlck5hbWVcclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkxvZ2luKHRoaXMudXNlcikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuXHJcbiAgICAgICAgLy8gaWYgKGFwaVJlc3BvbnNlLmRhdGEuYXV0aFR5cGUgPT0gJ2xvY2FsJyAmJiAhdGhpcy5hcHBDb25maWcubG9jYWxBdXRoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiQ29udGFjdCBBZG1pbjogQXV0aGVudGljYXRpb24gVHlwZSBlcnJvclwiKTtcclxuICAgICAgICAvLyAgIHJldHVybjtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIC8vIGlmIChhcGlSZXNwb25zZS5kYXRhLmF1dGhUeXBlID09ICdBRCcgJiYgIXRoaXMuYXBwQ29uZmlnLkFEQXV0aCkge1xyXG4gICAgICAgIC8vICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkNvbnRhY3QgQWRtaW46IEF1dGhlbnRpY2F0aW9uIFR5cGUgZXJyb3JcIik7XHJcbiAgICAgICAgLy8gICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG5cclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5VcGRhdGVsb2dnZWRpbih0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5VcGRhdGVUb2tlbihhcGlSZXNwb25zZS5kYXRhLnRva2VuKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1RPS0VOLCBhcGlSZXNwb25zZS5kYXRhLnRva2VuKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5VcGRhdGVUb2tlbkV4cGlyZShhcGlSZXNwb25zZS5kYXRhLmV4cGlyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfVE9LRU5fRVhQSVJFLCBhcGlSZXNwb25zZS5kYXRhLmV4cGlyYXRpb24pO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLlVwZGF0ZUN1cnJlbnRVc2VyKHRoaXMudXNlci51c2VyTmFtZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9VU0VSLCB0aGlzLnVzZXIudXNlck5hbWUpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnVwZGF0ZUxvZ2dlZFVzZXJGdWxsTmFtZShhcGlSZXNwb25zZS5kYXRhLmZpcnN0TmFtZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9OQU1FLCBhcGlSZXNwb25zZS5kYXRhLmZpcnN0TmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlUm9sZShhcGlSZXNwb25zZS5kYXRhLnJvbGUpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfUk9MRVMsIEpTT04uc3RyaW5naWZ5KGFwaVJlc3BvbnNlLmRhdGEucm9sZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnVwZGF0ZVRlbmFudE5hbWUoYXBpUmVzcG9uc2UuZGF0YS50ZW5hbnROYW1lKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1RFTkFOVF9OQU1FLCBhcGlSZXNwb25zZS5kYXRhLnRlbmFudE5hbWUpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5sb2dTZXJ2aWNlLmluZm8oXCJsb2dnZWQgaW5cIik7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2xlYXJDYWNoZSgpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLmRhdGEuY2hhbmdlUGFzc3dvcmQgPT0gdHJ1ZSAmJiBhcGlSZXNwb25zZS5kYXRhLmF1dGhUeXBlID09ICdsb2NhbCcpIHtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJob21lL3VzZXIvY2hhbmdlLXBhc3N3b3JkXCJdLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHJlZGlyZWN0VG86IHRoaXMucmVkaXJlY3RQYXRoIH0sXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yZWRpcmVjdFBhdGhdKTtcclxuXHJcblxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy51c2VyLnBhc3N3b3JkID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdCh0aGlzLmh0dHBTZXJ2aWNlLkVycm9yKGVycm9yKSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBub3RpZmljYXRpb25zKCl7XHJcbiAgICBpZiAodGhpcy5hcHBDb25maWcubXVsdGl0ZW5hbnQpe1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmxvYWROb3RpZmljYXRpb25zKClcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiXHJcbiAgPGRpdiAqbmdJZj1cInN0eWxlPT0nb2xkJ1wiIGNsYXNzPVwidGluLWJnLWxvZ2luIGxvZ2luLXBhZ2VcIj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ28hPScnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciByb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjNlbTttYXJnaW4tYm90dG9tOjFlbVwiPlxyXG5cclxuICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J25vcm1hbCdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDEwMHB4O21hcmdpbi1yaWdodDozZW07bWFyZ2luLWxlZnQ6M2VtXCIgLz5cclxuICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J21lZGl1bSdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDE1MHB4O21hcmdpbi1yaWdodDozZW07bWFyZ2luLWxlZnQ6M2VtXCIgLz5cclxuICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J2xhcmdlJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMjUwcHg7IG1hcmdpbi1yaWdodDozZW07bWFyZ2luLWxlZnQ6M2VtXCIgLz5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImFwcENvbmZpZy5sb2dvID09JydcIiBzdHlsZT1cIm1hcmdpbi10b3A6MmVtXCI+XHJcbiAgICAgICAgPCEtLSBBZGQgbWFyZ2luIHRvcCB3aGVuIHRoZXJlIGlzIG5vIGxvZ28gLS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cIm1hcmdpbi10b3A6M2VtO1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLXNtLWJsb2NrXCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjFlbVwiPlxyXG5cclxuICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXozIGxvZ2luLWNhcmRcIiBzdHlsZT1cIndpZHRoOjQwMHB4OyBcIj5cclxuXHJcbiAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+e3thcHBDb25maWcuYXBwTmFtZX19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dCBtdC0yXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dHVzZXJOYW1lXCIgZGlzcGxheT1cIlVzZXJuYW1lXCIgWyh2YWx1ZSldPVwidXNlci51c2VyTmFtZVwiID48L3NwYS10ZXh0PlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5QYXNzd29yZDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwidHh0UGFzc3dvcmRcIiBtYXRJbnB1dCBbdHlwZV09XCJoaWRlID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiICAoa2V5dXAuZW50ZXIpPVwibG9naW4oKVwiIFsobmdNb2RlbCldPVwidXNlci5wYXNzd29yZFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiID5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiaGlkZSA9ICFoaWRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInSGlkZSBwYXNzd29yZCdcIiBbYXR0ci5hcmlhLXByZXNzZWRdPVwiaGlkZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XCI+e3toaWRlID8gJ3Zpc2liaWxpdHlfb2ZmJyA6ICd2aXNpYmlsaXR5J319PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG5cclxuICAgICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0bkxvZ2luXCIgIG1hdC1yYWlzZWQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc1Byb2Nlc3NpbmdcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiAoY2xpY2spPVwibG9naW4oKVwiIGNvbG9yPVwicHJpbWFyeVwiPkxvZ2luPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cImFwcENvbmZpZy5zZWxmU2VydmljZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ0blNpZ251cFwiIG1hdC1zdHJva2VkLWJ1dHRvbiAgY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgKGNsaWNrKT1cInNpZ251cCgpXCI+U2lnbnVwPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhcHBDb25maWcuc2VsZlNlcnZpY2VcIj5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGEgbWF0LWJ1dHRvbiBpZD1cImxua1JlY292ZXJcIiAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMWVtXCIgKGNsaWNrKT1cInJlY292ZXJBY2NvdW50KClcIj5Gb3Jnb3QgeW91ciBwYXNzd29yZCA/PC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInN0eWxlPT0nZGVmYXVsdCdcIiBjbGFzcz1cImxvZ2luLXBhZ2UgYmFja2dyb3VuZCB0aW4tYmctbG9naW5cIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImxvZ29cIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ29TaXplPT0nbm9ybWFsJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiAvPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdtZWRpdW0nXCIgIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweFwiIC8+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J2xhcmdlJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMjUwcHhcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejMgXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDsgXCI+XHJcblxyXG4gICAgICAgIDxtYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICA8bWF0LWNhcmQtdGl0bGUgc3R5bGU9XCJmb250LXNpemU6IDQwcHg7bWFyZ2luLWJvdHRvbTogMTBweDsgbWFyZ2luLXRvcDogMjBweDsgZm9udC13ZWlnaHQ6IDMwMFwiPnt7YXBwQ29uZmlnLmFwcE5hbWV9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50ICpuZ0lmPVwiYXBwQ29uZmlnLmxvY2FsQXV0aCB8fCBhcHBDb25maWcuQURBdXRoXCI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbi1pbnB1dCBtdC0yXCI+XHJcblxyXG4gICAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHR1c2VyTmFtZVwiIGRpc3BsYXk9XCJVc2VybmFtZVwiIFsodmFsdWUpXT1cInVzZXIudXNlck5hbWVcIj48L3NwYS10ZXh0PlxyXG5cclxuICAgICAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0UGFzc3dvcmRcIiBkaXNwbGF5PVwiUGFzc3dvcmRcIiBmb3JtYXQ9XCJwYXNzd29yZFwiIFsodmFsdWUpXT1cInVzZXIucGFzc3dvcmRcIiAoZW50ZXJQcmVzcyk9XCJsb2dpbigpXCI+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuXHJcbiAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24gbXQtMFwiICpuZ0lmPVwiYXBwQ29uZmlnLmxvY2FsQXV0aCB8fCBhcHBDb25maWcuQURBdXRoXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Mb2dpblwiIG1hdC1mbGF0LWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgc3R5bGU9XCJ3aWR0aDogMzUwcHg7XCIgKGNsaWNrKT1cImxvZ2luKClcIiBjb2xvcj1cInByaW1hcnlcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvblwiICpuZ0lmPVwiKGFwcENvbmZpZy5sb2NhbEF1dGggfHwgYXBwQ29uZmlnLkFEQXV0aCkgJiYgYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCIgPlxyXG4gICAgICAgICAgICA8YnV0dG9uICBpZD1cImJ0blNpZ251cFwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIndpZHRoOiAzNTBweDtcIiAoY2xpY2spPVwic2lnbnVwKClcIj5TaWduIHVwIHdpdGggRW1haWw8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cImFwcENvbmZpZy5nb29nbGVBdXRoXCI+XHJcbiAgICAgICAgICAgIDxhc2wtZ29vZ2xlLXNpZ25pbi1idXR0b24gdHlwZT0nc3RhbmRhcmQnIHdpZHRoPVwiMzUwcHhcIiBzaXplPSdtZWRpdW0nIGxvZ29fYWxpZ25tZW50PVwiY2VudGVyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+PC9hc2wtZ29vZ2xlLXNpZ25pbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICAgICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICAgIDxhICpuZ0lmPVwiYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCIgbWF0LWJ1dHRvbiBpZD1cImxua1JlY292ZXJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDFlbVwiIChjbGljayk9XCJyZWNvdmVyQWNjb3VudCgpXCI+Rm9yZ290IHlvdXIgcGFzc3dvcmQgPzwvYT5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzdHlsZT09J2JzJ1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJtYi00XCIgc3JjPVwiYzpcXFRpbmFzaGVcXENvZGVcXEFuZ3VsYXJcXEp1bmtcXGJzLWV4YW1wbGVzXFxhc3NldHNcXGJyYW5kXFxib290c3RyYXAtbG9nby5zdmdcIiBhbHQ9XCJcIiB3aWR0aD1cIjcyXCIgaGVpZ2h0PVwiNTdcIj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc1wiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cImgzIG1iLTMgZnctbm9ybWFsXCIgPlBsZWFzZSBzaWduIGluPC9oMT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmxvYXRpbmdcIj5cclxuICAgICAgICAgIDxpbnB1dCAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZsb2F0aW5nSW5wdXRcIiBwbGFjZWhvbGRlcj1cIm5hbWVAZXhhbXBsZS5jb21cIiBbKG5nTW9kZWwpXT1cInVzZXIudXNlck5hbWVcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmbG9hdGluZ0lucHV0XCI+VXNlcm5hbWU8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1mbG9hdGluZ1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmbG9hdGluZ1Bhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIFsobmdNb2RlbCldPVwidXNlci5wYXNzd29yZFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZsb2F0aW5nUGFzc3dvcmRcIj5QYXNzd29yZDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIHRleHQtc3RhcnQgbXktM1wiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwicmVtZW1iZXItbWVcIiBpZD1cImZsZXhDaGVja0RlZmF1bHRcIiA+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZmxleENoZWNrRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICBSZW1lbWJlciBtZVxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBweS0yXCIgIChjbGljayk9XCJsb2dpbigpXCI+U2lnbiBpbjwvYnV0dG9uPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cCBjbGFzcz1cIm10LTUgbWItMyB0ZXh0LWJvZHktc2Vjb25kYXJ5XCI+JmNvcHk7IDIwMTfigJMyMDIzPC9wPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuXHJcbiA8ZGl2ICpuZ0lmPVwic3R5bGU9PSdtb2Rlcm4nXCIgY2xhc3M9XCJtb2Rlcm4tbG9naW5cIj5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJsb2dpbi1jYXJkXCI+XHJcbiAgICA8IS0tIExvZ28gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ29TaXplPT0nbm9ybWFsJ1wiIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIC8+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J21lZGl1bSdcIiBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHhcIiAvPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdsYXJnZSdcIiBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMjUwcHhcIiAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBXZWxjb21lIHRleHQgLS0+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICA8bWF0LWNhcmQtdGl0bGUgc3R5bGU9XCJmb250LXNpemU6IDMwcHg7bWFyZ2luLWJvdHRvbTogMTBweDsgbWFyZ2luLXRvcDogMjBweDsgZm9udC13ZWlnaHQ6IDMwMFwiPnt7YXBwQ29uZmlnLmxvZ2luVGl0bGUgPz8gYXBwQ29uZmlnLmFwcE5hbWV9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgIDxtYXQtY2FyZC1zdWJ0aXRsZSBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImFwcENvbmZpZy5sb2dpbk1lc3NhZ2VcIj57e2FwcENvbmZpZy5sb2dpbk1lc3NhZ2V9fTwvbWF0LWNhcmQtc3VidGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWZvcm1cIj5cclxuICAgICAgICA8IS0tIFVzZXJuYW1lIC0tPlxyXG4gICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dHVzZXJOYW1lXCIgZGlzcGxheT1cIlVzZXJuYW1lXCIgWyh2YWx1ZSldPVwidXNlci51c2VyTmFtZVwiIFthcHBlYXJhbmNlXT1cIidvdXRsaW5lJ1wiPjwvc3BhLXRleHQ+XHJcblxyXG4gICAgICAgIDwhLS0gUGFzc3dvcmQgLS0+XHJcbiAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0UGFzc3dvcmRcIiBkaXNwbGF5PVwiUGFzc3dvcmRcIiBmb3JtYXQ9XCJwYXNzd29yZFwiIFsodmFsdWUpXT1cInVzZXIucGFzc3dvcmRcIiBbYXBwZWFyYW5jZV09XCInb3V0bGluZSdcIiAoZW50ZXJQcmVzcyk9XCJsb2dpbigpXCI+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgPCEtLSBMb2dpbiBCdXR0b24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Mb2dpblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgKGNsaWNrKT1cImxvZ2luKClcIj5cclxuICAgICAgICAgICAgTG9naW5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERpdmlkZXIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj5cclxuICAgICAgICAgIDxzcGFuPk9SPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFNvY2lhbCBMb2dpbiAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwQ29uZmlnLmdvb2dsZUF1dGhcIiBjbGFzcz1cInNvY2lhbC1sb2dpblwiPlxyXG4gICAgICAgICAgPGFzbC1nb29nbGUtc2lnbmluLWJ1dHRvbiB0eXBlPSdzdGFuZGFyZCcgc2l6ZT0nbWVkaXVtJyB3aWR0aD1cIjM1MFwiIGxvZ29fYWxpZ25tZW50PVwiY2VudGVyXCI+PC9hc2wtZ29vZ2xlLXNpZ25pbi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTGlua3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxpbmtzLWNvbnRhaW5lciBtYi01XCI+XHJcbiAgICAgICAgICA8YSAqbmdJZj1cImFwcENvbmZpZy5zZWxmU2VydmljZVwiIG1hdC1idXR0b24gaWQ9XCJsbmtSZWNvdmVyXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInJlY292ZXJBY2NvdW50KClcIj5cclxuICAgICAgICAgICAgRm9yZ290IHBhc3N3b3JkP1xyXG4gICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhcHBDb25maWcuc2VsZlNlcnZpY2VcIiBjbGFzcz1cInNpZ251cC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4+RG9uJ3QgaGF2ZSBhbiBhY2NvdW50Pzwvc3Bhbj5cclxuICAgICAgICAgICAgPGEgbWF0LWJ1dHRvbiBpZD1cImJ0blNpZ251cFwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzaWdudXAoKVwiPlNpZ24gdXA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcblxyXG4gICAgPG1hdC1jYXJkLWZvb3Rlcj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRlcm1zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXJtcy10ZXh0XCI+XHJcbiAgICAgICAgICAgIEJ5IGNvbnRpbnVpbmcsIHlvdSBhY2tub3dsZWRnZSB0aGF0IHlvdSBhY2NlcHQgb3VyXHJcbiAgICAgICAgICAgIDxhIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJ0ZXJtcy1saW5rXCIgW2hyZWZdPVwiYXBwQ29uZmlnLnRlcm1zVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+VGVybXMgYW5kIENvbmRpdGlvbnM8L2E+XHJcbiAgICAgICAgICAgIGFuZFxyXG4gICAgICAgICAgICA8YSBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwidGVybXMtbGlua1wiIFtocmVmXT1cImFwcENvbmZpZy5wcml2YWN5VXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UHJpdmFjeSBQb2xpY3k8L2E+LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG4gIDwvbWF0LWNhcmQ+XHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3BhZ2VzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9wYWdlcy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEQsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsV0FBd0IsRUFBVSxjQUE4QixFQUFTLE1BQWMsRUFBVSxjQUE4QixFQUFTLFdBQTJCLEVBQzlLLFdBQXdCLEVBQVUsVUFBc0IsRUFBVSxLQUFxQixFQUFVLGFBQWdDLEVBQVUsb0JBQTBDO1FBRDFLLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUM5SyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUFVLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUEyQzlMLFVBQUssR0FBVyxTQUFTLENBQUM7UUFFMUIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBSWYsU0FBSSxH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LEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFFMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBQztZQUM3QixJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtTQUM5QztJQUVILENBQUM7OzJHQWxLVSxjQUFjOytGQUFkLGNBQWMsaURDbEIzQiwwelRBc1BBOzJGRHBPYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUxpYiB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9kYXRhbGliLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBcHBDb25maWcsIEFwaVJlc3BvbnNlLCBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9DbGFzc2VzXCI7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2h0dHAuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTb2NpYWxBdXRoU2VydmljZSwgU29jaWFsVXNlciB9IGZyb20gJ0BhYmFjcml0dC9hbmd1bGFyeC1zb2NpYWwtbG9naW4nO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvTGliQ2xhc3Nlc1wiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb25zLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInNwYS1sb2dpblwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vbG9naW4uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbG9naW4uY29tcG9uZW50LmNzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLCBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLFxyXG4gICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSBzb2NpYWxTZXJ2aWNlOiBTb2NpYWxBdXRoU2VydmljZSwgcHJpdmF0ZSBub3RpZmljYXRpb25zU2VydmljZTogTm90aWZpY2F0aW9uc1NlcnZpY2UgICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwcENvbmZpZ09ic2Vydi5zdWJzY3JpYmUoeCA9PiB0aGlzLmFwcENvbmZpZyA9IHgpO1xyXG5cclxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1wicmVkaXJlY3RUb1wiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yZWRpcmVjdFBhdGggPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1wicmVkaXJlY3RUb1wiXVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMucmVkaXJlY3RQYXRoID0gXCJob21lXCJcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuYXV0b0xvZ2luT2JzZXJ2LnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgdGhpcy5hdXRvTG9naW4gPSB4XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQVVUTyBMT0dJTiA6XCIgKyB0aGlzLmF1dG9Mb2dpbilcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5zb2NpYWxVc2VyID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNvY2lhbFNlcnZpY2UuYXV0aFN0YXRlLnN1YnNjcmliZSgoc29jaWFsVXNlcjogU29jaWFsVXNlcikgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zb2NpYWxVc2VyID0gc29jaWFsVXNlcjtcclxuXHJcbiAgICAgIHRoaXMudXNlci51c2VyTmFtZSA9IHNvY2lhbFVzZXIuaWQ7XHJcbiAgICAgIHRoaXMudXNlci5wYXNzd29yZCA9IHNvY2lhbFVzZXIuaWQ7IC8vZHVtbXkgZGF0YVxyXG4gICAgICB0aGlzLnVzZXIudG9rZW4gPSBzb2NpYWxVc2VyLmlkVG9rZW47XHJcbiAgICAgIHRoaXMudXNlci5hdXRoVHlwZSA9IHNvY2lhbFVzZXIucHJvdmlkZXI7XHJcblxyXG4gICAgICB0aGlzLmxvZ2luKCk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gdGhpcy5hdXRoU2VydmljZS5sb2dvZmYoKTtcclxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLmRhdGFTZXJ2aWNlLmFwcENvbmZpZy5sb2dpblN0eWxlID8/ICdkZWZhdWx0JztcclxuXHJcbiAgfVxyXG5cclxuICBhdXRvTG9naW46IGJvb2xlYW47XHJcbiAgc29jaWFsVXNlcjogU29jaWFsVXNlciB8IG51bGw7XHJcblxyXG4gIHN0eWxlOiBzdHJpbmcgPSBcImRlZmF1bHRcIjtcclxuXHJcbiAgZW1haWw6IHN0cmluZyA9IFwiXCI7XHJcbiAgcGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHJlZGlyZWN0UGF0aFxyXG5cclxuICBwdWJsaWMgdXNlciA9IG5ldyBVc2VyKCk7XHJcbiAgaGlkZSA9IHRydWU7XHJcbiAgaXNQcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuXHJcbiAgcHVibGljIHNpZ251cCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcInNpZ251cFwiXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVjb3ZlckFjY291bnQoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJyZWNvdmVyLWFjY291bnRcIl0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ2luKCkge1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy51c2VyLnVzZXJOYW1lID09IFwiXCIgfHwgdGhpcy51c2VyLnBhc3N3b3JkID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBlbnRlciB5b3VyIGNyZWRlbnRpYWxzXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMubG9nU2VydmljZS5pbmZvKFwibG9nZ2luZyBpblwiKTtcclxuXHJcbiAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IHRydWU7XHJcblxyXG5cclxuICAgIHRoaXMudXNlci51c2VyTmFtZSA9IHRoaXMudXNlci51c2VyTmFtZVxyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuTG9naW4odGhpcy51c2VyKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xyXG5cclxuICAgICAgICAvLyBpZiAoYXBpUmVzcG9uc2UuZGF0YS5hdXRoVHlwZSA9PSAnbG9jYWwnICYmICF0aGlzLmFwcENvbmZpZy5sb2NhbEF1dGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJDb250YWN0IEFkbWluOiBBdXRoZW50aWNhdGlvbiBUeXBlIGVycm9yXCIpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gaWYgKGFwaVJlc3BvbnNlLmRhdGEuYXV0aFR5cGUgPT0gJ0FEJyAmJiAhdGhpcy5hcHBDb25maWcuQURBdXRoKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiQ29udGFjdCBBZG1pbjogQXV0aGVudGljYXRpb24gVHlwZSBlcnJvclwiKTtcclxuICAgICAgICAvLyAgIHJldHVybjtcclxuICAgICAgICAvLyB9XHJcblxyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLlVwZGF0ZWxvZ2dlZGluKHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLlVwZGF0ZVRva2VuKGFwaVJlc3BvbnNlLmRhdGEudG9rZW4pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfVE9LRU4sIGFwaVJlc3BvbnNlLmRhdGEudG9rZW4pO1xyXG5cclxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLlVwZGF0ZVRva2VuRXhwaXJlKGFwaVJlc3BvbnNlLmRhdGEuZXhwaXJhdGlvbik7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9UT0tFTl9FWFBJUkUsIGFwaVJlc3BvbnNlLmRhdGEuZXhwaXJhdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuVXBkYXRlQ3VycmVudFVzZXIodGhpcy51c2VyLnVzZXJOYW1lKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX1VTRVIsIHRoaXMudXNlci51c2VyTmFtZSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXBkYXRlTG9nZ2VkVXNlckZ1bGxOYW1lKGFwaVJlc3BvbnNlLmRhdGEuZmlyc3ROYW1lKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnN0b3JlKENvbnN0YW50cy5BVVRIX05BTUUsIGFwaVJlc3BvbnNlLmRhdGEuZmlyc3ROYW1lKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5VcGRhdGVSb2xlKGFwaVJlc3BvbnNlLmRhdGEucm9sZSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zdG9yZShDb25zdGFudHMuQVVUSF9ST0xFUywgSlNPTi5zdHJpbmdpZnkoYXBpUmVzcG9uc2UuZGF0YS5yb2xlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UudXBkYXRlVGVuYW50TmFtZShhcGlSZXNwb25zZS5kYXRhLnRlbmFudE5hbWUpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc3RvcmUoQ29uc3RhbnRzLkFVVEhfVEVOQU5UX05BTUUsIGFwaVJlc3BvbnNlLmRhdGEudGVuYW50TmFtZSk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuaW5mbyhcImxvZ2dlZCBpblwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5DbGVhckNhY2hlKCk7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucygpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKGFwaVJlc3BvbnNlLmRhdGEuY2hhbmdlUGFzc3dvcmQgPT0gdHJ1ZSAmJiBhcGlSZXNwb25zZS5kYXRhLmF1dGhUeXBlID09ICdsb2NhbCcpIHtcclxuXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJob21lL3VzZXIvY2hhbmdlLXBhc3N3b3JkXCJdLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHJlZGlyZWN0VG86IHRoaXMucmVkaXJlY3RQYXRoIH0sXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yZWRpcmVjdFBhdGhdKTtcclxuXHJcblxyXG5cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMudXNlci5wYXNzd29yZCA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QodGhpcy5odHRwU2VydmljZS5FcnJvcihlcnJvcikpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbm90aWZpY2F0aW9ucygpe1xyXG4gICAgaWYgKHRoaXMuYXBwQ29uZmlnLm11bHRpdGVuYW50KXtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5sb2FkTm90aWZpY2F0aW9ucygpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIlxyXG4gIDxkaXYgKm5nSWY9XCJzdHlsZT09J29sZCdcIiBjbGFzcz1cInRpbi1iZy1sb2dpbiBsb2dpbi1wYWdlXCI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImFwcENvbmZpZy5sb2dvIT0nJ1wiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwibWFyZ2luLXRvcDozZW07bWFyZ2luLWJvdHRvbToxZW1cIj5cclxuXHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdub3JtYWwnXCIgIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxMDBweDttYXJnaW4tcmlnaHQ6M2VtO21hcmdpbi1sZWZ0OjNlbVwiIC8+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdtZWRpdW0nXCIgIFtzcmNdPVwiYXBwQ29uZmlnLmxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweDttYXJnaW4tcmlnaHQ6M2VtO21hcmdpbi1sZWZ0OjNlbVwiIC8+XHJcbiAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdsYXJnZSdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDI1MHB4OyBtYXJnaW4tcmlnaHQ6M2VtO21hcmdpbi1sZWZ0OjNlbVwiIC8+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJhcHBDb25maWcubG9nbyA9PScnXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjJlbVwiPlxyXG4gICAgICAgIDwhLS0gQWRkIG1hcmdpbiB0b3Agd2hlbiB0aGVyZSBpcyBubyBsb2dvIC0tPlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciByb3cgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjNlbTtcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1zbS1ibG9ja1wiPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDoxZW1cIj5cclxuXHJcbiAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MyBsb2dpbi1jYXJkXCIgc3R5bGU9XCJ3aWR0aDo0MDBweDsgXCI+XHJcblxyXG4gICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPnt7YXBwQ29uZmlnLmFwcE5hbWV9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXQgbXQtMlwiPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHR1c2VyTmFtZVwiIGRpc3BsYXk9XCJVc2VybmFtZVwiIFsodmFsdWUpXT1cInVzZXIudXNlck5hbWVcIiA+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkID5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+UGFzc3dvcmQ8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInR4dFBhc3N3b3JkXCIgbWF0SW5wdXQgW3R5cGVdPVwiaGlkZSA/ICdwYXNzd29yZCcgOiAndGV4dCdcIiAgKGtleXVwLmVudGVyKT1cImxvZ2luKClcIiBbKG5nTW9kZWwpXT1cInVzZXIucGFzc3dvcmRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiA+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImhpZGUgPSAhaGlkZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hpZGUgcGFzc3dvcmQnXCIgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImhpZGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1wiPnt7aGlkZSA/ICd2aXNpYmlsaXR5X29mZicgOiAndmlzaWJpbGl0eSd9fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuXHJcbiAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5Mb2dpblwiICBtYXQtcmFpc2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNQcm9jZXNzaW5nXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgKGNsaWNrKT1cImxvZ2luKClcIiBjb2xvcj1cInByaW1hcnlcIj5Mb2dpbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJhcHBDb25maWcuc2VsZlNlcnZpY2VcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidG5TaWdudXBcIiBtYXQtc3Ryb2tlZC1idXR0b24gIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIChjbGljayk9XCJzaWdudXAoKVwiPlNpZ251cDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG5cclxuICAgICAgICA8L21hdC1jYXJkPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCI+XHJcbiAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgIDxhIG1hdC1idXR0b24gaWQ9XCJsbmtSZWNvdmVyXCIgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDFlbVwiIChjbGljayk9XCJyZWNvdmVyQWNjb3VudCgpXCI+Rm9yZ290IHlvdXIgcGFzc3dvcmQgPzwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgKm5nSWY9XCJzdHlsZT09J2RlZmF1bHQnXCIgY2xhc3M9XCJsb2dpbi1wYWdlIGJhY2tncm91bmQgdGluLWJnLWxvZ2luXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiID5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dvXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J25vcm1hbCdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgLz5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ29TaXplPT0nbWVkaXVtJ1wiICBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHhcIiAvPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdsYXJnZSdcIiAgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDI1MHB4XCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXozIFwiIHN0eWxlPVwid2lkdGg6NDAwcHg7IFwiPlxyXG5cclxuICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgPG1hdC1jYXJkLXRpdGxlIHN0eWxlPVwiZm9udC1zaXplOiA0MHB4O21hcmdpbi1ib3R0b206IDEwcHg7IG1hcmdpbi10b3A6IDIwcHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj57e2FwcENvbmZpZy5hcHBOYW1lfX08L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG5cclxuICAgICAgICA8bWF0LWNhcmQtY29udGVudCAqbmdJZj1cImFwcENvbmZpZy5sb2NhbEF1dGggfHwgYXBwQ29uZmlnLkFEQXV0aFwiPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW4taW5wdXQgbXQtMlwiPlxyXG5cclxuICAgICAgICAgICAgPHNwYS10ZXh0IGlkPVwidHh0dXNlck5hbWVcIiBkaXNwbGF5PVwiVXNlcm5hbWVcIiBbKHZhbHVlKV09XCJ1c2VyLnVzZXJOYW1lXCI+PC9zcGEtdGV4dD5cclxuXHJcbiAgICAgICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dFBhc3N3b3JkXCIgZGlzcGxheT1cIlBhc3N3b3JkXCIgZm9ybWF0PVwicGFzc3dvcmRcIiBbKHZhbHVlKV09XCJ1c2VyLnBhc3N3b3JkXCIgKGVudGVyUHJlc3MpPVwibG9naW4oKVwiPjwvc3BhLXRleHQ+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuXHJcblxyXG4gICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweDtcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIG10LTBcIiAqbmdJZj1cImFwcENvbmZpZy5sb2NhbEF1dGggfHwgYXBwQ29uZmlnLkFEQXV0aFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTG9naW5cIiBtYXQtZmxhdC1idXR0b24gW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIHN0eWxlPVwid2lkdGg6IDM1MHB4O1wiIChjbGljayk9XCJsb2dpbigpXCIgY29sb3I9XCJwcmltYXJ5XCI+TG9naW48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25cIiAqbmdJZj1cIihhcHBDb25maWcubG9jYWxBdXRoIHx8IGFwcENvbmZpZy5BREF1dGgpICYmIGFwcENvbmZpZy5zZWxmU2VydmljZVwiID5cclxuICAgICAgICAgICAgPGJ1dHRvbiAgaWQ9XCJidG5TaWdudXBcIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJ3aWR0aDogMzUwcHg7XCIgKGNsaWNrKT1cInNpZ251cCgpXCI+U2lnbiB1cCB3aXRoIEVtYWlsPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCJhcHBDb25maWcuZ29vZ2xlQXV0aFwiPlxyXG4gICAgICAgICAgICA8YXNsLWdvb2dsZS1zaWduaW4tYnV0dG9uIHR5cGU9J3N0YW5kYXJkJyB3aWR0aD1cIjM1MHB4XCIgc2l6ZT0nbWVkaXVtJyBsb2dvX2FsaWdubWVudD1cImNlbnRlclwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPjwvYXNsLWdvb2dsZS1zaWduaW4tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuXHJcbiAgICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgICA8YSAqbmdJZj1cImFwcENvbmZpZy5zZWxmU2VydmljZVwiIG1hdC1idXR0b24gaWQ9XCJsbmtSZWNvdmVyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxZW1cIiAoY2xpY2spPVwicmVjb3ZlckFjY291bnQoKVwiPkZvcmdvdCB5b3VyIHBhc3N3b3JkID88L2E+XHJcblxyXG5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2ICpuZ0lmPVwic3R5bGU9PSdicydcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwibWItNFwiIHNyYz1cImM6XFxUaW5hc2hlXFxDb2RlXFxBbmd1bGFyXFxKdW5rXFxicy1leGFtcGxlc1xcYXNzZXRzXFxicmFuZFxcYm9vdHN0cmFwLWxvZ28uc3ZnXCIgYWx0PVwiXCIgd2lkdGg9XCI3MlwiIGhlaWdodD1cIjU3XCI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJoMyBtYi0zIGZ3LW5vcm1hbFwiID5QbGVhc2Ugc2lnbiBpbjwvaDE+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZsb2F0aW5nXCI+XHJcbiAgICAgICAgICA8aW5wdXQgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmbG9hdGluZ0lucHV0XCIgcGxhY2Vob2xkZXI9XCJuYW1lQGV4YW1wbGUuY29tXCIgWyhuZ01vZGVsKV09XCJ1c2VyLnVzZXJOYW1lXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZmxvYXRpbmdJbnB1dFwiPlVzZXJuYW1lPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmxvYXRpbmdcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZmxvYXRpbmdQYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cInVzZXIucGFzc3dvcmRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmbG9hdGluZ1Bhc3N3b3JkXCI+UGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayB0ZXh0LXN0YXJ0IG15LTNcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInJlbWVtYmVyLW1lXCIgaWQ9XCJmbGV4Q2hlY2tEZWZhdWx0XCIgPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0RlZmF1bHRcIj5cclxuICAgICAgICAgICAgUmVtZW1iZXIgbWVcclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgcHktMlwiICAoY2xpY2spPVwibG9naW4oKVwiPlNpZ24gaW48L2J1dHRvbj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHAgY2xhc3M9XCJtdC01IG1iLTMgdGV4dC1ib2R5LXNlY29uZGFyeVwiPiZjb3B5OyAyMDE34oCTMjAyMzwvcD5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcblxyXG4gPGRpdiAqbmdJZj1cInN0eWxlPT0nbW9kZXJuJ1wiIGNsYXNzPVwibW9kZXJuLWxvZ2luXCI+XHJcbiAgPG1hdC1jYXJkIGNsYXNzPVwibG9naW4tY2FyZFwiPlxyXG4gICAgPCEtLSBMb2dvIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZy5sb2dvU2l6ZT09J25vcm1hbCdcIiBbc3JjXT1cImFwcENvbmZpZy5sb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiAvPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJhcHBDb25maWcubG9nb1NpemU9PSdtZWRpdW0nXCIgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDE1MHB4XCIgLz5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnLmxvZ29TaXplPT0nbGFyZ2UnXCIgW3NyY109XCJhcHBDb25maWcubG9nb1wiIHN0eWxlPVwid2lkdGg6IDI1MHB4XCIgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gV2VsY29tZSB0ZXh0IC0tPlxyXG4gICAgPG1hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgPG1hdC1jYXJkLXRpdGxlIHN0eWxlPVwiZm9udC1zaXplOiAzMHB4O21hcmdpbi1ib3R0b206IDEwcHg7IG1hcmdpbi10b3A6IDIwcHg7IGZvbnQtd2VpZ2h0OiAzMDBcIj57e2FwcENvbmZpZy5sb2dpblRpdGxlID8/IGFwcENvbmZpZy5hcHBOYW1lfX08L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICA8bWF0LWNhcmQtc3VidGl0bGUgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJhcHBDb25maWcubG9naW5NZXNzYWdlXCI+e3thcHBDb25maWcubG9naW5NZXNzYWdlfX08L21hdC1jYXJkLXN1YnRpdGxlPlxyXG4gICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcblxyXG4gICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1mb3JtXCI+XHJcbiAgICAgICAgPCEtLSBVc2VybmFtZSAtLT5cclxuICAgICAgICA8c3BhLXRleHQgaWQ9XCJ0eHR1c2VyTmFtZVwiIGRpc3BsYXk9XCJVc2VybmFtZVwiIFsodmFsdWUpXT1cInVzZXIudXNlck5hbWVcIiBbYXBwZWFyYW5jZV09XCInb3V0bGluZSdcIj48L3NwYS10ZXh0PlxyXG5cclxuICAgICAgICA8IS0tIFBhc3N3b3JkIC0tPlxyXG4gICAgICAgIDxzcGEtdGV4dCBpZD1cInR4dFBhc3N3b3JkXCIgZGlzcGxheT1cIlBhc3N3b3JkXCIgZm9ybWF0PVwicGFzc3dvcmRcIiBbKHZhbHVlKV09XCJ1c2VyLnBhc3N3b3JkXCIgW2FwcGVhcmFuY2VdPVwiJ291dGxpbmUnXCIgKGVudGVyUHJlc3MpPVwibG9naW4oKVwiPjwvc3BhLXRleHQ+XHJcblxyXG4gICAgICAgIDwhLS0gTG9naW4gQnV0dG9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGlkPVwiYnRuTG9naW5cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW2Rpc2FibGVkXT1cImlzUHJvY2Vzc2luZ1wiIChjbGljayk9XCJsb2dpbigpXCI+XHJcbiAgICAgICAgICAgIExvZ2luXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+XHJcbiAgICAgICAgICA8c3Bhbj5PUjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTb2NpYWwgTG9naW4gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImFwcENvbmZpZy5nb29nbGVBdXRoXCIgY2xhc3M9XCJzb2NpYWwtbG9naW5cIj5cclxuICAgICAgICAgIDxhc2wtZ29vZ2xlLXNpZ25pbi1idXR0b24gdHlwZT0nc3RhbmRhcmQnIHNpemU9J21lZGl1bScgd2lkdGg9XCIzNTBcIiBsb2dvX2FsaWdubWVudD1cImNlbnRlclwiPjwvYXNsLWdvb2dsZS1zaWduaW4tYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIExpbmtzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rcy1jb250YWluZXIgbWItNVwiPlxyXG4gICAgICAgICAgPGEgKm5nSWY9XCJhcHBDb25maWcuc2VsZlNlcnZpY2VcIiBtYXQtYnV0dG9uIGlkPVwibG5rUmVjb3ZlclwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJyZWNvdmVyQWNjb3VudCgpXCI+XHJcbiAgICAgICAgICAgIEZvcmdvdCBwYXNzd29yZD9cclxuICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXBwQ29uZmlnLnNlbGZTZXJ2aWNlXCIgY2xhc3M9XCJzaWdudXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPkRvbid0IGhhdmUgYW4gYWNjb3VudD88L3NwYW4+XHJcbiAgICAgICAgICAgIDxhIG1hdC1idXR0b24gaWQ9XCJidG5TaWdudXBcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2lnbnVwKClcIj5TaWduIHVwPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxtYXQtY2FyZC1mb290ZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXJtcy1jb250YWluZXJcIj5cclxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwidGVybXMtdGV4dFwiPlxyXG4gICAgICAgICAgICBCeSBjb250aW51aW5nLCB5b3UgYWNrbm93bGVkZ2UgdGhhdCB5b3UgYWNjZXB0IG91clxyXG4gICAgICAgICAgICA8YSBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwidGVybXMtbGlua1wiIFtocmVmXT1cImFwcENvbmZpZy50ZXJtc1VybFwiIHRhcmdldD1cIl9ibGFua1wiPlRlcm1zIGFuZCBDb25kaXRpb25zPC9hPlxyXG4gICAgICAgICAgICBhbmRcclxuICAgICAgICAgICAgPGEgbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInRlcm1zLWxpbmtcIiBbaHJlZl09XCJhcHBDb25maWcucHJpdmFjeVVybFwiIHRhcmdldD1cIl9ibGFua1wiPlByaXZhY3kgUG9saWN5PC9hPi5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuICA8L21hdC1jYXJkPlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuIl19
@@ -57,7 +57,7 @@ export class ButtonService {
57
57
  // Check standard locking/approval rules
58
58
  if ((button.name === 'edit' || button.name === 'delete') && row?.locked)
59
59
  return true;
60
- if (row?.pendingApproval && !button.ignoreApproval && button.name != 'view')
60
+ if (row?.pendingApproval && !button.ignorePendingApproval && button.name != 'view')
61
61
  return true;
62
62
  // Check form access if detailsConfig exists
63
63
  if (button.detailsConfig?.formConfig) {
@@ -74,21 +74,21 @@ export class ButtonService {
74
74
  // Check button-specific disabled rules
75
75
  return button.disabled ? button.disabled(row) : false;
76
76
  }
77
- testVisible(button, row, config) {
77
+ testVisible(button, row, tableConfig) {
78
78
  if (button.visible && !button.visible(row)) {
79
79
  return false;
80
80
  }
81
81
  const currentRole = this.authService.currentRoleSource.value;
82
82
  // Check if button has detailsConfig with form restrictions
83
- if (button.detailsConfig?.formConfig) {
83
+ if (button.detailsConfig?.formConfig?.security) {
84
84
  const access = Core.getFormAccess(button.detailsConfig.formConfig, currentRole);
85
85
  if (!this.hasRequiredAccess(access, button.name)) {
86
86
  return false;
87
87
  }
88
88
  }
89
89
  // For create/edit/view buttons, check table's formConfig
90
- if (['create', 'edit', 'view', 'delete'].includes(button.name) && config?.formConfig) {
91
- const access = Core.getFormAccess(config.formConfig, currentRole);
90
+ if (['create', 'edit', 'view', 'delete'].includes(button.name) && tableConfig?.formConfig?.security) {
91
+ const access = Core.getFormAccess(tableConfig.formConfig, currentRole);
92
92
  if (!this.hasRequiredAccess(access, button.name)) {
93
93
  return false;
94
94
  }
@@ -145,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
145
145
  providedIn: 'root'
146
146
  }]
147
147
  }], ctorParameters: function () { return [{ type: i1.AuthService }]; } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvYnV0dG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVUsVUFBVSxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFFckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFLMUMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBRWpELFNBQVMsQ0FBQyxPQUFpQixFQUFFLElBQVk7UUFDdkMsT0FBTyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWMsRUFBRSxHQUFRLEVBQUUsTUFBbUI7UUFPL0QsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDdkMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUNsQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO1lBQzlDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3JDLElB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QU8sS0FBSyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxDQUFDLE9BQU8sWUFBWSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFpQjtRQUMvQixPQUFPLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUV6QixJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtZQUN4RSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBRWYsQ0FBQzs7MEdBaktVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgUm9sZUFjY2VzcywgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHsgfVxyXG5cclxuICBnZXRCdXR0b24oYnV0dG9uczogQnV0dG9uW10sIG5hbWU6IHN0cmluZyk6IEJ1dHRvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIGJ1dHRvbnM/LmZpbmQoeCA9PiB4Lm5hbWUgPT09IG5hbWUpIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Qcm9wZXJ0aWVzKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHtcclxuICAgIGNvbG9yOiBzdHJpbmcsXHJcbiAgICBpY29uOiBzdHJpbmcsXHJcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcclxuICAgIHZpc2libGU6IGJvb2xlYW4sXHJcbiAgICB0aXA6IHN0cmluZ1xyXG4gIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sb3I6IHRoaXMuZ2V0QnV0dG9uQ29sb3IoYnV0dG9uLCByb3cpLFxyXG4gICAgICBpY29uOiB0aGlzLmdldEljb24oYnV0dG9uLCBjb25maWcpLFxyXG4gICAgICBkaXNhYmxlZDogdGhpcy50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpLFxyXG4gICAgICB2aXNpYmxlOiB0aGlzLnRlc3RWaXNpYmxlKGJ1dHRvbiwgcm93LCBjb25maWcpLFxyXG4gICAgICB0aXA6IGJ1dHRvbi50aXAgfHwgYnV0dG9uLm5hbWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Db2xvcihidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMudGVzdERpc2FibGVkKGJ1dHRvbiwgcm93KSkgcmV0dXJuICdsaWdodGdyYXknO1xyXG5cclxuICAgIGlmIChidXR0b24/LmNvbG9yKSByZXR1cm4gYnV0dG9uLmNvbG9yO1xyXG4gICAgaWYgKGJ1dHRvbi5pY29uPy5jb2xvcikgcmV0dXJuIGJ1dHRvbi5pY29uLmNvbG9yO1xyXG5cclxuICAgIGNvbnN0IGNvbG9yTWFwID0ge1xyXG4gICAgICAnZGVsZXRlJzogJyNGNDQzMzYnLFxyXG4gICAgICAnY3JlYXRlJzogJ2dyZWVuJ1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gY29sb3JNYXBbYnV0dG9uLm5hbWVdIHx8ICcjNDA1MEI1JztcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gaXNCdXR0b25WaXNpYmxlKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgaXNMb2FkQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAvLyAgIGlmICghaXNMb2FkQ29tcGxldGUpIHJldHVybiBmYWxzZTtcclxuICAvLyAgIHJldHVybiB0aGlzLnRlc3RWaXNpYmxlKGJ1dHRvbixyb3cpO1xyXG4gIC8vIH1cclxuXHJcbiAgZ2V0VGl0bGVBY3Rpb24obW9kZTogc3RyaW5nLCBidXR0b25zOiBCdXR0b25bXSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtb2RlTWFwID0ge1xyXG4gICAgICAndmlldyc6ICdWaWV3JyxcclxuICAgICAgJ2VkaXQnOiBidXR0b25zPy5maW5kKGIgPT4gYi5uYW1lID09PSAnZWRpdCcpPy5kaXNwbGF5IHx8ICdFZGl0JyxcclxuICAgICAgJ2NyZWF0ZSc6IGJ1dHRvbnM/LmZpbmQoYiA9PiBiLm5hbWUgPT09ICdjcmVhdGUnKT8uZGlzcGxheSB8fCAnQ3JlYXRlJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBtb2RlTWFwW21vZGVdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgaXNUYWJWaXNpYmxlKHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRhYmxlQ29uZmlnLmhpZGVUYWJDb25kaXRpb24gPyAhdGFibGVDb25maWcuaGlkZVRhYkNvbmRpdGlvbih0YWJsZUNvbmZpZy5wYXJlbnREYXRhKSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKGJ1dHRvbjogQnV0dG9uLCBjb25maWc6IFRhYmxlQ29uZmlnKTogc3RyaW5nIHtcclxuICAgIGlmIChidXR0b24uaWNvbikge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLmljb24ubmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRJY29uKGJ1dHRvbi5uYW1lLCBjb25maWcuZmxhdEJ1dHRvbnMpO1xyXG4gIH1cclxuXHJcbiAgdGVzdERpc2FibGVkKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgY29uZmlnPzogVGFibGVDb25maWcpOiBib29sZWFuIHtcclxuXHJcbiAgICAvLyBDaGVjayBzdGFuZGFyZCBsb2NraW5nL2FwcHJvdmFsIHJ1bGVzXHJcbiAgICBpZiAoKGJ1dHRvbi5uYW1lID09PSAnZWRpdCcgfHwgYnV0dG9uLm5hbWUgPT09ICdkZWxldGUnKSAmJiByb3c/LmxvY2tlZCkgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAocm93Py5wZW5kaW5nQXBwcm92YWwgJiYgIWJ1dHRvbi5pZ25vcmVBcHByb3ZhbCAmJiBidXR0b24ubmFtZSAhPSAndmlldycpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIC8vIENoZWNrIGZvcm0gYWNjZXNzIGlmIGRldGFpbHNDb25maWcgZXhpc3RzXHJcbiAgICBpZiAoYnV0dG9uLmRldGFpbHNDb25maWc/LmZvcm1Db25maWcpIHtcclxuICAgICAgY29uc3QgYWNjZXNzID0gQ29yZS5nZXRGb3JtQWNjZXNzKGJ1dHRvbi5kZXRhaWxzQ29uZmlnLmZvcm1Db25maWcsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpO1xyXG4gICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzLCBidXR0b24ubmFtZSkpIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZvcm0gYWNjZXNzIGxldmVscyBmcm9tIHRhYmxlIGNvbmZpZ1xyXG4gICAgaWYgKFsnY3JlYXRlJywgJ2VkaXQnLCAndmlldycsICdkZWxldGUnXS5pbmNsdWRlcyhidXR0b24ubmFtZSkgJiYgY29uZmlnPy5mb3JtQ29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGFjY2VzcyA9IENvcmUuZ2V0Rm9ybUFjY2Vzcyhjb25maWcuZm9ybUNvbmZpZywgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSk7XHJcbiAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3MsIGJ1dHRvbi5uYW1lKSkgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgYnV0dG9uLXNwZWNpZmljIGRpc2FibGVkIHJ1bGVzXHJcbiAgICByZXR1cm4gYnV0dG9uLmRpc2FibGVkID8gYnV0dG9uLmRpc2FibGVkKHJvdykgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgY29uZmlnPzogVGFibGVDb25maWcpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoYnV0dG9uLnZpc2libGUgJiYgIWJ1dHRvbi52aXNpYmxlKHJvdykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRSb2xlID0gdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBidXR0b24gaGFzIGRldGFpbHNDb25maWcgd2l0aCBmb3JtIHJlc3RyaWN0aW9uc1xyXG4gICAgaWYgKGJ1dHRvbi5kZXRhaWxzQ29uZmlnPy5mb3JtQ29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGFjY2VzcyA9IENvcmUuZ2V0Rm9ybUFjY2VzcyhidXR0b24uZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnLCBjdXJyZW50Um9sZSk7XHJcbiAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3MsIGJ1dHRvbi5uYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBjcmVhdGUvZWRpdC92aWV3IGJ1dHRvbnMsIGNoZWNrIHRhYmxlJ3MgZm9ybUNvbmZpZ1xyXG4gICAgaWYgKFsnY3JlYXRlJywgJ2VkaXQnLCAndmlldycsICdkZWxldGUnXS5pbmNsdWRlcyhidXR0b24ubmFtZSkgJiYgY29uZmlnPy5mb3JtQ29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGFjY2VzcyA9IENvcmUuZ2V0Rm9ybUFjY2Vzcyhjb25maWcuZm9ybUNvbmZpZywgY3VycmVudFJvbGUpO1xyXG4gICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzLCBidXR0b24ubmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzOiBSb2xlQWNjZXNzLCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoYnV0dG9uTmFtZSkge1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICByZXR1cm4gYWNjZXNzID49IFJvbGVBY2Nlc3MuVmlldztcclxuICAgICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgICAgcmV0dXJuIGFjY2VzcyA+PSBSb2xlQWNjZXNzLkVkaXQ7XHJcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XHJcbiAgICAgICAgcmV0dXJuIGFjY2VzcyA+PSBSb2xlQWNjZXNzLkNyZWF0ZTtcclxuICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICByZXR1cm4gYWNjZXNzID49IFJvbGVBY2Nlc3MuRnVsbDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQ3VzdG9tIGJ1dHRvbnMgZG9uJ3QgcmVxdWlyZSBzcGVjaWZpYyBhY2Nlc3NcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdENvbG9yKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbk5hbWUpIHtcclxuICAgICAgY2FzZSAnZGVsZXRlJzogcmV0dXJuICcjRjQ0MzM2JztcclxuICAgICAgY2FzZSAnY3JlYXRlJzogcmV0dXJuICdncmVlbic7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnIzQwNTBCNSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRJY29uKGJ1dHRvbk5hbWU6IHN0cmluZywgZmxhdEJ1dHRvbnM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHJldHVybiBmbGF0QnV0dG9ucyA/ICdvcGVuX2luX25ldycgOiAncGFnZXZpZXcnO1xyXG4gICAgICBjYXNlICdlZGl0JzogcmV0dXJuICdlZGl0JztcclxuICAgICAgY2FzZSAnZGVsZXRlJzogcmV0dXJuICdkZWxldGUnO1xyXG4gICAgICBjYXNlICdjcmVhdGUnOiByZXR1cm4gJ2FkZCc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnbW9yZV9ob3Jpeic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDcmVhdGVCdXR0b24oYnV0dG9uczogQnV0dG9uW10pOiBCdXR0b24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGJ1dHRvbnM/LmZpbmQoYnV0dG9uID0+IGJ1dHRvbj8ubmFtZSA9PT0gJ2NyZWF0ZScpO1xyXG4gIH1cclxuXHJcbiAgaXNGb3JtQnV0dG9uKGJ1dHRvbjogQnV0dG9uKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKGJ1dHRvbj8uYWN0aW9uPy51cmw/LmluY2x1ZGVzKCcvZm9ybScpIHx8IGJ1dHRvbj8uYWN0aW9uPy5pc0Zvcm1EYXRhKSB7XHJcbiAgICAgIGJ1dHRvbi5hY3Rpb24uaXNGb3JtRGF0YSA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG59XHJcbiJdfQ==
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvYnV0dG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVUsVUFBVSxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFFckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFLMUMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBRWpELFNBQVMsQ0FBQyxPQUFpQixFQUFFLElBQVk7UUFDdkMsT0FBTyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWMsRUFBRSxHQUFRLEVBQUUsTUFBbUI7UUFPL0QsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDdkMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztZQUNsQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO1lBQzlDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJO1NBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3JDLElB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S0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztZQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLFlBQVksQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBaUI7UUFDL0IsT0FBTyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFFekIsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7WUFDeEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUVmLENBQUM7OzBHQWxLVSxhQUFhOzhHQUFiLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCdXR0b24sIFJvbGVBY2Nlc3MsIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmUgfSBmcm9tICcuLi9jbGFzc2VzL1RpbkNvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnV0dG9uU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7IH1cclxuXHJcbiAgZ2V0QnV0dG9uKGJ1dHRvbnM6IEJ1dHRvbltdLCBuYW1lOiBzdHJpbmcpOiBCdXR0b24gfCBudWxsIHtcclxuICAgIHJldHVybiBidXR0b25zPy5maW5kKHggPT4geC5uYW1lID09PSBuYW1lKSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uUHJvcGVydGllcyhidXR0b246IEJ1dHRvbiwgcm93OiBhbnksIGNvbmZpZzogVGFibGVDb25maWcpOiB7XHJcbiAgICBjb2xvcjogc3RyaW5nLFxyXG4gICAgaWNvbjogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4sXHJcbiAgICB2aXNpYmxlOiBib29sZWFuLFxyXG4gICAgdGlwOiBzdHJpbmdcclxuICB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbG9yOiB0aGlzLmdldEJ1dHRvbkNvbG9yKGJ1dHRvbiwgcm93KSxcclxuICAgICAgaWNvbjogdGhpcy5nZXRJY29uKGJ1dHRvbiwgY29uZmlnKSxcclxuICAgICAgZGlzYWJsZWQ6IHRoaXMudGVzdERpc2FibGVkKGJ1dHRvbiwgcm93KSxcclxuICAgICAgdmlzaWJsZTogdGhpcy50ZXN0VmlzaWJsZShidXR0b24sIHJvdywgY29uZmlnKSxcclxuICAgICAgdGlwOiBidXR0b24udGlwIHx8IGJ1dHRvbi5uYW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnRlc3REaXNhYmxlZChidXR0b24sIHJvdykpIHJldHVybiAnbGlnaHRncmF5JztcclxuXHJcbiAgICBpZiAoYnV0dG9uPy5jb2xvcikgcmV0dXJuIGJ1dHRvbi5jb2xvcjtcclxuICAgIGlmIChidXR0b24uaWNvbj8uY29sb3IpIHJldHVybiBidXR0b24uaWNvbi5jb2xvcjtcclxuXHJcbiAgICBjb25zdCBjb2xvck1hcCA9IHtcclxuICAgICAgJ2RlbGV0ZSc6ICcjRjQ0MzM2JyxcclxuICAgICAgJ2NyZWF0ZSc6ICdncmVlbidcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGNvbG9yTWFwW2J1dHRvbi5uYW1lXSB8fCAnIzQwNTBCNSc7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIGlzQnV0dG9uVmlzaWJsZShidXR0b246IEJ1dHRvbiwgcm93OiBhbnksIGlzTG9hZENvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgLy8gICBpZiAoIWlzTG9hZENvbXBsZXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgLy8gICByZXR1cm4gdGhpcy50ZXN0VmlzaWJsZShidXR0b24scm93KTtcclxuICAvLyB9XHJcblxyXG4gIGdldFRpdGxlQWN0aW9uKG1vZGU6IHN0cmluZywgYnV0dG9uczogQnV0dG9uW10pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbW9kZU1hcCA9IHtcclxuICAgICAgJ3ZpZXcnOiAnVmlldycsXHJcbiAgICAgICdlZGl0JzogYnV0dG9ucz8uZmluZChiID0+IGIubmFtZSA9PT0gJ2VkaXQnKT8uZGlzcGxheSB8fCAnRWRpdCcsXHJcbiAgICAgICdjcmVhdGUnOiBidXR0b25zPy5maW5kKGIgPT4gYi5uYW1lID09PSAnY3JlYXRlJyk/LmRpc3BsYXkgfHwgJ0NyZWF0ZSdcclxuICAgIH07XHJcbiAgICByZXR1cm4gbW9kZU1hcFttb2RlXSB8fCAnJztcclxuICB9XHJcblxyXG4gIGlzVGFiVmlzaWJsZSh0YWJsZUNvbmZpZzogVGFibGVDb25maWcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0YWJsZUNvbmZpZy5oaWRlVGFiQ29uZGl0aW9uID8gIXRhYmxlQ29uZmlnLmhpZGVUYWJDb25kaXRpb24odGFibGVDb25maWcucGFyZW50RGF0YSkgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SWNvbihidXR0b246IEJ1dHRvbiwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoYnV0dG9uLmljb24pIHtcclxuICAgICAgcmV0dXJuIGJ1dHRvbi5pY29uLm5hbWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0SWNvbihidXR0b24ubmFtZSwgY29uZmlnLmZsYXRCdXR0b25zKTtcclxuICB9XHJcblxyXG4gIHRlc3REaXNhYmxlZChidXR0b246IEJ1dHRvbiwgcm93OiBhbnksIGNvbmZpZz86IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcblxyXG4gICAgLy8gQ2hlY2sgc3RhbmRhcmQgbG9ja2luZy9hcHByb3ZhbCBydWxlc1xyXG4gICAgaWYgKChidXR0b24ubmFtZSA9PT0gJ2VkaXQnIHx8IGJ1dHRvbi5uYW1lID09PSAnZGVsZXRlJykgJiYgcm93Py5sb2NrZWQpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHJvdz8ucGVuZGluZ0FwcHJvdmFsICYmICFidXR0b24uaWdub3JlUGVuZGluZ0FwcHJvdmFsICYmIGJ1dHRvbi5uYW1lICE9ICd2aWV3JykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9ybSBhY2Nlc3MgaWYgZGV0YWlsc0NvbmZpZyBleGlzdHNcclxuICAgIGlmIChidXR0b24uZGV0YWlsc0NvbmZpZz8uZm9ybUNvbmZpZykge1xyXG4gICAgICBjb25zdCBhY2Nlc3MgPSBDb3JlLmdldEZvcm1BY2Nlc3MoYnV0dG9uLmRldGFpbHNDb25maWcuZm9ybUNvbmZpZywgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSk7XHJcbiAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3MsIGJ1dHRvbi5uYW1lKSkgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9ybSBhY2Nlc3MgbGV2ZWxzIGZyb20gdGFibGUgY29uZmlnXHJcbiAgICBpZiAoWydjcmVhdGUnLCAnZWRpdCcsICd2aWV3JywgJ2RlbGV0ZSddLmluY2x1ZGVzKGJ1dHRvbi5uYW1lKSAmJiBjb25maWc/LmZvcm1Db25maWcpIHtcclxuICAgICAgY29uc3QgYWNjZXNzID0gQ29yZS5nZXRGb3JtQWNjZXNzKGNvbmZpZy5mb3JtQ29uZmlnLCB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlKTtcclxuICAgICAgaWYgKCF0aGlzLmhhc1JlcXVpcmVkQWNjZXNzKGFjY2VzcywgYnV0dG9uLm5hbWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBidXR0b24tc3BlY2lmaWMgZGlzYWJsZWQgcnVsZXNcclxuICAgIHJldHVybiBidXR0b24uZGlzYWJsZWQgPyBidXR0b24uZGlzYWJsZWQocm93KSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdGVzdFZpc2libGUoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55LCB0YWJsZUNvbmZpZz86IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcblxyXG5cclxuICAgIGlmIChidXR0b24udmlzaWJsZSAmJiAhYnV0dG9uLnZpc2libGUocm93KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFJvbGUgPSB0aGlzLmF1dGhTZXJ2aWNlLmN1cnJlbnRSb2xlU291cmNlLnZhbHVlO1xyXG5cclxuICAgIC8vIENoZWNrIGlmIGJ1dHRvbiBoYXMgZGV0YWlsc0NvbmZpZyB3aXRoIGZvcm0gcmVzdHJpY3Rpb25zXHJcbiAgICBpZiAoYnV0dG9uLmRldGFpbHNDb25maWc/LmZvcm1Db25maWc/LnNlY3VyaXR5KSB7XHJcbiAgICAgIGNvbnN0IGFjY2VzcyA9IENvcmUuZ2V0Rm9ybUFjY2VzcyhidXR0b24uZGV0YWlsc0NvbmZpZy5mb3JtQ29uZmlnLCBjdXJyZW50Um9sZSk7XHJcbiAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3MsIGJ1dHRvbi5uYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBjcmVhdGUvZWRpdC92aWV3IGJ1dHRvbnMsIGNoZWNrIHRhYmxlJ3MgZm9ybUNvbmZpZ1xyXG4gICAgaWYgKFsnY3JlYXRlJywgJ2VkaXQnLCAndmlldycsICdkZWxldGUnXS5pbmNsdWRlcyhidXR0b24ubmFtZSkgJiYgdGFibGVDb25maWc/LmZvcm1Db25maWc/LnNlY3VyaXR5KSB7XHJcbiAgICAgIGNvbnN0IGFjY2VzcyA9IENvcmUuZ2V0Rm9ybUFjY2Vzcyh0YWJsZUNvbmZpZy5mb3JtQ29uZmlnLCBjdXJyZW50Um9sZSk7XHJcbiAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3MsIGJ1dHRvbi5uYW1lKSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3M6IFJvbGVBY2Nlc3MsIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHJldHVybiBhY2Nlc3MgPj0gUm9sZUFjY2Vzcy5WaWV3O1xyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICByZXR1cm4gYWNjZXNzID49IFJvbGVBY2Nlc3MuRWRpdDtcclxuICAgICAgY2FzZSAnY3JlYXRlJzpcclxuICAgICAgICByZXR1cm4gYWNjZXNzID49IFJvbGVBY2Nlc3MuQ3JlYXRlO1xyXG4gICAgICBjYXNlICdkZWxldGUnOlxyXG4gICAgICAgIHJldHVybiBhY2Nlc3MgPj0gUm9sZUFjY2Vzcy5GdWxsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBDdXN0b20gYnV0dG9ucyBkb24ndCByZXF1aXJlIHNwZWNpZmljIGFjY2Vzc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q29sb3IoYnV0dG9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoYnV0dG9uTmFtZSkge1xyXG4gICAgICBjYXNlICdkZWxldGUnOiByZXR1cm4gJyNGNDQzMzYnO1xyXG4gICAgICBjYXNlICdjcmVhdGUnOiByZXR1cm4gJ2dyZWVuJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICcjNDA1MEI1JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEljb24oYnV0dG9uTmFtZTogc3RyaW5nLCBmbGF0QnV0dG9uczogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbk5hbWUpIHtcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgcmV0dXJuIGZsYXRCdXR0b25zID8gJ29wZW5faW5fbmV3JyA6ICdwYWdldmlldyc7XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiByZXR1cm4gJ2VkaXQnO1xyXG4gICAgICBjYXNlICdkZWxldGUnOiByZXR1cm4gJ2RlbGV0ZSc7XHJcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6IHJldHVybiAnYWRkJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdtb3JlX2hvcml6JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENyZWF0ZUJ1dHRvbihidXR0b25zOiBCdXR0b25bXSk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gYnV0dG9ucz8uZmluZChidXR0b24gPT4gYnV0dG9uPy5uYW1lID09PSAnY3JlYXRlJyk7XHJcbiAgfVxyXG5cclxuICBpc0Zvcm1CdXR0b24oYnV0dG9uOiBCdXR0b24pOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoYnV0dG9uPy5hY3Rpb24/LnVybD8uaW5jbHVkZXMoJy9mb3JtJykgfHwgYnV0dG9uPy5hY3Rpb24/LmlzRm9ybURhdGEpIHtcclxuICAgICAgYnV0dG9uLmFjdGlvbi5pc0Zvcm1EYXRhID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIl19