UNPKG

ui-logon-angular

Version:

Refer [UI-Logon](https://www.npmjs.com/package/ui-logon).

120 lines 26.7 kB
import { Component, ElementRef, Inject, Input, ViewChild } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { User } from './user'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/cdk/text-field"; import * as i3 from "./logon.service"; import * as i4 from "ui-message-angular"; import * as i5 from "@angular/forms"; import * as i6 from "@angular/common"; export class LogonComponent { constructor(document, router, route, autofill, logonService, messageService) { this.document = document; this.router = router; this.route = route; this.autofill = autofill; this.logonService = logonService; this.messageService = messageService; this.user = new User; this.isWaiting = false; this.title = 'Logon Portal'; this.userLabel = 'User ID'; this.pwdLabel = 'Password'; this.btnLabel = 'Logon'; this.redirectUrl = ''; this.redirectPath = ''; this.host = ''; } ngOnInit() { this.autofill.monitor(this.inputUserID.nativeElement); this.autofill.monitor(this.inputPassword.nativeElement); if (this.route.snapshot.data['title']) { this.title = this.route.snapshot.data['title']; } if (this.route.snapshot.data['userLabel']) { this.userLabel = this.route.snapshot.data['userLabel']; } if (this.route.snapshot.data['pwdLabel']) { this.pwdLabel = this.route.snapshot.data['pwdLabel']; } if (this.route.snapshot.data['btnLabel']) { this.btnLabel = this.route.snapshot.data['btnLabel']; } if (this.route.snapshot.data['redirectUrl']) { this.redirectUrl = this.route.snapshot.data['redirectUrl']; } if (this.route.snapshot.data['redirectPath']) { this.redirectPath = this.route.snapshot.data['redirectPath']; } if (this.route.snapshot.data['host']) { this.host = this.route.snapshot.data['host']; } this.logonService.setHost(this.host); } ngOnDestroy() { this.autofill.stopMonitoring(this.inputUserID.nativeElement); this.autofill.stopMonitoring(this.inputPassword.nativeElement); } logon() { this.isWaiting = true; this.logonService.logon(this.user.userid, this.user.password).subscribe(data => { this.isWaiting = false; if (!data) { return; } if (data.err) { if (Array.isArray(data.err)) { data.err.forEach(err => this.messageService.add(err)); } else { this.messageService.report(data.err); } } else { this.user.displayName = data.user['DISPLAY_NAME']; this.user.userid = data.user['USER_ID']; this.user.username = data.user['USER_NAME']; this.user.locked = data.user['LOCK']; this.user.pwdState = data.user['PWD_STATE']; this.user.name = data.user['GIVEN_NAME']; if (this.redirectPath) { this.router.navigateByUrl(this.redirectPath); } else if (this.redirectUrl) { this.document.location.href = this.redirectUrl; } } }); } } LogonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: LogonComponent, deps: [{ token: DOCUMENT }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.AutofillMonitor }, { token: i3.LogonService }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Component }); LogonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: LogonComponent, selector: "dk-logon", inputs: { title: "title", userLabel: "userLabel", pwdLabel: "pwdLabel", btnLabel: "btnLabel", redirectUrl: "redirectUrl", redirectPath: "redirectPath", host: "host" }, viewQueries: [{ propertyName: "inputUserID", first: true, predicate: ["inputUserID"], descendants: true, read: ElementRef, static: true }, { propertyName: "inputPassword", first: true, predicate: ["inputPassword"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<form class=\"dk-form-logon\" (ngSubmit)=\"logon()\">\n <fieldset [disabled]=\"isWaiting\">\n <div class=\"text-center dk-mb-4\">\n <!--<img class=\"mb-4\" src=\"https://getbootstrap.com/assets/brand/bootstrap-solid.svg\" alt=\"\" width=\"72\" height=\"72\">-->\n <h1 class=\"dk-form-title dk-mb-3 font-weight-normal\">{{title}}</h1>\n </div>\n\n <div class=\"dk-message-area\">\n <dk-message></dk-message>\n </div>\n\n <div class=\"dk-form-label-group\">\n <input type=\"text\" id=\"inputUserID\" name=\"inputUserID\" #inputUserID class=\"form-control dk-form-control\"\n [(ngModel)]=\"user.userid\" placeholder=\"User ID\" required=\"\" autofocus=\"\">\n <label for=\"inputUserID\">{{userLabel}}</label>\n </div>\n\n <div class=\"dk-form-label-group\">\n <input type=\"password\" id=\"inputPassword\" name=\"inputPassword\" #inputPassword class=\"form-control dk-form-control\"\n [(ngModel)]=\"user.password\" placeholder=\"Password\" required=\"\">\n <label for=\"inputPassword\">{{pwdLabel}}</label>\n </div>\n\n <button class=\"btn dk-btn-lg btn-primary btn-block\" type=\"submit\">\n <i *ngIf=\"isWaiting\" class=\"fas fa-spinner fa-spin\"></i> {{btnLabel}}\n </button>\n </fieldset>\n</form>\n\n", styles: [".dk-form-logon{width:100%;max-width:420px;padding:15px;margin:0 auto;line-height:1.5;--input-padding-x: .75rem;--input-padding-y: .75rem}.dk-form-logon label{margin-bottom:.5rem;font-size:1rem}.dk-message-area{margin-bottom:.5rem}.dk-mb-3{margin-bottom:1rem}.dk-mb-4{margin-bottom:1.5rem}.dk-form-title{font-size:1.75rem;line-height:1.2;color:inherit;font-family:inherit}.dk-form-label-group{position:relative;margin-bottom:1rem}.dk-form-control{font-size:1rem;border-radius:.25rem;height:calc(2.9rem + 2px)}.dk-form-label-group>input,.dk-form-label-group>label{padding:var(--input-padding-y) var(--input-padding-x)}.dk-form-label-group>label{position:absolute;top:0;left:0;display:block;width:100%;margin-bottom:0;line-height:1.5;color:#495057;border:1px solid transparent;border-radius:.25rem;transition:all .1s ease-in-out}.dk-form-label-group input:-ms-input-placeholder{color:transparent}.dk-form-label-group input::-moz-placeholder{color:transparent}.dk-form-label-group input::placeholder{color:transparent}.dk-form-label-group input:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start;-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}.dk-form-label-group input:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}.dk-form-label-group input:not(:-moz-placeholder-shown){padding-top:calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));padding-bottom:calc(var(--input-padding-y) / 3)}.dk-form-label-group input:not(:-ms-input-placeholder){padding-top:calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));padding-bottom:calc(var(--input-padding-y) / 3)}.dk-form-label-group input:not(:placeholder-shown),.dk-form-label-group input.cdk-text-field-autofilled{padding-top:calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));padding-bottom:calc(var(--input-padding-y) / 3)}.dk-form-label-group input:not(:-moz-placeholder-shown)~label{padding-top:calc(var(--input-padding-y) / 3);padding-bottom:calc(var(--input-padding-y) / 3);font-size:.75rem;color:#777}.dk-form-label-group input:not(:-ms-input-placeholder)~label{padding-top:calc(var(--input-padding-y) / 3);padding-bottom:calc(var(--input-padding-y) / 3);font-size:.75rem;color:#777}.dk-form-label-group input:not(:placeholder-shown)~label,.dk-form-label-group input.cdk-text-field-autofilled~label{padding-top:calc(var(--input-padding-y) / 3);padding-bottom:calc(var(--input-padding-y) / 3);font-size:.75rem;color:#777}.dk-btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}\n"], components: [{ type: i4.MessageComponent, selector: "dk-message" }], directives: [{ type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: LogonComponent, decorators: [{ type: Component, args: [{ selector: 'dk-logon', template: "<form class=\"dk-form-logon\" (ngSubmit)=\"logon()\">\n <fieldset [disabled]=\"isWaiting\">\n <div class=\"text-center dk-mb-4\">\n <!--<img class=\"mb-4\" src=\"https://getbootstrap.com/assets/brand/bootstrap-solid.svg\" alt=\"\" width=\"72\" height=\"72\">-->\n <h1 class=\"dk-form-title dk-mb-3 font-weight-normal\">{{title}}</h1>\n </div>\n\n <div class=\"dk-message-area\">\n <dk-message></dk-message>\n </div>\n\n <div class=\"dk-form-label-group\">\n <input type=\"text\" id=\"inputUserID\" name=\"inputUserID\" #inputUserID class=\"form-control dk-form-control\"\n [(ngModel)]=\"user.userid\" placeholder=\"User ID\" required=\"\" autofocus=\"\">\n <label for=\"inputUserID\">{{userLabel}}</label>\n </div>\n\n <div class=\"dk-form-label-group\">\n <input type=\"password\" id=\"inputPassword\" name=\"inputPassword\" #inputPassword class=\"form-control dk-form-control\"\n [(ngModel)]=\"user.password\" placeholder=\"Password\" required=\"\">\n <label for=\"inputPassword\">{{pwdLabel}}</label>\n </div>\n\n <button class=\"btn dk-btn-lg btn-primary btn-block\" type=\"submit\">\n <i *ngIf=\"isWaiting\" class=\"fas fa-spinner fa-spin\"></i> {{btnLabel}}\n </button>\n </fieldset>\n</form>\n\n", styles: [".dk-form-logon{width:100%;max-width:420px;padding:15px;margin:0 auto;line-height:1.5;--input-padding-x: .75rem;--input-padding-y: .75rem}.dk-form-logon label{margin-bottom:.5rem;font-size:1rem}.dk-message-area{margin-bottom:.5rem}.dk-mb-3{margin-bottom:1rem}.dk-mb-4{margin-bottom:1.5rem}.dk-form-title{font-size:1.75rem;line-height:1.2;color:inherit;font-family:inherit}.dk-form-label-group{position:relative;margin-bottom:1rem}.dk-form-control{font-size:1rem;border-radius:.25rem;height:calc(2.9rem + 2px)}.dk-form-label-group>input,.dk-form-label-group>label{padding:var(--input-padding-y) var(--input-padding-x)}.dk-form-label-group>label{position:absolute;top:0;left:0;display:block;width:100%;margin-bottom:0;line-height:1.5;color:#495057;border:1px solid transparent;border-radius:.25rem;transition:all .1s ease-in-out}.dk-form-label-group input:-ms-input-placeholder{color:transparent}.dk-form-label-group input::-moz-placeholder{color:transparent}.dk-form-label-group input::placeholder{color:transparent}.dk-form-label-group input:-webkit-autofill{-webkit-animation-name:cdk-text-field-autofill-start;animation-name:cdk-text-field-autofill-start;-webkit-transition:background-color 50000s ease-in-out 0s;transition:background-color 50000s ease-in-out 0s}.dk-form-label-group input:not(:-webkit-autofill){-webkit-animation-name:cdk-text-field-autofill-end;animation-name:cdk-text-field-autofill-end}.dk-form-label-group input:not(:-moz-placeholder-shown){padding-top:calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));padding-bottom:calc(var(--input-padding-y) / 3)}.dk-form-label-group input:not(:-ms-input-placeholder){padding-top:calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));padding-bottom:calc(var(--input-padding-y) / 3)}.dk-form-label-group input:not(:placeholder-shown),.dk-form-label-group input.cdk-text-field-autofilled{padding-top:calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));padding-bottom:calc(var(--input-padding-y) / 3)}.dk-form-label-group input:not(:-moz-placeholder-shown)~label{padding-top:calc(var(--input-padding-y) / 3);padding-bottom:calc(var(--input-padding-y) / 3);font-size:.75rem;color:#777}.dk-form-label-group input:not(:-ms-input-placeholder)~label{padding-top:calc(var(--input-padding-y) / 3);padding-bottom:calc(var(--input-padding-y) / 3);font-size:.75rem;color:#777}.dk-form-label-group input:not(:placeholder-shown)~label,.dk-form-label-group input.cdk-text-field-autofilled~label{padding-top:calc(var(--input-padding-y) / 3);padding-bottom:calc(var(--input-padding-y) / 3);font-size:.75rem;color:#777}.dk-btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}\n"] }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.AutofillMonitor }, { type: i3.LogonService }, { type: i4.MessageService }]; }, propDecorators: { inputUserID: [{ type: ViewChild, args: ['inputUserID', { read: ElementRef, static: true }] }], inputPassword: [{ type: ViewChild, args: ['inputPassword', { read: ElementRef, static: true }] }], title: [{ type: Input }], userLabel: [{ type: Input }], pwdLabel: [{ type: Input }], btnLabel: [{ type: Input }], redirectUrl: [{ type: Input }], redirectPath: [{ type: Input }], host: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbG9nb24vc3JjL2xpYi9sb2dvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9sb2dvbi9zcmMvbGliL2xvZ29uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFJekMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7QUFRNUIsTUFBTSxPQUFPLGNBQWM7SUFlekIsWUFDb0IsUUFBYSxFQUNiLE1BQWMsRUFDZCxLQUFxQixFQUNyQixRQUF5QixFQUN6QixZQUEwQixFQUMxQixjQUE4QjtRQUw5QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWhCbEQsU0FBSSxHQUFTLElBQUksSUFBSSxDQUFDO1FBQ3RCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDVCxVQUFLLEdBQUcsY0FBYyxDQUFDO1FBQ3ZCLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFDdEIsYUFBUSxHQUFHLFVBQVUsQ0FBQztRQUN0QixhQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLFNBQUksR0FBRyxFQUFFLENBQUM7SUFRbUMsQ0FBQztJQUV2RCxRQUFRO1FBQ04s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b3hDQTZCQTsyRkRoQmEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxVQUFVOzswQkFtQlAsTUFBTTsyQkFBQyxRQUFRO29MQWJrQyxXQUFXO3NCQUF4RSxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSSxhQUFhO3NCQUE1RSxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJckQsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBdXRvZmlsbE1vbml0b3J9IGZyb20gJ0Bhbmd1bGFyL2Nkay90ZXh0LWZpZWxkJztcbmltcG9ydCB7TWVzc2FnZSwgTWVzc2FnZVNlcnZpY2V9IGZyb20gJ3VpLW1lc3NhZ2UtYW5ndWxhcic7XG5pbXBvcnQge1VzZXJ9IGZyb20gJy4vdXNlcic7XG5pbXBvcnQge0xvZ29uU2VydmljZX0gZnJvbSAnLi9sb2dvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGstbG9nb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9nb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2dvbi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTG9nb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRVc2VySUQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbnB1dFVzZXJJRDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaW5wdXRQYXNzd29yZCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0UGFzc3dvcmQ6IEVsZW1lbnRSZWY7XG5cbiAgdXNlcjogVXNlciA9IG5ldyBVc2VyO1xuICBpc1dhaXRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgdGl0bGUgPSAnTG9nb24gUG9ydGFsJztcbiAgQElucHV0KCkgdXNlckxhYmVsID0gJ1VzZXIgSUQnO1xuICBASW5wdXQoKSBwd2RMYWJlbCA9ICdQYXNzd29yZCc7XG4gIEBJbnB1dCgpIGJ0bkxhYmVsID0gJ0xvZ29uJztcbiAgQElucHV0KCkgcmVkaXJlY3RVcmwgPSAnJztcbiAgQElucHV0KCkgcmVkaXJlY3RQYXRoID0gJyc7XG4gIEBJbnB1dCgpIGhvc3QgPSAnJztcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKVxuICAgICAgICAgICAgICBwcml2YXRlIGRvY3VtZW50OiBhbnksXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIGF1dG9maWxsOiBBdXRvZmlsbE1vbml0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nb25TZXJ2aWNlOiBMb2dvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmF1dG9maWxsLm1vbml0b3IodGhpcy5pbnB1dFVzZXJJRC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLmF1dG9maWxsLm1vbml0b3IodGhpcy5pbnB1dFBhc3N3b3JkLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ3RpdGxlJ10pIHsgdGhpcy50aXRsZSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsndGl0bGUnXTsgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ3VzZXJMYWJlbCddKSB7IHRoaXMudXNlckxhYmVsID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhWyd1c2VyTGFiZWwnXTsgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ3B3ZExhYmVsJ10pIHsgdGhpcy5wd2RMYWJlbCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsncHdkTGFiZWwnXTsgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2J0bkxhYmVsJ10pIHsgdGhpcy5idG5MYWJlbCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsnYnRuTGFiZWwnXTsgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ3JlZGlyZWN0VXJsJ10pIHsgdGhpcy5yZWRpcmVjdFVybCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YVsncmVkaXJlY3RVcmwnXTsgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ3JlZGlyZWN0UGF0aCddKSB7IHRoaXMucmVkaXJlY3RQYXRoID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhWydyZWRpcmVjdFBhdGgnXTsgfVxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2hvc3QnXSkgeyB0aGlzLmhvc3QgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2hvc3QnXTsgfVxuICAgIHRoaXMubG9nb25TZXJ2aWNlLnNldEhvc3QodGhpcy5ob3N0KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYXV0b2ZpbGwuc3RvcE1vbml0b3JpbmcodGhpcy5pbnB1dFVzZXJJRC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLmF1dG9maWxsLnN0b3BNb25pdG9yaW5nKHRoaXMuaW5wdXRQYXNzd29yZC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGxvZ29uKCk6IHZvaWQge1xuICAgIHRoaXMuaXNXYWl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmxvZ29uU2VydmljZS5sb2dvbih0aGlzLnVzZXIudXNlcmlkLCB0aGlzLnVzZXIucGFzc3dvcmQpLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmlzV2FpdGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoIWRhdGEpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChkYXRhLmVycikge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuZXJyKSkge1xuICAgICAgICAgICAgZGF0YS5lcnIuZm9yRWFjaCggZXJyID0+IHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKGVycikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnJlcG9ydCg8TWVzc2FnZT5kYXRhLmVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXNlci5kaXNwbGF5TmFtZSA9IGRhdGEudXNlclsnRElTUExBWV9OQU1FJ107XG4gICAgICAgICAgdGhpcy51c2VyLnVzZXJpZCA9IGRhdGEudXNlclsnVVNFUl9JRCddO1xuICAgICAgICAgIHRoaXMudXNlci51c2VybmFtZSA9IGRhdGEudXNlclsnVVNFUl9OQU1FJ107XG4gICAgICAgICAgdGhpcy51c2VyLmxvY2tlZCA9IGRhdGEudXNlclsnTE9DSyddO1xuICAgICAgICAgIHRoaXMudXNlci5wd2RTdGF0ZSA9IGRhdGEudXNlclsnUFdEX1NUQVRFJ107XG4gICAgICAgICAgdGhpcy51c2VyLm5hbWUgPSBkYXRhLnVzZXJbJ0dJVkVOX05BTUUnXTtcbiAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5yZWRpcmVjdFBhdGgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWRpcmVjdFVybCkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdGhpcy5yZWRpcmVjdFVybDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cImRrLWZvcm0tbG9nb25cIiAobmdTdWJtaXQpPVwibG9nb24oKVwiPlxuICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzV2FpdGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkay1tYi00XCI+XG4gICAgICA8IS0tPGltZyBjbGFzcz1cIm1iLTRcIiBzcmM9XCJodHRwczovL2dldGJvb3RzdHJhcC5jb20vYXNzZXRzL2JyYW5kL2Jvb3RzdHJhcC1zb2xpZC5zdmdcIiBhbHQ9XCJcIiB3aWR0aD1cIjcyXCIgaGVpZ2h0PVwiNzJcIj4tLT5cbiAgICAgIDxoMSBjbGFzcz1cImRrLWZvcm0tdGl0bGUgZGstbWItMyBmb250LXdlaWdodC1ub3JtYWxcIj57e3RpdGxlfX08L2gxPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRrLW1lc3NhZ2UtYXJlYVwiPlxuICAgICAgPGRrLW1lc3NhZ2U+PC9kay1tZXNzYWdlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRrLWZvcm0tbGFiZWwtZ3JvdXBcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW5wdXRVc2VySURcIiBuYW1lPVwiaW5wdXRVc2VySURcIiAjaW5wdXRVc2VySUQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZGstZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIudXNlcmlkXCIgcGxhY2Vob2xkZXI9XCJVc2VyIElEXCIgcmVxdWlyZWQ9XCJcIiBhdXRvZm9jdXM9XCJcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJpbnB1dFVzZXJJRFwiPnt7dXNlckxhYmVsfX08L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRrLWZvcm0tbGFiZWwtZ3JvdXBcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlucHV0UGFzc3dvcmRcIiBuYW1lPVwiaW5wdXRQYXNzd29yZFwiICNpbnB1dFBhc3N3b3JkIGNsYXNzPVwiZm9ybS1jb250cm9sIGRrLWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLnBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJQYXNzd29yZFwiIHJlcXVpcmVkPVwiXCI+XG4gICAgICA8bGFiZWwgZm9yPVwiaW5wdXRQYXNzd29yZFwiPnt7cHdkTGFiZWx9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGRrLWJ0bi1sZyBidG4tcHJpbWFyeSBidG4tYmxvY2tcIiB0eXBlPVwic3VibWl0XCI+XG4gICAgICA8aSAqbmdJZj1cImlzV2FpdGluZ1wiIGNsYXNzPVwiZmFzIGZhLXNwaW5uZXIgZmEtc3BpblwiPjwvaT4ge3tidG5MYWJlbH19XG4gICAgPC9idXR0b24+XG4gIDwvZmllbGRzZXQ+XG48L2Zvcm0+XG5cbiJdfQ==