ng-prime-tools 1.0.16 → 1.0.17
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/README.md +4 -0
- package/esm2022/lib/models/card-config.model.mjs +1 -1
- package/esm2022/lib/models/login-page-config.model.mjs +1 -1
- package/esm2022/lib/pt-card/pt-card.component.mjs +43 -3
- package/esm2022/lib/pt-login-page/pt-login-card/pt-login-card.component.mjs +147 -0
- package/esm2022/lib/pt-login-page/pt-login-page.component.mjs +35 -126
- package/esm2022/lib/pt-login-page/pt-login-page.module.mjs +7 -3
- package/fesm2022/ng-prime-tools.mjs +125 -35
- package/fesm2022/ng-prime-tools.mjs.map +1 -1
- package/lib/models/card-config.model.d.ts +3 -0
- package/lib/models/card-config.model.d.ts.map +1 -1
- package/lib/models/login-page-config.model.d.ts +5 -1
- package/lib/models/login-page-config.model.d.ts.map +1 -1
- package/lib/pt-card/pt-card.component.d.ts +24 -0
- package/lib/pt-card/pt-card.component.d.ts.map +1 -1
- package/lib/pt-login-page/pt-login-card/pt-login-card.component.d.ts +18 -0
- package/lib/pt-login-page/pt-login-card/pt-login-card.component.d.ts.map +1 -0
- package/lib/pt-login-page/pt-login-page.component.d.ts +5 -10
- package/lib/pt-login-page/pt-login-page.component.d.ts.map +1 -1
- package/lib/pt-login-page/pt-login-page.module.d.ts +2 -1
- package/lib/pt-login-page/pt-login-page.module.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -636,6 +636,10 @@ export class FormBuilderTesterComponent implements OnInit {
|
|
636
636
|
|
637
637
|
## Changelog
|
638
638
|
|
639
|
+
### Version 1.0.17 - Release Date: 21/01/2025
|
640
|
+
|
641
|
+
- Adding positions for login page
|
642
|
+
|
639
643
|
### Version 1.0.16 - Release Date: 19/01/2025
|
640
644
|
|
641
645
|
- fix bug z-index fancy menu
|
@@ -1,2 +1,2 @@
|
|
1
1
|
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL21vZGVscy9jYXJkLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVudUNvbmZpZyB9IGZyb20gJy4vbWVudS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgVGl0bGVTdHlsZSB9IGZyb20gJy4vdGl0bGUtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZENvbmZpZyB7XG4gIGlkZW50aWZpZXI/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nIHwgVGl0bGVTdHlsZTtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuICBtYXJnaW4/OiBzdHJpbmc7XG4gIGJvcmRlckNvbG9yPzogc3RyaW5nO1xuICBib3JkZXJXaWR0aD86IHN0cmluZztcbiAgbWVudT86IE1lbnVDb25maWc7XG4gIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCc7XG4gIHNjcm9sbGFibGVWZXJ0aWNhbD86IGJvb2xlYW47XG4gIHNjcm9sbGFibGVIb3Jpem9udGFsPzogYm9vbGVhbjtcbiAgcGF0dGVybj86IFBhdHRlcm47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBib3hTaGFkb3c/
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL21vZGVscy9jYXJkLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVudUNvbmZpZyB9IGZyb20gJy4vbWVudS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgVGl0bGVTdHlsZSB9IGZyb20gJy4vdGl0bGUtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZENvbmZpZyB7XG4gIGlkZW50aWZpZXI/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nIHwgVGl0bGVTdHlsZTtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuICBtYXJnaW4/OiBzdHJpbmc7XG4gIGJvcmRlckNvbG9yPzogc3RyaW5nO1xuICBib3JkZXJXaWR0aD86IHN0cmluZztcbiAgbWVudT86IE1lbnVDb25maWc7XG4gIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCc7XG4gIHNjcm9sbGFibGVWZXJ0aWNhbD86IGJvb2xlYW47XG4gIHNjcm9sbGFibGVIb3Jpem9udGFsPzogYm9vbGVhbjtcbiAgcGF0dGVybj86IFBhdHRlcm47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xuICBib3hTaGFkb3c/OiBzdHJpbmc7XG4gIHpJbmRleD86IG51bWJlcjtcbiAgYWxpZ25Db250ZW50PzogJ2NlbnRlcicgfCAnZGVmYXVsdCc7XG4gIGFsaWduQm9keUNvbnRlbnQ/OiAnY2VudGVyJyB8ICdkZWZhdWx0JztcbiAgYWxpZ25IZWFkZXJDb250ZW50PzogJ2NlbnRlcicgfCAnZGVmYXVsdCc7XG59XG4iXX0=
|
@@ -1,2 +1,2 @@
|
|
1
1
|
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tcGFnZS1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL21vZGVscy9sb2dpbi1wYWdlLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9vdGVyTW9kZWwgfSBmcm9tICcuL2Zvb3Rlci5tb2RlbCc7XG5pbXBvcnQgeyBJbWFnZVN0eWxlIH0gZnJvbSAnLi9pbWFnZS1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBMb2dpbk1vZGVsIH0gZnJvbSAnLi9sb2dpbi1tb2RlbCc7XG5pbXBvcnQgeyBQYXR0ZXJuIH0gZnJvbSAnLi9wYXR0ZXJuLm1vZGVsJztcbmltcG9ydCB7IFRpdGxlU3R5bGUgfSBmcm9tICcuL3RpdGxlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1UZXh0RmllbGQgfSBmcm9tICcuL2Zvcm0tdGV4dC1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBDYXJkQ29uZmlnIH0gZnJvbSAnLi9jYXJkLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25Nb2RlbCB9IGZyb20gJy4vYnV0dG9uLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblBhZ2VDb25maWcge1xuICBiYWNrZ3JvdW5kSW1hZ2U/OiBQYXR0ZXJuO1xuICB0aXRsZT86IFRpdGxlU3R5bGU7XG4gIGxvZ29Vcmw/OiBJbWFnZVN0eWxlO1xuICBmb290ZXI/OiBGb290ZXJNb2RlbDtcbiAgbG9naW4/
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tcGFnZS1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL21vZGVscy9sb2dpbi1wYWdlLWNvbmZpZy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9vdGVyTW9kZWwgfSBmcm9tICcuL2Zvb3Rlci5tb2RlbCc7XG5pbXBvcnQgeyBJbWFnZVN0eWxlIH0gZnJvbSAnLi9pbWFnZS1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBMb2dpbk1vZGVsIH0gZnJvbSAnLi9sb2dpbi1tb2RlbCc7XG5pbXBvcnQgeyBQYXR0ZXJuIH0gZnJvbSAnLi9wYXR0ZXJuLm1vZGVsJztcbmltcG9ydCB7IFRpdGxlU3R5bGUgfSBmcm9tICcuL3RpdGxlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1UZXh0RmllbGQgfSBmcm9tICcuL2Zvcm0tdGV4dC1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBDYXJkQ29uZmlnIH0gZnJvbSAnLi9jYXJkLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25Nb2RlbCB9IGZyb20gJy4vYnV0dG9uLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblBhZ2VDb25maWcge1xuICBiYWNrZ3JvdW5kSW1hZ2U/OiBQYXR0ZXJuO1xuICB0aXRsZT86IFRpdGxlU3R5bGU7XG4gIGxvZ29Vcmw/OiBJbWFnZVN0eWxlO1xuICBmb290ZXI/OiBGb290ZXJNb2RlbDtcbiAgbG9naW4/OiBMb2dpbk1vZGVsO1xuICBsb2dpbkNhcmRDb25maWc/OiBDYXJkQ29uZmlnO1xuICBjZW50ZXJDYXJkQ29uZmlnPzogQ2FyZENvbmZpZztcbiAgbGVmdENhcmRDb25maWc/OiBDYXJkQ29uZmlnO1xuICByaWdodENhcmRDb25maWc/OiBDYXJkQ29uZmlnO1xuICB1c2VybmFtZUZpZWxkPzogRm9ybVRleHRGaWVsZDtcbiAgcGFzc3dvcmRGaWVsZD86IEZvcm1UZXh0RmllbGQ7XG4gIGxvZ2luQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGJ1dHRvbkNvbmZpZz86IEJ1dHRvbk1vZGVsO1xuICBwb3NpdGlvbj86ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0Jztcbn1cbiJdfQ==
|
@@ -107,7 +107,13 @@ export class PTCardComponent {
|
|
107
107
|
: `${patternWidth} ${patternHeight}`;
|
108
108
|
// Determine background-position based on the position parameter
|
109
109
|
const backgroundPosition = this.config.pattern?.position || 'center';
|
110
|
+
const justifyContent = this.config.alignContent === 'center' ? 'center' : 'flex-start';
|
111
|
+
const alignItems = this.config.alignContent === 'center' ? 'center' : 'stretch';
|
110
112
|
return {
|
113
|
+
display: 'flex',
|
114
|
+
flexDirection: 'column',
|
115
|
+
justifyContent, // Apply conditional vertical alignment
|
116
|
+
alignItems, // Apply conditional horizontal alignment
|
111
117
|
backgroundColor,
|
112
118
|
width: this.config.width || PTCardComponent.DEFAULT_WIDTH,
|
113
119
|
height: this.config.height || PTCardComponent.DEFAULT_HEIGHT,
|
@@ -126,19 +132,53 @@ export class PTCardComponent {
|
|
126
132
|
zIndex: this.config.zIndex !== undefined ? this.config.zIndex : 'auto',
|
127
133
|
};
|
128
134
|
}
|
135
|
+
getBodyStyles() {
|
136
|
+
const justifyContent = this.config.alignBodyContent === 'center' ? 'center' : 'flex-start';
|
137
|
+
const alignItems = this.config.alignBodyContent === 'center' ? 'center' : 'stretch';
|
138
|
+
return {
|
139
|
+
display: 'flex',
|
140
|
+
flexDirection: 'column',
|
141
|
+
justifyContent,
|
142
|
+
alignItems,
|
143
|
+
flexGrow: 1,
|
144
|
+
maxWidth: '100%',
|
145
|
+
padding: '16px', // Default padding for body
|
146
|
+
boxSizing: 'border-box',
|
147
|
+
};
|
148
|
+
}
|
149
|
+
getHeaderStyles() {
|
150
|
+
const justifyContent = this.config.alignHeaderContent === 'center' ? 'center' : 'flex-start';
|
151
|
+
const alignItems = this.config.alignHeaderContent === 'center' ? 'center' : 'stretch';
|
152
|
+
return {
|
153
|
+
display: 'flex',
|
154
|
+
justifyContent,
|
155
|
+
alignItems,
|
156
|
+
marginBottom: '16px', // Default margin for header
|
157
|
+
position: 'relative',
|
158
|
+
};
|
159
|
+
}
|
129
160
|
isScrollableHorizontal() {
|
130
161
|
return !!this.config.scrollableHorizontal;
|
131
162
|
}
|
132
163
|
isScrollableVertical() {
|
133
164
|
return !!this.config.scrollableVertical;
|
134
165
|
}
|
166
|
+
getCardClass() {
|
167
|
+
return this.config.alignContent === 'center' ? 'center-align' : '';
|
168
|
+
}
|
169
|
+
getBodyClass() {
|
170
|
+
return this.config.alignBodyContent === 'center' ? 'center-align' : '';
|
171
|
+
}
|
172
|
+
getHeaderClass() {
|
173
|
+
return this.config.alignHeaderContent === 'center' ? 'center-align' : '';
|
174
|
+
}
|
135
175
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTCardComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
136
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTCardComponent, selector: "pt-card", inputs: { config: "config" }, ngImport: i0, template: "<div\n class=\"pt-card card\"\n [attr.id]=\"config.identifier\"\n [ngStyle]=\"getCardStyles()\"\n>\n <div
|
176
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTCardComponent, selector: "pt-card", inputs: { config: "config" }, ngImport: i0, template: "<div\n class=\"pt-card card\"\n [ngClass]=\"getCardClass()\"\n [attr.id]=\"config.identifier\"\n [ngStyle]=\"getCardStyles()\"\n>\n <!-- Card Header -->\n <div\n *ngIf=\"hasTitle()\"\n class=\"card-header\"\n [ngClass]=\"getHeaderClass()\"\n [ngStyle]=\"getHeaderStyles()\"\n >\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'left'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-left\"\n ></i>\n <span>{{ getTitleText() }}</span>\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'right'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-right\"\n ></i>\n <pt-menu\n *ngIf=\"config.menu\"\n [config]=\"config.menu\"\n [ngClass]=\"{\n 'menu-left': getMenuPosition() === 'left',\n 'menu-right': getMenuPosition() === 'right'\n }\"\n ></pt-menu>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\" [ngClass]=\"getBodyClass()\" [ngStyle]=\"getBodyStyles()\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".pt-card .card{display:flex;flex-direction:column;padding:16px;margin:0 auto;max-height:100vh;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;justify-content:flex-start;align-items:stretch}.pt-card .card.center-align{justify-content:center;align-items:center}.pt-card .card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:center;pointer-events:none}.pt-card .card-body{display:flex;flex-direction:column;flex-grow:1;max-width:100%;z-index:1;padding:0;box-sizing:border-box;justify-content:flex-start;align-items:stretch}.pt-card .card-body.center-align{justify-content:center;align-items:center}.pt-card .card-header{margin-bottom:16px;display:flex;position:relative;justify-content:flex-start;align-items:stretch}.pt-card .card-header.center-align{justify-content:center;align-items:center}.pt-card .card-header-icon-left{margin-right:6px}.pt-card .card-header-icon-right{margin-left:6px}.pt-card .menu-left{position:absolute;left:0;top:0}.pt-card .menu-right{position:absolute;right:0;top:-2px}.pt-card .card-menu{margin-left:auto;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.PTMenuComponent, selector: "pt-menu", inputs: ["config"] }] }); }
|
137
177
|
}
|
138
178
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTCardComponent, decorators: [{
|
139
179
|
type: Component,
|
140
|
-
args: [{ selector: 'pt-card', template: "<div\n class=\"pt-card card\"\n [attr.id]=\"config.identifier\"\n [ngStyle]=\"getCardStyles()\"\n>\n <div
|
180
|
+
args: [{ selector: 'pt-card', template: "<div\n class=\"pt-card card\"\n [ngClass]=\"getCardClass()\"\n [attr.id]=\"config.identifier\"\n [ngStyle]=\"getCardStyles()\"\n>\n <!-- Card Header -->\n <div\n *ngIf=\"hasTitle()\"\n class=\"card-header\"\n [ngClass]=\"getHeaderClass()\"\n [ngStyle]=\"getHeaderStyles()\"\n >\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'left'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-left\"\n ></i>\n <span>{{ getTitleText() }}</span>\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'right'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-right\"\n ></i>\n <pt-menu\n *ngIf=\"config.menu\"\n [config]=\"config.menu\"\n [ngClass]=\"{\n 'menu-left': getMenuPosition() === 'left',\n 'menu-right': getMenuPosition() === 'right'\n }\"\n ></pt-menu>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\" [ngClass]=\"getBodyClass()\" [ngStyle]=\"getBodyStyles()\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".pt-card .card{display:flex;flex-direction:column;padding:16px;margin:0 auto;max-height:100vh;max-width:100%;overflow:hidden;position:relative;box-sizing:border-box;justify-content:flex-start;align-items:stretch}.pt-card .card.center-align{justify-content:center;align-items:center}.pt-card .card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-size:cover;background-position:center;pointer-events:none}.pt-card .card-body{display:flex;flex-direction:column;flex-grow:1;max-width:100%;z-index:1;padding:0;box-sizing:border-box;justify-content:flex-start;align-items:stretch}.pt-card .card-body.center-align{justify-content:center;align-items:center}.pt-card .card-header{margin-bottom:16px;display:flex;position:relative;justify-content:flex-start;align-items:stretch}.pt-card .card-header.center-align{justify-content:center;align-items:center}.pt-card .card-header-icon-left{margin-right:6px}.pt-card .card-header-icon-right{margin-left:6px}.pt-card .menu-left{position:absolute;left:0;top:0}.pt-card .menu-right{position:absolute;right:0;top:-2px}.pt-card .card-menu{margin-left:auto;cursor:pointer}\n"] }]
|
141
181
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { config: [{
|
142
182
|
type: Input
|
143
183
|
}] } });
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQzs7OztBQVF2QixNQUFNLE9BQU8sZUFBZTtJQUcxQix1Q0FBdUM7YUFDZix3QkFBbUIsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM3Qiw0QkFBdUIsR0FBRyxPQUFPLEFBQVYsQ0FBVzthQUNsQyx1QkFBa0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM1QiwyQkFBc0IsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUMvQiwwQkFBcUIsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUMvQiw2QkFBd0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUNsQyxrQkFBYSxHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQ3ZCLG1CQUFjLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDeEIsMkJBQXNCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDaEMsMEJBQXFCLEdBQUcsT0FBTyxBQUFWLENBQVc7YUFDaEMseUJBQW9CLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDOUIseUJBQW9CLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDN0IseUJBQW9CLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDN0Isb0JBQWUsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUN6QixtQkFBYyxHQUFHLFFBQVEsQUFBWCxDQUFZO0lBRWxELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFB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a0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO0lBQzVDLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUMxQyxDQUFDOytHQTNKVSxlQUFlO21HQUFmLGVBQWUsNkVDZjVCLGdsQ0FzQ0E7OzRGRHZCYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7c0ZBS1YsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmRDb25maWcsIEljb25TdHlsZSwgVGl0bGVTdHlsZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWNhcmQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQVENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgY29uZmlnOiBDYXJkQ29uZmlnID0ge307XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZXMgYXMgcmVhZG9ubHkgdmFyaWFibGVzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVElUTEVfQ09MT1IgPSAnIzMzMyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVElUTEVfRk9OVF9TSVpFID0gJzEuNWVtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9JQ09OX0NPTE9SID0gJyMzMzMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0lDT05fRk9OVF9TSVpFID0gJzFlbSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9QT1NJVElPTiA9ICdsZWZ0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0gJyNmZmYnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1dJRFRIID0gJzEwMCUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0hFSUdIVCA9ICdhdXRvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9USVRMRV9QT1NJVElPTiA9ICdsZWZ0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NRU5VX1BPU0lUSU9OID0gJ3JpZ2h0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9CT1JERVJfQ09MT1IgPSAnI2RkZCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQk9SREVSX1dJRFRIID0gJzFweCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVFJBTlNQQVJFTkNZID0gJzEwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUEFERElORyA9ICcxNnB4JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVJHSU4gPSAnMTZweCAwJztcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5sb2dQYXR0ZXJuVXJsKCk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1BhdHRlcm5VcmwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnBhdHRlcm4/LmltYWdlVXJsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtQVENhcmRDb21wb25lbnRdIElkZW50aWZpZXI6ICR7dGhpcy5jb25maWcuaWRlbnRpZmllcn0sIFBhdHRlcm4gVVJMOiAke3RoaXMuY29uZmlnLnBhdHRlcm4uaW1hZ2VVcmx9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpc1RpdGxlT2JqZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb25maWcudGl0bGUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb25maWcudGl0bGUgIT09IG51bGw7XG4gIH1cblxuICBnZXRUaXRsZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1RpdGxlT2JqZWN0KClcbiAgICAgID8gKHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUpLnRleHRcbiAgICAgIDogKHRoaXMuY29uZmlnLnRpdGxlIGFzIHN0cmluZyk7XG4gIH1cblxuICBnZXRUaXRsZVN0eWxlcygpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWxpZ25NYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBsZWZ0OiAnZmxleC1zdGFydCcsXG4gICAgICBjZW50ZXI6ICdjZW50ZXInLFxuICAgICAgcmlnaHQ6ICdmbGV4LWVuZCcsXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHRpdGxlPy5jb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9USVRMRV9DT0xPUixcbiAgICAgIGZvbnRTaXplOiB0aXRsZT8uZm9udFNpemUgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfVElUTEVfRk9OVF9TSVpFLFxuICAgICAgJy0tdGV4dC1hbGlnbic6XG4gICAgICAgIGFsaWduTWFwW3RpdGxlPy5wb3NpdGlvbiB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9USVRMRV9QT1NJVElPTl0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHVwZGF0ZVN0eWxlcygpIHtcbiAgICAvLyBBZnRlciBkYXRhIGlzIGZldGNoZWQgb3IgdXBkYXRlZFxuICAgIHRoaXMuZ2V0Q2FyZFN0eWxlcygpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpOyAvLyBGb3JjZSBBbmd1bGFyIHRvIGRldGVjdCB0aGUgY2hhbmdlc1xuICB9XG5cbiAgZ2V0SWNvbkNsYXNzKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGljb24gPSAodGhpcy5jb25maWcudGl0bGUgYXMgVGl0bGVTdHlsZSk/Lmljb247XG4gICAgcmV0dXJuIHR5cGVvZiBpY29uID09PSAnc3RyaW5nJyA/IGljb24gOiAoaWNvbiBhcyBJY29uU3R5bGUpPy5jb2RlIHx8IG51bGw7XG4gIH1cblxuICBnZXRJY29uU3R5bGVzKCkge1xuICAgIGNvbnN0IGljb24gPSAodGhpcy5jb25maWcudGl0bGUgYXMgVGl0bGVTdHlsZSk/Lmljb247XG4gICAgaWYgKHR5cGVvZiBpY29uICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGljb24/LmNvbG9yIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0lDT05fQ09MT1IsXG4gICAgICAgIGZvbnRTaXplOiBpY29uPy5mb250U2l6ZSB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX0ZPTlRfU0laRSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjogUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9DT0xPUixcbiAgICAgIGZvbnRTaXplOiBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX0ZPTlRfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0SWNvblBvc2l0aW9uKCk6ICdsZWZ0JyB8ICdyaWdodCcgfCBudWxsIHtcbiAgICBjb25zdCBpY29uID0gKHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUpPy5pY29uO1xuICAgIGlmICh0eXBlb2YgaWNvbiAhPT0gJ3N0cmluZycgJiYgaWNvbj8ucG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBpY29uLnBvc2l0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9QT1NJVElPTjtcbiAgfVxuXG4gIGdldE1lbnVQb3NpdGlvbigpOiAnbGVmdCcgfCAncmlnaHQnIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubWVudVBvc2l0aW9uIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX01FTlVfUE9TSVRJT047XG4gIH1cblxuICBnZXRDYXJkU3R5bGVzKCkge1xuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LnRyYW5zcGFyZW5jeVBlcmNlbnRhZ2VcbiAgICAgID8gcGFyc2VGbG9hdCh0aGlzLmNvbmZpZy5wYXR0ZXJuLnRyYW5zcGFyZW5jeVBlcmNlbnRhZ2UpIC8gMTAwXG4gICAgICA6IDE7XG5cbiAgICBjb25zdCBpbWFnZVVybCA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LmltYWdlVXJsIHx8ICcnO1xuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9XG4gICAgICB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5iYWNrZ3JvdW5kQ29sb3IgfHxcbiAgICAgIFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1I7XG4gICAgY29uc3QgcGF0dGVybldpZHRoID0gdGhpcy5jb25maWcucGF0dGVybj8ud2lkdGggfHwgJzEwMCUnO1xuICAgIGNvbnN0IHBhdHRlcm5IZWlnaHQgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5oZWlnaHQgfHwgJ2F1dG8nO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhY2tncm91bmQtcmVwZWF0IHZhbHVlXG4gICAgY29uc3QgcmVwZWF0WCA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LnJlcGVhdFggPyAncmVwZWF0JyA6ICduby1yZXBlYXQnO1xuICAgIGNvbnN0IHJlcGVhdFkgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5yZXBlYXRZID8gJ3JlcGVhdCcgOiAnbm8tcmVwZWF0JztcbiAgICBjb25zdCBiYWNrZ3JvdW5kUmVwZWF0ID0gYCR7cmVwZWF0WH0gJHtyZXBlYXRZfWA7XG5cbiAgICAvLyBBZGp1c3QgYmFja2dyb3VuZC1zaXplIGJhc2VkIG9uIHJlcGVhdENvdW50IGlmIHByb3ZpZGVkXG4gICAgY29uc3QgcmVwZWF0Q291bnQgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5yZXBlYXRDb3VudCB8fCAxO1xuICAgIGNvbnN0IGJhY2tncm91bmRTaXplID1cbiAgICAgIHJlcGVhdENvdW50ID4gMVxuICAgICAgICA/IGAke3BhdHRlcm5XaWR0aH0gJHtwYXR0ZXJuSGVpZ2h0fWBcbiAgICAgICAgOiBgJHtwYXR0ZXJuV2lkdGh9ICR7cGF0dGVybkhlaWdodH1gO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhY2tncm91bmQtcG9zaXRpb24gYmFzZWQgb24gdGhlIHBvc2l0aW9uIHBhcmFtZXRlclxuICAgIGNvbnN0IGJhY2tncm91bmRQb3NpdGlvbiA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LnBvc2l0aW9uIHx8ICdjZW50ZXInO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgIHdpZHRoOiB0aGlzLmNvbmZpZy53aWR0aCB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9XSURUSCxcbiAgICAgIGhlaWdodDogdGhpcy5jb25maWcuaGVpZ2h0IHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0hFSUdIVCxcbiAgICAgIGJvcmRlcjogdGhpcy5jb25maWcubm9Cb3JkZXJcbiAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgOiBgc29saWQgJHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmJvcmRlcldpZHRoIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0JPUkRFUl9XSURUSFxuICAgICAgICAgIH0gJHt0aGlzLmNvbmZpZy5ib3JkZXJDb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9CT1JERVJfQ09MT1J9YCxcbiAgICAgIHBhZGRpbmc6IHRoaXMuY29uZmlnLnBhZGRpbmcgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfUEFERElORyxcbiAgICAgIG1hcmdpbjogdGhpcy5jb25maWcubWFyZ2luIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX01BUkdJTixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5jb25maWcuYm9yZGVyUmFkaXVzIHx8ICc4cHgnLFxuICAgICAgYm94U2hhZG93OiB0aGlzLmNvbmZpZy5ib3hTaGFkb3cgfHwgJzAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICBiYWNrZ3JvdW5kSW1hZ2U6IGltYWdlVXJsID8gYHVybCgke2ltYWdlVXJsfSlgIDogJ25vbmUnLFxuICAgICAgYmFja2dyb3VuZFNpemUsXG4gICAgICBiYWNrZ3JvdW5kUG9zaXRpb24sXG4gICAgICBiYWNrZ3JvdW5kUmVwZWF0LFxuICAgICAgekluZGV4OiB0aGlzLmNvbmZpZy56SW5kZXggIT09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlnLnpJbmRleCA6ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgaXNTY3JvbGxhYmxlSG9yaXpvbnRhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5zY3JvbGxhYmxlSG9yaXpvbnRhbDtcbiAgfVxuXG4gIGlzU2Nyb2xsYWJsZVZlcnRpY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnLnNjcm9sbGFibGVWZXJ0aWNhbDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInB0LWNhcmQgY2FyZFwiXG4gIFthdHRyLmlkXT1cImNvbmZpZy5pZGVudGlmaWVyXCJcbiAgW25nU3R5bGVdPVwiZ2V0Q2FyZFN0eWxlcygpXCJcbj5cbiAgPGRpdiAqbmdJZj1cImhhc1RpdGxlKClcIiBjbGFzcz1cImNhcmQtaGVhZGVyXCIgW25nU3R5bGVdPVwiZ2V0VGl0bGVTdHlsZXMoKVwiPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImdldEljb25DbGFzcygpICYmIGdldEljb25Qb3NpdGlvbigpID09PSAnbGVmdCdcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0SWNvbkNsYXNzKClcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0SWNvblN0eWxlcygpXCJcbiAgICAgIGNsYXNzPVwiY2FyZC1oZWFkZXItaWNvbi1sZWZ0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IGdldFRpdGxlVGV4dCgpIH19PC9zcGFuPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImdldEljb25DbGFzcygpICYmIGdldEljb25Qb3NpdGlvbigpID09PSAncmlnaHQnXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcygpXCJcbiAgICAgIFtuZ1N0eWxlXT1cImdldEljb25TdHlsZXMoKVwiXG4gICAgICBjbGFzcz1cImNhcmQtaGVhZGVyLWljb24tcmlnaHRcIlxuICAgID48L2k+XG4gICAgPHB0LW1lbnVcbiAgICAgICpuZ0lmPVwiY29uZmlnLm1lbnVcIlxuICAgICAgW2NvbmZpZ109XCJjb25maWcubWVudVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdtZW51LWxlZnQnOiBnZXRNZW51UG9zaXRpb24oKSA9PT0gJ2xlZnQnLFxuICAgICAgICAnbWVudS1yaWdodCc6IGdldE1lbnVQb3NpdGlvbigpID09PSAncmlnaHQnXG4gICAgICB9XCJcbiAgICA+PC9wdC1tZW51PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2FyZC1ib2R5XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnY2FyZC1ib2R5LXNjcm9sbGFibGUtdmVydGljYWwnOiBpc1Njcm9sbGFibGVWZXJ0aWNhbCgpLFxuICAgICAgJ2NhcmQtYm9keS1zY3JvbGxhYmxlLWhvcml6b250YWwnOiBpc1Njcm9sbGFibGVIb3Jpem9udGFsKClcbiAgICB9XCJcbiAgPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULEtBQUssR0FHTixNQUFNLGVBQWUsQ0FBQzs7OztBQVF2QixNQUFNLE9BQU8sZUFBZTtJQUcxQix1Q0FBdUM7YUFDZix3QkFBbUIsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM3Qiw0QkFBdUIsR0FBRyxPQUFPLEFBQVYsQ0FBVzthQUNsQyx1QkFBa0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM1QiwyQkFBc0IsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUMvQiwwQkFBcUIsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUMvQiw2QkFBd0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUNsQyxrQkFBYSxHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQ3ZCLG1CQUFjLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDeEIsMkJBQXNCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDaEMsMEJBQXFCLEdBQUcsT0FBTyxBQUFWLENBQVc7YUFDaEMseUJBQW9CLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDOUIseUJBQW9CLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDN0IseUJBQW9CLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDN0Isb0JBQWUsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUN6QixtQkFBYyxHQUFHLFFBQVEsQUFBWCxDQUFZO0lBRWxELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFB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biAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmRDb25maWcsIEljb25TdHlsZSwgVGl0bGVTdHlsZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWNhcmQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQVENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgY29uZmlnOiBDYXJkQ29uZmlnID0ge307XG5cbiAgLy8gRGVmYXVsdCB2YWx1ZXMgYXMgcmVhZG9ubHkgdmFyaWFibGVzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVElUTEVfQ09MT1IgPSAnIzMzMyc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVElUTEVfRk9OVF9TSVpFID0gJzEuNWVtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9JQ09OX0NPTE9SID0gJyMzMzMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0lDT05fRk9OVF9TSVpFID0gJzFlbSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9QT1NJVElPTiA9ICdsZWZ0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0gJyNmZmYnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1dJRFRIID0gJzEwMCUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0hFSUdIVCA9ICdhdXRvJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9USVRMRV9QT1NJVElPTiA9ICdsZWZ0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NRU5VX1BPU0lUSU9OID0gJ3JpZ2h0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9CT1JERVJfQ09MT1IgPSAnI2RkZCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQk9SREVSX1dJRFRIID0gJzFweCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVFJBTlNQQVJFTkNZID0gJzEwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUEFERElORyA9ICcxNnB4JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVJHSU4gPSAnMTZweCAwJztcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5sb2dQYXR0ZXJuVXJsKCk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1BhdHRlcm5VcmwoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLnBhdHRlcm4/LmltYWdlVXJsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtQVENhcmRDb21wb25lbnRdIElkZW50aWZpZXI6ICR7dGhpcy5jb25maWcuaWRlbnRpZmllcn0sIFBhdHRlcm4gVVJMOiAke3RoaXMuY29uZmlnLnBhdHRlcm4uaW1hZ2VVcmx9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpc1RpdGxlT2JqZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb25maWcudGl0bGUgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb25maWcudGl0bGUgIT09IG51bGw7XG4gIH1cblxuICBnZXRUaXRsZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc1RpdGxlT2JqZWN0KClcbiAgICAgID8gKHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUpLnRleHRcbiAgICAgIDogKHRoaXMuY29uZmlnLnRpdGxlIGFzIHN0cmluZyk7XG4gIH1cblxuICBnZXRUaXRsZVN0eWxlcygpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWxpZ25NYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBsZWZ0OiAnZmxleC1zdGFydCcsXG4gICAgICBjZW50ZXI6ICdjZW50ZXInLFxuICAgICAgcmlnaHQ6ICdmbGV4LWVuZCcsXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHRpdGxlPy5jb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9USVRMRV9DT0xPUixcbiAgICAgIGZvbnRTaXplOiB0aXRsZT8uZm9udFNpemUgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfVElUTEVfRk9OVF9TSVpFLFxuICAgICAgJy0tdGV4dC1hbGlnbic6XG4gICAgICAgIGFsaWduTWFwW3RpdGxlPy5wb3NpdGlvbiB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9USVRMRV9QT1NJVElPTl0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHVwZGF0ZVN0eWxlcygpIHtcbiAgICAvLyBBZnRlciBkYXRhIGlzIGZldGNoZWQgb3IgdXBkYXRlZFxuICAgIHRoaXMuZ2V0Q2FyZFN0eWxlcygpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpOyAvLyBGb3JjZSBBbmd1bGFyIHRvIGRldGVjdCB0aGUgY2hhbmdlc1xuICB9XG5cbiAgZ2V0SWNvbkNsYXNzKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGljb24gPSAodGhpcy5jb25maWcudGl0bGUgYXMgVGl0bGVTdHlsZSk/Lmljb247XG4gICAgcmV0dXJuIHR5cGVvZiBpY29uID09PSAnc3RyaW5nJyA/IGljb24gOiAoaWNvbiBhcyBJY29uU3R5bGUpPy5jb2RlIHx8IG51bGw7XG4gIH1cblxuICBnZXRJY29uU3R5bGVzKCkge1xuICAgIGNvbnN0IGljb24gPSAodGhpcy5jb25maWcudGl0bGUgYXMgVGl0bGVTdHlsZSk/Lmljb247XG4gICAgaWYgKHR5cGVvZiBpY29uICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGljb24/LmNvbG9yIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0lDT05fQ09MT1IsXG4gICAgICAgIGZvbnRTaXplOiBpY29uPy5mb250U2l6ZSB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX0ZPTlRfU0laRSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjogUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9DT0xPUixcbiAgICAgIGZvbnRTaXplOiBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX0ZPTlRfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0SWNvblBvc2l0aW9uKCk6ICdsZWZ0JyB8ICdyaWdodCcgfCBudWxsIHtcbiAgICBjb25zdCBpY29uID0gKHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUpPy5pY29uO1xuICAgIGlmICh0eXBlb2YgaWNvbiAhPT0gJ3N0cmluZycgJiYgaWNvbj8ucG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBpY29uLnBvc2l0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9QT1NJVElPTjtcbiAgfVxuXG4gIGdldE1lbnVQb3NpdGlvbigpOiAnbGVmdCcgfCAncmlnaHQnIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubWVudVBvc2l0aW9uIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX01FTlVfUE9TSVRJT047XG4gIH1cblxuICBnZXRDYXJkU3R5bGVzKCkge1xuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LnRyYW5zcGFyZW5jeVBlcmNlbnRhZ2VcbiAgICAgID8gcGFyc2VGbG9hdCh0aGlzLmNvbmZpZy5wYXR0ZXJuLnRyYW5zcGFyZW5jeVBlcmNlbnRhZ2UpIC8gMTAwXG4gICAgICA6IDE7XG5cbiAgICBjb25zdCBpbWFnZVVybCA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LmltYWdlVXJsIHx8ICcnO1xuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9XG4gICAgICB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5iYWNrZ3JvdW5kQ29sb3IgfHxcbiAgICAgIFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1I7XG4gICAgY29uc3QgcGF0dGVybldpZHRoID0gdGhpcy5jb25maWcucGF0dGVybj8ud2lkdGggfHwgJzEwMCUnO1xuICAgIGNvbnN0IHBhdHRlcm5IZWlnaHQgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5oZWlnaHQgfHwgJ2F1dG8nO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhY2tncm91bmQtcmVwZWF0IHZhbHVlXG4gICAgY29uc3QgcmVwZWF0WCA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LnJlcGVhdFggPyAncmVwZWF0JyA6ICduby1yZXBlYXQnO1xuICAgIGNvbnN0IHJlcGVhdFkgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5yZXBlYXRZID8gJ3JlcGVhdCcgOiAnbm8tcmVwZWF0JztcbiAgICBjb25zdCBiYWNrZ3JvdW5kUmVwZWF0ID0gYCR7cmVwZWF0WH0gJHtyZXBlYXRZfWA7XG5cbiAgICAvLyBBZGp1c3QgYmFja2dyb3VuZC1zaXplIGJhc2VkIG9uIHJlcGVhdENvdW50IGlmIHByb3ZpZGVkXG4gICAgY29uc3QgcmVwZWF0Q291bnQgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy5yZXBlYXRDb3VudCB8fCAxO1xuICAgIGNvbnN0IGJhY2tncm91bmRTaXplID1cbiAgICAgIHJlcGVhdENvdW50ID4gMVxuICAgICAgICA/IGAke3BhdHRlcm5XaWR0aH0gJHtwYXR0ZXJuSGVpZ2h0fWBcbiAgICAgICAgOiBgJHtwYXR0ZXJuV2lkdGh9ICR7cGF0dGVybkhlaWdodH1gO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGJhY2tncm91bmQtcG9zaXRpb24gYmFzZWQgb24gdGhlIHBvc2l0aW9uIHBhcmFtZXRlclxuICAgIGNvbnN0IGJhY2tncm91bmRQb3NpdGlvbiA9IHRoaXMuY29uZmlnLnBhdHRlcm4/LnBvc2l0aW9uIHx8ICdjZW50ZXInO1xuXG4gICAgY29uc3QganVzdGlmeUNvbnRlbnQgPVxuICAgICAgdGhpcy5jb25maWcuYWxpZ25Db250ZW50ID09PSAnY2VudGVyJyA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnO1xuXG4gICAgY29uc3QgYWxpZ25JdGVtcyA9XG4gICAgICB0aGlzLmNvbmZpZy5hbGlnbkNvbnRlbnQgPT09ICdjZW50ZXInID8gJ2NlbnRlcicgOiAnc3RyZXRjaCc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICBqdXN0aWZ5Q29udGVudCwgLy8gQXBwbHkgY29uZGl0aW9uYWwgdmVydGljYWwgYWxpZ25tZW50XG4gICAgICBhbGlnbkl0ZW1zLCAvLyBBcHBseSBjb25kaXRpb25hbCBob3Jpem9udGFsIGFsaWdubWVudFxuICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgd2lkdGg6IHRoaXMuY29uZmlnLndpZHRoIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX1dJRFRILFxuICAgICAgaGVpZ2h0OiB0aGlzLmNvbmZpZy5oZWlnaHQgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSEVJR0hULFxuICAgICAgYm9yZGVyOiB0aGlzLmNvbmZpZy5ub0JvcmRlclxuICAgICAgICA/ICdub25lJ1xuICAgICAgICA6IGBzb2xpZCAke1xuICAgICAgICAgICAgdGhpcy5jb25maWcuYm9yZGVyV2lkdGggfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfQk9SREVSX1dJRFRIXG4gICAgICAgICAgfSAke3RoaXMuY29uZmlnLmJvcmRlckNvbG9yIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0JPUkRFUl9DT0xPUn1gLFxuICAgICAgcGFkZGluZzogdGhpcy5jb25maWcucGFkZGluZyB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9QQURESU5HLFxuICAgICAgbWFyZ2luOiB0aGlzLmNvbmZpZy5tYXJnaW4gfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfTUFSR0lOLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmNvbmZpZy5ib3JkZXJSYWRpdXMgfHwgJzhweCcsXG4gICAgICBib3hTaGFkb3c6IHRoaXMuY29uZmlnLmJveFNoYWRvdyB8fCAnMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgIGJhY2tncm91bmRJbWFnZTogaW1hZ2VVcmwgPyBgdXJsKCR7aW1hZ2VVcmx9KWAgOiAnbm9uZScsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZSxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbixcbiAgICAgIGJhY2tncm91bmRSZXBlYXQsXG4gICAgICB6SW5kZXg6IHRoaXMuY29uZmlnLnpJbmRleCAhPT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWcuekluZGV4IDogJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICBnZXRCb2R5U3R5bGVzKCkge1xuICAgIGNvbnN0IGp1c3RpZnlDb250ZW50ID1cbiAgICAgIHRoaXMuY29uZmlnLmFsaWduQm9keUNvbnRlbnQgPT09ICdjZW50ZXInID8gJ2NlbnRlcicgOiAnZmxleC1zdGFydCc7XG4gICAgY29uc3QgYWxpZ25JdGVtcyA9XG4gICAgICB0aGlzLmNvbmZpZy5hbGlnbkJvZHlDb250ZW50ID09PSAnY2VudGVyJyA/ICdjZW50ZXInIDogJ3N0cmV0Y2gnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAganVzdGlmeUNvbnRlbnQsXG4gICAgICBhbGlnbkl0ZW1zLFxuICAgICAgZmxleEdyb3c6IDEsXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgcGFkZGluZzogJzE2cHgnLCAvLyBEZWZhdWx0IHBhZGRpbmcgZm9yIGJvZHlcbiAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIH07XG4gIH1cblxuICBnZXRIZWFkZXJTdHlsZXMoKSB7XG4gICAgY29uc3QganVzdGlmeUNvbnRlbnQgPVxuICAgICAgdGhpcy5jb25maWcuYWxpZ25IZWFkZXJDb250ZW50ID09PSAnY2VudGVyJyA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnO1xuICAgIGNvbnN0IGFsaWduSXRlbXMgPVxuICAgICAgdGhpcy5jb25maWcuYWxpZ25IZWFkZXJDb250ZW50ID09PSAnY2VudGVyJyA/ICdjZW50ZXInIDogJ3N0cmV0Y2gnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50LFxuICAgICAgYWxpZ25JdGVtcyxcbiAgICAgIG1hcmdpbkJvdHRvbTogJzE2cHgnLCAvLyBEZWZhdWx0IG1hcmdpbiBmb3IgaGVhZGVyXG4gICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB9O1xuICB9XG5cbiAgaXNTY3JvbGxhYmxlSG9yaXpvbnRhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5zY3JvbGxhYmxlSG9yaXpvbnRhbDtcbiAgfVxuXG4gIGlzU2Nyb2xsYWJsZVZlcnRpY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnLnNjcm9sbGFibGVWZXJ0aWNhbDtcbiAgfVxuXG4gIGdldENhcmRDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYWxpZ25Db250ZW50ID09PSAnY2VudGVyJyA/ICdjZW50ZXItYWxpZ24nIDogJyc7XG4gIH1cblxuICBnZXRCb2R5Q2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmFsaWduQm9keUNvbnRlbnQgPT09ICdjZW50ZXInID8gJ2NlbnRlci1hbGlnbicgOiAnJztcbiAgfVxuXG4gIGdldEhlYWRlckNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hbGlnbkhlYWRlckNvbnRlbnQgPT09ICdjZW50ZXInID8gJ2NlbnRlci1hbGlnbicgOiAnJztcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInB0LWNhcmQgY2FyZFwiXG4gIFtuZ0NsYXNzXT1cImdldENhcmRDbGFzcygpXCJcbiAgW2F0dHIuaWRdPVwiY29uZmlnLmlkZW50aWZpZXJcIlxuICBbbmdTdHlsZV09XCJnZXRDYXJkU3R5bGVzKClcIlxuPlxuICA8IS0tIENhcmQgSGVhZGVyIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJoYXNUaXRsZSgpXCJcbiAgICBjbGFzcz1cImNhcmQtaGVhZGVyXCJcbiAgICBbbmdDbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCJcbiAgICBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZXMoKVwiXG4gID5cbiAgICA8aVxuICAgICAgKm5nSWY9XCJnZXRJY29uQ2xhc3MoKSAmJiBnZXRJY29uUG9zaXRpb24oKSA9PT0gJ2xlZnQnXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcygpXCJcbiAgICAgIFtuZ1N0eWxlXT1cImdldEljb25TdHlsZXMoKVwiXG4gICAgICBjbGFzcz1cImNhcmQtaGVhZGVyLWljb24tbGVmdFwiXG4gICAgPjwvaT5cbiAgICA8c3Bhbj57eyBnZXRUaXRsZVRleHQoKSB9fTwvc3Bhbj5cbiAgICA8aVxuICAgICAgKm5nSWY9XCJnZXRJY29uQ2xhc3MoKSAmJiBnZXRJY29uUG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1wiXG4gICAgICBbbmdDbGFzc109XCJnZXRJY29uQ2xhc3MoKVwiXG4gICAgICBbbmdTdHlsZV09XCJnZXRJY29uU3R5bGVzKClcIlxuICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlci1pY29uLXJpZ2h0XCJcbiAgICA+PC9pPlxuICAgIDxwdC1tZW51XG4gICAgICAqbmdJZj1cImNvbmZpZy5tZW51XCJcbiAgICAgIFtjb25maWddPVwiY29uZmlnLm1lbnVcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnbWVudS1sZWZ0JzogZ2V0TWVudVBvc2l0aW9uKCkgPT09ICdsZWZ0JyxcbiAgICAgICAgJ21lbnUtcmlnaHQnOiBnZXRNZW51UG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1xuICAgICAgfVwiXG4gICAgPjwvcHQtbWVudT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDYXJkIEJvZHkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIiBbbmdDbGFzc109XCJnZXRCb2R5Q2xhc3MoKVwiIFtuZ1N0eWxlXT1cImdldEJvZHlTdHlsZXMoKVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
@@ -0,0 +1,147 @@
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
2
|
+
import { Validators, FormsModule, ReactiveFormsModule, } from '@angular/forms';
|
3
|
+
import { FormInputTypeEnum } from '../../enums';
|
4
|
+
import { CommonModule } from '@angular/common';
|
5
|
+
import { PTCardModule } from '../../pt-card';
|
6
|
+
import { PTButtonModule } from '../../pt-button';
|
7
|
+
import { PTTextInputModule } from '../../pt-text-input';
|
8
|
+
import * as i0 from "@angular/core";
|
9
|
+
import * as i1 from "@angular/forms";
|
10
|
+
import * as i2 from "@angular/common";
|
11
|
+
import * as i3 from "../../pt-card/pt-card.component";
|
12
|
+
import * as i4 from "../../pt-button/pt-button.component";
|
13
|
+
import * as i5 from "../../pt-text-input/pt-text-input.component";
|
14
|
+
export class PTLoginCardComponent {
|
15
|
+
constructor(fb) {
|
16
|
+
this.fb = fb;
|
17
|
+
this.loginSubmit = new EventEmitter();
|
18
|
+
this.formGroup = this.fb.group({});
|
19
|
+
}
|
20
|
+
ngOnInit() {
|
21
|
+
this.initializeDefaults();
|
22
|
+
this.setupFormFields();
|
23
|
+
this.formGroup.patchValue({
|
24
|
+
username: this.loginPageConfig?.login?.username || '',
|
25
|
+
password: this.loginPageConfig?.login?.password || '',
|
26
|
+
});
|
27
|
+
// Enable/Disable the button based on form validity
|
28
|
+
this.formGroup.statusChanges.subscribe((status) => {
|
29
|
+
this.loginPageConfig.buttonConfig.disabled = status !== 'VALID';
|
30
|
+
});
|
31
|
+
}
|
32
|
+
// Initialize default values for all fields in loginPageConfig if not set
|
33
|
+
initializeDefaults() {
|
34
|
+
// Initialize backgroundImage
|
35
|
+
this.loginPageConfig.backgroundImage = {
|
36
|
+
imageUrl: this.loginPageConfig.backgroundImage?.imageUrl || '',
|
37
|
+
transparencyPercentage: this.loginPageConfig.backgroundImage?.transparencyPercentage || '100',
|
38
|
+
...this.loginPageConfig.backgroundImage,
|
39
|
+
};
|
40
|
+
// Initialize title
|
41
|
+
this.loginPageConfig.title = {
|
42
|
+
text: this.loginPageConfig.title?.text || 'Login',
|
43
|
+
position: this.loginPageConfig.title?.position || 'center',
|
44
|
+
color: this.loginPageConfig.title?.color || '#333',
|
45
|
+
fontSize: this.loginPageConfig.title?.fontSize || '24px',
|
46
|
+
...this.loginPageConfig.title,
|
47
|
+
};
|
48
|
+
// Initialize logoUrl
|
49
|
+
this.loginPageConfig.logoUrl = {
|
50
|
+
altText: this.loginPageConfig.logoUrl?.altText || 'Logo',
|
51
|
+
imageUrl: this.loginPageConfig.logoUrl?.imageUrl || '',
|
52
|
+
width: this.loginPageConfig.logoUrl?.width || '100px',
|
53
|
+
height: this.loginPageConfig.logoUrl?.height || 'auto',
|
54
|
+
...this.loginPageConfig.logoUrl,
|
55
|
+
};
|
56
|
+
// Initialize footer
|
57
|
+
this.loginPageConfig.footer = {
|
58
|
+
version: this.loginPageConfig.footer?.version || 'V1.0',
|
59
|
+
copyright: this.loginPageConfig.footer?.copyright || 'Your Company © 2024',
|
60
|
+
...this.loginPageConfig.footer,
|
61
|
+
};
|
62
|
+
// Initialize login
|
63
|
+
this.loginPageConfig.login = {
|
64
|
+
username: this.loginPageConfig.login?.username || '',
|
65
|
+
password: this.loginPageConfig.login?.password || '',
|
66
|
+
errorMessage: this.loginPageConfig.login?.errorMessage || '',
|
67
|
+
emptyFieldsErrorMessage: this.loginPageConfig.login?.emptyFieldsErrorMessage ||
|
68
|
+
"Veuillez saisir votre nom d'utilisateur et votre mot de passe !",
|
69
|
+
...this.loginPageConfig.login,
|
70
|
+
};
|
71
|
+
// Initialize cardConfig
|
72
|
+
this.loginPageConfig.loginCardConfig = {
|
73
|
+
noBorder: this.loginPageConfig.loginCardConfig?.noBorder ?? true,
|
74
|
+
width: this.loginPageConfig.loginCardConfig?.width ?? '400px',
|
75
|
+
padding: this.loginPageConfig.loginCardConfig?.padding ?? '40px',
|
76
|
+
...this.loginPageConfig.loginCardConfig,
|
77
|
+
};
|
78
|
+
// Initialize usernameField
|
79
|
+
this.loginPageConfig.usernameField = {
|
80
|
+
name: this.loginPageConfig.usernameField?.name || 'username',
|
81
|
+
label: this.loginPageConfig.usernameField?.label || "Nom d'utilisateur",
|
82
|
+
required: this.loginPageConfig.usernameField?.required ?? true,
|
83
|
+
placeholder: this.loginPageConfig.usernameField?.placeholder ||
|
84
|
+
"Entrer votre nom d'utilisateur",
|
85
|
+
...this.loginPageConfig.usernameField,
|
86
|
+
};
|
87
|
+
// Initialize passwordField
|
88
|
+
this.loginPageConfig.passwordField = {
|
89
|
+
name: this.loginPageConfig.passwordField?.name || 'password',
|
90
|
+
label: this.loginPageConfig.passwordField?.label || 'Mot de passe',
|
91
|
+
required: this.loginPageConfig.passwordField?.required ?? true,
|
92
|
+
placeholder: this.loginPageConfig.passwordField?.placeholder ||
|
93
|
+
'Entrer votre mot de passe',
|
94
|
+
type: this.loginPageConfig.passwordField?.type || FormInputTypeEnum.PASSWORD,
|
95
|
+
...this.loginPageConfig.passwordField,
|
96
|
+
};
|
97
|
+
// Initialize buttonConfig
|
98
|
+
this.loginPageConfig.buttonConfig = {
|
99
|
+
label: this.loginPageConfig.buttonConfig?.label || 'Login',
|
100
|
+
type: this.loginPageConfig.buttonConfig?.type || 'submit',
|
101
|
+
icon: this.loginPageConfig.buttonConfig?.icon || 'pi pi-sign-in',
|
102
|
+
iconPos: this.loginPageConfig.buttonConfig?.iconPos || 'left',
|
103
|
+
styleClass: this.loginPageConfig.buttonConfig?.styleClass || 'p-button-success',
|
104
|
+
disabled: this.loginPageConfig.buttonConfig?.disabled ?? true,
|
105
|
+
width: this.loginPageConfig.buttonConfig?.width ?? '100%',
|
106
|
+
...this.loginPageConfig.buttonConfig,
|
107
|
+
};
|
108
|
+
}
|
109
|
+
onSubmit() {
|
110
|
+
if (this.formGroup.valid) {
|
111
|
+
this.loginSubmit.emit(this.formGroup.value);
|
112
|
+
}
|
113
|
+
else {
|
114
|
+
this.loginPageConfig.login.errorMessage =
|
115
|
+
this.loginPageConfig.login?.emptyFieldsErrorMessage;
|
116
|
+
}
|
117
|
+
}
|
118
|
+
// Setup form fields using the usernameField and passwordField from LoginPageConfig
|
119
|
+
setupFormFields() {
|
120
|
+
const usernameValidators = this.loginPageConfig.usernameField?.required
|
121
|
+
? [Validators.required]
|
122
|
+
: [];
|
123
|
+
const passwordValidators = this.loginPageConfig.passwordField?.required
|
124
|
+
? [Validators.required]
|
125
|
+
: [];
|
126
|
+
this.formGroup.addControl(this.loginPageConfig.usernameField.name, this.fb.control(this.loginPageConfig.login?.username, usernameValidators));
|
127
|
+
this.formGroup.addControl(this.loginPageConfig.passwordField.name, this.fb.control(this.loginPageConfig.login?.password, passwordValidators));
|
128
|
+
}
|
129
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTLoginCardComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
130
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTLoginCardComponent, isStandalone: true, selector: "pt-login-card", inputs: { loginPageConfig: "loginPageConfig" }, outputs: { loginSubmit: "loginSubmit" }, ngImport: i0, template: "<pt-card [config]=\"loginPageConfig.loginCardConfig!\">\n <!-- Logo -->\n <div class=\"logo-container\" *ngIf=\"loginPageConfig.logoUrl?.imageUrl\">\n <img\n [src]=\"loginPageConfig.logoUrl?.imageUrl\"\n [alt]=\"loginPageConfig.logoUrl?.altText || 'Logo'\"\n [style.width]=\"loginPageConfig.logoUrl?.width || '100px'\"\n [style.height]=\"loginPageConfig.logoUrl?.height || 'auto'\"\n />\n </div>\n\n <!-- Title -->\n <div class=\"title-container\">\n <h1\n [ngStyle]=\"{\n color: loginPageConfig.title?.color || '#333',\n 'font-size': loginPageConfig.title?.fontSize || '24px'\n }\"\n >\n {{ loginPageConfig.title?.text || \"Default Title\" }}\n </h1>\n </div>\n\n <!-- Form -->\n <form class=\"form-container\" [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <div *ngIf=\"loginPageConfig.login?.errorMessage\" class=\"error-message\">\n {{ loginPageConfig.login?.errorMessage }}\n </div>\n\n <div class=\"field\">\n <pt-text-input\n [formGroup]=\"formGroup\"\n [formField]=\"loginPageConfig.usernameField!\"\n ></pt-text-input>\n </div>\n <div class=\"field\">\n <pt-text-input\n [formGroup]=\"formGroup\"\n [formField]=\"loginPageConfig.passwordField!\"\n ></pt-text-input>\n </div>\n\n <div class=\"submit-btn\">\n <pt-button [buttonConfig]=\"loginPageConfig.buttonConfig!\"></pt-button>\n </div>\n </form>\n <div class=\"login-footer\">\n {{ loginPageConfig.footer?.version }}\n <span>{{ loginPageConfig.footer?.copyright }}</span>\n </div>\n</pt-card>\n", styles: [".logo-container{display:flex;justify-content:center;align-items:center;margin-bottom:20px}.title-container{text-align:center;margin-bottom:20px}.form-container{width:100%}.field{display:flex;flex-direction:column;margin-bottom:20px;width:100%}.error-message{color:red;background-color:#ffe6e6;border:1px solid red;padding:10px;margin-bottom:10px;border-radius:5px;width:100%;text-align:center}.submit-btn{display:flex;justify-content:center;width:100%}::ng-deep pt-button{width:100%}::ng-deep .submit-btn p-button button{width:100%}.login-footer{margin-top:20px;text-align:center;font-size:.9em;color:#555}@media (max-width: 768px){pt-card{max-width:300px}.submit-btn{min-width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: PTCardModule }, { kind: "component", type: i3.PTCardComponent, selector: "pt-card", inputs: ["config"] }, { kind: "ngmodule", type: PTButtonModule }, { kind: "component", type: i4.PTButtonComponent, selector: "pt-button", inputs: ["buttonConfig"] }, { kind: "ngmodule", type: PTTextInputModule }, { kind: "component", type: i5.PTTextInputComponent, selector: "pt-text-input", inputs: ["formGroup", "formField"] }] }); }
|
131
|
+
}
|
132
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTLoginCardComponent, decorators: [{
|
133
|
+
type: Component,
|
134
|
+
args: [{ selector: 'pt-login-card', standalone: true, imports: [
|
135
|
+
CommonModule,
|
136
|
+
FormsModule,
|
137
|
+
ReactiveFormsModule,
|
138
|
+
PTCardModule,
|
139
|
+
PTButtonModule,
|
140
|
+
PTTextInputModule,
|
141
|
+
], template: "<pt-card [config]=\"loginPageConfig.loginCardConfig!\">\n <!-- Logo -->\n <div class=\"logo-container\" *ngIf=\"loginPageConfig.logoUrl?.imageUrl\">\n <img\n [src]=\"loginPageConfig.logoUrl?.imageUrl\"\n [alt]=\"loginPageConfig.logoUrl?.altText || 'Logo'\"\n [style.width]=\"loginPageConfig.logoUrl?.width || '100px'\"\n [style.height]=\"loginPageConfig.logoUrl?.height || 'auto'\"\n />\n </div>\n\n <!-- Title -->\n <div class=\"title-container\">\n <h1\n [ngStyle]=\"{\n color: loginPageConfig.title?.color || '#333',\n 'font-size': loginPageConfig.title?.fontSize || '24px'\n }\"\n >\n {{ loginPageConfig.title?.text || \"Default Title\" }}\n </h1>\n </div>\n\n <!-- Form -->\n <form class=\"form-container\" [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n <div *ngIf=\"loginPageConfig.login?.errorMessage\" class=\"error-message\">\n {{ loginPageConfig.login?.errorMessage }}\n </div>\n\n <div class=\"field\">\n <pt-text-input\n [formGroup]=\"formGroup\"\n [formField]=\"loginPageConfig.usernameField!\"\n ></pt-text-input>\n </div>\n <div class=\"field\">\n <pt-text-input\n [formGroup]=\"formGroup\"\n [formField]=\"loginPageConfig.passwordField!\"\n ></pt-text-input>\n </div>\n\n <div class=\"submit-btn\">\n <pt-button [buttonConfig]=\"loginPageConfig.buttonConfig!\"></pt-button>\n </div>\n </form>\n <div class=\"login-footer\">\n {{ loginPageConfig.footer?.version }}\n <span>{{ loginPageConfig.footer?.copyright }}</span>\n </div>\n</pt-card>\n", styles: [".logo-container{display:flex;justify-content:center;align-items:center;margin-bottom:20px}.title-container{text-align:center;margin-bottom:20px}.form-container{width:100%}.field{display:flex;flex-direction:column;margin-bottom:20px;width:100%}.error-message{color:red;background-color:#ffe6e6;border:1px solid red;padding:10px;margin-bottom:10px;border-radius:5px;width:100%;text-align:center}.submit-btn{display:flex;justify-content:center;width:100%}::ng-deep pt-button{width:100%}::ng-deep .submit-btn p-button button{width:100%}.login-footer{margin-top:20px;text-align:center;font-size:.9em;color:#555}@media (max-width: 768px){pt-card{max-width:300px}.submit-btn{min-width:100%}}\n"] }]
|
142
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { loginPageConfig: [{
|
143
|
+
type: Input
|
144
|
+
}], loginSubmit: [{
|
145
|
+
type: Output
|
146
|
+
}] } });
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtbG9naW4tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWxvZ2luLXBhZ2UvcHQtbG9naW4tY2FyZC9wdC1sb2dpbi1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXByaW1lLXRvb2xzL3NyYy9saWIvcHQtbG9naW4tcGFnZS9wdC1sb2dpbi1jYXJkL3B0LWxvZ2luLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBR0wsVUFBVSxFQUNWLFdBQVcsRUFDWCxtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7O0FBZ0J4RCxNQUFNLE9BQU8sb0JBQW9CO0lBTy9CLFlBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBTHpCLGdCQUFXLEdBQ25CLElBQUksWUFBWSxFQUFjLENBQUM7UUFLL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFD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WUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGlCQUFpQjtxQkFDbEI7Z0ZBS1EsZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvZ2luTW9kZWwsIExvZ2luUGFnZUNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBGb3JtSW5wdXRUeXBlRW51bSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQVENhcmRNb2R1bGUgfSBmcm9tICcuLi8uLi9wdC1jYXJkJztcbmltcG9ydCB7IFBUQnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vLi4vcHQtYnV0dG9uJztcbmltcG9ydCB7IFBUVGV4dElucHV0TW9kdWxlIH0gZnJvbSAnLi4vLi4vcHQtdGV4dC1pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LWxvZ2luLWNhcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUFRDYXJkTW9kdWxlLFxuICAgIFBUQnV0dG9uTW9kdWxlLFxuICAgIFBUVGV4dElucHV0TW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtbG9naW4tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LWxvZ2luLWNhcmQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQVExvZ2luQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGxvZ2luUGFnZUNvbmZpZyE6IExvZ2luUGFnZUNvbmZpZztcbiAgQE91dHB1dCgpIGxvZ2luU3VibWl0OiBFdmVudEVtaXR0ZXI8TG9naW5Nb2RlbD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8TG9naW5Nb2RlbD4oKTtcblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0cygpO1xuICAgIHRoaXMuc2V0dXBGb3JtRmllbGRzKCk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIHVzZXJuYW1lOiB0aGlzLmxvZ2luUGFnZUNvbmZpZz8ubG9naW4/LnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMubG9naW5QYWdlQ29uZmlnPy5sb2dpbj8ucGFzc3dvcmQgfHwgJycsXG4gICAgfSk7XG4gICAgLy8gRW5hYmxlL0Rpc2FibGUgdGhlIGJ1dHRvbiBiYXNlZCBvbiBmb3JtIHZhbGlkaXR5XG4gICAgdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xuICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcuYnV0dG9uQ29uZmlnIS5kaXNhYmxlZCA9IHN0YXR1cyAhPT0gJ1ZBTElEJztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCBmaWVsZHMgaW4gbG9naW5QYWdlQ29uZmlnIGlmIG5vdCBzZXRcbiAgaW5pdGlhbGl6ZURlZmF1bHRzKCkge1xuICAgIC8vIEluaXRpYWxpemUgYmFja2dyb3VuZEltYWdlXG4gICAgdGhpcy5sb2dpblBhZ2VDb25maWcuYmFja2dyb3VuZEltYWdlID0ge1xuICAgICAgaW1hZ2VVcmw6IHRoaXMubG9naW5QYWdlQ29uZmlnLmJhY2tncm91bmRJbWFnZT8uaW1hZ2VVcmwgfHwgJycsXG4gICAgICB0cmFuc3BhcmVuY3lQZXJjZW50YWdlOlxuICAgICAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5iYWNrZ3JvdW5kSW1hZ2U/LnRyYW5zcGFyZW5jeVBlcmNlbnRhZ2UgfHwgJzEwMCcsXG4gICAgICAuLi50aGlzLmxvZ2luUGFnZUNvbmZpZy5iYWNrZ3JvdW5kSW1hZ2UsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgdGl0bGVcbiAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy50aXRsZSA9IHtcbiAgICAgIHRleHQ6IHRoaXMubG9naW5QYWdlQ29uZmlnLnRpdGxlPy50ZXh0IHx8ICdMb2dpbicsXG4gICAgICBwb3NpdGlvbjogdGhpcy5sb2dpblBhZ2VDb25maWcudGl0bGU/LnBvc2l0aW9uIHx8ICdjZW50ZXInLFxuICAgICAgY29sb3I6IHRoaXMubG9naW5QYWdlQ29uZmlnLnRpdGxlPy5jb2xvciB8fCAnIzMzMycsXG4gICAgICBmb250U2l6ZTogdGhpcy5sb2dpblBhZ2VDb25maWcudGl0bGU/LmZvbnRTaXplIHx8ICcyNHB4JyxcbiAgICAgIC4uLnRoaXMubG9naW5QYWdlQ29uZmlnLnRpdGxlLFxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIGxvZ29VcmxcbiAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5sb2dvVXJsID0ge1xuICAgICAgYWx0VGV4dDogdGhpcy5sb2dpblBhZ2VDb25maWcubG9nb1VybD8uYWx0VGV4dCB8fCAnTG9nbycsXG4gICAgICBpbWFnZVVybDogdGhpcy5sb2dpblBhZ2VDb25maWcubG9nb1VybD8uaW1hZ2VVcmwgfHwgJycsXG4gICAgICB3aWR0aDogdGhpcy5sb2dpblBhZ2VDb25maWcubG9nb1VybD8ud2lkdGggfHwgJzEwMHB4JyxcbiAgICAgIGhlaWdodDogdGhpcy5sb2dpblBhZ2VDb25maWcubG9nb1VybD8uaGVpZ2h0IHx8ICdhdXRvJyxcbiAgICAgIC4uLnRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ29VcmwsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgZm9vdGVyXG4gICAgdGhpcy5sb2dpblBhZ2VDb25maWcuZm9vdGVyID0ge1xuICAgICAgdmVyc2lvbjogdGhpcy5sb2dpblBhZ2VDb25maWcuZm9vdGVyPy52ZXJzaW9uIHx8ICdWMS4wJyxcbiAgICAgIGNvcHlyaWdodDpcbiAgICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcuZm9vdGVyPy5jb3B5cmlnaHQgfHwgJ1lvdXIgQ29tcGFueSDCqSAyMDI0JyxcbiAgICAgIC4uLnRoaXMubG9naW5QYWdlQ29uZmlnLmZvb3RlcixcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2dpblxuICAgIHRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ2luID0ge1xuICAgICAgdXNlcm5hbWU6IHRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ2luPy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmxvZ2luUGFnZUNvbmZpZy5sb2dpbj8ucGFzc3dvcmQgfHwgJycsXG4gICAgICBlcnJvck1lc3NhZ2U6IHRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ2luPy5lcnJvck1lc3NhZ2UgfHwgJycsXG4gICAgICBlbXB0eUZpZWxkc0Vycm9yTWVzc2FnZTpcbiAgICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcubG9naW4/LmVtcHR5RmllbGRzRXJyb3JNZXNzYWdlIHx8XG4gICAgICAgIFwiVmV1aWxsZXogc2Fpc2lyIHZvdHJlIG5vbSBkJ3V0aWxpc2F0ZXVyIGV0IHZvdHJlIG1vdCBkZSBwYXNzZSAhXCIsXG4gICAgICAuLi50aGlzLmxvZ2luUGFnZUNvbmZpZy5sb2dpbixcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBjYXJkQ29uZmlnXG4gICAgdGhpcy5sb2dpblBhZ2VDb25maWcubG9naW5DYXJkQ29uZmlnID0ge1xuICAgICAgbm9Cb3JkZXI6IHRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ2luQ2FyZENvbmZpZz8ubm9Cb3JkZXIgPz8gdHJ1ZSxcbiAgICAgIHdpZHRoOiB0aGlzLmxvZ2luUGFnZUNvbmZpZy5sb2dpbkNhcmRDb25maWc/LndpZHRoID8/ICc0MDBweCcsXG4gICAgICBwYWRkaW5nOiB0aGlzLmxvZ2luUGFnZUNvbmZpZy5sb2dpbkNhcmRDb25maWc/LnBhZGRpbmcgPz8gJzQwcHgnLFxuICAgICAgLi4udGhpcy5sb2dpblBhZ2VDb25maWcubG9naW5DYXJkQ29uZmlnLFxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIHVzZXJuYW1lRmllbGRcbiAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy51c2VybmFtZUZpZWxkID0ge1xuICAgICAgbmFtZTogdGhpcy5sb2dpblBhZ2VDb25maWcudXNlcm5hbWVGaWVsZD8ubmFtZSB8fCAndXNlcm5hbWUnLFxuICAgICAgbGFiZWw6IHRoaXMubG9naW5QYWdlQ29uZmlnLnVzZXJuYW1lRmllbGQ/LmxhYmVsIHx8IFwiTm9tIGQndXRpbGlzYXRldXJcIixcbiAgICAgIHJlcXVpcmVkOiB0aGlzLmxvZ2luUGFnZUNvbmZpZy51c2VybmFtZUZpZWxkPy5yZXF1aXJlZCA/PyB0cnVlLFxuICAgICAgcGxhY2Vob2xkZXI6XG4gICAgICAgIHRoaXMubG9naW5QYWdlQ29uZmlnLnVzZXJuYW1lRmllbGQ/LnBsYWNlaG9sZGVyIHx8XG4gICAgICAgIFwiRW50cmVyIHZvdHJlIG5vbSBkJ3V0aWxpc2F0ZXVyXCIsXG4gICAgICAuLi50aGlzLmxvZ2luUGFnZUNvbmZpZy51c2VybmFtZUZpZWxkLFxuICAgIH07XG5cbiAgICAvLyBJbml0aWFsaXplIHBhc3N3b3JkRmllbGRcbiAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy5wYXNzd29yZEZpZWxkID0ge1xuICAgICAgbmFtZTogdGhpcy5sb2dpblBhZ2VDb25maWcucGFzc3dvcmRGaWVsZD8ubmFtZSB8fCAncGFzc3dvcmQnLFxuICAgICAgbGFiZWw6IHRoaXMubG9naW5QYWdlQ29uZmlnLnBhc3N3b3JkRmllbGQ/LmxhYmVsIHx8ICdNb3QgZGUgcGFzc2UnLFxuICAgICAgcmVxdWlyZWQ6IHRoaXMubG9naW5QYWdlQ29uZmlnLnBhc3N3b3JkRmllbGQ/LnJlcXVpcmVkID8/IHRydWUsXG4gICAgICBwbGFjZWhvbGRlcjpcbiAgICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcucGFzc3dvcmRGaWVsZD8ucGxhY2Vob2xkZXIgfHxcbiAgICAgICAgJ0VudHJlciB2b3RyZSBtb3QgZGUgcGFzc2UnLFxuICAgICAgdHlwZTpcbiAgICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcucGFzc3dvcmRGaWVsZD8udHlwZSB8fCBGb3JtSW5wdXRUeXBlRW51bS5QQVNTV09SRCxcbiAgICAgIC4uLnRoaXMubG9naW5QYWdlQ29uZmlnLnBhc3N3b3JkRmllbGQsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgYnV0dG9uQ29uZmlnXG4gICAgdGhpcy5sb2dpblBhZ2VDb25maWcuYnV0dG9uQ29uZmlnID0ge1xuICAgICAgbGFiZWw6IHRoaXMubG9naW5QYWdlQ29uZmlnLmJ1dHRvbkNvbmZpZz8ubGFiZWwgfHwgJ0xvZ2luJyxcbiAgICAgIHR5cGU6IHRoaXMubG9naW5QYWdlQ29uZmlnLmJ1dHRvbkNvbmZpZz8udHlwZSB8fCAnc3VibWl0JyxcbiAgICAgIGljb246IHRoaXMubG9naW5QYWdlQ29uZmlnLmJ1dHRvbkNvbmZpZz8uaWNvbiB8fCAncGkgcGktc2lnbi1pbicsXG4gICAgICBpY29uUG9zOiB0aGlzLmxvZ2luUGFnZUNvbmZpZy5idXR0b25Db25maWc/Lmljb25Qb3MgfHwgJ2xlZnQnLFxuICAgICAgc3R5bGVDbGFzczpcbiAgICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcuYnV0dG9uQ29uZmlnPy5zdHlsZUNsYXNzIHx8ICdwLWJ1dHRvbi1zdWNjZXNzJyxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmxvZ2luUGFnZUNvbmZpZy5idXR0b25Db25maWc/LmRpc2FibGVkID8/IHRydWUsXG4gICAgICB3aWR0aDogdGhpcy5sb2dpblBhZ2VDb25maWcuYnV0dG9uQ29uZmlnPy53aWR0aCA/PyAnMTAwJScsXG4gICAgICAuLi50aGlzLmxvZ2luUGFnZUNvbmZpZy5idXR0b25Db25maWcsXG4gICAgfTtcbiAgfVxuXG4gIG9uU3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgdGhpcy5sb2dpblN1Ym1pdC5lbWl0KHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dpblBhZ2VDb25maWcubG9naW4hLmVycm9yTWVzc2FnZSA9XG4gICAgICAgIHRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ2luPy5lbXB0eUZpZWxkc0Vycm9yTWVzc2FnZTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXR1cCBmb3JtIGZpZWxkcyB1c2luZyB0aGUgdXNlcm5hbWVGaWVsZCBhbmQgcGFzc3dvcmRGaWVsZCBmcm9tIExvZ2luUGFnZUNvbmZpZ1xuICBzZXR1cEZvcm1GaWVsZHMoKSB7XG4gICAgY29uc3QgdXNlcm5hbWVWYWxpZGF0b3JzID0gdGhpcy5sb2dpblBhZ2VDb25maWcudXNlcm5hbWVGaWVsZD8ucmVxdWlyZWRcbiAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IHBhc3N3b3JkVmFsaWRhdG9ycyA9IHRoaXMubG9naW5QYWdlQ29uZmlnLnBhc3N3b3JkRmllbGQ/LnJlcXVpcmVkXG4gICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgOiBbXTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICB0aGlzLmxvZ2luUGFnZUNvbmZpZy51c2VybmFtZUZpZWxkIS5uYW1lLFxuICAgICAgdGhpcy5mYi5jb250cm9sKHRoaXMubG9naW5QYWdlQ29uZmlnLmxvZ2luPy51c2VybmFtZSwgdXNlcm5hbWVWYWxpZGF0b3JzKVxuICAgICk7XG4gICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgIHRoaXMubG9naW5QYWdlQ29uZmlnLnBhc3N3b3JkRmllbGQhLm5hbWUsXG4gICAgICB0aGlzLmZiLmNvbnRyb2wodGhpcy5sb2dpblBhZ2VDb25maWcubG9naW4/LnBhc3N3b3JkLCBwYXNzd29yZFZhbGlkYXRvcnMpXG4gICAgKTtcbiAgfVxufVxuIiwiPHB0LWNhcmQgW2NvbmZpZ109XCJsb2dpblBhZ2VDb25maWcubG9naW5DYXJkQ29uZmlnIVwiPlxuICA8IS0tIExvZ28gLS0+XG4gIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLmxvZ29Vcmw/LmltYWdlVXJsXCI+XG4gICAgPGltZ1xuICAgICAgW3NyY109XCJsb2dpblBhZ2VDb25maWcubG9nb1VybD8uaW1hZ2VVcmxcIlxuICAgICAgW2FsdF09XCJsb2dpblBhZ2VDb25maWcubG9nb1VybD8uYWx0VGV4dCB8fCAnTG9nbydcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cImxvZ2luUGFnZUNvbmZpZy5sb2dvVXJsPy53aWR0aCB8fCAnMTAwcHgnXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwibG9naW5QYWdlQ29uZmlnLmxvZ29Vcmw/LmhlaWdodCB8fCAnYXV0bydcIlxuICAgIC8+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVGl0bGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0aXRsZS1jb250YWluZXJcIj5cbiAgICA8aDFcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgY29sb3I6IGxvZ2luUGFnZUNvbmZpZy50aXRsZT8uY29sb3IgfHwgJyMzMzMnLFxuICAgICAgICAnZm9udC1zaXplJzogbG9naW5QYWdlQ29uZmlnLnRpdGxlPy5mb250U2l6ZSB8fCAnMjRweCdcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIHt7IGxvZ2luUGFnZUNvbmZpZy50aXRsZT8udGV4dCB8fCBcIkRlZmF1bHQgVGl0bGVcIiB9fVxuICAgIDwvaDE+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9ybSAtLT5cbiAgPGZvcm0gY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgICA8ZGl2ICpuZ0lmPVwibG9naW5QYWdlQ29uZmlnLmxvZ2luPy5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgIHt7IGxvZ2luUGFnZUNvbmZpZy5sb2dpbj8uZXJyb3JNZXNzYWdlIH19XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgIDxwdC10ZXh0LWlucHV0XG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgW2Zvcm1GaWVsZF09XCJsb2dpblBhZ2VDb25maWcudXNlcm5hbWVGaWVsZCFcIlxuICAgICAgPjwvcHQtdGV4dC1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgIDxwdC10ZXh0LWlucHV0XG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgW2Zvcm1GaWVsZF09XCJsb2dpblBhZ2VDb25maWcucGFzc3dvcmRGaWVsZCFcIlxuICAgICAgPjwvcHQtdGV4dC1pbnB1dD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzdWJtaXQtYnRuXCI+XG4gICAgICA8cHQtYnV0dG9uIFtidXR0b25Db25maWddPVwibG9naW5QYWdlQ29uZmlnLmJ1dHRvbkNvbmZpZyFcIj48L3B0LWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuICA8ZGl2IGNsYXNzPVwibG9naW4tZm9vdGVyXCI+XG4gICAge3sgbG9naW5QYWdlQ29uZmlnLmZvb3Rlcj8udmVyc2lvbiB9fVxuICAgIDxzcGFuPnt7IGxvZ2luUGFnZUNvbmZpZy5mb290ZXI/LmNvcHlyaWdodCB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L3B0LWNhcmQ+XG4iXX0=
|