@smart-webcomponents-angular/passwordtextbox 9.2.75 → 13.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/i18n.phonenumbers.min.js +501 -0
- package/common/runtime.js +748 -0
- package/esm2020/passwordtextbox/index.mjs +2 -0
- package/{esm2015/passwordtextbox/public_api.js → esm2020/passwordtextbox/public_api.mjs} +1 -1
- package/{esm2015/passwordtextbox/smart-webcomponents-angular-passwordtextbox.js → esm2020/passwordtextbox/smart-webcomponents-angular-passwordtextbox.mjs} +2 -3
- package/esm2020/passwordtextbox/smart.element.mjs +96 -0
- package/esm2020/passwordtextbox/smart.passwordtextbox.mjs +428 -0
- package/esm2020/passwordtextbox/smart.passwordtextbox.module.mjs +18 -0
- package/fesm2015/{smart-webcomponents-angular-passwordtextbox.js → smart-webcomponents-angular-passwordtextbox.mjs} +116 -60
- package/fesm2015/smart-webcomponents-angular-passwordtextbox.mjs.map +1 -0
- package/fesm2020/smart-webcomponents-angular-passwordtextbox.mjs +550 -0
- package/fesm2020/smart-webcomponents-angular-passwordtextbox.mjs.map +1 -0
- package/images/flags.png +0 -0
- package/index.d.ts +31816 -28915
- package/package.json +26 -24
- package/passwordtextbox/index.d.ts +1 -0
- package/passwordtextbox/smart-webcomponents-angular-passwordtextbox.d.ts +2 -2
- package/passwordtextbox/smart.element.d.ts +4 -1
- package/passwordtextbox/smart.passwordtextbox.d.ts +10 -1
- package/passwordtextbox/smart.passwordtextbox.module.d.ts +5 -0
- package/source/modules/smart.passwordtextbox.js +1 -1
- package/source/smart.button.js +2 -2
- package/source/smart.element.js +2 -2
- package/source/smart.input.js +2 -2
- package/source/smart.passwordtextbox.js +2 -2
- package/source/smart.tooltip.js +2 -2
- package/styles/font/smart-icons.eot +0 -0
- package/styles/font/smart-icons.svg +64 -2
- package/styles/font/smart-icons.ttf +0 -0
- package/styles/font/smart-icons.woff +0 -0
- package/styles/font/smart-icons.woff2 +0 -0
- package/styles/smart.base.css +4 -4
- package/styles/smart.common.css +1 -1
- package/styles/smart.passwordtextbox.css +2 -2
- package/bundles/smart-webcomponents-angular-passwordtextbox.umd.js +0 -961
- package/bundles/smart-webcomponents-angular-passwordtextbox.umd.min.js +0 -25
- package/esm2015/passwordtextbox/smart.element.js +0 -83
- package/esm2015/passwordtextbox/smart.passwordtextbox.js +0 -388
- package/esm2015/passwordtextbox/smart.passwordtextbox.module.js +0 -13
- package/fesm2015/smart-webcomponents-angular-passwordtextbox.js.map +0 -1
- package/passwordtextbox/smart-webcomponents-angular-passwordtextbox.metadata.json +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './public_api';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYXNzd29yZHRleHRib3gvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJzsiXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './smart.passwordtextbox';
|
|
2
2
|
export * from './smart.passwordtextbox.module';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Bhc3N3b3JkdGV4dGJveC9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCAqIGZyb20gJy4vc21hcnQucGFzc3dvcmR0ZXh0Ym94JztcbmV4cG9ydCAqIGZyb20gJy4vc21hcnQucGFzc3dvcmR0ZXh0Ym94Lm1vZHVsZSc7XG4iXX0=
|
|
@@ -10,6 +10,5 @@ import './../../source/modules/smart.passwordtextbox';
|
|
|
10
10
|
/**
|
|
11
11
|
* Generated bundle index. Do not edit.
|
|
12
12
|
*/
|
|
13
|
-
export * from './
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtd2ViY29tcG9uZW50cy1hbmd1bGFyLXBhc3N3b3JkdGV4dGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Bhc3N3b3JkdGV4dGJveC9zcmMvc21hcnQtd2ViY29tcG9uZW50cy1hbmd1bGFyLXBhc3N3b3JkdGV4dGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG5cbmV4cG9ydCB7QmFzZUVsZW1lbnQgYXMgybVhfSBmcm9tICcuL3NtYXJ0LmVsZW1lbnQnOyJdfQ==
|
|
13
|
+
export * from './index';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtd2ViY29tcG9uZW50cy1hbmd1bGFyLXBhc3N3b3JkdGV4dGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Bhc3N3b3JkdGV4dGJveC9zcmMvc21hcnQtd2ViY29tcG9uZW50cy1hbmd1bGFyLXBhc3N3b3JkdGV4dGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Input, Output, Directive, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class BaseElement {
|
|
4
|
+
constructor(ref) {
|
|
5
|
+
this.onCreate = new EventEmitter();
|
|
6
|
+
this.onReady = new EventEmitter();
|
|
7
|
+
this.onAttach = new EventEmitter();
|
|
8
|
+
this.onDetach = new EventEmitter();
|
|
9
|
+
const that = this;
|
|
10
|
+
this.nativeElement = ref.nativeElement;
|
|
11
|
+
that.nativeElement.onAttached = () => {
|
|
12
|
+
that.onAttach.emit(that.nativeElement);
|
|
13
|
+
};
|
|
14
|
+
that.nativeElement.onDetached = () => {
|
|
15
|
+
that.onDetach.emit(that.nativeElement);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
addEventListener(type, listener, options = false) {
|
|
19
|
+
this.nativeElement.addEventListener(type, listener, options);
|
|
20
|
+
}
|
|
21
|
+
removeEventListener(type, listener, options = false) {
|
|
22
|
+
this.nativeElement.removeEventListener(type, listener, options);
|
|
23
|
+
}
|
|
24
|
+
dispatchEvent(event) {
|
|
25
|
+
return this.nativeElement.dispatchEvent(event);
|
|
26
|
+
}
|
|
27
|
+
blur() {
|
|
28
|
+
this.nativeElement.blur();
|
|
29
|
+
}
|
|
30
|
+
click() {
|
|
31
|
+
this.nativeElement.click();
|
|
32
|
+
}
|
|
33
|
+
focus(options) {
|
|
34
|
+
this.nativeElement.focus(options);
|
|
35
|
+
}
|
|
36
|
+
/** @description Sets or gets the language. Used in conjunction with the property messages. */
|
|
37
|
+
get locale() {
|
|
38
|
+
return this.nativeElement ? this.nativeElement.locale : undefined;
|
|
39
|
+
}
|
|
40
|
+
set locale(value) {
|
|
41
|
+
this.nativeElement ? this.nativeElement.locale = value : undefined;
|
|
42
|
+
}
|
|
43
|
+
/** @description Callback used to customize the format of the messages that are returned from the Localization Module. */
|
|
44
|
+
get localizeFormatFunction() {
|
|
45
|
+
return this.nativeElement ? this.nativeElement.localizeFormatFunction : undefined;
|
|
46
|
+
}
|
|
47
|
+
set localizeFormatFunction(value) {
|
|
48
|
+
this.nativeElement ? this.nativeElement.localizeFormatFunction = value : undefined;
|
|
49
|
+
}
|
|
50
|
+
/** @description Sets or gets an object specifying strings used in the widget that can be localized. Used in conjunction with the property locale. */
|
|
51
|
+
get messages() {
|
|
52
|
+
return this.nativeElement ? this.nativeElement.messages : undefined;
|
|
53
|
+
}
|
|
54
|
+
set messages(value) {
|
|
55
|
+
this.nativeElement ? this.nativeElement.messages = value : undefined;
|
|
56
|
+
}
|
|
57
|
+
/** @description Sets or gets the value indicating whether the element is aligned to support locales using right-to-left fonts. */
|
|
58
|
+
get rightToLeft() {
|
|
59
|
+
return this.nativeElement ? this.nativeElement.rightToLeft : undefined;
|
|
60
|
+
}
|
|
61
|
+
set rightToLeft(value) {
|
|
62
|
+
this.nativeElement ? this.nativeElement.rightToLeft = value : undefined;
|
|
63
|
+
}
|
|
64
|
+
/** @description Determines the theme. Theme defines the look of the element */
|
|
65
|
+
get theme() {
|
|
66
|
+
return this.nativeElement ? this.nativeElement.theme : undefined;
|
|
67
|
+
}
|
|
68
|
+
set theme(value) {
|
|
69
|
+
this.nativeElement ? this.nativeElement.theme = value : undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
BaseElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BaseElement, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
73
|
+
BaseElement.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: BaseElement, inputs: { locale: "locale", localizeFormatFunction: "localizeFormatFunction", messages: "messages", rightToLeft: "rightToLeft", theme: "theme" }, outputs: { onCreate: "onCreate", onReady: "onReady", onAttach: "onAttach", onDetach: "onDetach" }, ngImport: i0 });
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BaseElement, decorators: [{
|
|
75
|
+
type: Directive
|
|
76
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { onCreate: [{
|
|
77
|
+
type: Output
|
|
78
|
+
}], onReady: [{
|
|
79
|
+
type: Output
|
|
80
|
+
}], onAttach: [{
|
|
81
|
+
type: Output
|
|
82
|
+
}], onDetach: [{
|
|
83
|
+
type: Output
|
|
84
|
+
}], locale: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], localizeFormatFunction: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], messages: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], rightToLeft: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], theme: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}] } });
|
|
95
|
+
export const Smart = window.Smart;
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQuZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Bhc3N3b3JkdGV4dGJveC9zcmMvc21hcnQuZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxPQUFPLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUduRixNQUFNLE9BQU8sV0FBVztJQUNwQixZQUFZLEdBQWU7UUFhakIsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBZnZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFvQixDQUFDO1FBRTlDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBU00sZ0JBQWdCLENBQUMsSUFBWSxFQUFFLFFBQTRDLEVBQUUsVUFBNkMsS0FBSztRQUNsSSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQVksRUFBRSxRQUE0QyxFQUFFLFVB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QVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkE4Qk4sTUFBTTtzQkFEVCxLQUFLO2dCQVVGLHNCQUFzQjtzQkFEekIsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxLQUFLO2dCQVVGLEtBQUs7c0JBRFIsS0FBSzs7QUFTUCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBTbWFydDogYW55O1xufVxufVxuXG5cbmltcG9ydCB7IEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbGVtZW50UmVuZGVyTW9kZSB9IGZyb20gJy4vLi4vaW5kZXgnO1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgQmFzZUVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKHJlZjogRWxlbWVudFJlZikge1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gcmVmLm5hdGl2ZUVsZW1lbnQgYXMgYW55O1xuXG4gICAgICAgIHRoYXQubmF0aXZlRWxlbWVudC5vbkF0dGFjaGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhhdC5vbkF0dGFjaC5lbWl0KHRoYXQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0Lm5hdGl2ZUVsZW1lbnQub25EZXRhY2hlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoYXQub25EZXRhY2guZW1pdCh0aGF0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uQ3JlYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uQXR0YWNoOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgb25EZXRhY2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIG5hdGl2ZUVsZW1lbnQ6IGFueTtcblxuICAgIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM6IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcblx0fVxuXG5cdHB1YmxpYyByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM6IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyA9IGZhbHNlKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuXHR9XG5cblx0cHVibGljIGRpc3BhdGNoRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fVxuXG5cdHB1YmxpYyBibHVyKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudC5ibHVyKCk7XG5cdH1cblxuXHRwdWJsaWMgY2xpY2soKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cyhvcHRpb25zKTtcblx0fVxuXG4vKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgZ2V0cyB0aGUgbGFuZ3VhZ2UuIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJvcGVydHkgbWVzc2FnZXMuICAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2NhbGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvY2FsZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBDYWxsYmFjayB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybWF0IG9mIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZXR1cm5lZCBmcm9tIHRoZSBMb2NhbGl6YXRpb24gTW9kdWxlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbG9jYWxpemVGb3JtYXRGdW5jdGlvbigpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9jYWxpemVGb3JtYXRGdW5jdGlvbiA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbG9jYWxpemVGb3JtYXRGdW5jdGlvbih2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvY2FsaXplRm9ybWF0RnVuY3Rpb24gPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciBnZXRzIGFuIG9iamVjdCBzcGVjaWZ5aW5nIHN0cmluZ3MgdXNlZCBpbiB0aGUgd2lkZ2V0IHRoYXQgY2FuIGJlIGxvY2FsaXplZC4gVXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcm9wZXJ0eSBsb2NhbGUuICAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbWVzc2FnZXMoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1lc3NhZ2VzIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBtZXNzYWdlcyh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1lc3NhZ2VzID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgZ2V0cyB0aGUgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGFsaWduZWQgdG8gc3VwcG9ydCBsb2NhbGVzIHVzaW5nIHJpZ2h0LXRvLWxlZnQgZm9udHMuICovXG5cdEBJbnB1dCgpXG5cdGdldCByaWdodFRvTGVmdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJpZ2h0VG9MZWZ0IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCByaWdodFRvTGVmdCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yaWdodFRvTGVmdCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIHRoZSB0aGVtZS4gVGhlbWUgZGVmaW5lcyB0aGUgbG9vayBvZiB0aGUgZWxlbWVudCAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdGhlbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRoZW1lIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB0aGVtZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRoZW1lID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IFNtYXJ0OiBhbnkgPSB3aW5kb3cuU21hcnQ7XG5cbiJdfQ==
|
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
import { Directive, Input, forwardRef, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { BaseElement, Smart } from './smart.element';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export { Smart } from './smart.element';
|
|
6
|
+
const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR = {
|
|
7
|
+
provide: NG_VALUE_ACCESSOR,
|
|
8
|
+
useExisting: forwardRef(() => PasswordTextBoxComponent),
|
|
9
|
+
multi: true
|
|
10
|
+
};
|
|
11
|
+
export class PasswordTextBoxComponent extends BaseElement {
|
|
12
|
+
constructor(ref) {
|
|
13
|
+
super(ref);
|
|
14
|
+
this.eventHandlers = [];
|
|
15
|
+
/**
|
|
16
|
+
* @description
|
|
17
|
+
* The registered callback function called when a change event occurs on the form elements.
|
|
18
|
+
*/
|
|
19
|
+
this._onChange = () => { };
|
|
20
|
+
/**
|
|
21
|
+
* @description
|
|
22
|
+
* The registered callback function called when a blur event occurs on the form elements.
|
|
23
|
+
*/
|
|
24
|
+
this._onTouched = () => { };
|
|
25
|
+
/** @description This event is triggered when the value of the element is changed.
|
|
26
|
+
* @param event. The custom event. Custom event was created with: event.detail( oldValue, value)
|
|
27
|
+
* oldValue - The previous value of the element before it was changed.
|
|
28
|
+
* value - The new value of the element.
|
|
29
|
+
*/
|
|
30
|
+
this.onChange = new EventEmitter();
|
|
31
|
+
/** @description This event is triggered on each key up event of the TextBox, if the value is changed.
|
|
32
|
+
* @param event. The custom event. Custom event was created with: event.detail( oldValue, value)
|
|
33
|
+
* oldValue - The previous value before it was changed.
|
|
34
|
+
* value - The new value.
|
|
35
|
+
*/
|
|
36
|
+
this.onChanging = new EventEmitter();
|
|
37
|
+
this._initialChange = true;
|
|
38
|
+
this.nativeElement = ref.nativeElement;
|
|
39
|
+
}
|
|
40
|
+
/** @description Creates the component on demand.
|
|
41
|
+
* @param properties An optional object of properties, which will be added to the template binded ones.
|
|
42
|
+
*/
|
|
43
|
+
createComponent(properties = {}) {
|
|
44
|
+
this.nativeElement = document.createElement('smart-password-text-box');
|
|
45
|
+
for (let propertyName in properties) {
|
|
46
|
+
this.nativeElement[propertyName] = properties[propertyName];
|
|
47
|
+
}
|
|
48
|
+
return this.nativeElement;
|
|
49
|
+
}
|
|
50
|
+
/** @description Sets or gets the animation mode. Animation is disabled when the property is set to 'none' */
|
|
51
|
+
get animation() {
|
|
52
|
+
return this.nativeElement ? this.nativeElement.animation : undefined;
|
|
53
|
+
}
|
|
54
|
+
set animation(value) {
|
|
55
|
+
this.nativeElement ? this.nativeElement.animation = value : undefined;
|
|
56
|
+
}
|
|
57
|
+
/** @description Specifies that the element should be focused when the page is loaded. */
|
|
58
|
+
get autoFocus() {
|
|
59
|
+
return this.nativeElement ? this.nativeElement.autoFocus : undefined;
|
|
60
|
+
}
|
|
61
|
+
set autoFocus(value) {
|
|
62
|
+
this.nativeElement ? this.nativeElement.autoFocus = value : undefined;
|
|
63
|
+
}
|
|
64
|
+
/** @description Enables or disables the element. */
|
|
65
|
+
get disabled() {
|
|
66
|
+
return this.nativeElement ? this.nativeElement.disabled : undefined;
|
|
67
|
+
}
|
|
68
|
+
set disabled(value) {
|
|
69
|
+
this.nativeElement ? this.nativeElement.disabled = value : undefined;
|
|
70
|
+
}
|
|
71
|
+
/** @description Specifies the behavior on "Enter" key press. Default mode is "submit". */
|
|
72
|
+
get enterKeyBehavior() {
|
|
73
|
+
return this.nativeElement ? this.nativeElement.enterKeyBehavior : undefined;
|
|
74
|
+
}
|
|
75
|
+
set enterKeyBehavior(value) {
|
|
76
|
+
this.nativeElement ? this.nativeElement.enterKeyBehavior = value : undefined;
|
|
77
|
+
}
|
|
78
|
+
/** @description The form that the element is associated with (its "form owner"). The value of the attribute must be the ID of a form element in the same document. */
|
|
79
|
+
get form() {
|
|
80
|
+
return this.nativeElement ? this.nativeElement.form : undefined;
|
|
81
|
+
}
|
|
82
|
+
set form(value) {
|
|
83
|
+
this.nativeElement ? this.nativeElement.form = value : undefined;
|
|
84
|
+
}
|
|
85
|
+
/** @description Sets additional helper text below the element. Appears only when the element is focused. */
|
|
86
|
+
get hint() {
|
|
87
|
+
return this.nativeElement ? this.nativeElement.hint : undefined;
|
|
88
|
+
}
|
|
89
|
+
set hint(value) {
|
|
90
|
+
this.nativeElement ? this.nativeElement.hint = value : undefined;
|
|
91
|
+
}
|
|
92
|
+
/** @description Sets label above the element. The label is displayed above the input and it's always visible. */
|
|
93
|
+
get label() {
|
|
94
|
+
return this.nativeElement ? this.nativeElement.label : undefined;
|
|
95
|
+
}
|
|
96
|
+
set label(value) {
|
|
97
|
+
this.nativeElement ? this.nativeElement.label = value : undefined;
|
|
98
|
+
}
|
|
99
|
+
/** @description Sets or gets the language. Used in conjunction with the property messages. */
|
|
100
|
+
get locale() {
|
|
101
|
+
return this.nativeElement ? this.nativeElement.locale : undefined;
|
|
102
|
+
}
|
|
103
|
+
set locale(value) {
|
|
104
|
+
this.nativeElement ? this.nativeElement.locale = value : undefined;
|
|
105
|
+
}
|
|
106
|
+
/** @description Callback used to customize the format of the messages that are returned from the Localization Module. */
|
|
107
|
+
get localizeFormatFunction() {
|
|
108
|
+
return this.nativeElement ? this.nativeElement.localizeFormatFunction : undefined;
|
|
109
|
+
}
|
|
110
|
+
set localizeFormatFunction(value) {
|
|
111
|
+
this.nativeElement ? this.nativeElement.localizeFormatFunction = value : undefined;
|
|
112
|
+
}
|
|
113
|
+
/** @description Sets or gets the maximum number of characters that the user can enter. */
|
|
114
|
+
get maxLength() {
|
|
115
|
+
return this.nativeElement ? this.nativeElement.maxLength : undefined;
|
|
116
|
+
}
|
|
117
|
+
set maxLength(value) {
|
|
118
|
+
this.nativeElement ? this.nativeElement.maxLength = value : undefined;
|
|
119
|
+
}
|
|
120
|
+
/** @description Sets an object with string values, related to the different states of passwords strength. */
|
|
121
|
+
get messages() {
|
|
122
|
+
return this.nativeElement ? this.nativeElement.messages : undefined;
|
|
123
|
+
}
|
|
124
|
+
set messages(value) {
|
|
125
|
+
this.nativeElement ? this.nativeElement.messages = value : undefined;
|
|
126
|
+
}
|
|
127
|
+
/** @description Sets or gets the minimum number of characters that the user can enter. */
|
|
128
|
+
get minLength() {
|
|
129
|
+
return this.nativeElement ? this.nativeElement.minLength : undefined;
|
|
130
|
+
}
|
|
131
|
+
set minLength(value) {
|
|
132
|
+
this.nativeElement ? this.nativeElement.minLength = value : undefined;
|
|
133
|
+
}
|
|
134
|
+
/** @description Sets or gets the name attribute for the element. Name is used when submiting HTML forms. */
|
|
135
|
+
get name() {
|
|
136
|
+
return this.nativeElement ? this.nativeElement.name : undefined;
|
|
137
|
+
}
|
|
138
|
+
set name(value) {
|
|
139
|
+
this.nativeElement ? this.nativeElement.name = value : undefined;
|
|
140
|
+
}
|
|
141
|
+
/** @description With this property the user can set a custom callback function that determines the password strength. The returned string from the function determines the how strong the current password is. The string should be one of the following: 'short', 'weak', 'far', 'good', 'strong'. */
|
|
142
|
+
get passwordStrength() {
|
|
143
|
+
return this.nativeElement ? this.nativeElement.passwordStrength : undefined;
|
|
144
|
+
}
|
|
145
|
+
set passwordStrength(value) {
|
|
146
|
+
this.nativeElement ? this.nativeElement.passwordStrength = value : undefined;
|
|
147
|
+
}
|
|
148
|
+
/** @description The placeholder text that is displayed when no value is applied to the element. */
|
|
149
|
+
get placeholder() {
|
|
150
|
+
return this.nativeElement ? this.nativeElement.placeholder : undefined;
|
|
151
|
+
}
|
|
152
|
+
set placeholder(value) {
|
|
153
|
+
this.nativeElement ? this.nativeElement.placeholder = value : undefined;
|
|
154
|
+
}
|
|
155
|
+
/** @description Specifies that the user must fill in a value before submitting a form that contains the element. */
|
|
156
|
+
get required() {
|
|
157
|
+
return this.nativeElement ? this.nativeElement.required : undefined;
|
|
158
|
+
}
|
|
159
|
+
set required(value) {
|
|
160
|
+
this.nativeElement ? this.nativeElement.required = value : undefined;
|
|
161
|
+
}
|
|
162
|
+
/** @description Sets or gets the value indicating whether the element is aligned to support locales using right-to-left fonts. */
|
|
163
|
+
get rightToLeft() {
|
|
164
|
+
return this.nativeElement ? this.nativeElement.rightToLeft : undefined;
|
|
165
|
+
}
|
|
166
|
+
set rightToLeft(value) {
|
|
167
|
+
this.nativeElement ? this.nativeElement.rightToLeft = value : undefined;
|
|
168
|
+
}
|
|
169
|
+
/** @description Specifies whether the content of the input will be selected on focus. */
|
|
170
|
+
get selectAllOnFocus() {
|
|
171
|
+
return this.nativeElement ? this.nativeElement.selectAllOnFocus : undefined;
|
|
172
|
+
}
|
|
173
|
+
set selectAllOnFocus(value) {
|
|
174
|
+
this.nativeElement ? this.nativeElement.selectAllOnFocus = value : undefined;
|
|
175
|
+
}
|
|
176
|
+
/** @description Determines whether the password icon is visible. */
|
|
177
|
+
get showPasswordIcon() {
|
|
178
|
+
return this.nativeElement ? this.nativeElement.showPasswordIcon : undefined;
|
|
179
|
+
}
|
|
180
|
+
set showPasswordIcon(value) {
|
|
181
|
+
this.nativeElement ? this.nativeElement.showPasswordIcon = value : undefined;
|
|
182
|
+
}
|
|
183
|
+
/** @description Determines whether a tooltip which shows the password's strength will be shown. */
|
|
184
|
+
get showPasswordStrength() {
|
|
185
|
+
return this.nativeElement ? this.nativeElement.showPasswordStrength : undefined;
|
|
186
|
+
}
|
|
187
|
+
set showPasswordStrength(value) {
|
|
188
|
+
this.nativeElement ? this.nativeElement.showPasswordStrength = value : undefined;
|
|
189
|
+
}
|
|
190
|
+
/** @description Determines the theme. Theme defines the look of the element */
|
|
191
|
+
get theme() {
|
|
192
|
+
return this.nativeElement ? this.nativeElement.theme : undefined;
|
|
193
|
+
}
|
|
194
|
+
set theme(value) {
|
|
195
|
+
this.nativeElement ? this.nativeElement.theme = value : undefined;
|
|
196
|
+
}
|
|
197
|
+
/** @description Determines whether Tooltip's arrow will be shown or not. */
|
|
198
|
+
get tooltipArrow() {
|
|
199
|
+
return this.nativeElement ? this.nativeElement.tooltipArrow : undefined;
|
|
200
|
+
}
|
|
201
|
+
set tooltipArrow(value) {
|
|
202
|
+
this.nativeElement ? this.nativeElement.tooltipArrow = value : undefined;
|
|
203
|
+
}
|
|
204
|
+
/** @description Determines the delay before the tooltip appears in miliseconds. */
|
|
205
|
+
get tooltipDelay() {
|
|
206
|
+
return this.nativeElement ? this.nativeElement.tooltipDelay : undefined;
|
|
207
|
+
}
|
|
208
|
+
set tooltipDelay(value) {
|
|
209
|
+
this.nativeElement ? this.nativeElement.tooltipDelay = value : undefined;
|
|
210
|
+
}
|
|
211
|
+
/** @description Determines the position of the tooltip. */
|
|
212
|
+
get tooltipPosition() {
|
|
213
|
+
return this.nativeElement ? this.nativeElement.tooltipPosition : undefined;
|
|
214
|
+
}
|
|
215
|
+
set tooltipPosition(value) {
|
|
216
|
+
this.nativeElement ? this.nativeElement.tooltipPosition = value : undefined;
|
|
217
|
+
}
|
|
218
|
+
/** @description Sets a custom template for the content of the tooltip. */
|
|
219
|
+
get tooltipTemplate() {
|
|
220
|
+
return this.nativeElement ? this.nativeElement.tooltipTemplate : undefined;
|
|
221
|
+
}
|
|
222
|
+
set tooltipTemplate(value) {
|
|
223
|
+
this.nativeElement ? this.nativeElement.tooltipTemplate = value : undefined;
|
|
224
|
+
}
|
|
225
|
+
/** @description If true, the element cannot be focused. */
|
|
226
|
+
get unfocusable() {
|
|
227
|
+
return this.nativeElement ? this.nativeElement.unfocusable : undefined;
|
|
228
|
+
}
|
|
229
|
+
set unfocusable(value) {
|
|
230
|
+
this.nativeElement ? this.nativeElement.unfocusable = value : undefined;
|
|
231
|
+
}
|
|
232
|
+
/** @description Sets or gets the value of the element. */
|
|
233
|
+
get value() {
|
|
234
|
+
return this.nativeElement ? this.nativeElement.value : undefined;
|
|
235
|
+
}
|
|
236
|
+
set value(value) {
|
|
237
|
+
this.nativeElement ? this.nativeElement.value = value : undefined;
|
|
238
|
+
}
|
|
239
|
+
/** @description Focuses the element.
|
|
240
|
+
*/
|
|
241
|
+
focus() {
|
|
242
|
+
if (this.nativeElement.isRendered) {
|
|
243
|
+
this.nativeElement.focus();
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
this.nativeElement.whenRendered(() => {
|
|
247
|
+
this.nativeElement.focus();
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/** @description The method is used to reset input to it's initial value.
|
|
252
|
+
*/
|
|
253
|
+
reset() {
|
|
254
|
+
if (this.nativeElement.isRendered) {
|
|
255
|
+
this.nativeElement.reset();
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.nativeElement.whenRendered(() => {
|
|
259
|
+
this.nativeElement.reset();
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
get isRendered() {
|
|
264
|
+
return this.nativeElement ? this.nativeElement.isRendered : false;
|
|
265
|
+
}
|
|
266
|
+
ngOnInit() {
|
|
267
|
+
}
|
|
268
|
+
ngAfterViewInit() {
|
|
269
|
+
const that = this;
|
|
270
|
+
that.onCreate.emit(that.nativeElement);
|
|
271
|
+
Smart.Render();
|
|
272
|
+
this.nativeElement.classList.add('smart-angular');
|
|
273
|
+
this.nativeElement.whenRendered(() => { that.onReady.emit(that.nativeElement); });
|
|
274
|
+
this.listen();
|
|
275
|
+
}
|
|
276
|
+
ngOnDestroy() {
|
|
277
|
+
this.unlisten();
|
|
278
|
+
}
|
|
279
|
+
get ngValue() {
|
|
280
|
+
if (!this.nativeElement) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
const value = this.nativeElement.value;
|
|
284
|
+
return value;
|
|
285
|
+
}
|
|
286
|
+
set ngValue(value) {
|
|
287
|
+
if (this.nativeElement) {
|
|
288
|
+
this.writeValue(value);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
writeValue(value) {
|
|
292
|
+
const that = this;
|
|
293
|
+
const normalizedValue = value == null ? '' : value;
|
|
294
|
+
that.nativeElement.whenRendered(() => {
|
|
295
|
+
that.value = normalizedValue;
|
|
296
|
+
if (that._initialChange === false) {
|
|
297
|
+
that._onChange(that.value);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
registerOnChange(fn) {
|
|
302
|
+
this._onChange = fn;
|
|
303
|
+
}
|
|
304
|
+
registerOnTouched(fn) {
|
|
305
|
+
this._onTouched = fn;
|
|
306
|
+
}
|
|
307
|
+
ngOnChanges(changes) {
|
|
308
|
+
if (this.nativeElement && this.nativeElement.isRendered) {
|
|
309
|
+
for (const propName in changes) {
|
|
310
|
+
if (changes.hasOwnProperty(propName)) {
|
|
311
|
+
this.nativeElement[propName] = changes[propName].currentValue;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/** @description Add event listeners. */
|
|
317
|
+
listen() {
|
|
318
|
+
const that = this;
|
|
319
|
+
that.eventHandlers['changeHandler'] = (event) => { that.onChange.emit(event); };
|
|
320
|
+
that.nativeElement.addEventListener('change', that.eventHandlers['changeHandler']);
|
|
321
|
+
that.eventHandlers['changingHandler'] = (event) => { that.onChanging.emit(event); };
|
|
322
|
+
that.nativeElement.addEventListener('changing', that.eventHandlers['changingHandler']);
|
|
323
|
+
that.eventHandlers['changeModelHandler'] = (event) => {
|
|
324
|
+
that._initialChange = false;
|
|
325
|
+
that._onChange(that.nativeElement.value);
|
|
326
|
+
};
|
|
327
|
+
that.eventHandlers['blurModelHandler'] = (event) => {
|
|
328
|
+
that._onTouched();
|
|
329
|
+
};
|
|
330
|
+
that.nativeElement.whenRendered(() => {
|
|
331
|
+
if (that.nativeElement.querySelector('input')) {
|
|
332
|
+
that.eventHandlers['keyupModelHandler'] = (event) => {
|
|
333
|
+
setTimeout(() => { that.eventHandlers['changeModelHandler'](event); }, 50);
|
|
334
|
+
};
|
|
335
|
+
that.nativeElement.querySelector('input').addEventListener('keyup', that.eventHandlers['keyupModelHandler']);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
that.nativeElement.addEventListener('change', that.eventHandlers['changeModelHandler']);
|
|
339
|
+
that.nativeElement.addEventListener('blur', that.eventHandlers['blurModelHandler']);
|
|
340
|
+
}
|
|
341
|
+
/** @description Remove event listeners. */
|
|
342
|
+
unlisten() {
|
|
343
|
+
const that = this;
|
|
344
|
+
if (that.eventHandlers['changeHandler']) {
|
|
345
|
+
that.nativeElement.removeEventListener('change', that.eventHandlers['changeHandler']);
|
|
346
|
+
}
|
|
347
|
+
if (that.eventHandlers['changingHandler']) {
|
|
348
|
+
that.nativeElement.removeEventListener('changing', that.eventHandlers['changingHandler']);
|
|
349
|
+
}
|
|
350
|
+
if (that.eventHandlers['changeModelHandler']) {
|
|
351
|
+
that.nativeElement.removeEventListener('change', that.eventHandlers['changeModelHandler']);
|
|
352
|
+
if (that.nativeElement.querySelector('input')) {
|
|
353
|
+
that.nativeElement.querySelector('input').removeEventListener('keyup', that.eventHandlers['keyupModelHandler']);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (that.eventHandlers['blurModelHandler']) {
|
|
357
|
+
that.nativeElement.removeEventListener('blur', that.eventHandlers['blurModelHandler']);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
PasswordTextBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: PasswordTextBoxComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
362
|
+
PasswordTextBoxComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.2", type: PasswordTextBoxComponent, selector: "smart-password-text-box, [smart-password-text-box]", inputs: { animation: "animation", autoFocus: "autoFocus", disabled: "disabled", enterKeyBehavior: "enterKeyBehavior", form: "form", hint: "hint", label: "label", locale: "locale", localizeFormatFunction: "localizeFormatFunction", maxLength: "maxLength", messages: "messages", minLength: "minLength", name: "name", passwordStrength: "passwordStrength", placeholder: "placeholder", required: "required", rightToLeft: "rightToLeft", selectAllOnFocus: "selectAllOnFocus", showPasswordIcon: "showPasswordIcon", showPasswordStrength: "showPasswordStrength", theme: "theme", tooltipArrow: "tooltipArrow", tooltipDelay: "tooltipDelay", tooltipPosition: "tooltipPosition", tooltipTemplate: "tooltipTemplate", unfocusable: "unfocusable", value: "value" }, outputs: { onChange: "onChange", onChanging: "onChanging" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
|
|
363
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: PasswordTextBoxComponent, decorators: [{
|
|
364
|
+
type: Directive,
|
|
365
|
+
args: [{
|
|
366
|
+
selector: 'smart-password-text-box, [smart-password-text-box]',
|
|
367
|
+
providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR]
|
|
368
|
+
}]
|
|
369
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { animation: [{
|
|
370
|
+
type: Input
|
|
371
|
+
}], autoFocus: [{
|
|
372
|
+
type: Input
|
|
373
|
+
}], disabled: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], enterKeyBehavior: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], form: [{
|
|
378
|
+
type: Input
|
|
379
|
+
}], hint: [{
|
|
380
|
+
type: Input
|
|
381
|
+
}], label: [{
|
|
382
|
+
type: Input
|
|
383
|
+
}], locale: [{
|
|
384
|
+
type: Input
|
|
385
|
+
}], localizeFormatFunction: [{
|
|
386
|
+
type: Input
|
|
387
|
+
}], maxLength: [{
|
|
388
|
+
type: Input
|
|
389
|
+
}], messages: [{
|
|
390
|
+
type: Input
|
|
391
|
+
}], minLength: [{
|
|
392
|
+
type: Input
|
|
393
|
+
}], name: [{
|
|
394
|
+
type: Input
|
|
395
|
+
}], passwordStrength: [{
|
|
396
|
+
type: Input
|
|
397
|
+
}], placeholder: [{
|
|
398
|
+
type: Input
|
|
399
|
+
}], required: [{
|
|
400
|
+
type: Input
|
|
401
|
+
}], rightToLeft: [{
|
|
402
|
+
type: Input
|
|
403
|
+
}], selectAllOnFocus: [{
|
|
404
|
+
type: Input
|
|
405
|
+
}], showPasswordIcon: [{
|
|
406
|
+
type: Input
|
|
407
|
+
}], showPasswordStrength: [{
|
|
408
|
+
type: Input
|
|
409
|
+
}], theme: [{
|
|
410
|
+
type: Input
|
|
411
|
+
}], tooltipArrow: [{
|
|
412
|
+
type: Input
|
|
413
|
+
}], tooltipDelay: [{
|
|
414
|
+
type: Input
|
|
415
|
+
}], tooltipPosition: [{
|
|
416
|
+
type: Input
|
|
417
|
+
}], tooltipTemplate: [{
|
|
418
|
+
type: Input
|
|
419
|
+
}], unfocusable: [{
|
|
420
|
+
type: Input
|
|
421
|
+
}], value: [{
|
|
422
|
+
type: Input
|
|
423
|
+
}], onChange: [{
|
|
424
|
+
type: Output
|
|
425
|
+
}], onChanging: [{
|
|
426
|
+
type: Output
|
|
427
|
+
}] } });
|
|
428
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQucGFzc3dvcmR0ZXh0Ym94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFzc3dvcmR0ZXh0Ym94L3NyYy9zbWFydC5wYXNzd29yZHRleHRib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFhLFNBQVMsRUFBNkIsS0FBSyxFQUErQyxVQUFVLEVBQTJCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0wsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUlyRCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRnpFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU14QyxNQUFNLG1DQUFtQyxHQUFRO0lBQzdDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztJQUN2RCxLQUFLLEVBQUUsSUFBSTtDQUNkLENBQUE7QUFRRCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsV0FBVztJQUN4RCxZQUFZLEdBQWdDO1FBQzNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUlKLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBYTNCOzs7VUFHRTtRQUNILGNBQVMsR0FBeUIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzFDOzs7VUFHRTtRQUNILGVBQVUsR0FBYyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFzUHZDOzs7O1VBSUU7UUFDUSxhQUFRLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkU7Ozs7VUFJRTtRQUNRLGVBQVUsR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXVEckUsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFsVnJCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWdDLENBQUM7SUFDM0QsQ0FBQztJQUtEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLFVBQVUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQW9CLFFBQVEsQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUMzRixLQUFLLElBQUksWUFBWSxJQUFJLFVBQVUsRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM3RDtRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQixDQUFDO0lBYUQsNkdBQTZHO0lBQzdHLElBQ0ksU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsS0FBZ0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkUsQ0FBQztJQUVELHlGQUF5RjtJQUN6RixJQUNJLFNBQVM7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLEtBQWM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkUsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckUsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEUsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixJQUNJLGdCQUFnQjtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxLQUF1QjtRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlFLENBQUM7SUFFRCxzS0FBc0s7SUFDdEssSUFDSSxJQUFJO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xFLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsSUFDSSxJQUFJO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFVO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxpSEFBaUg7SUFDakgsSUFDSSxLQUFLO1FBQ1IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsSUFDSSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25FLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BFLENBQUM7SUFFRCx5SEFBeUg7SUFDekgsSUFDSSxzQkFBc0I7UUFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkYsQ0FBQztJQUNELElBQUksc0JBQXNCLENBQUMsS0FBVTtRQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BGLENBQUM7SUFFRCwwRkFBMEY7SUFDMUYsSUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCw2R0FBNkc7SUFDN0csSUFDSSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFFRCwwRkFBMEY7SUFDMUYsSUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsSUFDSSxJQUFJO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FB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O29CQUNWLFFBQVEsRUFBRSxvREFBb0Q7b0JBQzlELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUVoRDtpR0FtQ0ksU0FBUztzQkFEWixLQUFLO2dCQVVGLFNBQVM7c0JBRFosS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLElBQUk7c0JBRFAsS0FBSztnQkFVRixJQUFJO3NCQURQLEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFVRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBVUYsU0FBUztzQkFEWixLQUFLO2dCQVVGLFFBQVE7c0JBRFgsS0FBSztnQkFVRixTQUFTO3NCQURaLEtBQUs7Z0JBVUYsSUFBSTtzQkFEUCxLQUFLO2dCQVVGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFVRixXQUFXO3NCQURkLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBVUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVVGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBVUYsWUFBWTtzQkFEZixLQUFLO2dCQVVGLFlBQVk7c0JBRGYsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxLQUFLO2dCQVVGLEtBQUs7c0JBRFIsS0FBSztnQkFhSSxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXNzd29yZFRleHRCb3ggfSBmcm9tICcuLy4uL2luZGV4JztcbmltcG9ydCB7IEFuaW1hdGlvbiwgRW50ZXJLZXlCZWhhdmlvciwgUGFzc3dvcmRUZXh0Qm94VG9vbHRpcFBvc2l0aW9uLCBFbGVtZW50UmVuZGVyTW9kZX0gZnJvbSAnLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIGZvcndhcmRSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUVsZW1lbnQsIFNtYXJ0IH0gZnJvbSAnLi9zbWFydC5lbGVtZW50JztcbmV4cG9ydCB7IEFuaW1hdGlvbiwgRW50ZXJLZXlCZWhhdmlvciwgUGFzc3dvcmRUZXh0Qm94VG9vbHRpcFBvc2l0aW9uLCBFbGVtZW50UmVuZGVyTW9kZX0gZnJvbSAnLi8uLi9pbmRleCc7XG5leHBvcnQgeyBTbWFydCB9IGZyb20gJy4vc21hcnQuZWxlbWVudCc7XG5leHBvcnQgeyBQYXNzd29yZFRleHRCb3ggfSBmcm9tICcuLy4uL2luZGV4JztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuXG5cbmNvbnN0IENVU1RPTV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGFzc3dvcmRUZXh0Qm94Q29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufVxuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdzbWFydC1wYXNzd29yZC10ZXh0LWJveCwgW3NtYXJ0LXBhc3N3b3JkLXRleHQtYm94XScsXG5cdHByb3ZpZGVyczogW0NVU1RPTV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXVxuXG59KVxuXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRUZXh0Qm94Q29tcG9uZW50IGV4dGVuZHMgQmFzZUVsZW1lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cdGNvbnN0cnVjdG9yKHJlZjogRWxlbWVudFJlZjxQYXNzd29yZFRleHRCb3g+KSB7XG5cdFx0c3VwZXIocmVmKTtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPSByZWYubmF0aXZlRWxlbWVudCBhcyBQYXNzd29yZFRleHRCb3g7XG5cdH1cblxuXHRwcml2YXRlIGV2ZW50SGFuZGxlcnM6IGFueVtdID0gW107XG5cblx0cHVibGljIG5hdGl2ZUVsZW1lbnQ6IFBhc3N3b3JkVGV4dEJveDtcblx0LyoqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIHRoZSBjb21wb25lbnQgb24gZGVtYW5kLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvcHRpb25hbCBvYmplY3Qgb2YgcHJvcGVydGllcywgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgdGVtcGxhdGUgYmluZGVkIG9uZXMuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlQ29tcG9uZW50KHByb3BlcnRpZXMgPSB7fSk6IGFueSB7XG4gICAgXHR0aGlzLm5hdGl2ZUVsZW1lbnQgPSA8UGFzc3dvcmRUZXh0Qm94PmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NtYXJ0LXBhc3N3b3JkLXRleHQtYm94Jyk7XG5cdFx0Zm9yIChsZXQgcHJvcGVydHlOYW1lIGluIHByb3BlcnRpZXMpIHsgXG4gXHRcdFx0dGhpcy5uYXRpdmVFbGVtZW50W3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG5cdH1cbiAgICAgICAgLyoqXG4gICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICogVGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBjaGFuZ2UgZXZlbnQgb2NjdXJzIG9uIHRoZSBmb3JtIGVsZW1lbnRzLlxuICAgICAgICAqL1xuICAgICAgIF9vbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICogQGRlc2NyaXB0aW9uXG4gICAgICAgICogVGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gYSBibHVyIGV2ZW50IG9jY3VycyBvbiB0aGUgZm9ybSBlbGVtZW50cy5cbiAgICAgICAgKi9cbiAgICAgICBfb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7fTtcblxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciBnZXRzIHRoZSBhbmltYXRpb24gbW9kZS4gQW5pbWF0aW9uIGlzIGRpc2FibGVkIHdoZW4gdGhlIHByb3BlcnR5IGlzIHNldCB0byAnbm9uZScgKi9cblx0QElucHV0KClcblx0Z2V0IGFuaW1hdGlvbigpOiBBbmltYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYW5pbWF0aW9uIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBhbmltYXRpb24odmFsdWU6IEFuaW1hdGlvbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hbmltYXRpb24gPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoYXQgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGZvY3VzZWQgd2hlbiB0aGUgcGFnZSBpcyBsb2FkZWQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBhdXRvRm9jdXMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvRm9jdXMgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGF1dG9Gb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvRm9jdXMgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZWxlbWVudC4gKi9cblx0QElucHV0KClcblx0Z2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb24gXCJFbnRlclwiIGtleSBwcmVzcy4gRGVmYXVsdCBtb2RlIGlzIFwic3VibWl0XCIuICovXG5cdEBJbnB1dCgpXG5cdGdldCBlbnRlcktleUJlaGF2aW9yKCk6IEVudGVyS2V5QmVoYXZpb3Ige1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZW50ZXJLZXlCZWhhdmlvciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZW50ZXJLZXlCZWhhdmlvcih2YWx1ZTogRW50ZXJLZXlCZWhhdmlvcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5lbnRlcktleUJlaGF2aW9yID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoZSBmb3JtIHRoYXQgdGhlIGVsZW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIChpdHMgXCJmb3JtIG93bmVyXCIpLiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBtdXN0IGJlIHRoZSBJRCBvZiBhIGZvcm0gZWxlbWVudCBpbiB0aGUgc2FtZSBkb2N1bWVudC4gKi9cblx0QElucHV0KClcblx0Z2V0IGZvcm0oKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmZvcm0gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGZvcm0odmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5mb3JtID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgYWRkaXRpb25hbCBoZWxwZXIgdGV4dCBiZWxvdyB0aGUgZWxlbWVudC4gQXBwZWFycyBvbmx5IHdoZW4gdGhlIGVsZW1lbnQgaXMgZm9jdXNlZC4gKi9cblx0QElucHV0KClcblx0Z2V0IGhpbnQoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmhpbnQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGhpbnQodmFsdWU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5oaW50ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgbGFiZWwgYWJvdmUgdGhlIGVsZW1lbnQuIFRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgYWJvdmUgdGhlIGlucHV0IGFuZCBpdCdzIGFsd2F5cyB2aXNpYmxlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbGFiZWwoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxhYmVsIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBsYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxhYmVsID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgZ2V0cyB0aGUgbGFuZ3VhZ2UuIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJvcGVydHkgbWVzc2FnZXMuICAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2NhbGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvY2FsZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBDYWxsYmFjayB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgZm9ybWF0IG9mIHRoZSBtZXNzYWdlcyB0aGF0IGFyZSByZXR1cm5lZCBmcm9tIHRoZSBMb2NhbGl6YXRpb24gTW9kdWxlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbG9jYWxpemVGb3JtYXRGdW5jdGlvbigpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9jYWxpemVGb3JtYXRGdW5jdGlvbiA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbG9jYWxpemVGb3JtYXRGdW5jdGlvbih2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvY2FsaXplRm9ybWF0RnVuY3Rpb24gPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciBnZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlIHVzZXIgY2FuIGVudGVyLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5tYXhMZW5ndGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1heExlbmd0aCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTZXRzIGFuIG9iamVjdCB3aXRoIHN0cmluZyB2YWx1ZXMsIHJlbGF0ZWQgdG8gdGhlIGRpZmZlcmVudCBzdGF0ZXMgb2YgcGFzc3dvcmRzIHN0cmVuZ3RoLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbWVzc2FnZXMoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1lc3NhZ2VzIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBtZXNzYWdlcyh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1lc3NhZ2VzID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgZ2V0cyB0aGUgbWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHRoZSB1c2VyIGNhbiBlbnRlci4gKi9cblx0QElucHV0KClcblx0Z2V0IG1pbkxlbmd0aCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubWluTGVuZ3RoIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBtaW5MZW5ndGgodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5taW5MZW5ndGggPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciBnZXRzIHRoZSBuYW1lIGF0dHJpYnV0ZSBmb3IgdGhlIGVsZW1lbnQuIE5hbWUgaXMgdXNlZCB3aGVuIHN1Ym1pdGluZyBIVE1MIGZvcm1zLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm5hbWUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gV2l0aCB0aGlzIHByb3BlcnR5IHRoZSB1c2VyIGNhbiBzZXQgYSBjdXN0b20gY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBwYXNzd29yZCBzdHJlbmd0aC4gVGhlIHJldHVybmVkIHN0cmluZyBmcm9tIHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBob3cgc3Ryb25nIHRoZSBjdXJyZW50IHBhc3N3b3JkIGlzLiBUaGUgc3RyaW5nIHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJ3Nob3J0JywgJ3dlYWsnLCAnZmFyJywgJ2dvb2QnLCAnc3Ryb25nJy4gKi9cblx0QElucHV0KClcblx0Z2V0IHBhc3N3b3JkU3RyZW5ndGgoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnBhc3N3b3JkU3RyZW5ndGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHBhc3N3b3JkU3RyZW5ndGgodmFsdWU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5wYXNzd29yZFN0cmVuZ3RoID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoZSBwbGFjZWhvbGRlciB0ZXh0IHRoYXQgaXMgZGlzcGxheWVkIHdoZW4gbm8gdmFsdWUgaXMgYXBwbGllZCB0byB0aGUgZWxlbWVudC4gICovXG5cdEBJbnB1dCgpXG5cdGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXIgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoYXQgdGhlIHVzZXIgbXVzdCBmaWxsIGluIGEgdmFsdWUgYmVmb3JlIHN1Ym1pdHRpbmcgYSBmb3JtIHRoYXQgY29udGFpbnMgdGhlIGVsZW1lbnQuICovXG5cdEBJbnB1dCgpXG5cdGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJlcXVpcmVkIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yZXF1aXJlZCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTZXRzIG9yIGdldHMgdGhlIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgZWxlbWVudCBpcyBhbGlnbmVkIHRvIHN1cHBvcnQgbG9jYWxlcyB1c2luZyByaWdodC10by1sZWZ0IGZvbnRzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgcmlnaHRUb0xlZnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yaWdodFRvTGVmdCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgcmlnaHRUb0xlZnQodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmlnaHRUb0xlZnQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IHdpbGwgYmUgc2VsZWN0ZWQgb24gZm9jdXMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBzZWxlY3RBbGxPbkZvY3VzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0QWxsT25Gb2N1cyA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgc2VsZWN0QWxsT25Gb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3RBbGxPbkZvY3VzID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERldGVybWluZXMgd2hldGhlciB0aGUgcGFzc3dvcmQgaWNvbiBpcyB2aXNpYmxlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgc2hvd1Bhc3N3b3JkSWNvbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNob3dQYXNzd29yZEljb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHNob3dQYXNzd29yZEljb24odmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2hvd1Bhc3N3b3JkSWNvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIHdoZXRoZXIgYSB0b29sdGlwIHdoaWNoIHNob3dzIHRoZSBwYXNzd29yZCdzIHN0cmVuZ3RoIHdpbGwgYmUgc2hvd24uICovXG5cdEBJbnB1dCgpXG5cdGdldCBzaG93UGFzc3dvcmRTdHJlbmd0aCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNob3dQYXNzd29yZFN0cmVuZ3RoIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBzaG93UGFzc3dvcmRTdHJlbmd0aCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zaG93UGFzc3dvcmRTdHJlbmd0aCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIHRoZSB0aGVtZS4gVGhlbWUgZGVmaW5lcyB0aGUgbG9vayBvZiB0aGUgZWxlbWVudCAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdGhlbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRoZW1lIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB0aGVtZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRoZW1lID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERldGVybWluZXMgd2hldGhlciBUb29sdGlwJ3MgYXJyb3cgd2lsbCBiZSBzaG93biBvciBub3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCB0b29sdGlwQXJyb3coKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50b29sdGlwQXJyb3cgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHRvb2x0aXBBcnJvdyh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50b29sdGlwQXJyb3cgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyB0aGUgZGVsYXkgYmVmb3JlIHRoZSB0b29sdGlwIGFwcGVhcnMgaW4gbWlsaXNlY29uZHMuICovXG5cdEBJbnB1dCgpXG5cdGdldCB0b29sdGlwRGVsYXkoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRvb2x0aXBEZWxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdG9vbHRpcERlbGF5KHZhbHVlOiBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudG9vbHRpcERlbGF5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERldGVybWluZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0b29sdGlwLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdG9vbHRpcFBvc2l0aW9uKCk6IFBhc3N3b3JkVGV4dEJveFRvb2x0aXBQb3NpdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50b29sdGlwUG9zaXRpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHRvb2x0aXBQb3NpdGlvbih2YWx1ZTogUGFzc3dvcmRUZXh0Qm94VG9vbHRpcFBvc2l0aW9uKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRvb2x0aXBQb3NpdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTZXRzIGEgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgY29udGVudCBvZiB0aGUgdG9vbHRpcC4gKi9cblx0QElucHV0KClcblx0Z2V0IHRvb2x0aXBUZW1wbGF0ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudG9vbHRpcFRlbXBsYXRlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB0b29sdGlwVGVtcGxhdGUodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50b29sdGlwVGVtcGxhdGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gSWYgdHJ1ZSwgdGhlIGVsZW1lbnQgY2Fubm90IGJlIGZvY3VzZWQuICovXG5cdEBJbnB1dCgpXG5cdGdldCB1bmZvY3VzYWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnVuZm9jdXNhYmxlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB1bmZvY3VzYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC51bmZvY3VzYWJsZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTZXRzIG9yIGdldHMgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LiAgKi9cblx0QElucHV0KClcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCBpcyBjaGFuZ2VkLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Q3VzdG9tIGV2ZW50IHdhcyBjcmVhdGVkIHdpdGg6IGV2ZW50LmRldGFpbChcdG9sZFZhbHVlLCBcdHZhbHVlKVxuXHQqICAgb2xkVmFsdWUgLSBUaGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGVsZW1lbnQgYmVmb3JlIGl0IHdhcyBjaGFuZ2VkLlxuXHQqICAgdmFsdWUgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBlbGVtZW50LlxuXHQqL1xuXHRAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBvbiBlYWNoIGtleSB1cCBldmVudCBvZiB0aGUgVGV4dEJveCwgaWYgdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHRDdXN0b20gZXZlbnQgd2FzIGNyZWF0ZWQgd2l0aDogZXZlbnQuZGV0YWlsKFx0b2xkVmFsdWUsIFx0dmFsdWUpXG5cdCogICBvbGRWYWx1ZSAtIFRoZSBwcmV2aW91cyB2YWx1ZSBiZWZvcmUgaXQgd2FzIGNoYW5nZWQuXG5cdCogICB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUuXG5cdCovXG5cdEBPdXRwdXQoKSBvbkNoYW5naW5nOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gRm9jdXNlcyB0aGUgZWxlbWVudC4gXG5cdCovXG4gICAgcHVibGljIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoZSBtZXRob2QgaXMgdXNlZCB0byByZXNldCBpbnB1dCB0byBpdCdzIGluaXRpYWwgdmFsdWUuICBcblx0Ki9cbiAgICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVzZXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cblx0Z2V0IGlzUmVuZGVyZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkIDogZmFsc2U7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cbiAgICAgIHRoYXQub25DcmVhdGUuZW1pdCh0aGF0Lm5hdGl2ZUVsZW1lbnQpO1xuXG5cdFx0U21hcnQuUmVuZGVyKCk7XG5cblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnc21hcnQtYW5ndWxhcicpO1xuXG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7IHRoYXQub25SZWFkeS5lbWl0KHRoYXQubmF0aXZlRWxlbWVudCk7IH0pO1xuXHRcdHRoaXMubGlzdGVuKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnVubGlzdGVuKCk7XG5cdH1cblxuXHRfaW5pdGlhbENoYW5nZSA9IHRydWU7IFxuXG5cdGdldCBuZ1ZhbHVlKCk6IGFueSB7XG5cdFx0aWYgKCF0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHNldCBuZ1ZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodGhpcy5uYXRpdmVFbGVtZW50KSB7XG5cdFx0ICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcblxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuXHRcdFx0dGhhdC52YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcblx0XHRcdGlmICh0aGF0Ll9pbml0aWFsQ2hhbmdlID09PSBmYWxzZSkge1xuXHQgICAgXHRcdHRoYXQuX29uQ2hhbmdlKHRoYXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuXHRcdH0pO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5fb25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLl9vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblx0XHRpZiAodGhpcy5uYXRpdmVFbGVtZW50ICYmIHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHByb3BOYW1lIGluIGNoYW5nZXMpIHtcblx0XHRcdFx0aWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG5cdFx0XHRcdFx0dGhpcy5uYXRpdmVFbGVtZW50W3Byb3BOYW1lXSA9IGNoYW5nZXNbcHJvcE5hbWVdLmN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQWRkIGV2ZW50IGxpc3RlbmVycy4gKi9cblx0cHJpdmF0ZSBsaXN0ZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uQ2hhbmdlLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdpbmdIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25DaGFuZ2luZy5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2luZycsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdpbmdIYW5kbGVyJ10pO1xuXG5cbiAgICAgICAgdGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VNb2RlbEhhbmRsZXInXSA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoYXQuX2luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoYXQuX29uQ2hhbmdlKHRoYXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoYXQuZXZlbnRIYW5kbGVyc1snYmx1ck1vZGVsSGFuZGxlciddID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhhdC5fb25Ub3VjaGVkKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoYXQubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5ldmVudEhhbmRsZXJzWydrZXl1cE1vZGVsSGFuZGxlciddID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZU1vZGVsSGFuZGxlciddKGV2ZW50KTsgfSwgNTApO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGF0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sna2V5dXBNb2RlbEhhbmRsZXInXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZU1vZGVsSGFuZGxlciddKTtcblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoYXQuZXZlbnRIYW5kbGVyc1snYmx1ck1vZGVsSGFuZGxlciddKTtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gUmVtb3ZlIGV2ZW50IGxpc3RlbmVycy4gKi9cblx0cHJpdmF0ZSB1bmxpc3RlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5naW5nSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdpbmcnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5naW5nSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VNb2RlbEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlTW9kZWxIYW5kbGVyJ10pO1xuICAgICAgICAgICAgaWYgKHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAgICAgICB0aGF0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sna2V5dXBNb2RlbEhhbmRsZXInXSk7XG4gICAgICAgICAgICB9XG5cdFx0fVxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ2JsdXJNb2RlbEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2JsdXJNb2RlbEhhbmRsZXInXSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
|