valtech-components 2.0.301 → 2.0.302

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.
@@ -0,0 +1,267 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, inject } from '@angular/core';
3
+ import { ContentService } from '../services/content.service';
4
+ import { LangService } from '../services/lang-provider/lang-provider.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ /**
8
+ * Simple test component to diagnose the user's specific issue.
9
+ * Tests the exact pattern the user is using.
10
+ */
11
+ export class UserIssueTestComponent {
12
+ constructor() {
13
+ this.contentService = inject(ContentService);
14
+ this.langService = inject(LangService);
15
+ // Current language observable
16
+ this.currentLang$ = this.langService.currentLang$;
17
+ // Direct ContentService pattern (what user is trying)
18
+ this.saveButtonDirect$ = this.contentService.fromContent({ key: 'save' });
19
+ this.cancelButtonDirect$ = this.contentService.fromContent({ key: 'cancel' });
20
+ // ContentHelper pattern (user's alternative)
21
+ this.contentHelper = this.contentService.forComponent('_global');
22
+ this.saveButtonHelper$ = this.contentHelper.get('save');
23
+ this.cancelButtonHelper$ = this.contentHelper.get('cancel');
24
+ // Direct LangService for comparison
25
+ this.saveButtonLang$ = this.langService.getContent('_global', 'save');
26
+ this.cancelButtonLang$ = this.langService.getContent('_global', 'cancel');
27
+ // Update counters
28
+ this.directUpdateCount = 0;
29
+ this.helperUpdateCount = 0;
30
+ this.langServiceUpdateCount = 0;
31
+ }
32
+ ngOnInit() {
33
+ console.log('UserIssueTestComponent: Initializing...');
34
+ // Subscribe to count updates
35
+ this.saveButtonDirect$.subscribe(value => {
36
+ this.directUpdateCount++;
37
+ console.log('Direct fromContent updated:', value, 'Count:', this.directUpdateCount);
38
+ });
39
+ this.saveButtonHelper$.subscribe(value => {
40
+ this.helperUpdateCount++;
41
+ console.log('Helper updated:', value, 'Count:', this.helperUpdateCount);
42
+ });
43
+ this.saveButtonLang$.subscribe(value => {
44
+ this.langServiceUpdateCount++;
45
+ console.log('LangService updated:', value, 'Count:', this.langServiceUpdateCount);
46
+ });
47
+ // Log initial state
48
+ console.log('Current language:', this.langService.currentLang);
49
+ console.log('Available languages:', this.langService.availableLangs);
50
+ console.log('Has save content:', this.langService.hasContent('_global', 'save'));
51
+ console.log('Has cancel content:', this.langService.hasContent('_global', 'cancel'));
52
+ }
53
+ switchToSpanish() {
54
+ console.log('Switching to Spanish...');
55
+ this.langService.setLang('es');
56
+ }
57
+ switchToEnglish() {
58
+ console.log('Switching to English...');
59
+ this.langService.setLang('en');
60
+ }
61
+ // Synchronous methods for debugging
62
+ getSaveTextSync() {
63
+ return this.contentService.getText('save', 'Save (fallback)');
64
+ }
65
+ getCancelTextSync() {
66
+ return this.contentService.getText('cancel', 'Cancel (fallback)');
67
+ }
68
+ getAvailableLanguages() {
69
+ return this.langService.availableLangs.join(', ');
70
+ }
71
+ hasContentSave() {
72
+ return this.langService.hasContent('_global', 'save');
73
+ }
74
+ hasContentCancel() {
75
+ return this.langService.hasContent('_global', 'cancel');
76
+ }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserIssueTestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
78
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserIssueTestComponent, isStandalone: true, selector: "val-user-issue-test", ngImport: i0, template: `
79
+ <div style="padding: 20px; border: 2px solid #007bff; margin: 10px; border-radius: 8px;">
80
+ <h3>User Issue Test - Exact Pattern</h3>
81
+
82
+ <!-- Current Language Display -->
83
+ <div style="margin-bottom: 20px; padding: 10px; background: #f0f8ff; border-radius: 4px;">
84
+ <strong>Current Language:</strong> {{ currentLang$ | async }}
85
+ </div>
86
+
87
+ <!-- Language Switch Buttons -->
88
+ <div style="margin-bottom: 20px;">
89
+ <button
90
+ (click)="switchToSpanish()"
91
+ style="margin-right: 10px; padding: 8px 16px; background: #28a745; color: white; border: none; border-radius: 4px; cursor: pointer;"
92
+ >
93
+ Switch to ES
94
+ </button>
95
+ <button
96
+ (click)="switchToEnglish()"
97
+ style="margin-right: 10px; padding: 8px 16px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;"
98
+ >
99
+ Switch to EN
100
+ </button>
101
+ </div>
102
+
103
+ <!-- Direct ContentService Tests -->
104
+ <div style="margin-bottom: 20px; padding: 10px; background: #fff3cd; border-radius: 4px;">
105
+ <h4>Direct ContentService fromContent (user's pattern)</h4>
106
+ <div>
107
+ <strong>Save Button:</strong>
108
+ <ng-container *ngIf="saveButtonDirect$ | async as save; else loading">{{ save }}</ng-container>
109
+ </div>
110
+ <div>
111
+ <strong>Cancel Button:</strong>
112
+ <ng-container *ngIf="cancelButtonDirect$ | async as cancel; else loading">{{ cancel }}</ng-container>
113
+ </div>
114
+ </div>
115
+
116
+ <!-- ContentHelper Tests -->
117
+ <div style="margin-bottom: 20px; padding: 10px; background: #d1ecf1; border-radius: 4px;">
118
+ <h4>ContentHelper forComponent (user's helper)</h4>
119
+ <div>
120
+ <strong>Save Button:</strong>
121
+ <ng-container *ngIf="saveButtonHelper$ | async as save; else loading">{{ save }}</ng-container>
122
+ </div>
123
+ <div>
124
+ <strong>Cancel Button:</strong>
125
+ <ng-container *ngIf="cancelButtonHelper$ | async as cancel; else loading">{{ cancel }}</ng-container>
126
+ </div>
127
+ </div>
128
+
129
+ <!-- Direct LangService Tests -->
130
+ <div style="margin-bottom: 20px; padding: 10px; background: '#d4edda'; border-radius: 4px;">
131
+ <h4>Direct LangService (for comparison)</h4>
132
+ <div>
133
+ <strong>Save Button:</strong>
134
+ <ng-container *ngIf="saveButtonLang$ | async as save; else loading">{{ save }}</ng-container>
135
+ </div>
136
+ <div>
137
+ <strong>Cancel Button:</strong>
138
+ <ng-container *ngIf="cancelButtonLang$ | async as cancel; else loading">{{ cancel }}</ng-container>
139
+ </div>
140
+ </div>
141
+
142
+ <ng-template #loading>Loading...</ng-template>
143
+
144
+ <!-- Synchronous Tests -->
145
+ <div style="margin-bottom: 20px; padding: 10px; background: #f8d7da; border-radius: 4px;">
146
+ <h4>Synchronous getText (for reference)</h4>
147
+ <div><strong>Save Button (sync):</strong> {{ getSaveTextSync() }}</div>
148
+ <div><strong>Cancel Button (sync):</strong> {{ getCancelTextSync() }}</div>
149
+ </div>
150
+
151
+ <!-- Debug Information -->
152
+ <div style="margin-bottom: 20px; padding: 10px; background: #e2e3e5; border-radius: 4px;">
153
+ <h4>Debug Info</h4>
154
+ <div><strong>Available Languages:</strong> {{ getAvailableLanguages() }}</div>
155
+ <div><strong>Has 'save' content:</strong> {{ hasContentSave() }}</div>
156
+ <div><strong>Has 'cancel' content:</strong> {{ hasContentCancel() }}</div>
157
+ </div>
158
+
159
+ <!-- Update Counters -->
160
+ <div style="padding: 10px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px;">
161
+ <h4>Update Counters (should increment on language change)</h4>
162
+ <div><strong>Direct fromContent updates:</strong> {{ directUpdateCount }}</div>
163
+ <div><strong>Helper updates:</strong> {{ helperUpdateCount }}</div>
164
+ <div><strong>LangService updates:</strong> {{ langServiceUpdateCount }}</div>
165
+ </div>
166
+ </div>
167
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
168
+ }
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserIssueTestComponent, decorators: [{
170
+ type: Component,
171
+ args: [{
172
+ selector: 'val-user-issue-test',
173
+ standalone: true,
174
+ imports: [CommonModule],
175
+ template: `
176
+ <div style="padding: 20px; border: 2px solid #007bff; margin: 10px; border-radius: 8px;">
177
+ <h3>User Issue Test - Exact Pattern</h3>
178
+
179
+ <!-- Current Language Display -->
180
+ <div style="margin-bottom: 20px; padding: 10px; background: #f0f8ff; border-radius: 4px;">
181
+ <strong>Current Language:</strong> {{ currentLang$ | async }}
182
+ </div>
183
+
184
+ <!-- Language Switch Buttons -->
185
+ <div style="margin-bottom: 20px;">
186
+ <button
187
+ (click)="switchToSpanish()"
188
+ style="margin-right: 10px; padding: 8px 16px; background: #28a745; color: white; border: none; border-radius: 4px; cursor: pointer;"
189
+ >
190
+ Switch to ES
191
+ </button>
192
+ <button
193
+ (click)="switchToEnglish()"
194
+ style="margin-right: 10px; padding: 8px 16px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer;"
195
+ >
196
+ Switch to EN
197
+ </button>
198
+ </div>
199
+
200
+ <!-- Direct ContentService Tests -->
201
+ <div style="margin-bottom: 20px; padding: 10px; background: #fff3cd; border-radius: 4px;">
202
+ <h4>Direct ContentService fromContent (user's pattern)</h4>
203
+ <div>
204
+ <strong>Save Button:</strong>
205
+ <ng-container *ngIf="saveButtonDirect$ | async as save; else loading">{{ save }}</ng-container>
206
+ </div>
207
+ <div>
208
+ <strong>Cancel Button:</strong>
209
+ <ng-container *ngIf="cancelButtonDirect$ | async as cancel; else loading">{{ cancel }}</ng-container>
210
+ </div>
211
+ </div>
212
+
213
+ <!-- ContentHelper Tests -->
214
+ <div style="margin-bottom: 20px; padding: 10px; background: #d1ecf1; border-radius: 4px;">
215
+ <h4>ContentHelper forComponent (user's helper)</h4>
216
+ <div>
217
+ <strong>Save Button:</strong>
218
+ <ng-container *ngIf="saveButtonHelper$ | async as save; else loading">{{ save }}</ng-container>
219
+ </div>
220
+ <div>
221
+ <strong>Cancel Button:</strong>
222
+ <ng-container *ngIf="cancelButtonHelper$ | async as cancel; else loading">{{ cancel }}</ng-container>
223
+ </div>
224
+ </div>
225
+
226
+ <!-- Direct LangService Tests -->
227
+ <div style="margin-bottom: 20px; padding: 10px; background: '#d4edda'; border-radius: 4px;">
228
+ <h4>Direct LangService (for comparison)</h4>
229
+ <div>
230
+ <strong>Save Button:</strong>
231
+ <ng-container *ngIf="saveButtonLang$ | async as save; else loading">{{ save }}</ng-container>
232
+ </div>
233
+ <div>
234
+ <strong>Cancel Button:</strong>
235
+ <ng-container *ngIf="cancelButtonLang$ | async as cancel; else loading">{{ cancel }}</ng-container>
236
+ </div>
237
+ </div>
238
+
239
+ <ng-template #loading>Loading...</ng-template>
240
+
241
+ <!-- Synchronous Tests -->
242
+ <div style="margin-bottom: 20px; padding: 10px; background: #f8d7da; border-radius: 4px;">
243
+ <h4>Synchronous getText (for reference)</h4>
244
+ <div><strong>Save Button (sync):</strong> {{ getSaveTextSync() }}</div>
245
+ <div><strong>Cancel Button (sync):</strong> {{ getCancelTextSync() }}</div>
246
+ </div>
247
+
248
+ <!-- Debug Information -->
249
+ <div style="margin-bottom: 20px; padding: 10px; background: #e2e3e5; border-radius: 4px;">
250
+ <h4>Debug Info</h4>
251
+ <div><strong>Available Languages:</strong> {{ getAvailableLanguages() }}</div>
252
+ <div><strong>Has 'save' content:</strong> {{ hasContentSave() }}</div>
253
+ <div><strong>Has 'cancel' content:</strong> {{ hasContentCancel() }}</div>
254
+ </div>
255
+
256
+ <!-- Update Counters -->
257
+ <div style="padding: 10px; background: #fff; border: 1px solid #dee2e6; border-radius: 4px;">
258
+ <h4>Update Counters (should increment on language change)</h4>
259
+ <div><strong>Direct fromContent updates:</strong> {{ directUpdateCount }}</div>
260
+ <div><strong>Helper updates:</strong> {{ helperUpdateCount }}</div>
261
+ <div><strong>LangService updates:</strong> {{ langServiceUpdateCount }}</div>
262
+ </div>
263
+ </div>
264
+ `,
265
+ }]
266
+ }] });
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pc3N1ZS10ZXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2V4YW1wbGVzL3VzZXItaXNzdWUtdGVzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saURBQWlELENBQUM7OztBQUU5RTs7O0dBR0c7QUFnR0gsTUFBTSxPQUFPLHNCQUFzQjtJQS9GbkM7UUFnR1UsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUMsOEJBQThCO1FBQzlCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7UUFFN0Msc0RBQXNEO1FBQ3RELHNCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckUsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV6RSw2Q0FBNkM7UUFDckMsa0JBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxzQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCx3QkFBbUIsR0FBRyxJQUFJ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QUM7SUFDcEQsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQzsrR0FoRlUsc0JBQXNCO21HQUF0QixzQkFBc0IsK0VBM0Z2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RlQsMkRBMUZTLFlBQVk7OzRGQTRGWCxzQkFBc0I7a0JBL0ZsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RlQ7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBTaW1wbGUgdGVzdCBjb21wb25lbnQgdG8gZGlhZ25vc2UgdGhlIHVzZXIncyBzcGVjaWZpYyBpc3N1ZS5cbiAqIFRlc3RzIHRoZSBleGFjdCBwYXR0ZXJuIHRoZSB1c2VyIGlzIHVzaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdXNlci1pc3N1ZS10ZXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDIwcHg7IGJvcmRlcjogMnB4IHNvbGlkICMwMDdiZmY7IG1hcmdpbjogMTBweDsgYm9yZGVyLXJhZGl1czogOHB4O1wiPlxuICAgICAgPGgzPlVzZXIgSXNzdWUgVGVzdCAtIEV4YWN0IFBhdHRlcm48L2gzPlxuXG4gICAgICA8IS0tIEN1cnJlbnQgTGFuZ3VhZ2UgRGlzcGxheSAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4OyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZjBmOGZmOyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxzdHJvbmc+Q3VycmVudCBMYW5ndWFnZTo8L3N0cm9uZz4ge3sgY3VycmVudExhbmckIHwgYXN5bmMgfX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExhbmd1YWdlIFN3aXRjaCBCdXR0b25zIC0tPlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9TcGFuaXNoKClcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4OyBwYWRkaW5nOiA4cHggMTZweDsgYmFja2dyb3VuZDogIzI4YTc0NTsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyO1wiXG4gICAgICAgID5cbiAgICAgICAgICBTd2l0Y2ggdG8gRVNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9FbmdsaXNoKClcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4OyBwYWRkaW5nOiA4cHggMTZweDsgYmFja2dyb3VuZDogIzAwN2JmZjsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDRweDsgY3Vyc29yOiBwb2ludGVyO1wiXG4gICAgICAgID5cbiAgICAgICAgICBTd2l0Y2ggdG8gRU5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXJlY3QgQ29udGVudFNlcnZpY2UgVGVzdHMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogI2ZmZjNjZDsgYm9yZGVyLXJhZGl1czogNHB4O1wiPlxuICAgICAgICA8aDQ+RGlyZWN0IENvbnRlbnRTZXJ2aWNlIGZyb21Db250ZW50ICh1c2VyJ3MgcGF0dGVybik8L2g0PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzdHJvbmc+U2F2ZSBCdXR0b246PC9zdHJvbmc+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNhdmVCdXR0b25EaXJlY3QkIHwgYXN5bmMgYXMgc2F2ZTsgZWxzZSBsb2FkaW5nXCI+e3sgc2F2ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nPkNhbmNlbCBCdXR0b246PC9zdHJvbmc+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbmNlbEJ1dHRvbkRpcmVjdCQgfCBhc3luYyBhcyBjYW5jZWw7IGVsc2UgbG9hZGluZ1wiPnt7IGNhbmNlbCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnRIZWxwZXIgVGVzdHMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogI2QxZWNmMTsgYm9yZGVyLXJhZGl1czogNHB4O1wiPlxuICAgICAgICA8aDQ+Q29udGVudEhlbHBlciBmb3JDb21wb25lbnQgKHVzZXIncyBoZWxwZXIpPC9oND5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nPlNhdmUgQnV0dG9uOjwvc3Ryb25nPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzYXZlQnV0dG9uSGVscGVyJCB8IGFzeW5jIGFzIHNhdmU7IGVsc2UgbG9hZGluZ1wiPnt7IHNhdmUgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHN0cm9uZz5DYW5jZWwgQnV0dG9uOjwvc3Ryb25nPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5jZWxCdXR0b25IZWxwZXIkIHwgYXN5bmMgYXMgY2FuY2VsOyBlbHNlIGxvYWRpbmdcIj57eyBjYW5jZWwgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXJlY3QgTGFuZ1NlcnZpY2UgVGVzdHMgLS0+XG4gICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjBweDsgcGFkZGluZzogMTBweDsgYmFja2dyb3VuZDogJyNkNGVkZGEnOyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxoND5EaXJlY3QgTGFuZ1NlcnZpY2UgKGZvciBjb21wYXJpc29uKTwvaDQ+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHN0cm9uZz5TYXZlIEJ1dHRvbjo8L3N0cm9uZz5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2F2ZUJ1dHRvbkxhbmckIHwgYXN5bmMgYXMgc2F2ZTsgZWxzZSBsb2FkaW5nXCI+e3sgc2F2ZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8c3Ryb25nPkNhbmNlbCBCdXR0b246PC9zdHJvbmc+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbmNlbEJ1dHRvbkxhbmckIHwgYXN5bmMgYXMgY2FuY2VsOyBlbHNlIGxvYWRpbmdcIj57eyBjYW5jZWwgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nPkxvYWRpbmcuLi48L25nLXRlbXBsYXRlPlxuXG4gICAgICA8IS0tIFN5bmNocm9ub3VzIFRlc3RzIC0tPlxuICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6ICNmOGQ3ZGE7IGJvcmRlci1yYWRpdXM6IDRweDtcIj5cbiAgICAgICAgPGg0PlN5bmNocm9ub3VzIGdldFRleHQgKGZvciByZWZlcmVuY2UpPC9oND5cbiAgICAgICAgPGRpdj48c3Ryb25nPlNhdmUgQnV0dG9uIChzeW5jKTo8L3N0cm9uZz4ge3sgZ2V0U2F2ZVRleHRTeW5jKCkgfX08L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPkNhbmNlbCBCdXR0b24gKHN5bmMpOjwvc3Ryb25nPiB7eyBnZXRDYW5jZWxUZXh0U3luYygpIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEZWJ1ZyBJbmZvcm1hdGlvbiAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4OyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZTJlM2U1OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxoND5EZWJ1ZyBJbmZvPC9oND5cbiAgICAgICAgPGRpdj48c3Ryb25nPkF2YWlsYWJsZSBMYW5ndWFnZXM6PC9zdHJvbmc+IHt7IGdldEF2YWlsYWJsZUxhbmd1YWdlcygpIH19PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5IYXMgJ3NhdmUnIGNvbnRlbnQ6PC9zdHJvbmc+IHt7IGhhc0NvbnRlbnRTYXZlKCkgfX08L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPkhhcyAnY2FuY2VsJyBjb250ZW50Ojwvc3Ryb25nPiB7eyBoYXNDb250ZW50Q2FuY2VsKCkgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFVwZGF0ZSBDb3VudGVycyAtLT5cbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZmZmOyBib3JkZXI6IDFweCBzb2xpZCAjZGVlMmU2OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxoND5VcGRhdGUgQ291bnRlcnMgKHNob3VsZCBpbmNyZW1lbnQgb24gbGFuZ3VhZ2UgY2hhbmdlKTwvaDQ+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5EaXJlY3QgZnJvbUNvbnRlbnQgdXBkYXRlczo8L3N0cm9uZz4ge3sgZGlyZWN0VXBkYXRlQ291bnQgfX08L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPkhlbHBlciB1cGRhdGVzOjwvc3Ryb25nPiB7eyBoZWxwZXJVcGRhdGVDb3VudCB9fTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+TGFuZ1NlcnZpY2UgdXBkYXRlczo8L3N0cm9uZz4ge3sgbGFuZ1NlcnZpY2VVcGRhdGVDb3VudCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJJc3N1ZVRlc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlID0gaW5qZWN0KENvbnRlbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG5cbiAgLy8gQ3VycmVudCBsYW5ndWFnZSBvYnNlcnZhYmxlXG4gIGN1cnJlbnRMYW5nJCA9IHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmckO1xuXG4gIC8vIERpcmVjdCBDb250ZW50U2VydmljZSBwYXR0ZXJuICh3aGF0IHVzZXIgaXMgdHJ5aW5nKVxuICBzYXZlQnV0dG9uRGlyZWN0JCA9IHRoaXMuY29udGVudFNlcnZpY2UuZnJvbUNvbnRlbnQoeyBrZXk6ICdzYXZlJyB9KTtcbiAgY2FuY2VsQnV0dG9uRGlyZWN0JCA9IHRoaXMuY29udGVudFNlcnZpY2UuZnJvbUNvbnRlbnQoeyBrZXk6ICdjYW5jZWwnIH0pO1xuXG4gIC8vIENvbnRlbnRIZWxwZXIgcGF0dGVybiAodXNlcidzIGFsdGVybmF0aXZlKVxuICBwcml2YXRlIGNvbnRlbnRIZWxwZXIgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmZvckNvbXBvbmVudCgnX2dsb2JhbCcpO1xuICBzYXZlQnV0dG9uSGVscGVyJCA9IHRoaXMuY29udGVudEhlbHBlci5nZXQoJ3NhdmUnKTtcbiAgY2FuY2VsQnV0dG9uSGVscGVyJCA9IHRoaXMuY29udGVudEhlbHBlci5nZXQoJ2NhbmNlbCcpO1xuXG4gIC8vIERpcmVjdCBMYW5nU2VydmljZSBmb3IgY29tcGFyaXNvblxuICBzYXZlQnV0dG9uTGFuZyQgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldENvbnRlbnQoJ19nbG9iYWwnLCAnc2F2ZScpO1xuICBjYW5jZWxCdXR0b25MYW5nJCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0Q29udGVudCgnX2dsb2JhbCcsICdjYW5jZWwnKTtcblxuICAvLyBVcGRhdGUgY291bnRlcnNcbiAgZGlyZWN0VXBkYXRlQ291bnQgPSAwO1xuICBoZWxwZXJVcGRhdGVDb3VudCA9IDA7XG4gIGxhbmdTZXJ2aWNlVXBkYXRlQ291bnQgPSAwO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdVc2VySXNzdWVUZXN0Q29tcG9uZW50OiBJbml0aWFsaXppbmcuLi4nKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBjb3VudCB1cGRhdGVzXG4gICAgdGhpcy5zYXZlQnV0dG9uRGlyZWN0JC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5kaXJlY3RVcGRhdGVDb3VudCsrO1xuICAgICAgY29uc29sZS5sb2coJ0RpcmVjdCBmcm9tQ29udGVudCB1cGRhdGVkOicsIHZhbHVlLCAnQ291bnQ6JywgdGhpcy5kaXJlY3RVcGRhdGVDb3VudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNhdmVCdXR0b25IZWxwZXIkLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmhlbHBlclVwZGF0ZUNvdW50Kys7XG4gICAgICBjb25zb2xlLmxvZygnSGVscGVyIHVwZGF0ZWQ6JywgdmFsdWUsICdDb3VudDonLCB0aGlzLmhlbHBlclVwZGF0ZUNvdW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbkxhbmckLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLmxhbmdTZXJ2aWNlVXBkYXRlQ291bnQrKztcbiAgICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZSB1cGRhdGVkOicsIHZhbHVlLCAnQ291bnQ6JywgdGhpcy5sYW5nU2VydmljZVVwZGF0ZUNvdW50KTtcbiAgICB9KTtcblxuICAgIC8vIExvZyBpbml0aWFsIHN0YXRlXG4gICAgY29uc29sZS5sb2coJ0N1cnJlbnQgbGFuZ3VhZ2U6JywgdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZyk7XG4gICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBsYW5ndWFnZXM6JywgdGhpcy5sYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncyk7XG4gICAgY29uc29sZS5sb2coJ0hhcyBzYXZlIGNvbnRlbnQ6JywgdGhpcy5sYW5nU2VydmljZS5oYXNDb250ZW50KCdfZ2xvYmFsJywgJ3NhdmUnKSk7XG4gICAgY29uc29sZS5sb2coJ0hhcyBjYW5jZWwgY29udGVudDonLCB0aGlzLmxhbmdTZXJ2aWNlLmhhc0NvbnRlbnQoJ19nbG9iYWwnLCAnY2FuY2VsJykpO1xuICB9XG5cbiAgc3dpdGNoVG9TcGFuaXNoKCkge1xuICAgIGNvbnNvbGUubG9nKCdTd2l0Y2hpbmcgdG8gU3BhbmlzaC4uLicpO1xuICAgIHRoaXMubGFuZ1NlcnZpY2Uuc2V0TGFuZygnZXMnKTtcbiAgfVxuXG4gIHN3aXRjaFRvRW5nbGlzaCgpIHtcbiAgICBjb25zb2xlLmxvZygnU3dpdGNoaW5nIHRvIEVuZ2xpc2guLi4nKTtcbiAgICB0aGlzLmxhbmdTZXJ2aWNlLnNldExhbmcoJ2VuJyk7XG4gIH1cblxuICAvLyBTeW5jaHJvbm91cyBtZXRob2RzIGZvciBkZWJ1Z2dpbmdcbiAgZ2V0U2F2ZVRleHRTeW5jKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuZ2V0VGV4dCgnc2F2ZScsICdTYXZlIChmYWxsYmFjayknKTtcbiAgfVxuXG4gIGdldENhbmNlbFRleHRTeW5jKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuZ2V0VGV4dCgnY2FuY2VsJywgJ0NhbmNlbCAoZmFsbGJhY2spJyk7XG4gIH1cblxuICBnZXRBdmFpbGFibGVMYW5ndWFnZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncy5qb2luKCcsICcpO1xuICB9XG5cbiAgaGFzQ29udGVudFNhdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ1NlcnZpY2UuaGFzQ29udGVudCgnX2dsb2JhbCcsICdzYXZlJyk7XG4gIH1cblxuICBoYXNDb250ZW50Q2FuY2VsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxhbmdTZXJ2aWNlLmhhc0NvbnRlbnQoJ19nbG9iYWwnLCAnY2FuY2VsJyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
- import { BehaviorSubject, distinctUntilChanged, map } from 'rxjs';
2
+ import { BehaviorSubject, distinctUntilChanged, map, shareReplay, tap } from 'rxjs';
3
3
  import { LANG } from '../../shared/constants/storage';
4
4
  import { LocalStorageService } from '../local-storage.service';
5
5
  import { ValtechConfigService } from '../types';
@@ -153,7 +153,9 @@ export class LangService {
153
153
  * Use this to subscribe to language changes in components.
154
154
  */
155
155
  get currentLang$() {
156
- return this.selectedLang.asObservable().pipe(distinctUntilChanged());
156
+ console.log('LangService.currentLang$: Creating observable');
157
+ return this.selectedLang.asObservable().pipe(tap(lang => console.log(`LangService.currentLang$: Emitting language: ${lang}`)), distinctUntilChanged(), shareReplay(1) // Ensure new subscribers get the current value
158
+ );
157
159
  }
158
160
  /**
159
161
  * Get the current language synchronously.
@@ -226,13 +228,17 @@ export class LangService {
226
228
  * @returns Observable that emits the text string whenever language changes
227
229
  */
228
230
  getContent(className, key, fallback) {
231
+ console.log(`LangService.getContent: Creating observable for ${className}.${key}`);
229
232
  return this.currentLang$.pipe(map(lang => {
233
+ console.log(`LangService.getContent: Language changed to ${lang} for ${className}.${key}`);
230
234
  const result = this.getBestAvailableContent(className, key, lang);
231
235
  if (result.shouldWarn && result.actualLang !== lang) {
232
236
  console.warn(`LangService: Content "${className}.${key}" not available in "${lang}".`, `Using "${result.actualLang}" instead. Available languages:`, this.availableLanguages);
233
237
  }
234
- return result.content || fallback || `[${className}.${key}]`;
235
- }), distinctUntilChanged((prev, curr) => prev === curr));
238
+ const finalResult = result.content || fallback || `[${className}.${key}]`;
239
+ console.log(`LangService.getContent: Returning "${finalResult}" for ${className}.${key}`);
240
+ return finalResult;
241
+ }), distinctUntilChanged());
236
242
  }
237
243
  /**
238
244
  * Get reactive content for multiple keys at once.
@@ -330,4 +336,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
330
336
  type: Inject,
331
337
  args: [ValtechConfigService]
332
338
  }] }] });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZy1wcm92aWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0QsT0FBTyxFQUFFLFNBQVMsRUFBNEIsTUFBTSxTQUFTLENBQUM7O0FBRTlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBSUgsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFBMEMsTUFBcUI7UUFMdkQsdUJBQWtCLEdBQWlCLEVBQUUsQ0FBQztRQUd0QywyQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBR2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyw0RUFBNEU7UUFDNUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVuRCw2Q0FBNkM7UUFDN0MsTUFB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O2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU2MsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTEFORyB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb25zdGFudHMvc3RvcmFnZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hDb25maWcsIFZhbHRlY2hDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICcuL2NvbnRlbnQnO1xuaW1wb3J0IHsgTEFOR1VBR0VTLCBMYW5nT3B0aW9uLCBMYW5ndWFnZVRleHQgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBMYW5nU2VydmljZSAtIFJlYWN0aXZlIGxhbmd1YWdlIGFuZCBjb250ZW50IG1hbmFnZW1lbnQgc2VydmljZS5cbiAqXG4gKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgcmVhY3RpdmUgY29udGVudCBtYW5hZ2VtZW50IHdpdGggT2JzZXJ2YWJsZS1iYXNlZCBsYW5ndWFnZSBzd2l0Y2hpbmcuXG4gKiBDb21wb25lbnRzIGNhbiBzdWJzY3JpYmUgdG8gY29udGVudCBjaGFuZ2VzIGFuZCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB3aGVuIHRoZSBsYW5ndWFnZSBjaGFuZ2VzLlxuICpcbiAqIFRoZSBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZyb20gdGhlIGNvbnRlbnQgY29uZmlndXJhdGlvblxuICogYW5kIHByb3ZpZGVzIGludGVsbGlnZW50IGZhbGxiYWNrcyB3aXRoIGNvbnNvbGUgd2FybmluZ3MgZm9yIG1pc3NpbmcgdHJhbnNsYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3RydWN0b3IocHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UpIHt9XG4gKlxuICogLy8gR2V0IGN1cnJlbnQgbGFuZ3VhZ2VcbiAqIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZztcbiAqXG4gKiAvLyBTdWJzY3JpYmUgdG8gbGFuZ3VhZ2UgY2hhbmdlc1xuICogdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZyQuc3Vic2NyaWJlKGxhbmcgPT4gY29uc29sZS5sb2coJ0xhbmd1YWdlIGNoYW5nZWQ6JywgbGFuZykpO1xuICpcbiAqIC8vIEdldCBzdGF0aWMgdGV4dFxuICogY29uc3QgdGV4dCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dCgnQ29tcG9uZW50TmFtZScsICd0ZXh0S2V5Jyk7XG4gKlxuICogLy8gR2V0IHJlYWN0aXZlIHRleHRcbiAqIGNvbnN0IHRleHQkID0gdGhpcy5sYW5nU2VydmljZS5nZXRDb250ZW50KCdDb21wb25lbnROYW1lJywgJ3RleHRLZXknKTtcbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTGFuZ1NlcnZpY2Uge1xuICBwcml2YXRlIGNvbnRlbnQ6IFByb3ZpZGVyO1xuICBwcml2YXRlIGRlZmF1bHRMYW5nOiBMYW5nT3B0aW9uO1xuICBwcml2YXRlIGF2YWlsYWJsZUxhbmd1YWdlczogTGFuZ09wdGlvbltdID0gW107XG4gIHByaXZhdGUgc2VsZWN0ZWRMYW5nOiBCZWhhdmlvclN1YmplY3Q8TGFuZ09wdGlvbj47XG4gIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQ29uZmlnO1xuICBwcml2YXRlIHdhcm5lZE1pc3NpbmdMYW5ndWFnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFZhbHRlY2hDb25maWdTZXJ2aWNlKSBjb25maWc6IFZhbHRlY2hDb25maWcpIHtcbiAgICBjb25zb2xlLmxvZygnTGFuZ1NlcnZpY2U6IEluamVjdGVkIGNvbmZpZzonLCBjb25maWcpO1xuICAgIHRoaXMuY29udGVudCA9IGNvbmZpZy5jb250ZW50O1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gICAgLy8gRGV0ZWN0IGF2YWlsYWJsZSBsYW5ndWFnZXMgZnJvbSBjb250ZW50XG4gICAgdGhpcy5kZXRlY3RBdmFpbGFibGVMYW5ndWFnZXMoKTtcblxuICAgIC8vIFNldCBkZWZhdWx0IGxhbmd1YWdlIChwcmVmZXIgU3BhbmlzaCwgdGhlbiBFbmdsaXNoLCB0aGVuIGZpcnN0IGF2YWlsYWJsZSlcbiAgICB0aGlzLmRlZmF1bHRMYW5nID0gdGhpcy5kZXRlcm1pbmVEZWZhdWx0TGFuZ3VhZ2UoKTtcblxuICAgIC8vIEluaXRpYWxpemUgd2l0aCBzdG9yZWQgbGFuZ3VhZ2Ugb3IgZGVmYXVsdFxuICAgIGNvbnN0IGN1cnJlbnQgPSBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldDxMYW5nT3B0aW9uPihMQU5HKTtcbiAgICBjb25zdCBpbml0aWFsTGFuZyA9IHRoaXMudmFsaWRhdGVMYW5ndWFnZShjdXJyZW50KSB8fCB0aGlzLmRlZmF1bHRMYW5nO1xuXG4gICAgdGhpcy5zZWxlY3RlZExhbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExhbmdPcHRpb24+KGluaXRpYWxMYW5nKTtcblxuICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZTogSW5pdGlhbGl6ZWQgd2l0aCBsYW5ndWFnZXM6Jywge1xuICAgICAgYXZhaWxhYmxlOiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgIGRlZmF1bHQ6IHRoaXMuZGVmYXVsdExhbmcsXG4gICAgICBjdXJyZW50OiBpbml0aWFsTGFuZyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3QgYXZhaWxhYmxlIGxhbmd1YWdlcyBmcm9tIHRoZSBjb250ZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIFNjYW5zIGFsbCBjb21wb25lbnQgY29udGVudCB0byBmaW5kIHdoaWNoIGxhbmd1YWdlcyBhcmUgYWN0dWFsbHkgY29uZmlndXJlZC5cbiAgICovXG4gIHByaXZhdGUgZGV0ZWN0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhbmd1YWdlU2V0ID0gbmV3IFNldDxMYW5nT3B0aW9uPigpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbnRlbnQpLmZvckVhY2goY29tcG9uZW50Q29udGVudCA9PiB7XG4gICAgICBpZiAoY29tcG9uZW50Q29udGVudD8uQ29udGVudCkge1xuICAgICAgICBPYmplY3Qua2V5cyhjb21wb25lbnRDb250ZW50LkNvbnRlbnQpLmZvckVhY2gobGFuZyA9PiB7XG4gICAgICAgICAgbGFuZ3VhZ2VTZXQuYWRkKGxhbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzID0gQXJyYXkuZnJvbShsYW5ndWFnZVNldCkuc29ydCgpO1xuXG4gICAgaWYgKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdMYW5nU2VydmljZTogTm8gbGFuZ3VhZ2VzIGRldGVjdGVkIGluIGNvbnRlbnQgY29uZmlndXJhdGlvbiEnKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzID0gW0xBTkdVQUdFUy5FU107IC8vIEZhbGxiYWNrXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgYmVzdCBkZWZhdWx0IGxhbmd1YWdlIGJhc2VkIG9uIGF2YWlsYWJsZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlcm1pbmVEZWZhdWx0TGFuZ3VhZ2UoKTogTGFuZ09wdGlvbiB7XG4gICAgLy8gUHJlZmVyZW5jZSBvcmRlcjogU3BhbmlzaCwgRW5nbGlzaCwgdGhlbiBmaXJzdCBhdmFpbGFibGVcbiAgICBjb25zdCBwcmVmZXJyZWRPcmRlciA9IFtMQU5HVUFHRVMuRVMsIExBTkdVQUdFUy5FTl07XG5cbiAgICBmb3IgKGNvbnN0IHByZWZlcnJlZCBvZiBwcmVmZXJyZWRPcmRlcikge1xuICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKHByZWZlcnJlZCkpIHtcbiAgICAgICAgcmV0dXJuIHByZWZlcnJlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNbMF07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgaWYgYSBsYW5ndWFnZSBpcyBhdmFpbGFibGUgaW4gdGhlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTGFuZ3VhZ2UobGFuZzogTGFuZ09wdGlvbiB8IG51bGwpOiBMYW5nT3B0aW9uIHwgbnVsbCB7XG4gICAgaWYgKCFsYW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuaW5jbHVkZXMobGFuZykgPyBsYW5nIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJlc3QgYXZhaWxhYmxlIGxhbmd1YWdlIGZvciBhIGNvbXBvbmVudCBhbmQga2V5LlxuICAgKiBQcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFjayB3aXRoIHdhcm5pbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCZXN0QXZhaWxhYmxlQ29udGVudChcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyxcbiAgICByZXF1ZXN0ZWRMYW5nOiBMYW5nT3B0aW9uXG4gICk6IHtcbiAgICBjb250ZW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgYWN0dWFsTGFuZzogTGFuZ09wdGlvbjtcbiAgICBzaG91bGRXYXJuOiBib29sZWFuO1xuICB9IHtcbiAgICBjb25zdCBjb21wb25lbnRDb250ZW50ID0gdGhpcy5jb250ZW50W2NsYXNzTmFtZV07XG5cbiAgICBpZiAoIWNvbXBvbmVudENvbnRlbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgYWN0dWFsTGFuZzogcmVxdWVzdGVkTGFuZyxcbiAgICAgICAgc2hvdWxkV2FybjogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFRyeSByZXF1ZXN0ZWQgbGFuZ3VhZ2UgZmlyc3RcbiAgICBjb25zdCByZXF1ZXN0ZWRDb250ZW50ID0gY29tcG9uZW50Q29udGVudC5Db250ZW50W3JlcXVlc3RlZExhbmddO1xuICAgIGlmIChyZXF1ZXN0ZWRDb250ZW50Py5ba2V5XSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogcmVxdWVzdGVkQ29udGVudFtrZXldLFxuICAgICAgICBhY3R1YWxMYW5nOiByZXF1ZXN0ZWRMYW5nLFxuICAgICAgICBzaG91bGRXYXJuOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTGFuZ3VhZ2Ugbm90IGF2YWlsYWJsZSwgdHJ5IGZhbGxiYWNrc1xuICAgIGNvbnN0IHdhcm5pbmdLZXkgPSBgJHtjbGFzc05hbWV9LiR7a2V5fS4ke3JlcXVlc3RlZExhbmd9YDtcbiAgICBjb25zdCBzaG91bGRXYXJuID0gIXRoaXMud2FybmVkTWlzc2luZ0xhbmd1YWdlcy5oYXMod2FybmluZ0tleSk7XG5cbiAgICBpZiAoc2hvdWxkV2Fybikge1xuICAgICAgdGhpcy53YXJuZWRNaXNzaW5nTGFuZ3VhZ2VzLmFkZCh3YXJuaW5nS2V5KTtcbiAgICB9XG5cbiAgICAvLyBUcnkgZGVmYXVsdCBsYW5ndWFnZVxuICAgIGlmIChyZXF1ZXN0ZWRMYW5nICE9PSB0aGlzLmRlZmF1bHRMYW5nKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q29udGVudCA9IGNvbXBvbmVudENvbnRlbnQuQ29udGVudFt0aGlzLmRlZmF1bHRMYW5nXTtcbiAgICAgIGlmIChkZWZhdWx0Q29udGVudD8uW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBkZWZhdWx0Q29udGVudFtrZXldLFxuICAgICAgICAgIGFjdHVhbExhbmc6IHRoaXMuZGVmYXVsdExhbmcsXG4gICAgICAgICAgc2hvdWxkV2FybixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcnkgZmlyc3QgYXZhaWxhYmxlIGxhbmd1YWdlXG4gICAgZm9yIChjb25zdCBhdmFpbGFibGVMYW5nIG9mIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCBhdmFpbGFibGVDb250ZW50ID0gY29tcG9uZW50Q29udGVudC5Db250ZW50W2F2YWlsYWJsZUxhbmddO1xuICAgICAgaWYgKGF2YWlsYWJsZUNvbnRlbnQ/LltrZXldKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogYXZhaWxhYmxlQ29udGVudFtrZXldLFxuICAgICAgICAgIGFjdHVhbExhbmc6IGF2YWlsYWJsZUxhbmcsXG4gICAgICAgICAgc2hvdWxkV2FybixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogdW5kZWZpbmVkLFxuICAgICAgYWN0dWFsTGFuZzogcmVxdWVzdGVkTGFuZyxcbiAgICAgIHNob3VsZFdhcm4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugd2hlbmV2ZXIgaXQgY2hhbmdlcy5cbiAgICogVXNlIHRoaXMgdG8gc3Vic2NyaWJlIHRvIGxhbmd1YWdlIGNoYW5nZXMgaW4gY29tcG9uZW50cy5cbiAgICovXG4gIGdldCBjdXJyZW50TGFuZyQoKTogT2JzZXJ2YWJsZTxMYW5nT3B0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRMYW5nLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBnZXQgY3VycmVudExhbmcoKTogTGFuZ09wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRMYW5nLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcnJheSBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGRldGVjdGVkIGZyb20gY29udGVudC5cbiAgICovXG4gIGdldCBhdmFpbGFibGVMYW5ncygpOiBMYW5nT3B0aW9uW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5hdmFpbGFibGVMYW5ndWFnZXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS5cbiAgICovXG4gIGdldCBkZWZhdWx0TGFuZ3VhZ2UoKTogTGFuZ09wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExhbmc7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIGFuZCBwZXJzaXN0IGl0IHRvIGxvY2FsU3RvcmFnZS5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdXBkYXRlcyBpbiBhbGwgcmVhY3RpdmUgY29udGVudCBzdWJzY3JpcHRpb25zLlxuICAgKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlIGFuZCB3YXJucyBpZiBub3QuXG4gICAqXG4gICAqIEBwYXJhbSBsYW5nIC0gVGhlIGxhbmd1YWdlIHRvIHNldFxuICAgKi9cbiAgc2V0TGFuZyhsYW5nOiBMYW5nT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5pbmNsdWRlcyhsYW5nKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTGFuZ1NlcnZpY2U6IExhbmd1YWdlIFwiJHtsYW5nfVwiIGlzIG5vdCBhdmFpbGFibGUuIEF2YWlsYWJsZSBsYW5ndWFnZXM6YCxcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICk7XG4gICAgICBjb25zb2xlLndhcm4oYExhbmdTZXJ2aWNlOiBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBsYW5ndWFnZSBcIiR7dGhpcy5kZWZhdWx0TGFuZ31cImApO1xuICAgICAgbGFuZyA9IHRoaXMuZGVmYXVsdExhbmc7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZExhbmcubmV4dChsYW5nKTtcbiAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldDxMYW5nT3B0aW9uPihMQU5HLCBsYW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29udGVudCBmb3IgYSBjb21wb25lbnQgY2xhc3MgYW5kIGtleSAobGVnYWN5IG1ldGhvZCkuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRUZXh0KCkgb3IgZ2V0Q29udGVudCgpIGZvciBiZXR0ZXIgdHlwZSBzYWZldHlcbiAgICovXG4gIFRleHQoY2xhc3NOYW1lOiBzdHJpbmcpOiBMYW5ndWFnZVRleHQge1xuICAgIGNvbnN0IGNvbXBvbmVudENvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICByZXR1cm4gY29tcG9uZW50Q29udGVudD8uQ29udGVudFt0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZV0gfHwge307XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGNvbnRlbnQgc3RyaW5nIHN5bmNocm9ub3VzbHkgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlLlxuICAgKiBQcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFjayB3aXRoIHdhcm5pbmdzIGZvciBtaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEBwYXJhbSBmYWxsYmFjayAtIE9wdGlvbmFsIGZhbGxiYWNrIHRleHQgaWYga2V5IGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyBUaGUgdGV4dCBzdHJpbmcgb3IgZmFsbGJhY2tcbiAgICovXG4gIGdldFRleHQoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRCZXN0QXZhaWxhYmxlQ29udGVudChjbGFzc05hbWUsIGtleSwgdGhpcy5zZWxlY3RlZExhbmcudmFsdWUpO1xuXG4gICAgaWYgKHJlc3VsdC5zaG91bGRXYXJuICYmIHJlc3VsdC5hY3R1YWxMYW5nICE9PSB0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7dGhpcy5zZWxlY3RlZExhbmcudmFsdWV9XCIuYCxcbiAgICAgICAgYFVzaW5nIFwiJHtyZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLiBBdmFpbGFibGUgbGFuZ3VhZ2VzOmAsXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuY29udGVudCB8fCBmYWxsYmFjayB8fCBgWyR7Y2xhc3NOYW1lfS4ke2tleX1dYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWFjdGl2ZSBPYnNlcnZhYmxlIGZvciBhIHNwZWNpZmljIHRleHQga2V5IHRoYXQgdXBkYXRlcyB3aGVuIGxhbmd1YWdlIGNoYW5nZXMuXG4gICAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgcmVhY3RpdmUgY29udGVudC5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0ZXh0IGtleVxuICAgKiBAcGFyYW0gZmFsbGJhY2sgLSBPcHRpb25hbCBmYWxsYmFjayB0ZXh0IGlmIGtleSBpcyBub3QgZm91bmRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB0ZXh0IHN0cmluZyB3aGVuZXZlciBsYW5ndWFnZSBjaGFuZ2VzXG4gICAqL1xuICBnZXRDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nJC5waXBlKFxuICAgICAgbWFwKGxhbmcgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJlc3RBdmFpbGFibGVDb250ZW50KGNsYXNzTmFtZSwga2V5LCBsYW5nKTtcblxuICAgICAgICBpZiAocmVzdWx0LnNob3VsZFdhcm4gJiYgcmVzdWx0LmFjdHVhbExhbmcgIT09IGxhbmcpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7bGFuZ31cIi5gLFxuICAgICAgICAgICAgYFVzaW5nIFwiJHtyZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLiBBdmFpbGFibGUgbGFuZ3VhZ2VzOmAsXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LmNvbnRlbnQgfHwgZmFsbGJhY2sgfHwgYFske2NsYXNzTmFtZX0uJHtrZXl9XWA7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiBwcmV2ID09PSBjdXJyKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIGNvbnRlbnQgZm9yIG11bHRpcGxlIGtleXMgYXQgb25jZS5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleXMgLSBBcnJheSBvZiB0ZXh0IGtleXMgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIG9iamVjdCB3aXRoIGFsbCByZXF1ZXN0ZWQga2V5c1xuICAgKi9cbiAgZ2V0TXVsdGlwbGVDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXlzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nJC5waXBlKFxuICAgICAgbWFwKGxhbmcgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy5nZXRCZXN0QXZhaWxhYmxlQ29udGVudChjbGFzc05hbWUsIGtleSwgbGFuZyk7XG5cbiAgICAgICAgICBpZiAoY29udGVudFJlc3VsdC5zaG91bGRXYXJuICYmIGNvbnRlbnRSZXN1bHQuYWN0dWFsTGFuZyAhPT0gbGFuZykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7bGFuZ31cIi5gLFxuICAgICAgICAgICAgICBgVXNpbmcgXCIke2NvbnRlbnRSZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBjb250ZW50UmVzdWx0LmNvbnRlbnQgfHwgYFske2NsYXNzTmFtZX0uJHtrZXl9XWA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnRlbnQga2V5IGV4aXN0cyBmb3IgYSBjb21wb25lbnQgaW4gYW55IGF2YWlsYWJsZSBsYW5ndWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSBleGlzdHMgaW4gYW55IGxhbmd1YWdlXG4gICAqL1xuICBoYXNDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsYXNzQ29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuICAgIGlmICghY2xhc3NDb250ZW50KSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjbGFzc0NvbnRlbnQuQ29udGVudCkuc29tZShcbiAgICAgIGxhbmdDb250ZW50ID0+IGxhbmdDb250ZW50ICYmIHR5cGVvZiBsYW5nQ29udGVudFtrZXldID09PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb250ZW50IGtleSBleGlzdHMgZm9yIGEgY29tcG9uZW50IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0ZXh0IGtleVxuICAgKiBAcGFyYW0gbGFuZyAtIFRoZSBsYW5ndWFnZSB0byBjaGVjayAoZGVmYXVsdHMgdG8gY3VycmVudCBsYW5ndWFnZSlcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlXG4gICAqL1xuICBoYXNDb250ZW50SW5MYW5ndWFnZShjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGxhbmc/OiBMYW5nT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFyZ2V0TGFuZyA9IGxhbmcgfHwgdGhpcy5jdXJyZW50TGFuZztcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXT8uQ29udGVudFt0YXJnZXRMYW5nXTtcbiAgICByZXR1cm4gY2xhc3NDb250ZW50ICYmIHR5cGVvZiBjbGFzc0NvbnRlbnRba2V5XSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF2YWlsYWJsZSBsYW5ndWFnZXMgZm9yIGEgc3BlY2lmaWMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGxhbmd1YWdlIGNvZGVzIGF2YWlsYWJsZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzRm9yQ29tcG9uZW50KGNsYXNzTmFtZTogc3RyaW5nKTogTGFuZ09wdGlvbltdIHtcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzQ29udGVudC5Db250ZW50KS5maWx0ZXIoXG4gICAgICBsYW5nID0+IGNsYXNzQ29udGVudC5Db250ZW50W2xhbmddICYmIE9iamVjdC5rZXlzKGNsYXNzQ29udGVudC5Db250ZW50W2xhbmddKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWlzc2luZyBjb250ZW50IGtleXMgZm9yIGEgY29tcG9uZW50IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gICAqIFVzZWZ1bCBmb3IgaWRlbnRpZnlpbmcgaW5jb21wbGV0ZSB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gY2hlY2tcbiAgICogQHBhcmFtIHJlZmVyZW5jZUxhbmcgLSBUaGUgcmVmZXJlbmNlIGxhbmd1YWdlIHRvIGNvbXBhcmUgYWdhaW5zdCAoZGVmYXVsdHMgdG8gZGVmYXVsdCBsYW5ndWFnZSlcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWlzc2luZyBrZXlzXG4gICAqL1xuICBnZXRNaXNzaW5nQ29udGVudEtleXMoY2xhc3NOYW1lOiBzdHJpbmcsIGxhbmc6IExhbmdPcHRpb24sIHJlZmVyZW5jZUxhbmc/OiBMYW5nT3B0aW9uKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlZkxhbmcgPSByZWZlcmVuY2VMYW5nIHx8IHRoaXMuZGVmYXVsdExhbmc7XG4gICAgY29uc3QgY2xhc3NDb250ZW50ID0gdGhpcy5jb250ZW50W2NsYXNzTmFtZV07XG5cbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlQ29udGVudCA9IGNsYXNzQ29udGVudC5Db250ZW50W3JlZkxhbmddIHx8IHt9O1xuICAgIGNvbnN0IHRhcmdldENvbnRlbnQgPSBjbGFzc0NvbnRlbnQuQ29udGVudFtsYW5nXSB8fCB7fTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZWZlcmVuY2VDb250ZW50KS5maWx0ZXIoXG4gICAgICBrZXkgPT4gIXRhcmdldENvbnRlbnRba2V5XSB8fCB0eXBlb2YgdGFyZ2V0Q29udGVudFtrZXldICE9PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvLyBMZWdhY3kgZ2V0dGVycy9zZXR0ZXJzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIGdldCBMYW5nKCk6IExhbmdPcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nO1xuICB9XG5cbiAgc2V0IExhbmcobGFuZzogTGFuZ09wdGlvbikge1xuICAgIHRoaXMuc2V0TGFuZyhsYW5nKTtcbiAgfVxufVxuIl19
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZy1wcm92aWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvRCxPQUFPLEVBQUUsU0FBUyxFQUE0QixNQUFNLFNBQVMsQ0FBQzs7QUFFOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFJSCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUEwQyxNQUFxQjtRQUx2RCx1QkFBa0IsR0FBaUIsRUFBRSxDQUFDO1FBR3RDLDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFHakQsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FB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UUFFdkQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFnQjtRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7K0dBN1hVLFdBQVcsa0JBUUYsb0JBQW9CO21IQVI3QixXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVNjLE1BQU07MkJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExBTkcgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uc3RhbnRzL3N0b3JhZ2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoQ29uZmlnLCBWYWx0ZWNoQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnLi9jb250ZW50JztcbmltcG9ydCB7IExBTkdVQUdFUywgTGFuZ09wdGlvbiwgTGFuZ3VhZ2VUZXh0IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTGFuZ1NlcnZpY2UgLSBSZWFjdGl2ZSBsYW5ndWFnZSBhbmQgY29udGVudCBtYW5hZ2VtZW50IHNlcnZpY2UuXG4gKlxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHJlYWN0aXZlIGNvbnRlbnQgbWFuYWdlbWVudCB3aXRoIE9ic2VydmFibGUtYmFzZWQgbGFuZ3VhZ2Ugc3dpdGNoaW5nLlxuICogQ29tcG9uZW50cyBjYW4gc3Vic2NyaWJlIHRvIGNvbnRlbnQgY2hhbmdlcyBhbmQgYXV0b21hdGljYWxseSB1cGRhdGUgd2hlbiB0aGUgbGFuZ3VhZ2UgY2hhbmdlcy5cbiAqXG4gKiBUaGUgc2VydmljZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYXZhaWxhYmxlIGxhbmd1YWdlcyBmcm9tIHRoZSBjb250ZW50IGNvbmZpZ3VyYXRpb25cbiAqIGFuZCBwcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFja3Mgd2l0aCBjb25zb2xlIHdhcm5pbmdzIGZvciBtaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlKSB7fVxuICpcbiAqIC8vIEdldCBjdXJyZW50IGxhbmd1YWdlXG4gKiBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmc7XG4gKlxuICogLy8gU3Vic2NyaWJlIHRvIGxhbmd1YWdlIGNoYW5nZXNcbiAqIHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmckLnN1YnNjcmliZShsYW5nID0+IGNvbnNvbGUubG9nKCdMYW5ndWFnZSBjaGFuZ2VkOicsIGxhbmcpKTtcbiAqXG4gKiAvLyBHZXQgc3RhdGljIHRleHRcbiAqIGNvbnN0IHRleHQgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ0NvbXBvbmVudE5hbWUnLCAndGV4dEtleScpO1xuICpcbiAqIC8vIEdldCByZWFjdGl2ZSB0ZXh0XG4gKiBjb25zdCB0ZXh0JCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0Q29udGVudCgnQ29tcG9uZW50TmFtZScsICd0ZXh0S2V5Jyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExhbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb250ZW50OiBQcm92aWRlcjtcbiAgcHJpdmF0ZSBkZWZhdWx0TGFuZzogTGFuZ09wdGlvbjtcbiAgcHJpdmF0ZSBhdmFpbGFibGVMYW5ndWFnZXM6IExhbmdPcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHNlbGVjdGVkTGFuZzogQmVoYXZpb3JTdWJqZWN0PExhbmdPcHRpb24+O1xuICBwcml2YXRlIGNvbmZpZzogVmFsdGVjaENvbmZpZztcbiAgcHJpdmF0ZSB3YXJuZWRNaXNzaW5nTGFuZ3VhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChWYWx0ZWNoQ29uZmlnU2VydmljZSkgY29uZmlnOiBWYWx0ZWNoQ29uZmlnKSB7XG4gICAgY29uc29sZS5sb2coJ0xhbmdTZXJ2aWNlOiBJbmplY3RlZCBjb25maWc6JywgY29uZmlnKTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb25maWcuY29udGVudDtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIC8vIERldGVjdCBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZyb20gY29udGVudFxuICAgIHRoaXMuZGV0ZWN0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsYW5ndWFnZSAocHJlZmVyIFNwYW5pc2gsIHRoZW4gRW5nbGlzaCwgdGhlbiBmaXJzdCBhdmFpbGFibGUpXG4gICAgdGhpcy5kZWZhdWx0TGFuZyA9IHRoaXMuZGV0ZXJtaW5lRGVmYXVsdExhbmd1YWdlKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggc3RvcmVkIGxhbmd1YWdlIG9yIGRlZmF1bHRcbiAgICBjb25zdCBjdXJyZW50ID0gTG9jYWxTdG9yYWdlU2VydmljZS5nZXQ8TGFuZ09wdGlvbj4oTEFORyk7XG4gICAgY29uc3QgaW5pdGlhbExhbmcgPSB0aGlzLnZhbGlkYXRlTGFuZ3VhZ2UoY3VycmVudCkgfHwgdGhpcy5kZWZhdWx0TGFuZztcblxuICAgIHRoaXMuc2VsZWN0ZWRMYW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYW5nT3B0aW9uPihpbml0aWFsTGFuZyk7XG5cbiAgICBjb25zb2xlLmxvZygnTGFuZ1NlcnZpY2U6IEluaXRpYWxpemVkIHdpdGggbGFuZ3VhZ2VzOicsIHtcbiAgICAgIGF2YWlsYWJsZTogdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICBkZWZhdWx0OiB0aGlzLmRlZmF1bHRMYW5nLFxuICAgICAgY3VycmVudDogaW5pdGlhbExhbmcsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IGF2YWlsYWJsZSBsYW5ndWFnZXMgZnJvbSB0aGUgY29udGVudCBjb25maWd1cmF0aW9uLlxuICAgKiBTY2FucyBhbGwgY29tcG9uZW50IGNvbnRlbnQgdG8gZmluZCB3aGljaCBsYW5ndWFnZXMgYXJlIGFjdHVhbGx5IGNvbmZpZ3VyZWQuXG4gICAqL1xuICBwcml2YXRlIGRldGVjdEF2YWlsYWJsZUxhbmd1YWdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBsYW5ndWFnZVNldCA9IG5ldyBTZXQ8TGFuZ09wdGlvbj4oKTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jb250ZW50KS5mb3JFYWNoKGNvbXBvbmVudENvbnRlbnQgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudENvbnRlbnQ/LkNvbnRlbnQpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29tcG9uZW50Q29udGVudC5Db250ZW50KS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgICAgIGxhbmd1YWdlU2V0LmFkZChsYW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IEFycmF5LmZyb20obGFuZ3VhZ2VTZXQpLnNvcnQoKTtcblxuICAgIGlmICh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignTGFuZ1NlcnZpY2U6IE5vIGxhbmd1YWdlcyBkZXRlY3RlZCBpbiBjb250ZW50IGNvbmZpZ3VyYXRpb24hJyk7XG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IFtMQU5HVUFHRVMuRVNdOyAvLyBGYWxsYmFja1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGJlc3QgZGVmYXVsdCBsYW5ndWFnZSBiYXNlZCBvbiBhdmFpbGFibGUgY29udGVudC5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lRGVmYXVsdExhbmd1YWdlKCk6IExhbmdPcHRpb24ge1xuICAgIC8vIFByZWZlcmVuY2Ugb3JkZXI6IFNwYW5pc2gsIEVuZ2xpc2gsIHRoZW4gZmlyc3QgYXZhaWxhYmxlXG4gICAgY29uc3QgcHJlZmVycmVkT3JkZXIgPSBbTEFOR1VBR0VTLkVTLCBMQU5HVUFHRVMuRU5dO1xuXG4gICAgZm9yIChjb25zdCBwcmVmZXJyZWQgb2YgcHJlZmVycmVkT3JkZXIpIHtcbiAgICAgIGlmICh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5pbmNsdWRlcyhwcmVmZXJyZWQpKSB7XG4gICAgICAgIHJldHVybiBwcmVmZXJyZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlmIGEgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlIGluIHRoZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxhbmd1YWdlKGxhbmc6IExhbmdPcHRpb24gfCBudWxsKTogTGFuZ09wdGlvbiB8IG51bGwge1xuICAgIGlmICghbGFuZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmcpID8gbGFuZyA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiZXN0IGF2YWlsYWJsZSBsYW5ndWFnZSBmb3IgYSBjb21wb25lbnQgYW5kIGtleS5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncy5cbiAgICovXG4gIHByaXZhdGUgZ2V0QmVzdEF2YWlsYWJsZUNvbnRlbnQoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcmVxdWVzdGVkTGFuZzogTGFuZ09wdGlvblxuICApOiB7XG4gICAgY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjdHVhbExhbmc6IExhbmdPcHRpb247XG4gICAgc2hvdWxkV2FybjogYm9vbGVhbjtcbiAgfSB7XG4gICAgY29uc3QgY29tcG9uZW50Q29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuXG4gICAgaWYgKCFjb21wb25lbnRDb250ZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiB1bmRlZmluZWQsXG4gICAgICAgIGFjdHVhbExhbmc6IHJlcXVlc3RlZExhbmcsXG4gICAgICAgIHNob3VsZFdhcm46IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUcnkgcmVxdWVzdGVkIGxhbmd1YWdlIGZpcnN0XG4gICAgY29uc3QgcmVxdWVzdGVkQ29udGVudCA9IGNvbXBvbmVudENvbnRlbnQuQ29udGVudFtyZXF1ZXN0ZWRMYW5nXTtcbiAgICBpZiAocmVxdWVzdGVkQ29udGVudD8uW2tleV0pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IHJlcXVlc3RlZENvbnRlbnRba2V5XSxcbiAgICAgICAgYWN0dWFsTGFuZzogcmVxdWVzdGVkTGFuZyxcbiAgICAgICAgc2hvdWxkV2FybjogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIExhbmd1YWdlIG5vdCBhdmFpbGFibGUsIHRyeSBmYWxsYmFja3NcbiAgICBjb25zdCB3YXJuaW5nS2V5ID0gYCR7Y2xhc3NOYW1lfS4ke2tleX0uJHtyZXF1ZXN0ZWRMYW5nfWA7XG4gICAgY29uc3Qgc2hvdWxkV2FybiA9ICF0aGlzLndhcm5lZE1pc3NpbmdMYW5ndWFnZXMuaGFzKHdhcm5pbmdLZXkpO1xuXG4gICAgaWYgKHNob3VsZFdhcm4pIHtcbiAgICAgIHRoaXMud2FybmVkTWlzc2luZ0xhbmd1YWdlcy5hZGQod2FybmluZ0tleSk7XG4gICAgfVxuXG4gICAgLy8gVHJ5IGRlZmF1bHQgbGFuZ3VhZ2VcbiAgICBpZiAocmVxdWVzdGVkTGFuZyAhPT0gdGhpcy5kZWZhdWx0TGFuZykge1xuICAgICAgY29uc3QgZGVmYXVsdENvbnRlbnQgPSBjb21wb25lbnRDb250ZW50LkNvbnRlbnRbdGhpcy5kZWZhdWx0TGFuZ107XG4gICAgICBpZiAoZGVmYXVsdENvbnRlbnQ/LltrZXldKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogZGVmYXVsdENvbnRlbnRba2V5XSxcbiAgICAgICAgICBhY3R1YWxMYW5nOiB0aGlzLmRlZmF1bHRMYW5nLFxuICAgICAgICAgIHNob3VsZFdhcm4sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJ5IGZpcnN0IGF2YWlsYWJsZSBsYW5ndWFnZVxuICAgIGZvciAoY29uc3QgYXZhaWxhYmxlTGFuZyBvZiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYXZhaWxhYmxlQ29udGVudCA9IGNvbXBvbmVudENvbnRlbnQuQ29udGVudFthdmFpbGFibGVMYW5nXTtcbiAgICAgIGlmIChhdmFpbGFibGVDb250ZW50Py5ba2V5XSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IGF2YWlsYWJsZUNvbnRlbnRba2V5XSxcbiAgICAgICAgICBhY3R1YWxMYW5nOiBhdmFpbGFibGVMYW5nLFxuICAgICAgICAgIHNob3VsZFdhcm4sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIGFjdHVhbExhbmc6IHJlcXVlc3RlZExhbmcsXG4gICAgICBzaG91bGRXYXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjdXJyZW50IGxhbmd1YWdlIHdoZW5ldmVyIGl0IGNoYW5nZXMuXG4gICAqIFVzZSB0aGlzIHRvIHN1YnNjcmliZSB0byBsYW5ndWFnZSBjaGFuZ2VzIGluIGNvbXBvbmVudHMuXG4gICAqL1xuICBnZXQgY3VycmVudExhbmckKCk6IE9ic2VydmFibGU8TGFuZ09wdGlvbj4ge1xuICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZS5jdXJyZW50TGFuZyQ6IENyZWF0aW5nIG9ic2VydmFibGUnKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmcuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHRhcChsYW5nID0+IGNvbnNvbGUubG9nKGBMYW5nU2VydmljZS5jdXJyZW50TGFuZyQ6IEVtaXR0aW5nIGxhbmd1YWdlOiAke2xhbmd9YCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpIC8vIEVuc3VyZSBuZXcgc3Vic2NyaWJlcnMgZ2V0IHRoZSBjdXJyZW50IHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc3luY2hyb25vdXNseS5cbiAgICovXG4gIGdldCBjdXJyZW50TGFuZygpOiBMYW5nT3B0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmcudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgZGV0ZWN0ZWQgZnJvbSBjb250ZW50LlxuICAgKi9cbiAgZ2V0IGF2YWlsYWJsZUxhbmdzKCk6IExhbmdPcHRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmF2YWlsYWJsZUxhbmd1YWdlc107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlLlxuICAgKi9cbiAgZ2V0IGRlZmF1bHRMYW5ndWFnZSgpOiBMYW5nT3B0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgYW5kIHBlcnNpc3QgaXQgdG8gbG9jYWxTdG9yYWdlLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB1cGRhdGVzIGluIGFsbCByZWFjdGl2ZSBjb250ZW50IHN1YnNjcmlwdGlvbnMuXG4gICAqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBsYW5ndWFnZSBpcyBhdmFpbGFibGUgYW5kIHdhcm5zIGlmIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gc2V0XG4gICAqL1xuICBzZXRMYW5nKGxhbmc6IExhbmdPcHRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBMYW5nU2VydmljZTogTGFuZ3VhZ2UgXCIke2xhbmd9XCIgaXMgbm90IGF2YWlsYWJsZS4gQXZhaWxhYmxlIGxhbmd1YWdlczpgLFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgKTtcbiAgICAgIGNvbnNvbGUud2FybihgTGFuZ1NlcnZpY2U6IEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IGxhbmd1YWdlIFwiJHt0aGlzLmRlZmF1bHRMYW5nfVwiYCk7XG4gICAgICBsYW5nID0gdGhpcy5kZWZhdWx0TGFuZztcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTGFuZy5uZXh0KGxhbmcpO1xuICAgIExvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0PExhbmdPcHRpb24+KExBTkcsIGxhbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb250ZW50IGZvciBhIGNvbXBvbmVudCBjbGFzcyBhbmQga2V5IChsZWdhY3kgbWV0aG9kKS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldFRleHQoKSBvciBnZXRDb250ZW50KCkgZm9yIGJldHRlciB0eXBlIHNhZmV0eVxuICAgKi9cbiAgVGV4dChjbGFzc05hbWU6IHN0cmluZyk6IExhbmd1YWdlVGV4dCB7XG4gICAgY29uc3QgY29tcG9uZW50Q29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuICAgIHJldHVybiBjb21wb25lbnRDb250ZW50Py5Db250ZW50W3RoaXMuc2VsZWN0ZWRMYW5nLnZhbHVlXSB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgY29udGVudCBzdHJpbmcgc3luY2hyb25vdXNseSBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gICAqIFByb3ZpZGVzIGludGVsbGlnZW50IGZhbGxiYWNrIHdpdGggd2FybmluZ3MgZm9yIG1pc3NpbmcgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgdGV4dCBrZXlcbiAgICogQHBhcmFtIGZhbGxiYWNrIC0gT3B0aW9uYWwgZmFsbGJhY2sgdGV4dCBpZiBrZXkgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIFRoZSB0ZXh0IHN0cmluZyBvciBmYWxsYmFja1xuICAgKi9cbiAgZ2V0VGV4dChjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJlc3RBdmFpbGFibGVDb250ZW50KGNsYXNzTmFtZSwga2V5LCB0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZSk7XG5cbiAgICBpZiAocmVzdWx0LnNob3VsZFdhcm4gJiYgcmVzdWx0LmFjdHVhbExhbmcgIT09IHRoaXMuc2VsZWN0ZWRMYW5nLnZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBMYW5nU2VydmljZTogQ29udGVudCBcIiR7Y2xhc3NOYW1lfS4ke2tleX1cIiBub3QgYXZhaWxhYmxlIGluIFwiJHt0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZX1cIi5gLFxuICAgICAgICBgVXNpbmcgXCIke3Jlc3VsdC5hY3R1YWxMYW5nfVwiIGluc3RlYWQuIEF2YWlsYWJsZSBsYW5ndWFnZXM6YCxcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5jb250ZW50IHx8IGZhbGxiYWNrIHx8IGBbJHtjbGFzc05hbWV9LiR7a2V5fV1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHJlYWN0aXZlIE9ic2VydmFibGUgZm9yIGEgc3BlY2lmaWMgdGV4dCBrZXkgdGhhdCB1cGRhdGVzIHdoZW4gbGFuZ3VhZ2UgY2hhbmdlcy5cbiAgICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBjb21wb25lbnRzIHRoYXQgbmVlZCByZWFjdGl2ZSBjb250ZW50LlxuICAgKiBQcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFjayB3aXRoIHdhcm5pbmdzIGZvciBtaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEBwYXJhbSBmYWxsYmFjayAtIE9wdGlvbmFsIGZhbGxiYWNrIHRleHQgaWYga2V5IGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHRleHQgc3RyaW5nIHdoZW5ldmVyIGxhbmd1YWdlIGNoYW5nZXNcbiAgICovXG4gIGdldENvbnRlbnQoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc29sZS5sb2coYExhbmdTZXJ2aWNlLmdldENvbnRlbnQ6IENyZWF0aW5nIG9ic2VydmFibGUgZm9yICR7Y2xhc3NOYW1lfS4ke2tleX1gKTtcblxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nJC5waXBlKFxuICAgICAgbWFwKGxhbmcgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgTGFuZ1NlcnZpY2UuZ2V0Q29udGVudDogTGFuZ3VhZ2UgY2hhbmdlZCB0byAke2xhbmd9IGZvciAke2NsYXNzTmFtZX0uJHtrZXl9YCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0QmVzdEF2YWlsYWJsZUNvbnRlbnQoY2xhc3NOYW1lLCBrZXksIGxhbmcpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuc2hvdWxkV2FybiAmJiByZXN1bHQuYWN0dWFsTGFuZyAhPT0gbGFuZykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBMYW5nU2VydmljZTogQ29udGVudCBcIiR7Y2xhc3NOYW1lfS4ke2tleX1cIiBub3QgYXZhaWxhYmxlIGluIFwiJHtsYW5nfVwiLmAsXG4gICAgICAgICAgICBgVXNpbmcgXCIke3Jlc3VsdC5hY3R1YWxMYW5nfVwiIGluc3RlYWQuIEF2YWlsYWJsZSBsYW5ndWFnZXM6YCxcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gcmVzdWx0LmNvbnRlbnQgfHwgZmFsbGJhY2sgfHwgYFske2NsYXNzTmFtZX0uJHtrZXl9XWA7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMYW5nU2VydmljZS5nZXRDb250ZW50OiBSZXR1cm5pbmcgXCIke2ZpbmFsUmVzdWx0fVwiIGZvciAke2NsYXNzTmFtZX0uJHtrZXl9YCk7XG4gICAgICAgIHJldHVybiBmaW5hbFJlc3VsdDtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIGNvbnRlbnQgZm9yIG11bHRpcGxlIGtleXMgYXQgb25jZS5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleXMgLSBBcnJheSBvZiB0ZXh0IGtleXMgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIG9iamVjdCB3aXRoIGFsbCByZXF1ZXN0ZWQga2V5c1xuICAgKi9cbiAgZ2V0TXVsdGlwbGVDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXlzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nJC5waXBlKFxuICAgICAgbWFwKGxhbmcgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy5nZXRCZXN0QXZhaWxhYmxlQ29udGVudChjbGFzc05hbWUsIGtleSwgbGFuZyk7XG5cbiAgICAgICAgICBpZiAoY29udGVudFJlc3VsdC5zaG91bGRXYXJuICYmIGNvbnRlbnRSZXN1bHQuYWN0dWFsTGFuZyAhPT0gbGFuZykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7bGFuZ31cIi5gLFxuICAgICAgICAgICAgICBgVXNpbmcgXCIke2NvbnRlbnRSZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBjb250ZW50UmVzdWx0LmNvbnRlbnQgfHwgYFske2NsYXNzTmFtZX0uJHtrZXl9XWA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnRlbnQga2V5IGV4aXN0cyBmb3IgYSBjb21wb25lbnQgaW4gYW55IGF2YWlsYWJsZSBsYW5ndWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSBleGlzdHMgaW4gYW55IGxhbmd1YWdlXG4gICAqL1xuICBoYXNDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsYXNzQ29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuICAgIGlmICghY2xhc3NDb250ZW50KSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjbGFzc0NvbnRlbnQuQ29udGVudCkuc29tZShcbiAgICAgIGxhbmdDb250ZW50ID0+IGxhbmdDb250ZW50ICYmIHR5cGVvZiBsYW5nQ29udGVudFtrZXldID09PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb250ZW50IGtleSBleGlzdHMgZm9yIGEgY29tcG9uZW50IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0ZXh0IGtleVxuICAgKiBAcGFyYW0gbGFuZyAtIFRoZSBsYW5ndWFnZSB0byBjaGVjayAoZGVmYXVsdHMgdG8gY3VycmVudCBsYW5ndWFnZSlcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlXG4gICAqL1xuICBoYXNDb250ZW50SW5MYW5ndWFnZShjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGxhbmc/OiBMYW5nT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFyZ2V0TGFuZyA9IGxhbmcgfHwgdGhpcy5jdXJyZW50TGFuZztcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXT8uQ29udGVudFt0YXJnZXRMYW5nXTtcbiAgICByZXR1cm4gY2xhc3NDb250ZW50ICYmIHR5cGVvZiBjbGFzc0NvbnRlbnRba2V5XSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF2YWlsYWJsZSBsYW5ndWFnZXMgZm9yIGEgc3BlY2lmaWMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGxhbmd1YWdlIGNvZGVzIGF2YWlsYWJsZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzRm9yQ29tcG9uZW50KGNsYXNzTmFtZTogc3RyaW5nKTogTGFuZ09wdGlvbltdIHtcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzQ29udGVudC5Db250ZW50KS5maWx0ZXIoXG4gICAgICBsYW5nID0+IGNsYXNzQ29udGVudC5Db250ZW50W2xhbmddICYmIE9iamVjdC5rZXlzKGNsYXNzQ29udGVudC5Db250ZW50W2xhbmddKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWlzc2luZyBjb250ZW50IGtleXMgZm9yIGEgY29tcG9uZW50IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gICAqIFVzZWZ1bCBmb3IgaWRlbnRpZnlpbmcgaW5jb21wbGV0ZSB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gY2hlY2tcbiAgICogQHBhcmFtIHJlZmVyZW5jZUxhbmcgLSBUaGUgcmVmZXJlbmNlIGxhbmd1YWdlIHRvIGNvbXBhcmUgYWdhaW5zdCAoZGVmYXVsdHMgdG8gZGVmYXVsdCBsYW5ndWFnZSlcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWlzc2luZyBrZXlzXG4gICAqL1xuICBnZXRNaXNzaW5nQ29udGVudEtleXMoY2xhc3NOYW1lOiBzdHJpbmcsIGxhbmc6IExhbmdPcHRpb24sIHJlZmVyZW5jZUxhbmc/OiBMYW5nT3B0aW9uKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlZkxhbmcgPSByZWZlcmVuY2VMYW5nIHx8IHRoaXMuZGVmYXVsdExhbmc7XG4gICAgY29uc3QgY2xhc3NDb250ZW50ID0gdGhpcy5jb250ZW50W2NsYXNzTmFtZV07XG5cbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlQ29udGVudCA9IGNsYXNzQ29udGVudC5Db250ZW50W3JlZkxhbmddIHx8IHt9O1xuICAgIGNvbnN0IHRhcmdldENvbnRlbnQgPSBjbGFzc0NvbnRlbnQuQ29udGVudFtsYW5nXSB8fCB7fTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZWZlcmVuY2VDb250ZW50KS5maWx0ZXIoXG4gICAgICBrZXkgPT4gIXRhcmdldENvbnRlbnRba2V5XSB8fCB0eXBlb2YgdGFyZ2V0Q29udGVudFtrZXldICE9PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvLyBMZWdhY3kgZ2V0dGVycy9zZXR0ZXJzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIGdldCBMYW5nKCk6IExhbmdPcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nO1xuICB9XG5cbiAgc2V0IExhbmcobGFuZzogTGFuZ09wdGlvbikge1xuICAgIHRoaXMuc2V0TGFuZyhsYW5nKTtcbiAgfVxufVxuIl19
@@ -37,10 +37,16 @@ import { map } from 'rxjs';
37
37
  export function fromContent(langService, config) {
38
38
  // Use _global as default className if not provided
39
39
  const finalClassName = config.className || '_global';
40
+ console.log(`fromContent: Creating observable for ${finalClassName}.${config.key}`);
40
41
  const contentObservable = langService.getContent(finalClassName, config.key, config.fallback);
41
42
  // If interpolation is provided, apply it
42
43
  if (config.interpolation) {
43
- return contentObservable.pipe(map(content => interpolateContent(content, config.interpolation)));
44
+ console.log(`fromContent: Applying interpolation for ${finalClassName}.${config.key}`, config.interpolation);
45
+ return contentObservable.pipe(map(content => {
46
+ const interpolated = interpolateContent(content, config.interpolation);
47
+ console.log(`fromContent: Interpolated result for ${finalClassName}.${config.key}: "${interpolated}"`);
48
+ return interpolated;
49
+ }));
44
50
  }
45
51
  return contentObservable;
46
52
  }
@@ -183,4 +189,4 @@ export function createContentHelper(langService, className) {
183
189
  },
184
190
  };
185
191
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC91dGlscy9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFxQ3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxXQUF3QixFQUFFLE1BQXFCO0lBQ3pFLG1EQUFtRDtJQUNuRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQztJQUVyRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTlGLHlDQUF5QztJQUN6QyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FDM0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsV0FBd0IsRUFDeEIsTUFBaUM7SUFFakMsNkNBQTZDO0lBQzdDLE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFdBQXdCLEVBQ3hCLFNBQWlCLEVBQ2pCLElBQWM7SUFFZCxPQUFPLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQWUsRUFDZixNQUF3QztJQUV4QyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sT0FBTyxDQUFDO0lBRTVCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUM1RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDZCxDQUFDO0FBc0JEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsV0FBd0IsRUFBRSxTQUFpQjtJQUM3RSxPQUFPO1FBQ0w7O1dBRUc7UUFDSCxHQUFHLENBQUMsR0FBVyxFQUFFLFFBQWlCO1lBQ2hDLE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQ7O1dBRUc7UUFDSCxXQUFXLENBQUMsSUFBYztZQUN4QixPQUFPLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVEOztXQUVHO1FBQ0gsb0JBQW9CLENBQ2xCLEdBQVcsRUFDWCxhQUE4QyxFQUM5QyxRQUFpQjtZQUVqQixPQUFPLDRCQUE0QixDQUFDLFdBQVcsRUFBRTtnQkFDL0MsU0FBUztnQkFDVCxHQUFHO2dCQUNILGFBQWE7Z0JBQ2IsUUFBUTthQUNULENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7V0FFRztRQUNILE9BQU8sQ0FBQyxHQUFXLEVBQUUsUUFBaUI7WUFDcEMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVEOztXQUVHO1FBQ0gsVUFBVSxDQUFDLEdBQVc7WUFDcEIsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIENvbnRlbnQgdXRpbGl0aWVzIGZvciByZWFjdGl2ZSB0ZXh0IGJpbmRpbmcgaW4gY29tcG9uZW50cy5cbiAqXG4gKiBUaGVzZSB1dGlsaXRpZXMgcHJvdmlkZSBhIGNvbnZlbmllbnQgd2F5IHRvIGJpbmQgY29tcG9uZW50IHByb3BlcnRpZXNcbiAqIHRvIGxhbmd1YWdlIGNvbnRlbnQgdGhhdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgd2hlbiB0aGUgbGFuZ3VhZ2UgY2hhbmdlcy5cbiAqL1xuXG4vKipcbiAqIFVuaWZpZWQgY29uZmlndXJhdGlvbiBmb3IgY29udGVudCBiaW5kaW5nIHdpdGggb3B0aW9uYWwgaW50ZXJwb2xhdGlvbi5cbiAqIFN1cHBvcnRzIGJvdGggc2ltcGxlIGNvbnRlbnQgcmV0cmlldmFsIGFuZCBjb250ZW50IHdpdGggZHluYW1pYyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudENvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWUgKHVzZWQgZm9yIGNvbnRlbnQgbG9va3VwKS5cbiAgICogSWYgb21pdHRlZCwgc2VhcmNoZXMgaW4gZ2xvYmFsIGNvbnRlbnQgKF9nbG9iYWwgbmFtZXNwYWNlKS5cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBjb250ZW50IGtleSB0byByZXRyaWV2ZSAqL1xuICBrZXk6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGZhbGxiYWNrIHRleHQgaWYgY29udGVudCBpcyBub3QgZm91bmQgKi9cbiAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBvYmplY3Qgd2l0aCB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgaW50byB0aGUgY29udGVudCBzdHJpbmcgKi9cbiAgaW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIENvbnRlbnRDb25maWcgd2l0aCBpbnRlcnBvbGF0aW9uIHByb3BlcnR5IGluc3RlYWQuXG4gKiBUaGlzIGludGVyZmFjZSBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVycG9sYXRlZENvbnRlbnRDb25maWcgZXh0ZW5kcyBDb250ZW50Q29uZmlnIHtcbiAgLyoqIE9iamVjdCB3aXRoIHZhbHVlcyB0byBpbnRlcnBvbGF0ZSBpbnRvIHRoZSBjb250ZW50IHN0cmluZyAqL1xuICBpbnRlcnBvbGF0aW9uPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSByZWFjdGl2ZSBjb250ZW50IG9ic2VydmFibGUgZnJvbSBhIGNvbnRlbnQga2V5LlxuICogVGhpcyBpcyB0aGUgcHJpbWFyeSB1dGlsaXR5IGZvciB0aGUgYGZyb21Db250ZW50YCBwYXR0ZXJuIHdpdGggdW5pZmllZCBzdXBwb3J0XG4gKiBmb3IgYm90aCBzaW1wbGUgY29udGVudCBhbmQgY29udGVudCB3aXRoIGludGVycG9sYXRpb24uXG4gKlxuICogQHBhcmFtIGxhbmdTZXJ2aWNlIC0gVGhlIGxhbmd1YWdlIHNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBjb25maWcgLSBDb250ZW50IGNvbmZpZ3VyYXRpb24gd2l0aCBvcHRpb25hbCBpbnRlcnBvbGF0aW9uXG4gKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNvbnRlbnQgc3RyaW5nIGFuZCB1cGRhdGVzIG9uIGxhbmd1YWdlIGNoYW5nZVxuICpcbiAqIEBleGFtcGxlIFNpbXBsZSBjb250ZW50OlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29tcG9uZW50LXNwZWNpZmljIGNvbnRlbnRcbiAqIHRoaXMudGl0bGUkID0gZnJvbUNvbnRlbnQodGhpcy5sYW5nU2VydmljZSwge1xuICogICBjbGFzc05hbWU6ICdIZWFkZXJDb21wb25lbnQnLFxuICogICBrZXk6ICd0aXRsZScsXG4gKiAgIGZhbGxiYWNrOiAnRGVmYXVsdCBUaXRsZSdcbiAqIH0pO1xuICpcbiAqIC8vIEdsb2JhbCBjb250ZW50IChubyBjbGFzc05hbWUgbmVlZGVkKVxuICogdGhpcy5zYXZlQnV0dG9uJCA9IGZyb21Db250ZW50KHRoaXMubGFuZ1NlcnZpY2UsIHtcbiAqICAga2V5OiAnc2F2ZSdcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ29udGVudCB3aXRoIGludGVycG9sYXRpb246XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDb250ZW50OiBcIkhlbGxvIHtuYW1lfSwgeW91IGhhdmUge2NvdW50fSBtZXNzYWdlc1wiXG4gKiB0aGlzLmdyZWV0aW5nJCA9IGZyb21Db250ZW50KHRoaXMubGFuZ1NlcnZpY2UsIHtcbiAqICAgY2xhc3NOYW1lOiAnV2VsY29tZUNvbXBvbmVudCcsXG4gKiAgIGtleTogJ2dyZWV0aW5nJyxcbiAqICAgaW50ZXJwb2xhdGlvbjogeyBuYW1lOiAnSm9obicsIGNvdW50OiA1IH1cbiAqIH0pO1xuICogLy8gUmVzdWx0cyBpbjogXCJIZWxsbyBKb2huLCB5b3UgaGF2ZSA1IG1lc3NhZ2VzXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUNvbnRlbnQobGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlLCBjb25maWc6IENvbnRlbnRDb25maWcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAvLyBVc2UgX2dsb2JhbCBhcyBkZWZhdWx0IGNsYXNzTmFtZSBpZiBub3QgcHJvdmlkZWRcbiAgY29uc3QgZmluYWxDbGFzc05hbWUgPSBjb25maWcuY2xhc3NOYW1lIHx8ICdfZ2xvYmFsJztcblxuICBjb25zdCBjb250ZW50T2JzZXJ2YWJsZSA9IGxhbmdTZXJ2aWNlLmdldENvbnRlbnQoZmluYWxDbGFzc05hbWUsIGNvbmZpZy5rZXksIGNvbmZpZy5mYWxsYmFjayk7XG5cbiAgLy8gSWYgaW50ZXJwb2xhdGlvbiBpcyBwcm92aWRlZCwgYXBwbHkgaXRcbiAgaWYgKGNvbmZpZy5pbnRlcnBvbGF0aW9uKSB7XG4gICAgcmV0dXJuIGNvbnRlbnRPYnNlcnZhYmxlLnBpcGUoXG4gICAgICBtYXAoY29udGVudCA9PiBpbnRlcnBvbGF0ZUNvbnRlbnQoY29udGVudCwgY29uZmlnLmludGVycG9sYXRpb24pKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudE9ic2VydmFibGU7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVhY3RpdmUgY29udGVudCBvYnNlcnZhYmxlIHdpdGggaW50ZXJwb2xhdGlvbiBzdXBwb3J0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSBmcm9tQ29udGVudCgpIHdpdGggaW50ZXJwb2xhdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkLlxuICogVGhpcyBtZXRob2QgaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBAcGFyYW0gbGFuZ1NlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSBpbnN0YW5jZVxuICogQHBhcmFtIGNvbmZpZyAtIEludGVycG9sYXRlZCBjb250ZW50IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgaW50ZXJwb2xhdGVkIGNvbnRlbnQgc3RyaW5nXG4gKlxuICogQGV4YW1wbGUgTWlncmF0aW9uOlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gT0xEIChkZXByZWNhdGVkKTpcbiAqIHRoaXMuZ3JlZXRpbmckID0gZnJvbUNvbnRlbnRXaXRoSW50ZXJwb2xhdGlvbih0aGlzLmxhbmdTZXJ2aWNlLCB7XG4gKiAgIGNsYXNzTmFtZTogJ1dlbGNvbWVDb21wb25lbnQnLFxuICogICBrZXk6ICdncmVldGluZycsXG4gKiAgIGludGVycG9sYXRpb246IHsgbmFtZTogJ0pvaG4nLCBjb3VudDogNSB9XG4gKiB9KTtcbiAqXG4gKiAvLyBORVcgKHJlY29tbWVuZGVkKTpcbiAqIHRoaXMuZ3JlZXRpbmckID0gZnJvbUNvbnRlbnQodGhpcy5sYW5nU2VydmljZSwge1xuICogICBjbGFzc05hbWU6ICdXZWxjb21lQ29tcG9uZW50JyxcbiAqICAga2V5OiAnZ3JlZXRpbmcnLFxuICogICBpbnRlcnBvbGF0aW9uOiB7IG5hbWU6ICdKb2huJywgY291bnQ6IDUgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21Db250ZW50V2l0aEludGVycG9sYXRpb24oXG4gIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSxcbiAgY29uZmlnOiBJbnRlcnBvbGF0ZWRDb250ZW50Q29uZmlnXG4pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAvLyBEZWxlZ2F0ZSB0byB0aGUgdW5pZmllZCBmcm9tQ29udGVudCBtZXRob2RcbiAgcmV0dXJuIGZyb21Db250ZW50KGxhbmdTZXJ2aWNlLCBjb25maWcpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBtdWx0aXBsZSByZWFjdGl2ZSBjb250ZW50IG9ic2VydmFibGVzIGF0IG9uY2UuXG4gKiBVc2VmdWwgd2hlbiBhIGNvbXBvbmVudCBuZWVkcyBzZXZlcmFsIGNvbnRlbnQgc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gbGFuZ1NlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSBpbnN0YW5jZVxuICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICogQHBhcmFtIGtleXMgLSBBcnJheSBvZiBjb250ZW50IGtleXMgdG8gcmV0cmlldmVcbiAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBvYmplY3Qgd2l0aCBhbGwgcmVxdWVzdGVkIGNvbnRlbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdGhpcy5jb250ZW50JCA9IGZyb21NdWx0aXBsZUNvbnRlbnQodGhpcy5sYW5nU2VydmljZSwgJ0Zvcm1Db21wb25lbnQnLCBbXG4gKiAgICd0aXRsZScsICdzdWJtaXRCdXR0b24nLCAnY2FuY2VsQnV0dG9uJ1xuICogXSk7XG4gKlxuICogLy8gSW4gdGVtcGxhdGVcbiAqIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50JCB8IGFzeW5jIGFzIGNvbnRlbnRcIj5cbiAqICAgPGgyPnt7IGNvbnRlbnQudGl0bGUgfX08L2gyPlxuICogICA8YnV0dG9uPnt7IGNvbnRlbnQuc3VibWl0QnV0dG9uIH19PC9idXR0b24+XG4gKiAgIDxidXR0b24+e3sgY29udGVudC5jYW5jZWxCdXR0b24gfX08L2J1dHRvbj5cbiAqIDwvbmctY29udGFpbmVyPlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTXVsdGlwbGVDb250ZW50KFxuICBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UsXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuICBrZXlzOiBzdHJpbmdbXVxuKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIHJldHVybiBsYW5nU2VydmljZS5nZXRNdWx0aXBsZUNvbnRlbnQoY2xhc3NOYW1lLCBrZXlzKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBjb250ZW50IHN0cmluZy5cbiAqIFJlcGxhY2VzIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybWF0IHtrZXl9IHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnNcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3Qgd2l0aCB2YWx1ZXMgdG8gaW50ZXJwb2xhdGVcbiAqIEByZXR1cm5zIFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IGludGVycG9sYXRlQ29udGVudChcIkhlbGxvIHtuYW1lfSFcIiwgeyBuYW1lOiBcIldvcmxkXCIgfSk7XG4gKiAvLyBSZXR1cm5zOiBcIkhlbGxvIFdvcmxkIVwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVycG9sYXRlQ29udGVudChcbiAgY29udGVudDogc3RyaW5nLFxuICB2YWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG4pOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlcykgcmV0dXJuIGNvbnRlbnQ7XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlcykucmVkdWNlKChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHJldHVybiByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxceyR7a2V5fVxcXFx9YCwgJ2cnKSwgU3RyaW5nKHZhbHVlKSk7XG4gIH0sIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIFR5cGUtc2FmZSBjb250ZW50IGtleSBidWlsZGVyIGZvciBiZXR0ZXIgSURFIHN1cHBvcnQuXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSB0eXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5zdXJlIGNvbnRlbnQga2V5cyBleGlzdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRGVmaW5lIHlvdXIgY29tcG9uZW50J3MgY29udGVudCBrZXlzXG4gKiBpbnRlcmZhY2UgTXlDb21wb25lbnRDb250ZW50IHtcbiAqICAgdGl0bGU6IHN0cmluZztcbiAqICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAqICAgc3VibWl0QnV0dG9uOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogLy8gVXNlIHdpdGggdHlwZSBzYWZldHlcbiAqIGNvbnN0IHRpdGxlS2V5OiBDb250ZW50S2V5PE15Q29tcG9uZW50Q29udGVudD4gPSAndGl0bGUnOyAvLyDinJMgVmFsaWRcbiAqIGNvbnN0IGludmFsaWRLZXk6IENvbnRlbnRLZXk8TXlDb21wb25lbnRDb250ZW50PiA9ICdpbnZhbGlkJzsgLy8g4pyXIFR5cGUgZXJyb3JcbiAqIGBgYFxuICovXG5leHBvcnQgdHlwZSBDb250ZW50S2V5PFQ+ID0ga2V5b2YgVCAmIHN0cmluZztcblxuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGNvbnRlbnQgaGVscGVyIGJvdW5kIHRvIGEgc3BlY2lmaWMgY29tcG9uZW50IGNsYXNzLlxuICogVGhpcyBjcmVhdGVzIGEgbW9yZSBjb252ZW5pZW50IEFQSSBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgbXVsdGlwbGUgY29udGVudCBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSBsYW5nU2VydmljZSAtIFRoZSBsYW5ndWFnZSBzZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBjb252ZW5pZW50IG1ldGhvZHMgZm9yIGNvbnRlbnQgcmV0cmlldmFsXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgY29udGVudCA9IGNyZWF0ZUNvbnRlbnRIZWxwZXIodGhpcy5sYW5nU2VydmljZSwgJ015Q29tcG9uZW50Jyk7XG4gKlxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSkge31cbiAqXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIHRoaXMudGl0bGUkID0gdGhpcy5jb250ZW50LmdldCgndGl0bGUnKTtcbiAqICAgICB0aGlzLmFsbENvbnRlbnQkID0gdGhpcy5jb250ZW50LmdldE11bHRpcGxlKFsndGl0bGUnLCAnZGVzY3JpcHRpb24nXSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udGVudEhlbHBlcihsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UsIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogR2V0IGEgc2luZ2xlIGNvbnRlbnQgc3RyaW5nIHJlYWN0aXZlbHkuXG4gICAgICovXG4gICAgZ2V0KGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gZnJvbUNvbnRlbnQobGFuZ1NlcnZpY2UsIHsgY2xhc3NOYW1lLCBrZXksIGZhbGxiYWNrIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgbXVsdGlwbGUgY29udGVudCBzdHJpbmdzIHJlYWN0aXZlbHkuXG4gICAgICovXG4gICAgZ2V0TXVsdGlwbGUoa2V5czogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICAgIHJldHVybiBmcm9tTXVsdGlwbGVDb250ZW50KGxhbmdTZXJ2aWNlLCBjbGFzc05hbWUsIGtleXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgY29udGVudCB3aXRoIGludGVycG9sYXRpb24uXG4gICAgICovXG4gICAgZ2V0V2l0aEludGVycG9sYXRpb24oXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIGludGVycG9sYXRpb246IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4sXG4gICAgICBmYWxsYmFjaz86IHN0cmluZ1xuICAgICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gZnJvbUNvbnRlbnRXaXRoSW50ZXJwb2xhdGlvbihsYW5nU2VydmljZSwge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGtleSxcbiAgICAgICAgaW50ZXJwb2xhdGlvbixcbiAgICAgICAgZmFsbGJhY2ssXG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc2luZ2xlIGNvbnRlbnQgc3RyaW5nIHN5bmNocm9ub3VzbHkgKGN1cnJlbnQgbGFuZ3VhZ2Ugb25seSkuXG4gICAgICovXG4gICAgZ2V0VGV4dChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGxhbmdTZXJ2aWNlLmdldFRleHQoY2xhc3NOYW1lLCBrZXksIGZhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBjb250ZW50IGtleSBleGlzdHMuXG4gICAgICovXG4gICAgaGFzQ29udGVudChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGxhbmdTZXJ2aWNlLmhhc0NvbnRlbnQoY2xhc3NOYW1lLCBrZXkpO1xuICAgIH0sXG4gIH07XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC91dGlscy9jb250ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFxQ3ZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxXQUF3QixFQUFFLE1BQXFCO0lBQ3pFLG1EQUFtRDtJQUNuRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQztJQUVyRCxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxjQUFjLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFcEYsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU5Rix5Q0FBeUM7SUFDekMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FDVCwyQ0FBMkMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFDekUsTUFBTSxDQUFDLGFBQWEsQ0FDckIsQ0FBQztRQUNGLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsd0NBQXdDLGNBQWMsSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLFlBQVksR0FBRyxDQUMxRixDQUFDO1lBQ0YsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLGlCQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQzFDLFdBQXdCLEVBQ3hCLE1BQWlDO0lBRWpDLDZDQUE2QztJQUM3QyxPQUFPLFdBQVcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxXQUF3QixFQUN4QixTQUFpQixFQUNqQixJQUFjO0lBRWQsT0FBTyxXQUFXLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUFlLEVBQ2YsTUFBd0M7SUFFeEMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUU1QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDNUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQXNCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFdBQXdCLEVBQUUsU0FBaUI7SUFDN0UsT0FBTztRQUNMOztXQUVHO1FBQ0gsR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFpQjtZQUNoQyxPQUFPLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVEOztXQUVHO1FBQ0gsV0FBVyxDQUFDLElBQWM7WUFDeEIsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRDs7V0FFRztRQUNILG9CQUFvQixDQUNsQixHQUFXLEVBQ1gsYUFBOEMsRUFDOUMsUUFBaUI7WUFFakIsT0FBTyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUU7Z0JBQy9DLFNBQVM7Z0JBQ1QsR0FBRztnQkFDSCxhQUFhO2dCQUNiLFFBQVE7YUFDVCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSCxPQUFPLENBQUMsR0FBVyxFQUFFLFFBQWlCO1lBQ3BDLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRDs7V0FFRztRQUNILFVBQVUsQ0FBQyxHQUFXO1lBQ3BCLE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcblxuLyoqXG4gKiBDb250ZW50IHV0aWxpdGllcyBmb3IgcmVhY3RpdmUgdGV4dCBiaW5kaW5nIGluIGNvbXBvbmVudHMuXG4gKlxuICogVGhlc2UgdXRpbGl0aWVzIHByb3ZpZGUgYSBjb252ZW5pZW50IHdheSB0byBiaW5kIGNvbXBvbmVudCBwcm9wZXJ0aWVzXG4gKiB0byBsYW5ndWFnZSBjb250ZW50IHRoYXQgYXV0b21hdGljYWxseSB1cGRhdGVzIHdoZW4gdGhlIGxhbmd1YWdlIGNoYW5nZXMuXG4gKi9cblxuLyoqXG4gKiBVbmlmaWVkIGNvbmZpZ3VyYXRpb24gZm9yIGNvbnRlbnQgYmluZGluZyB3aXRoIG9wdGlvbmFsIGludGVycG9sYXRpb24uXG4gKiBTdXBwb3J0cyBib3RoIHNpbXBsZSBjb250ZW50IHJldHJpZXZhbCBhbmQgY29udGVudCB3aXRoIGR5bmFtaWMgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRDb25maWcge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lICh1c2VkIGZvciBjb250ZW50IGxvb2t1cCkuXG4gICAqIElmIG9taXR0ZWQsIHNlYXJjaGVzIGluIGdsb2JhbCBjb250ZW50IChfZ2xvYmFsIG5hbWVzcGFjZSkuXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29udGVudCBrZXkgdG8gcmV0cmlldmUgKi9cbiAga2V5OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBmYWxsYmFjayB0ZXh0IGlmIGNvbnRlbnQgaXMgbm90IGZvdW5kICovXG4gIGZhbGxiYWNrPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgb2JqZWN0IHdpdGggdmFsdWVzIHRvIGludGVycG9sYXRlIGludG8gdGhlIGNvbnRlbnQgc3RyaW5nICovXG4gIGludGVycG9sYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBDb250ZW50Q29uZmlnIHdpdGggaW50ZXJwb2xhdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkLlxuICogVGhpcyBpbnRlcmZhY2UgaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcnBvbGF0ZWRDb250ZW50Q29uZmlnIGV4dGVuZHMgQ29udGVudENvbmZpZyB7XG4gIC8qKiBPYmplY3Qgd2l0aCB2YWx1ZXMgdG8gaW50ZXJwb2xhdGUgaW50byB0aGUgY29udGVudCBzdHJpbmcgKi9cbiAgaW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVhY3RpdmUgY29udGVudCBvYnNlcnZhYmxlIGZyb20gYSBjb250ZW50IGtleS5cbiAqIFRoaXMgaXMgdGhlIHByaW1hcnkgdXRpbGl0eSBmb3IgdGhlIGBmcm9tQ29udGVudGAgcGF0dGVybiB3aXRoIHVuaWZpZWQgc3VwcG9ydFxuICogZm9yIGJvdGggc2ltcGxlIGNvbnRlbnQgYW5kIGNvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uLlxuICpcbiAqIEBwYXJhbSBsYW5nU2VydmljZSAtIFRoZSBsYW5ndWFnZSBzZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29udGVudCBjb25maWd1cmF0aW9uIHdpdGggb3B0aW9uYWwgaW50ZXJwb2xhdGlvblxuICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjb250ZW50IHN0cmluZyBhbmQgdXBkYXRlcyBvbiBsYW5ndWFnZSBjaGFuZ2VcbiAqXG4gKiBAZXhhbXBsZSBTaW1wbGUgY29udGVudDpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENvbXBvbmVudC1zcGVjaWZpYyBjb250ZW50XG4gKiB0aGlzLnRpdGxlJCA9IGZyb21Db250ZW50KHRoaXMubGFuZ1NlcnZpY2UsIHtcbiAqICAgY2xhc3NOYW1lOiAnSGVhZGVyQ29tcG9uZW50JyxcbiAqICAga2V5OiAndGl0bGUnLFxuICogICBmYWxsYmFjazogJ0RlZmF1bHQgVGl0bGUnXG4gKiB9KTtcbiAqXG4gKiAvLyBHbG9iYWwgY29udGVudCAobm8gY2xhc3NOYW1lIG5lZWRlZClcbiAqIHRoaXMuc2F2ZUJ1dHRvbiQgPSBmcm9tQ29udGVudCh0aGlzLmxhbmdTZXJ2aWNlLCB7XG4gKiAgIGtleTogJ3NhdmUnXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIENvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uOlxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29udGVudDogXCJIZWxsbyB7bmFtZX0sIHlvdSBoYXZlIHtjb3VudH0gbWVzc2FnZXNcIlxuICogdGhpcy5ncmVldGluZyQgPSBmcm9tQ29udGVudCh0aGlzLmxhbmdTZXJ2aWNlLCB7XG4gKiAgIGNsYXNzTmFtZTogJ1dlbGNvbWVDb21wb25lbnQnLFxuICogICBrZXk6ICdncmVldGluZycsXG4gKiAgIGludGVycG9sYXRpb246IHsgbmFtZTogJ0pvaG4nLCBjb3VudDogNSB9XG4gKiB9KTtcbiAqIC8vIFJlc3VsdHMgaW46IFwiSGVsbG8gSm9obiwgeW91IGhhdmUgNSBtZXNzYWdlc1wiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21Db250ZW50KGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSwgY29uZmlnOiBDb250ZW50Q29uZmlnKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgLy8gVXNlIF9nbG9iYWwgYXMgZGVmYXVsdCBjbGFzc05hbWUgaWYgbm90IHByb3ZpZGVkXG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY29uZmlnLmNsYXNzTmFtZSB8fCAnX2dsb2JhbCc7XG5cbiAgY29uc29sZS5sb2coYGZyb21Db250ZW50OiBDcmVhdGluZyBvYnNlcnZhYmxlIGZvciAke2ZpbmFsQ2xhc3NOYW1lfS4ke2NvbmZpZy5rZXl9YCk7XG5cbiAgY29uc3QgY29udGVudE9ic2VydmFibGUgPSBsYW5nU2VydmljZS5nZXRDb250ZW50KGZpbmFsQ2xhc3NOYW1lLCBjb25maWcua2V5LCBjb25maWcuZmFsbGJhY2spO1xuXG4gIC8vIElmIGludGVycG9sYXRpb24gaXMgcHJvdmlkZWQsIGFwcGx5IGl0XG4gIGlmIChjb25maWcuaW50ZXJwb2xhdGlvbikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYGZyb21Db250ZW50OiBBcHBseWluZyBpbnRlcnBvbGF0aW9uIGZvciAke2ZpbmFsQ2xhc3NOYW1lfS4ke2NvbmZpZy5rZXl9YCxcbiAgICAgIGNvbmZpZy5pbnRlcnBvbGF0aW9uXG4gICAgKTtcbiAgICByZXR1cm4gY29udGVudE9ic2VydmFibGUucGlwZShcbiAgICAgIG1hcChjb250ZW50ID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkID0gaW50ZXJwb2xhdGVDb250ZW50KGNvbnRlbnQsIGNvbmZpZy5pbnRlcnBvbGF0aW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYGZyb21Db250ZW50OiBJbnRlcnBvbGF0ZWQgcmVzdWx0IGZvciAke2ZpbmFsQ2xhc3NOYW1lfS4ke2NvbmZpZy5rZXl9OiBcIiR7aW50ZXJwb2xhdGVkfVwiYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVkO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnRPYnNlcnZhYmxlO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJlYWN0aXZlIGNvbnRlbnQgb2JzZXJ2YWJsZSB3aXRoIGludGVycG9sYXRpb24gc3VwcG9ydC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgZnJvbUNvbnRlbnQoKSB3aXRoIGludGVycG9sYXRpb24gcHJvcGVydHkgaW5zdGVhZC5cbiAqIFRoaXMgbWV0aG9kIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogQHBhcmFtIGxhbmdTZXJ2aWNlIC0gVGhlIGxhbmd1YWdlIHNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBjb25maWcgLSBJbnRlcnBvbGF0ZWQgY29udGVudCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGludGVycG9sYXRlZCBjb250ZW50IHN0cmluZ1xuICpcbiAqIEBleGFtcGxlIE1pZ3JhdGlvbjpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIE9MRCAoZGVwcmVjYXRlZCk6XG4gKiB0aGlzLmdyZWV0aW5nJCA9IGZyb21Db250ZW50V2l0aEludGVycG9sYXRpb24odGhpcy5sYW5nU2VydmljZSwge1xuICogICBjbGFzc05hbWU6ICdXZWxjb21lQ29tcG9uZW50JyxcbiAqICAga2V5OiAnZ3JlZXRpbmcnLFxuICogICBpbnRlcnBvbGF0aW9uOiB7IG5hbWU6ICdKb2huJywgY291bnQ6IDUgfVxuICogfSk7XG4gKlxuICogLy8gTkVXIChyZWNvbW1lbmRlZCk6XG4gKiB0aGlzLmdyZWV0aW5nJCA9IGZyb21Db250ZW50KHRoaXMubGFuZ1NlcnZpY2UsIHtcbiAqICAgY2xhc3NOYW1lOiAnV2VsY29tZUNvbXBvbmVudCcsXG4gKiAgIGtleTogJ2dyZWV0aW5nJyxcbiAqICAgaW50ZXJwb2xhdGlvbjogeyBuYW1lOiAnSm9obicsIGNvdW50OiA1IH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ29udGVudFdpdGhJbnRlcnBvbGF0aW9uKFxuICBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UsXG4gIGNvbmZpZzogSW50ZXJwb2xhdGVkQ29udGVudENvbmZpZ1xuKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgLy8gRGVsZWdhdGUgdG8gdGhlIHVuaWZpZWQgZnJvbUNvbnRlbnQgbWV0aG9kXG4gIHJldHVybiBmcm9tQ29udGVudChsYW5nU2VydmljZSwgY29uZmlnKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgbXVsdGlwbGUgcmVhY3RpdmUgY29udGVudCBvYnNlcnZhYmxlcyBhdCBvbmNlLlxuICogVXNlZnVsIHdoZW4gYSBjb21wb25lbnQgbmVlZHMgc2V2ZXJhbCBjb250ZW50IHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIGxhbmdTZXJ2aWNlIC0gVGhlIGxhbmd1YWdlIHNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAqIEBwYXJhbSBrZXlzIC0gQXJyYXkgb2YgY29udGVudCBrZXlzIHRvIHJldHJpZXZlXG4gKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gb2JqZWN0IHdpdGggYWxsIHJlcXVlc3RlZCBjb250ZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRoaXMuY29udGVudCQgPSBmcm9tTXVsdGlwbGVDb250ZW50KHRoaXMubGFuZ1NlcnZpY2UsICdGb3JtQ29tcG9uZW50JywgW1xuICogICAndGl0bGUnLCAnc3VibWl0QnV0dG9uJywgJ2NhbmNlbEJ1dHRvbidcbiAqIF0pO1xuICpcbiAqIC8vIEluIHRlbXBsYXRlXG4gKiA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudCQgfCBhc3luYyBhcyBjb250ZW50XCI+XG4gKiAgIDxoMj57eyBjb250ZW50LnRpdGxlIH19PC9oMj5cbiAqICAgPGJ1dHRvbj57eyBjb250ZW50LnN1Ym1pdEJ1dHRvbiB9fTwvYnV0dG9uPlxuICogICA8YnV0dG9uPnt7IGNvbnRlbnQuY2FuY2VsQnV0dG9uIH19PC9idXR0b24+XG4gKiA8L25nLWNvbnRhaW5lcj5cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbU11bHRpcGxlQ29udGVudChcbiAgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAga2V5czogc3RyaW5nW11cbik6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICByZXR1cm4gbGFuZ1NlcnZpY2UuZ2V0TXVsdGlwbGVDb250ZW50KGNsYXNzTmFtZSwga2V5cyk7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGludGVycG9sYXRlIHZhbHVlcyBpbnRvIGEgY29udGVudCBzdHJpbmcuXG4gKiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgaW4gdGhlIGZvcm1hdCB7a2V5fSB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0IHdpdGggdmFsdWVzIHRvIGludGVycG9sYXRlXG4gKiBAcmV0dXJucyBUaGUgaW50ZXJwb2xhdGVkIHN0cmluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBpbnRlcnBvbGF0ZUNvbnRlbnQoXCJIZWxsbyB7bmFtZX0hXCIsIHsgbmFtZTogXCJXb3JsZFwiIH0pO1xuICogLy8gUmV0dXJuczogXCJIZWxsbyBXb3JsZCFcIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBvbGF0ZUNvbnRlbnQoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdmFsdWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuKTogc3RyaW5nIHtcbiAgaWYgKCF2YWx1ZXMpIHJldHVybiBjb250ZW50O1xuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZXMpLnJlZHVjZSgocmVzdWx0LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICByZXR1cm4gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXHske2tleX1cXFxcfWAsICdnJyksIFN0cmluZyh2YWx1ZSkpO1xuICB9LCBjb250ZW50KTtcbn1cblxuLyoqXG4gKiBUeXBlLXNhZmUgY29udGVudCBrZXkgYnVpbGRlciBmb3IgYmV0dGVyIElERSBzdXBwb3J0LlxuICogVGhpcyBpcyBhIHV0aWxpdHkgdHlwZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuc3VyZSBjb250ZW50IGtleXMgZXhpc3QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIERlZmluZSB5b3VyIGNvbXBvbmVudCdzIGNvbnRlbnQga2V5c1xuICogaW50ZXJmYWNlIE15Q29tcG9uZW50Q29udGVudCB7XG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKiAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gKiAgIHN1Ym1pdEJ1dHRvbjogc3RyaW5nO1xuICogfVxuICpcbiAqIC8vIFVzZSB3aXRoIHR5cGUgc2FmZXR5XG4gKiBjb25zdCB0aXRsZUtleTogQ29udGVudEtleTxNeUNvbXBvbmVudENvbnRlbnQ+ID0gJ3RpdGxlJzsgLy8g4pyTIFZhbGlkXG4gKiBjb25zdCBpbnZhbGlkS2V5OiBDb250ZW50S2V5PE15Q29tcG9uZW50Q29udGVudD4gPSAnaW52YWxpZCc7IC8vIOKclyBUeXBlIGVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgQ29udGVudEtleTxUPiA9IGtleW9mIFQgJiBzdHJpbmc7XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb250ZW50IGhlbHBlciBib3VuZCB0byBhIHNwZWNpZmljIGNvbXBvbmVudCBjbGFzcy5cbiAqIFRoaXMgY3JlYXRlcyBhIG1vcmUgY29udmVuaWVudCBBUEkgZm9yIGNvbXBvbmVudHMgdGhhdCBuZWVkIG11bHRpcGxlIGNvbnRlbnQgc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gbGFuZ1NlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSBpbnN0YW5jZVxuICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICogQHJldHVybnMgT2JqZWN0IHdpdGggY29udmVuaWVudCBtZXRob2RzIGZvciBjb250ZW50IHJldHJpZXZhbFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBwcml2YXRlIGNvbnRlbnQgPSBjcmVhdGVDb250ZW50SGVscGVyKHRoaXMubGFuZ1NlcnZpY2UsICdNeUNvbXBvbmVudCcpO1xuICpcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2UpIHt9XG4gKlxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLnRpdGxlJCA9IHRoaXMuY29udGVudC5nZXQoJ3RpdGxlJyk7XG4gKiAgICAgdGhpcy5hbGxDb250ZW50JCA9IHRoaXMuY29udGVudC5nZXRNdWx0aXBsZShbJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJ10pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRlbnRIZWxwZXIobGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlLCBjbGFzc05hbWU6IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEdldCBhIHNpbmdsZSBjb250ZW50IHN0cmluZyByZWFjdGl2ZWx5LlxuICAgICAqL1xuICAgIGdldChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIGZyb21Db250ZW50KGxhbmdTZXJ2aWNlLCB7IGNsYXNzTmFtZSwga2V5LCBmYWxsYmFjayB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IG11bHRpcGxlIGNvbnRlbnQgc3RyaW5ncyByZWFjdGl2ZWx5LlxuICAgICAqL1xuICAgIGdldE11bHRpcGxlKGtleXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgICByZXR1cm4gZnJvbU11bHRpcGxlQ29udGVudChsYW5nU2VydmljZSwgY2xhc3NOYW1lLCBrZXlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IGNvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uLlxuICAgICAqL1xuICAgIGdldFdpdGhJbnRlcnBvbGF0aW9uKFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICBpbnRlcnBvbGF0aW9uOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+LFxuICAgICAgZmFsbGJhY2s/OiBzdHJpbmdcbiAgICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIGZyb21Db250ZW50V2l0aEludGVycG9sYXRpb24obGFuZ1NlcnZpY2UsIHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBrZXksXG4gICAgICAgIGludGVycG9sYXRpb24sXG4gICAgICAgIGZhbGxiYWNrLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldCBhIHNpbmdsZSBjb250ZW50IHN0cmluZyBzeW5jaHJvbm91c2x5IChjdXJyZW50IGxhbmd1YWdlIG9ubHkpLlxuICAgICAqL1xuICAgIGdldFRleHQoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBsYW5nU2VydmljZS5nZXRUZXh0KGNsYXNzTmFtZSwga2V5LCBmYWxsYmFjayk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgY29udGVudCBrZXkgZXhpc3RzLlxuICAgICAqL1xuICAgIGhhc0NvbnRlbnQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBsYW5nU2VydmljZS5oYXNDb250ZW50KGNsYXNzTmFtZSwga2V5KTtcbiAgICB9LFxuICB9O1xufVxuIl19