reset-password.component.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';
  6. import { Router } from '@angular/router';
  7. import { NB_AUTH_OPTIONS, NbAuthService } from '@nebular/auth';
  8. import { LoginLangService } from '../login-lang.service';
  9. import { getDeepFromObject } from '../helper';
  10. export class ResetPasswordComponent {
  11. /**
  12. * @param {?} service
  13. * @param {?} langService
  14. * @param {?=} options
  15. * @param {?=} cd
  16. * @param {?=} router
  17. */
  18. constructor(service, langService, options = {}, cd, router) {
  19. this.service = service;
  20. this.langService = langService;
  21. this.options = options;
  22. this.cd = cd;
  23. this.router = router;
  24. this.redirectDelay = 0;
  25. this.showMessages = {};
  26. this.strategy = '';
  27. this.submitted = false;
  28. this.errors = [];
  29. this.messages = [];
  30. this.user = {};
  31. this.redirectDelay = this.getConfigValue('forms.resetPassword.redirectDelay');
  32. this.showMessages = this.getConfigValue('forms.resetPassword.showMessages');
  33. this.strategy = this.getConfigValue('forms.resetPassword.strategy');
  34. }
  35. /**
  36. * @return {?}
  37. */
  38. resetPass() {
  39. this.errors = this.messages = [];
  40. this.submitted = true;
  41. this.service.resetPassword(this.strategy, this.user).subscribe((/**
  42. * @param {?} result
  43. * @return {?}
  44. */
  45. (result) => {
  46. this.submitted = false;
  47. if (result.isSuccess()) {
  48. this.messages = result.getMessages();
  49. }
  50. else {
  51. this.errors = result.getErrors();
  52. }
  53. /** @type {?} */
  54. const redirect = result.getRedirect();
  55. if (redirect) {
  56. setTimeout((/**
  57. * @return {?}
  58. */
  59. () => {
  60. return this.router.navigateByUrl(redirect);
  61. }), this.redirectDelay);
  62. }
  63. this.cd.detectChanges();
  64. }));
  65. }
  66. /**
  67. * @param {?} key
  68. * @return {?}
  69. */
  70. getConfigValue(key) {
  71. return getDeepFromObject(this.options, key, null);
  72. }
  73. }
  74. ResetPasswordComponent.decorators = [
  75. { type: Component, args: [{
  76. selector: 'auth-reset-password-page',
  77. template: "<h1 id=\"title\" class=\"title\" translate>\u4FEE\u6539\u5BC6\u7801</h1>\r\n<p class=\"sub-title\" translate>\u8BF7\u8BBE\u7F6E\u60A8\u7684\u65B0\u5BC6\u7801</p>\r\n\r\n<nb-alert *ngIf=\"showMessages.error && errors?.length && !submitted\" outline=\"danger\" role=\"alert\">\r\n <p class=\"alert-title\"><b translate>\u9519\u8BEF!</b></p>\r\n <ul class=\"alert-message-list\">\r\n <li *ngFor=\"let error of errors\" class=\"alert-message\">{{ error }}</li>\r\n </ul>\r\n</nb-alert>\r\n\r\n<nb-alert *ngIf=\"showMessages.success && messages?.length && !submitted\" outline=\"success\" role=\"alert\">\r\n <p class=\"alert-title\"><b translate>\u6210\u529F!</b></p>\r\n <ul class=\"alert-message-list\">\r\n <li *ngFor=\"let message of messages\" class=\"alert-message\">{{ message }}</li>\r\n </ul>\r\n</nb-alert>\r\n\r\n<form (ngSubmit)=\"resetPass()\" #resetPassForm=\"ngForm\" aria-labelledby=\"title\">\r\n\r\n <div class=\"form-control-group\">\r\n <label class=\"label\" for=\"input-old-password\" translate>\u65E7\u5BC6\u7801:</label>\r\n <input nbInput\r\n [(ngModel)]=\"user.loginPasswordOld\"\r\n #oldPassword=\"ngModel\"\r\n type=\"password\"\r\n id=\"input-old-password\"\r\n name=\"oldPassword\"\r\n class=\"first\"\r\n placeholder=\"{{'\u65B0\u5BC6\u7801'| translate}}\"\r\n autofocus\r\n fullWidth\r\n [status]=\"oldPassword.dirty ? (oldPassword.invalid ? 'danger' : 'success') : ''\"\r\n [required]=\"getConfigValue('forms.validation.password.required')\"\r\n [minlength]=\"getConfigValue('forms.validation.password.minLength')\"\r\n [maxlength]=\"getConfigValue('forms.validation.password.maxLength')\"\r\n [attr.aria-invalid]=\"oldPassword.invalid && oldPassword.touched ? true : null\">\r\n <ng-container *ngIf=\"oldPassword.invalid && oldPassword.touched\">\r\n <p class=\"error-message\" *ngIf=\"oldPassword.errors?.required\" translate=\"\u65E7\u5BC6\u7801\u662F\u5FC5\u586B\u7684!\">\r\n\r\n </p>\r\n <p class=\"error-message\" *ngIf=\"oldPassword.errors?.minlength || oldPassword.errors?.maxlength\"\r\n translate=\"\u5BC6\u7801\u89C4\u5219\u63D0\u793A\" [translateParams]=\"{minLength: getConfigValue('forms.validation.password.minLength'), maxLength:getConfigValue('forms.validation.password.maxLength')}\">\r\n \u5BC6\u7801\u5E94\u8BE5\u5305\u542B\r\n \u6700\u5C0F\u957F\u5EA6 {{ getConfigValue('forms.validation.password.minLength') }}\r\n \u6700\u5927\u957F\u5EA6 {{ getConfigValue('forms.validation.password.maxLength') }}\r\n \u4E2A\u5B57\u7B26\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-control-group\">\r\n <label class=\"label\" for=\"input-new-password\" translate>\u65B0\u5BC6\u7801:</label>\r\n <input nbInput\r\n [(ngModel)]=\"user.loginPasswordNew\"\r\n #newPassword=\"ngModel\"\r\n type=\"password\"\r\n id=\"input-new-password\"\r\n name=\"newPassword\"\r\n class=\"first\"\r\n placeholder=\"{{'\u65B0\u5BC6\u7801'| translate}}\"\r\n autofocus\r\n fullWidth\r\n [status]=\"newPassword.dirty ? (newPassword.invalid ? 'danger' : 'success') : ''\"\r\n [required]=\"getConfigValue('forms.validation.password.required')\"\r\n [minlength]=\"getConfigValue('forms.validation.password.minLength')\"\r\n [maxlength]=\"getConfigValue('forms.validation.password.maxLength')\"\r\n [attr.aria-invalid]=\"newPassword.invalid && newPassword.touched ? true : null\">\r\n <ng-container *ngIf=\"newPassword.invalid && newPassword.touched\">\r\n <p class=\"error-message\" *ngIf=\"newPassword.errors?.required\" translate=\"\u65B0\u5BC6\u7801\u662F\u5FC5\u586B\u7684!\">\r\n\r\n </p>\r\n <p class=\"error-message\" *ngIf=\"newPassword.errors?.minlength || newPassword.errors?.maxlength\"\r\n translate=\"\u5BC6\u7801\u89C4\u5219\u63D0\u793A\"\r\n [translateParams]=\"{minLength: getConfigValue('forms.validation.password.minLength'), maxLength:getConfigValue('forms.validation.password.maxLength')}\">\r\n\r\n \u5BC6\u7801\u5E94\u8BE5\u5305\u542B\r\n \u6700\u5C0F\u957F\u5EA6 {{ getConfigValue('forms.validation.password.minLength') }}\r\n \u6700\u5927\u957F\u5EA6 {{ getConfigValue('forms.validation.password.maxLength') }}\r\n \u4E2A\u5B57\u7B26\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"label\" for=\"input-re-password\" translate>\u786E\u8BA4\u5BC6\u7801:</label>\r\n <input nbInput\r\n [(ngModel)]=\"user.confirmPassword\"\r\n #rePass=\"ngModel\"\r\n id=\"input-re-password\"\r\n name=\"rePass\"\r\n type=\"password\"\r\n class=\"last\"\r\n placeholder=\"{{'\u786E\u8BA4\u5BC6\u7801'| translate}}\"\r\n fullWidth\r\n [status]=\"rePass.touched\r\n ? (rePass.invalid || newPassword.value != rePass.value ? 'danger' : 'success')\r\n : ''\"\r\n [required]=\"getConfigValue('forms.validation.password.required')\"\r\n [attr.aria-invalid]=\"rePass.invalid && rePass.touched ? true : null\">\r\n <ng-container *ngIf=\"rePass.touched\">\r\n <p class=\"error-message\" *ngIf=\"rePass.invalid && rePass.errors?.required\" translate=\"\u786E\u8BA4\u5BC6\u7801\u662F\u5FC5\u586B\u7684!\">\r\n\r\n </p>\r\n <p class=\"error-message\" *ngIf=\"newPassword.value != rePass.value && !rePass.errors?.required\" translate=\"\u4E0E\u7B2C\u4E00\u6B21\u8F93\u5165\u4E0D\u7B26\u5408\"></p>\r\n </ng-container>\r\n </div>\r\n\r\n <button nbButton\r\n status=\"success\"\r\n fullWidth\r\n [disabled]=\"submitted || !resetPassForm.valid\"\r\n [class.btn-pulse]=\"submitted\" translate=\"\u4FEE\u6539\u5BC6\u7801\">\r\n </button>\r\n</form>\r\n\r\n<!--<section class=\"sign-in-or-up\" aria-label=\"Sign in or sign up\">-->\r\n <!--<p><a class=\"text-link\" routerLink=\"../login\">Back to Log In</a></p>-->\r\n <!--<p><a class=\"text-link\" routerLink=\"../register\">Register</a></p>-->\r\n<!--</section>-->\r\n",
  78. changeDetection: ChangeDetectionStrategy.OnPush,
  79. styles: [":host .form-group:last-of-type{margin-bottom:3rem}"]
  80. }] }
  81. ];
  82. /** @nocollapse */
  83. ResetPasswordComponent.ctorParameters = () => [
  84. { type: NbAuthService },
  85. { type: LoginLangService },
  86. { type: undefined, decorators: [{ type: Inject, args: [NB_AUTH_OPTIONS,] }] },
  87. { type: ChangeDetectorRef },
  88. { type: Router }
  89. ];
  90. if (false) {
  91. /** @type {?} */
  92. ResetPasswordComponent.prototype.redirectDelay;
  93. /** @type {?} */
  94. ResetPasswordComponent.prototype.showMessages;
  95. /** @type {?} */
  96. ResetPasswordComponent.prototype.strategy;
  97. /** @type {?} */
  98. ResetPasswordComponent.prototype.submitted;
  99. /** @type {?} */
  100. ResetPasswordComponent.prototype.errors;
  101. /** @type {?} */
  102. ResetPasswordComponent.prototype.messages;
  103. /** @type {?} */
  104. ResetPasswordComponent.prototype.user;
  105. /**
  106. * @type {?}
  107. * @protected
  108. */
  109. ResetPasswordComponent.prototype.service;
  110. /**
  111. * @type {?}
  112. * @protected
  113. */
  114. ResetPasswordComponent.prototype.langService;
  115. /**
  116. * @type {?}
  117. * @protected
  118. */
  119. ResetPasswordComponent.prototype.options;
  120. /**
  121. * @type {?}
  122. * @protected
  123. */
  124. ResetPasswordComponent.prototype.cd;
  125. /**
  126. * @type {?}
  127. * @protected
  128. */
  129. ResetPasswordComponent.prototype.router;
  130. }
  131. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXQtcGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZ2UtYWRtaW4tYXV0aC8iLCJzb3VyY2VzIjpbImxpYi9yZXNldC1wYXNzd29yZC9yZXNldC1wYXNzd29yZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUTlDLE1BQU0sT0FBTyxzQkFBc0I7Ozs7Ozs7O0lBV2pDLFlBQXNCLE9BQXNCLEVBQVksV0FBNkIsRUFDaEQsVUFBVSxFQUFFLEVBQ3JDLEVBQXFCLEVBQ3JCLE1BQWM7UUFISixZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVksZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQ2hELFlBQU8sR0FBUCxPQUFPLENBQUs7UUFDckMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVoxQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixXQUFNLEdBQWEsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQU9iLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Ozs7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxNQUFvQixFQUFFLEVBQUU7WUFDdEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2xDOztrQkFFSyxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUNyQyxJQUFJLFFBQVEsRUFBRTtnQkFDWixVQUFVOzs7Z0JBQUMsR0FBRyxFQUFFO29CQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzdDLENBQUMsR0FBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDeEI7WUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFRCxjQUFjLENBQUMsR0FBVztRQUN4QixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7OztZQW5ERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDBCQUEwQjtnQkFFcEMsa3NNQUE4QztnQkFDOUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7O1lBVHVDLGFBQWE7WUFDNUMsZ0JBQWdCOzRDQXFCcEIsTUFBTSxTQUFDLGVBQWU7WUF4Qk8saUJBQWlCO1lBQzFDLE1BQU07Ozs7SUFhYiwrQ0FBa0I7O0lBQ2xCLDhDQUF1Qjs7SUFDdkIsMENBQWM7O0lBRWQsMkNBQWtCOztJQUNsQix3Q0FBc0I7O0lBQ3RCLDBDQUF3Qjs7SUFDeEIsc0NBQWU7Ozs7O0lBRUgseUNBQWdDOzs7OztJQUFFLDZDQUF1Qzs7Ozs7SUFDbkYseUNBQStDOzs7OztJQUMvQyxvQ0FBK0I7Ozs7O0lBQy9CLHdDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTkJfQVVUSF9PUFRJT05TLCBOYkF1dGhSZXN1bHQsIE5iQXV0aFNlcnZpY2UgfSBmcm9tICdAbmVidWxhci9hdXRoJztcclxuaW1wb3J0IHsgTG9naW5MYW5nU2VydmljZSB9IGZyb20gJy4uL2xvZ2luLWxhbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldERlZXBGcm9tT2JqZWN0IH0gZnJvbSAnLi4vaGVscGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXV0aC1yZXNldC1wYXNzd29yZC1wYWdlJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXNldC1wYXNzd29yZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNldC1wYXNzd29yZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc2V0UGFzc3dvcmRDb21wb25lbnQge1xyXG5cclxuICByZWRpcmVjdERlbGF5ID0gMDtcclxuICBzaG93TWVzc2FnZXM6IGFueSA9IHt9O1xyXG4gIHN0cmF0ZWd5ID0gJyc7XHJcblxyXG4gIHN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gIGVycm9yczogc3RyaW5nW10gPSBbXTtcclxuICBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICB1c2VyOiBhbnkgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlcnZpY2U6IE5iQXV0aFNlcnZpY2UsIHByb3RlY3RlZCBsYW5nU2VydmljZTogTG9naW5MYW5nU2VydmljZSxcclxuICAgIEBJbmplY3QoTkJfQVVUSF9PUFRJT05TKSBwcm90ZWN0ZWQgb3B0aW9ucyA9IHt9LFxyXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcikge1xyXG5cclxuICAgIHRoaXMucmVkaXJlY3REZWxheSA9IHRoaXMuZ2V0Q29uZmlnVmFsdWUoJ2Zvcm1zLnJlc2V0UGFzc3dvcmQucmVkaXJlY3REZWxheScpO1xyXG4gICAgdGhpcy5zaG93TWVzc2FnZXMgPSB0aGlzLmdldENvbmZpZ1ZhbHVlKCdmb3Jtcy5yZXNldFBhc3N3b3JkLnNob3dNZXNzYWdlcycpO1xyXG4gICAgdGhpcy5zdHJhdGVneSA9IHRoaXMuZ2V0Q29uZmlnVmFsdWUoJ2Zvcm1zLnJlc2V0UGFzc3dvcmQuc3RyYXRlZ3knKTtcclxuICB9XHJcblxyXG4gIHJlc2V0UGFzcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXJyb3JzID0gdGhpcy5tZXNzYWdlcyA9IFtdO1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuc2VydmljZS5yZXNldFBhc3N3b3JkKHRoaXMuc3RyYXRlZ3ksIHRoaXMudXNlcikuc3Vic2NyaWJlKChyZXN1bHQ6IE5iQXV0aFJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHJlc3VsdC5nZXRNZXNzYWdlcygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gcmVzdWx0LmdldEVycm9ycygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByZWRpcmVjdCA9IHJlc3VsdC5nZXRSZWRpcmVjdCgpO1xyXG4gICAgICBpZiAocmVkaXJlY3QpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJlZGlyZWN0KTtcclxuICAgICAgICB9LCB0aGlzLnJlZGlyZWN0RGVsYXkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdWYWx1ZShrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gZ2V0RGVlcEZyb21PYmplY3QodGhpcy5vcHRpb25zLCBrZXksIG51bGwpO1xyXG4gIH1cclxufVxyXG4iXX0=