@tuki-io/tuki-widgets 0.0.166 → 0.0.167

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.
Files changed (48) hide show
  1. package/esm2020/di2mt/shared/services/api.service.mjs +3 -3
  2. package/esm2020/user-creation/public-api.mjs +13 -0
  3. package/esm2020/user-creation/src/app.constants.mjs +16 -0
  4. package/esm2020/user-creation/src/classes/site.mjs +53 -0
  5. package/esm2020/user-creation/src/shared/api/api.service.mjs +86 -0
  6. package/esm2020/user-creation/src/shared/material.module.mjs +76 -0
  7. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +112 -0
  8. package/esm2020/user-creation/src/shared/services/utils.mjs +19 -0
  9. package/esm2020/user-creation/src/shared/shared.module.mjs +33 -0
  10. package/esm2020/user-creation/src/user-creation.module.mjs +69 -0
  11. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +23 -0
  12. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.mjs +19 -0
  13. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +114 -0
  14. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +60 -0
  15. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +273 -0
  16. package/esm2020/user-creation/tuki-io-tuki-widgets-user-creation.mjs +5 -0
  17. package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +9 -3
  18. package/esm2020/users-list/src/users-list.component.mjs +9 -3
  19. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +2 -2
  20. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  21. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +919 -0
  22. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -0
  23. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +16 -4
  24. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  25. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +2 -2
  26. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  27. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +915 -0
  28. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -0
  29. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +16 -4
  30. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  31. package/package.json +9 -1
  32. package/user-creation/index.d.ts +5 -0
  33. package/user-creation/public-api.d.ts +2 -0
  34. package/user-creation/src/app.constants.d.ts +15 -0
  35. package/user-creation/src/classes/site.d.ts +203 -0
  36. package/user-creation/src/shared/api/api.service.d.ts +20 -0
  37. package/user-creation/src/shared/material.module.d.ts +15 -0
  38. package/user-creation/src/shared/services/user-creation-api.service.d.ts +24 -0
  39. package/user-creation/src/shared/services/utils.d.ts +1 -0
  40. package/user-creation/src/shared/shared.module.d.ts +10 -0
  41. package/user-creation/src/user-creation.module.d.ts +17 -0
  42. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +8 -0
  43. package/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.d.ts +11 -0
  44. package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +37 -0
  45. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.d.ts +18 -0
  46. package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +87 -0
  47. package/users-list/src/components/table-toolbar/table-toolbar.component.d.ts +3 -1
  48. package/users-list/src/users-list.component.d.ts +3 -1
@@ -0,0 +1,273 @@
1
+ import { inject, Injectable } from "@angular/core";
2
+ import { UserCreationApiService } from "../../shared/services/user-creation-api.service";
3
+ import * as i0 from "@angular/core";
4
+ export class UserCreationWizardService {
5
+ constructor() {
6
+ this.api = inject(UserCreationApiService);
7
+ this.ldapTableColumns = ['userId', 'firstName', 'lastName', 'email', 'add'];
8
+ this.userCreationTypes = ['CUCM', 'MT'];
9
+ this.siteOptions = [];
10
+ this.templateOptions = [];
11
+ this.lineOptions = [];
12
+ this.routePartitionOptions = [];
13
+ this.deviceRows = [];
14
+ this.ldapUsers = [];
15
+ this.overviewUsers = [];
16
+ this.overviewLines = [];
17
+ this.overviewDevices = [];
18
+ this.userDetailsForm = {
19
+ userId: '',
20
+ firstName: '',
21
+ lastName: '',
22
+ email: ''
23
+ };
24
+ this.lineSelections = [];
25
+ this.deviceEntries = [];
26
+ this.selectedSite = null;
27
+ this.selectedTemplate = null;
28
+ this.selectedUserCreationType = 'CUCM';
29
+ this.loadPlaceholderData();
30
+ }
31
+ setSelectedSite(site) {
32
+ this.selectedSite = site;
33
+ }
34
+ setSelectedTemplate(template) {
35
+ this.selectedTemplate = template;
36
+ this.rebuildOverviewUsers();
37
+ }
38
+ resetTemplateDrivenData() {
39
+ this.lineOptions = [];
40
+ this.routePartitionOptions = [];
41
+ this.lineSelections = [];
42
+ this.deviceEntries = [];
43
+ this.deviceRows = [];
44
+ this.rebuildOverviewLines();
45
+ this.rebuildOverviewDevices();
46
+ }
47
+ applyTemplateTokenPayload(payload) {
48
+ const template = this.extractTemplateFromTokenPayload(payload);
49
+ const endUser = template?.endUser || {};
50
+ const linesFromTemplate = Array.isArray(endUser.lines) ? endUser.lines : [];
51
+ const devicesFromTemplate = Array.isArray(endUser.devices) ? endUser.devices : [];
52
+ this.userDetailsForm = {
53
+ userId: this.valueToString(endUser.userid),
54
+ firstName: this.valueToString(endUser.firstName),
55
+ lastName: this.valueToString(endUser.lastName),
56
+ email: this.valueToString(endUser.email)
57
+ };
58
+ const mappedLineOptions = linesFromTemplate
59
+ .map(line => ({
60
+ number: this.valueToString(line?.directoryNumber?.directoryNumber),
61
+ did: this.valueToString(line?.didPatterns?.[0]?.pattern || line?.directoryNumber?.directoryNumber),
62
+ css: this.valueToString(typeof line?.callingSearchSpace === 'string'
63
+ ? line.callingSearchSpace
64
+ : line?.callingSearchSpace?.name),
65
+ description: this.valueToString(line?.description)
66
+ }))
67
+ .filter(line => line.number.trim().length > 0);
68
+ if (mappedLineOptions.length) {
69
+ this.lineOptions = this.uniqueByNumber(mappedLineOptions);
70
+ this.lineSelections = this.lineOptions.map(line => ({
71
+ lineNumber: line.number,
72
+ routePartitionName: linesFromTemplate.find(source => (source?.directoryNumber?.directoryNumber || '') === line.number)?.directoryNumber?.routePartitionName || null
73
+ }));
74
+ }
75
+ else {
76
+ const lineAssociations = devicesFromTemplate.flatMap(device => device.lineAssociations || []);
77
+ const associatedLineOptions = lineAssociations
78
+ .map(association => {
79
+ const number = association?.directoryNumber?.directoryNumber || '';
80
+ return {
81
+ number,
82
+ did: number,
83
+ css: '',
84
+ description: ''
85
+ };
86
+ })
87
+ .filter(line => line.number.trim().length > 0);
88
+ this.lineOptions = this.uniqueByNumber(associatedLineOptions);
89
+ this.lineSelections = this.lineOptions.map(line => ({
90
+ lineNumber: line.number,
91
+ routePartitionName: lineAssociations.find(source => (source?.directoryNumber?.directoryNumber || '') === line.number)?.directoryNumber?.routePartitionName || null
92
+ }));
93
+ }
94
+ const routePartitions = this.lineSelections
95
+ .map(line => line.routePartitionName)
96
+ .filter((value) => !!value && value.trim().length > 0);
97
+ this.routePartitionOptions = this.uniqueStrings(routePartitions);
98
+ this.deviceEntries = devicesFromTemplate.map(device => ({
99
+ deviceType: this.valueToString(device.deviceType),
100
+ protocol: this.valueToString(device.protocol),
101
+ buttonTemplate: this.valueToString(device.buttonTemplate),
102
+ name: this.valueToString(device.name)
103
+ }));
104
+ this.deviceRows = this.deviceEntries.map((_, index) => index + 1);
105
+ this.rebuildOverviewUsers();
106
+ this.rebuildOverviewLines();
107
+ this.rebuildOverviewDevices();
108
+ }
109
+ setSelectedUserCreationType(type) {
110
+ this.selectedUserCreationType = type;
111
+ }
112
+ setUserDetailsField(field, value) {
113
+ this.userDetailsForm = {
114
+ ...this.userDetailsForm,
115
+ [field]: value
116
+ };
117
+ this.rebuildOverviewUsers();
118
+ }
119
+ setLineSelection(index, lineNumber) {
120
+ if (!this.lineSelections[index]) {
121
+ return;
122
+ }
123
+ this.lineSelections[index] = {
124
+ ...this.lineSelections[index],
125
+ lineNumber
126
+ };
127
+ this.rebuildOverviewLines();
128
+ this.rebuildOverviewDevices();
129
+ }
130
+ setRoutePartitionSelection(index, routePartitionName) {
131
+ if (!this.lineSelections[index]) {
132
+ return;
133
+ }
134
+ this.lineSelections[index] = {
135
+ ...this.lineSelections[index],
136
+ routePartitionName
137
+ };
138
+ this.rebuildOverviewLines();
139
+ }
140
+ setDeviceName(index, name) {
141
+ if (!this.deviceEntries[index]) {
142
+ return;
143
+ }
144
+ this.deviceEntries[index] = {
145
+ ...this.deviceEntries[index],
146
+ name
147
+ };
148
+ this.rebuildOverviewDevices();
149
+ }
150
+ // Placeholder bootstrap until backend APIs are connected.
151
+ loadPlaceholderData() {
152
+ this.siteOptions = ['Site 1', 'Site 2', 'Site 3'];
153
+ this.templateOptions = ['User 8851 Office'];
154
+ this.lineOptions = [
155
+ {
156
+ number: '557046',
157
+ did: '+13125557046',
158
+ css: 'Atlanta_internal_css',
159
+ description: ''
160
+ }
161
+ ];
162
+ this.routePartitionOptions = ['Atlanta_internal_PT', 'Beijing_national_PT'];
163
+ this.deviceRows = [1, 2];
164
+ this.ldapUsers = [
165
+ { userId: 'John.Doe', firstName: 'John', lastName: 'Doe', email: 'john.doe@car.west.io' },
166
+ { userId: 'Jane.Smith', firstName: 'Jane', lastName: 'Smith', email: 'jane.smith@car.west.io' }
167
+ ];
168
+ this.lineSelections = [
169
+ {
170
+ lineNumber: this.lineOptions[0]?.number || null,
171
+ routePartitionName: this.routePartitionOptions[0] || null
172
+ }
173
+ ];
174
+ this.deviceEntries = [
175
+ {
176
+ deviceType: 'Cisco 8851',
177
+ protocol: 'SIP',
178
+ buttonTemplate: 'Standard 8851 SIP',
179
+ name: ''
180
+ },
181
+ {
182
+ deviceType: 'Cisco Unified Client Services Framework',
183
+ protocol: 'SIP',
184
+ buttonTemplate: 'Standard Client Services Framework',
185
+ name: ''
186
+ }
187
+ ];
188
+ this.selectedTemplate = this.selectedTemplate ?? null;
189
+ this.rebuildOverviewUsers();
190
+ this.rebuildOverviewLines();
191
+ this.rebuildOverviewDevices();
192
+ }
193
+ rebuildOverviewUsers() {
194
+ const userTemplate = this.selectedTemplate || '';
195
+ const hasUserData = Object.values(this.userDetailsForm).some(value => value.trim().length > 0);
196
+ this.overviewUsers = hasUserData
197
+ ? [{
198
+ userId: this.userDetailsForm.userId,
199
+ firstName: this.userDetailsForm.firstName,
200
+ lastName: this.userDetailsForm.lastName,
201
+ email: this.userDetailsForm.email,
202
+ userTemplate
203
+ }]
204
+ : [];
205
+ }
206
+ rebuildOverviewLines() {
207
+ this.overviewLines = this.lineSelections
208
+ .map(selection => {
209
+ if (!selection?.lineNumber) {
210
+ return null;
211
+ }
212
+ const selectedLine = this.lineOptions.find(line => line.number === selection.lineNumber);
213
+ if (!selectedLine) {
214
+ return null;
215
+ }
216
+ return {
217
+ number: selectedLine.number,
218
+ did: selectedLine.did,
219
+ routePartitionName: selection.routePartitionName || this.routePartitionOptions[0] || '',
220
+ css: selectedLine.css,
221
+ description: selectedLine.description
222
+ };
223
+ })
224
+ .filter((line) => !!line);
225
+ }
226
+ rebuildOverviewDevices() {
227
+ const selectedLineNumbers = this.overviewLines.map(line => line.number).join(', ');
228
+ this.overviewDevices = this.deviceEntries
229
+ .filter(device => device.name.trim().length > 0 || device.deviceType.trim().length > 0)
230
+ .map(device => ({
231
+ name: device.name,
232
+ deviceType: device.deviceType,
233
+ lines: selectedLineNumbers,
234
+ description: `${device.protocol} / ${device.buttonTemplate}`
235
+ }));
236
+ }
237
+ extractTemplateFromTokenPayload(payload) {
238
+ if (!payload || typeof payload !== 'object') {
239
+ return null;
240
+ }
241
+ if (Array.isArray(payload)) {
242
+ return payload[0] || null;
243
+ }
244
+ const firstKey = Object.keys(payload)[0];
245
+ return firstKey ? payload[firstKey] : null;
246
+ }
247
+ uniqueByNumber(lines) {
248
+ const seen = new Set();
249
+ return lines.filter(line => {
250
+ if (seen.has(line.number)) {
251
+ return false;
252
+ }
253
+ seen.add(line.number);
254
+ return true;
255
+ });
256
+ }
257
+ uniqueStrings(items) {
258
+ return Array.from(new Set(items));
259
+ }
260
+ valueToString(value) {
261
+ return typeof value === 'string' ? value : '';
262
+ }
263
+ // TODO: replace placeholders with real API integration.
264
+ loadDataFromApi() {
265
+ // this.api.getWizardBootstrapData().subscribe(...)
266
+ }
267
+ }
268
+ UserCreationWizardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCreationWizardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
269
+ UserCreationWizardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCreationWizardService });
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCreationWizardService, decorators: [{
271
+ type: Injectable
272
+ }], ctorParameters: function () { return []; } });
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jcmVhdGlvbi13aXphcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL3VzZXItY3JlYXRpb24td2l6YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7O0FBeUZ6RixNQUFNLE9BQU8seUJBQXlCO0lBNEJsQztRQTNCaUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTdDLHFCQUFnQixHQUFhLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLHNCQUFpQixHQUF1QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVoRSxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDL0IsMEJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBQ3JDLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFrQixFQUFFLENBQUM7UUFDOUIsa0JBQWEsR0FBc0IsRUFBRSxDQUFDO1FBQ3RDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztRQUN0QyxvQkFBZSxHQUF3QixFQUFFLENBQUM7UUFDMUMsb0JBQWUsR0FBb0I7WUFDL0IsTUFBTSxFQUFFLEVBQUU7WUFDVixTQUFTLEVBQUUsRUFBRTtZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBQ0YsbUJBQWMsR0FB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QUcsRUFBVSxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFlO1FBQ2pDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBYztRQUNoQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxlQUFlO1FBQ1gsbURBQW1EO0lBQ3ZELENBQUM7O3VIQXhTUSx5QkFBeUI7MkhBQXpCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlckNyZWF0aW9uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvc2VydmljZXMvdXNlci1jcmVhdGlvbi1hcGkuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMZGFwVXNlclJvdyB7XHJcbiAgICB1c2VySWQ6IHN0cmluZztcclxuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgbGFzdE5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnZpZXdVc2VyUm93IGV4dGVuZHMgTGRhcFVzZXJSb3cge1xyXG4gICAgdXNlclRlbXBsYXRlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnZpZXdMaW5lUm93IHtcclxuICAgIG51bWJlcjogc3RyaW5nO1xyXG4gICAgZGlkOiBzdHJpbmc7XHJcbiAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZztcclxuICAgIGNzczogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPdmVydmlld0RldmljZVJvdyB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZXZpY2VUeXBlOiBzdHJpbmc7XHJcbiAgICBsaW5lczogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVXNlckNyZWF0aW9uVHlwZSA9ICdDVUNNJyB8ICdNVCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZXRhaWxzRm9ybSB7XHJcbiAgICB1c2VySWQ6IHN0cmluZztcclxuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgbGFzdE5hbWU6IHN0cmluZztcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGluZU9wdGlvbiB7XHJcbiAgICBudW1iZXI6IHN0cmluZztcclxuICAgIGRpZDogc3RyaW5nO1xyXG4gICAgY3NzOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkTGluZVJvdyB7XHJcbiAgICBsaW5lTnVtYmVyOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUVudHJ5IHtcclxuICAgIGRldmljZVR5cGU6IHN0cmluZztcclxuICAgIHByb3RvY29sOiBzdHJpbmc7XHJcbiAgICBidXR0b25UZW1wbGF0ZTogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGVtcGxhdGVMaW5lTGlrZSB7XHJcbiAgICBkaXJlY3RvcnlOdW1iZXI/OiB7XHJcbiAgICAgICAgZGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nO1xyXG4gICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICB9O1xyXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgY2FsbGluZ1NlYXJjaFNwYWNlPzogc3RyaW5nIHwgeyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcclxuICAgIGRpZFBhdHRlcm5zPzogQXJyYXk8eyBwYXR0ZXJuPzogc3RyaW5nIHwgbnVsbCB9PiB8IG51bGw7XHJcbn1cclxuXHJcbmludGVyZmFjZSBUZW1wbGF0ZURldmljZUxpa2Uge1xyXG4gICAgZGV2aWNlVHlwZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICBwcm90b2NvbD86IHN0cmluZyB8IG51bGw7XHJcbiAgICBidXR0b25UZW1wbGF0ZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGxpbmVBc3NvY2lhdGlvbnM/OiBBcnJheTx7XHJcbiAgICAgICAgZGlyZWN0b3J5TnVtYmVyPzoge1xyXG4gICAgICAgICAgICBkaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgIH0+O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGVtcGxhdGVFbmRVc2VyTGlrZSB7XHJcbiAgICB1c2VyaWQ/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGxhc3ROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGVtYWlsPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGxpbmVzPzogVGVtcGxhdGVMaW5lTGlrZVtdIHwgbnVsbDtcclxuICAgIGRldmljZXM/OiBUZW1wbGF0ZURldmljZUxpa2VbXSB8IG51bGw7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGkgPSBpbmplY3QoVXNlckNyZWF0aW9uQXBpU2VydmljZSk7XHJcblxyXG4gICAgcmVhZG9ubHkgbGRhcFRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbJ3VzZXJJZCcsICdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCAnZW1haWwnLCAnYWRkJ107XHJcbiAgICByZWFkb25seSB1c2VyQ3JlYXRpb25UeXBlczogVXNlckNyZWF0aW9uVHlwZVtdID0gWydDVUNNJywgJ01UJ107XHJcblxyXG4gICAgc2l0ZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsaW5lT3B0aW9uczogTGluZU9wdGlvbltdID0gW107XHJcbiAgICByb3V0ZVBhcnRpdGlvbk9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBkZXZpY2VSb3dzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGRhcFVzZXJzOiBMZGFwVXNlclJvd1tdID0gW107XHJcbiAgICBvdmVydmlld1VzZXJzOiBPdmVydmlld1VzZXJSb3dbXSA9IFtdO1xyXG4gICAgb3ZlcnZpZXdMaW5lczogT3ZlcnZpZXdMaW5lUm93W10gPSBbXTtcclxuICAgIG92ZXJ2aWV3RGV2aWNlczogT3ZlcnZpZXdEZXZpY2VSb3dbXSA9IFtdO1xyXG4gICAgdXNlckRldGFpbHNGb3JtOiBVc2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgdXNlcklkOiAnJyxcclxuICAgICAgICBmaXJzdE5hbWU6ICcnLFxyXG4gICAgICAgIGxhc3ROYW1lOiAnJyxcclxuICAgICAgICBlbWFpbDogJydcclxuICAgIH07XHJcbiAgICBsaW5lU2VsZWN0aW9uczogU2VsZWN0ZWRMaW5lUm93W10gPSBbXTtcclxuICAgIGRldmljZUVudHJpZXM6IERldmljZUVudHJ5W10gPSBbXTtcclxuXHJcbiAgICBzZWxlY3RlZFNpdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRUZW1wbGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFVzZXJDcmVhdGlvblR5cGU6IFVzZXJDcmVhdGlvblR5cGUgPSAnQ1VDTSc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkUGxhY2Vob2xkZXJEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWRTaXRlKHNpdGU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2l0ZSA9IHNpdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFRlbXBsYXRlRHJpdmVuRGF0YSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxpbmVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VFbnRyaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VSb3dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5VGVtcGxhdGVUb2tlblBheWxvYWQocGF5bG9hZDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmV4dHJhY3RUZW1wbGF0ZUZyb21Ub2tlblBheWxvYWQocGF5bG9hZCk7XHJcbiAgICAgICAgY29uc3QgZW5kVXNlcjogVGVtcGxhdGVFbmRVc2VyTGlrZSA9IHRlbXBsYXRlPy5lbmRVc2VyIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IGxpbmVzRnJvbVRlbXBsYXRlOiBUZW1wbGF0ZUxpbmVMaWtlW10gPSBBcnJheS5pc0FycmF5KGVuZFVzZXIubGluZXMpID8gZW5kVXNlci5saW5lcyA6IFtdO1xyXG4gICAgICAgIGNvbnN0IGRldmljZXNGcm9tVGVtcGxhdGU6IFRlbXBsYXRlRGV2aWNlTGlrZVtdID0gQXJyYXkuaXNBcnJheShlbmRVc2VyLmRldmljZXMpID8gZW5kVXNlci5kZXZpY2VzIDogW107XHJcblxyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IHRoaXMudmFsdWVUb1N0cmluZyhlbmRVc2VyLnVzZXJpZCksXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy52YWx1ZVRvU3RyaW5nKGVuZFVzZXIuZmlyc3ROYW1lKSxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IHRoaXMudmFsdWVUb1N0cmluZyhlbmRVc2VyLmxhc3ROYW1lKSxcclxuICAgICAgICAgICAgZW1haWw6IHRoaXMudmFsdWVUb1N0cmluZyhlbmRVc2VyLmVtYWlsKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcHBlZExpbmVPcHRpb25zOiBMaW5lT3B0aW9uW10gPSBsaW5lc0Zyb21UZW1wbGF0ZVxyXG4gICAgICAgICAgICAubWFwKGxpbmUgPT4gKHtcclxuICAgICAgICAgICAgICAgIG51bWJlcjogdGhpcy52YWx1ZVRvU3RyaW5nKGxpbmU/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyKSxcclxuICAgICAgICAgICAgICAgIGRpZDogdGhpcy52YWx1ZVRvU3RyaW5nKGxpbmU/LmRpZFBhdHRlcm5zPy5bMF0/LnBhdHRlcm4gfHwgbGluZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIpLFxyXG4gICAgICAgICAgICAgICAgY3NzOiB0aGlzLnZhbHVlVG9TdHJpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGxpbmU/LmNhbGxpbmdTZWFyY2hTcGFjZSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBsaW5lLmNhbGxpbmdTZWFyY2hTcGFjZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGxpbmU/LmNhbGxpbmdTZWFyY2hTcGFjZT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnZhbHVlVG9TdHJpbmcobGluZT8uZGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS5udW1iZXIudHJpbSgpLmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgICBpZiAobWFwcGVkTGluZU9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZU9wdGlvbnMgPSB0aGlzLnVuaXF1ZUJ5TnVtYmVyKG1hcHBlZExpbmVPcHRpb25zKTtcclxuICAgICAgICAgICAgdGhpcy5saW5lU2VsZWN0aW9ucyA9IHRoaXMubGluZU9wdGlvbnMubWFwKGxpbmUgPT4gKHtcclxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lc0Zyb21UZW1wbGF0ZS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9PiAoc291cmNlPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlciB8fCAnJykgPT09IGxpbmUubnVtYmVyXHJcbiAgICAgICAgICAgICAgICApPy5kaXJlY3RvcnlOdW1iZXI/LnJvdXRlUGFydGl0aW9uTmFtZSB8fCBudWxsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lQXNzb2NpYXRpb25zID0gZGV2aWNlc0Zyb21UZW1wbGF0ZS5mbGF0TWFwKGRldmljZSA9PiBkZXZpY2UubGluZUFzc29jaWF0aW9ucyB8fCBbXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0ZWRMaW5lT3B0aW9uczogTGluZU9wdGlvbltdID0gbGluZUFzc29jaWF0aW9uc1xyXG4gICAgICAgICAgICAgICAgLm1hcChhc3NvY2lhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gYXNzb2NpYXRpb24/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlkOiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzczogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUubnVtYmVyLnRyaW0oKS5sZW5ndGggPiAwKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubGluZU9wdGlvbnMgPSB0aGlzLnVuaXF1ZUJ5TnVtYmVyKGFzc29jaWF0ZWRMaW5lT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIHRoaXMubGluZVNlbGVjdGlvbnMgPSB0aGlzLmxpbmVPcHRpb25zLm1hcChsaW5lID0+ICh7XHJcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLm51bWJlcixcclxuICAgICAgICAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogbGluZUFzc29jaWF0aW9ucy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9PiAoc291cmNlPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlciB8fCAnJykgPT09IGxpbmUubnVtYmVyXHJcbiAgICAgICAgICAgICAgICApPy5kaXJlY3RvcnlOdW1iZXI/LnJvdXRlUGFydGl0aW9uTmFtZSB8fCBudWxsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydGl0aW9ucyA9IHRoaXMubGluZVNlbGVjdGlvbnNcclxuICAgICAgICAgICAgLm1hcChsaW5lID0+IGxpbmUucm91dGVQYXJ0aXRpb25OYW1lKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiAhIXZhbHVlICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKTtcclxuICAgICAgICB0aGlzLnJvdXRlUGFydGl0aW9uT3B0aW9ucyA9IHRoaXMudW5pcXVlU3RyaW5ncyhyb3V0ZVBhcnRpdGlvbnMpO1xyXG5cclxuICAgICAgICB0aGlzLmRldmljZUVudHJpZXMgPSBkZXZpY2VzRnJvbVRlbXBsYXRlLm1hcChkZXZpY2UgPT4gKHtcclxuICAgICAgICAgICAgZGV2aWNlVHlwZTogdGhpcy52YWx1ZVRvU3RyaW5nKGRldmljZS5kZXZpY2VUeXBlKSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHRoaXMudmFsdWVUb1N0cmluZyhkZXZpY2UucHJvdG9jb2wpLFxyXG4gICAgICAgICAgICBidXR0b25UZW1wbGF0ZTogdGhpcy52YWx1ZVRvU3RyaW5nKGRldmljZS5idXR0b25UZW1wbGF0ZSksXHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudmFsdWVUb1N0cmluZyhkZXZpY2UubmFtZSlcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VSb3dzID0gdGhpcy5kZXZpY2VFbnRyaWVzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWRVc2VyQ3JlYXRpb25UeXBlKHR5cGU6IFVzZXJDcmVhdGlvblR5cGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckNyZWF0aW9uVHlwZSA9IHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VXNlckRldGFpbHNGaWVsZChmaWVsZDoga2V5b2YgVXNlckRldGFpbHNGb3JtLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMudXNlckRldGFpbHNGb3JtLFxyXG4gICAgICAgICAgICBbZmllbGRdOiB2YWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExpbmVTZWxlY3Rpb24oaW5kZXg6IG51bWJlciwgbGluZU51bWJlcjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0sXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3TGluZXMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0RldmljZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSb3V0ZVBhcnRpdGlvblNlbGVjdGlvbihpbmRleDogbnVtYmVyLCByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdLFxyXG4gICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3TGluZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VOYW1lKGluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kZXZpY2VFbnRyaWVzW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGV2aWNlRW50cmllc1tpbmRleF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZGV2aWNlRW50cmllc1tpbmRleF0sXHJcbiAgICAgICAgICAgIG5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBsYWNlaG9sZGVyIGJvb3RzdHJhcCB1bnRpbCBiYWNrZW5kIEFQSXMgYXJlIGNvbm5lY3RlZC5cclxuICAgIGxvYWRQbGFjZWhvbGRlckRhdGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaXRlT3B0aW9ucyA9IFsnU2l0ZSAxJywgJ1NpdGUgMicsICdTaXRlIDMnXTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlT3B0aW9ucyA9IFsnVXNlciA4ODUxIE9mZmljZSddO1xyXG4gICAgICAgIHRoaXMubGluZU9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG51bWJlcjogJzU1NzA0NicsXHJcbiAgICAgICAgICAgICAgICBkaWQ6ICcrMTMxMjU1NTcwNDYnLFxyXG4gICAgICAgICAgICAgICAgY3NzOiAnQXRsYW50YV9pbnRlcm5hbF9jc3MnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMucm91dGVQYXJ0aXRpb25PcHRpb25zID0gWydBdGxhbnRhX2ludGVybmFsX1BUJywgJ0JlaWppbmdfbmF0aW9uYWxfUFQnXTtcclxuICAgICAgICB0aGlzLmRldmljZVJvd3MgPSBbMSwgMl07XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnMgPSBbXHJcbiAgICAgICAgICAgIHsgdXNlcklkOiAnSm9obi5Eb2UnLCBmaXJzdE5hbWU6ICdKb2huJywgbGFzdE5hbWU6ICdEb2UnLCBlbWFpbDogJ2pvaG4uZG9lQGNhci53ZXN0LmlvJyB9LFxyXG4gICAgICAgICAgICB7IHVzZXJJZDogJ0phbmUuU21pdGgnLCBmaXJzdE5hbWU6ICdKYW5lJywgbGFzdE5hbWU6ICdTbWl0aCcsIGVtYWlsOiAnamFuZS5zbWl0aEBjYXIud2VzdC5pbycgfVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5saW5lU2VsZWN0aW9ucyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lT3B0aW9uc1swXT8ubnVtYmVyIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHRoaXMucm91dGVQYXJ0aXRpb25PcHRpb25zWzBdIHx8IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5kZXZpY2VFbnRyaWVzID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiAnQ2lzY28gODg1MScsXHJcbiAgICAgICAgICAgICAgICBwcm90b2NvbDogJ1NJUCcsXHJcbiAgICAgICAgICAgICAgICBidXR0b25UZW1wbGF0ZTogJ1N0YW5kYXJkIDg4NTEgU0lQJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRldmljZVR5cGU6ICdDaXNjbyBVbmlmaWVkIENsaWVudCBTZXJ2aWNlcyBGcmFtZXdvcmsnLFxyXG4gICAgICAgICAgICAgICAgcHJvdG9jb2w6ICdTSVAnLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uVGVtcGxhdGU6ICdTdGFuZGFyZCBDbGllbnQgU2VydmljZXMgRnJhbWV3b3JrJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA/PyBudWxsO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWJ1aWxkT3ZlcnZpZXdVc2VycygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB1c2VyVGVtcGxhdGUgPSB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgfHwgJyc7XHJcbiAgICAgICAgY29uc3QgaGFzVXNlckRhdGEgPSBPYmplY3QudmFsdWVzKHRoaXMudXNlckRldGFpbHNGb3JtKS5zb21lKHZhbHVlID0+IHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKTtcclxuICAgICAgICB0aGlzLm92ZXJ2aWV3VXNlcnMgPSBoYXNVc2VyRGF0YVxyXG4gICAgICAgICAgICA/IFt7XHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlckRldGFpbHNGb3JtLnVzZXJJZCxcclxuICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy51c2VyRGV0YWlsc0Zvcm0uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgbGFzdE5hbWU6IHRoaXMudXNlckRldGFpbHNGb3JtLmxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgZW1haWw6IHRoaXMudXNlckRldGFpbHNGb3JtLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgdXNlclRlbXBsYXRlXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWJ1aWxkT3ZlcnZpZXdMaW5lcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm92ZXJ2aWV3TGluZXMgPSB0aGlzLmxpbmVTZWxlY3Rpb25zXHJcbiAgICAgICAgICAgIC5tYXAoc2VsZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uPy5saW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZExpbmUgPSB0aGlzLmxpbmVPcHRpb25zLmZpbmQobGluZSA9PiBsaW5lLm51bWJlciA9PT0gc2VsZWN0aW9uLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZExpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBzZWxlY3RlZExpbmUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpZDogc2VsZWN0ZWRMaW5lLmRpZCxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHNlbGVjdGlvbi5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnNbMF0gfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzOiBzZWxlY3RlZExpbmUuY3NzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZExpbmUuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIE92ZXJ2aWV3TGluZVJvdyA9PiAhIWxpbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVOdW1iZXJzID0gdGhpcy5vdmVydmlld0xpbmVzLm1hcChsaW5lID0+IGxpbmUubnVtYmVyKS5qb2luKCcsICcpO1xyXG4gICAgICAgIHRoaXMub3ZlcnZpZXdEZXZpY2VzID0gdGhpcy5kZXZpY2VFbnRyaWVzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZGV2aWNlID0+IGRldmljZS5uYW1lLnRyaW0oKS5sZW5ndGggPiAwIHx8IGRldmljZS5kZXZpY2VUeXBlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAubWFwKGRldmljZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZGV2aWNlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UuZGV2aWNlVHlwZSxcclxuICAgICAgICAgICAgICAgIGxpbmVzOiBzZWxlY3RlZExpbmVOdW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2RldmljZS5wcm90b2NvbH0gLyAke2RldmljZS5idXR0b25UZW1wbGF0ZX1gXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RUZW1wbGF0ZUZyb21Ub2tlblBheWxvYWQocGF5bG9hZDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXBheWxvYWQgfHwgdHlwZW9mIHBheWxvYWQgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZFswXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKHBheWxvYWQpWzBdO1xyXG4gICAgICAgIHJldHVybiBmaXJzdEtleSA/IHBheWxvYWRbZmlyc3RLZXldIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuaXF1ZUJ5TnVtYmVyKGxpbmVzOiBMaW5lT3B0aW9uW10pOiBMaW5lT3B0aW9uW10ge1xyXG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgICAgICByZXR1cm4gbGluZXMuZmlsdGVyKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMobGluZS5udW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2Vlbi5hZGQobGluZS5udW1iZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuaXF1ZVN0cmluZ3MoaXRlbXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbHVlVG9TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiByZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIHJlYWwgQVBJIGludGVncmF0aW9uLlxyXG4gICAgbG9hZERhdGFGcm9tQXBpKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuYXBpLmdldFdpemFyZEJvb3RzdHJhcERhdGEoKS5zdWJzY3JpYmUoLi4uKVxyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVraS1pby10dWtpLXdpZGdldHMtdXNlci1jcmVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3R1a2ktaW8tdHVraS13aWRnZXRzLXVzZXItY3JlYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -5,6 +5,7 @@ export class TableToolbarComponent {
5
5
  constructor() {
6
6
  this.searchChange = new EventEmitter();
7
7
  this.searchByType = new EventEmitter();
8
+ this.addUser = new EventEmitter();
8
9
  }
9
10
  onSearchInputChange(event) {
10
11
  const value = event.target.value.trim().toLowerCase() || '';
@@ -16,17 +17,22 @@ export class TableToolbarComponent {
16
17
  const value = event.target.value;
17
18
  this.searchByType.emit(value);
18
19
  }
20
+ onAddUser() {
21
+ this.addUser.emit();
22
+ }
19
23
  }
20
24
  TableToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- TableToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableToolbarComponent, selector: "tk-users-table-toolbar", inputs: { totalUsersCount: "totalUsersCount" }, outputs: { searchChange: "searchChange", searchByType: "searchByType" }, ngImport: i0, template: "<header style=\"margin-bottom: 1rem;\">\r\n <div style=\"display: flex; align-items: center; justify-content: space-between;\">\r\n <div class=\"collection-header-left\">\r\n <div style=\"display: flex; align-items: center; gap: 12px;\">\r\n <!-- Search Input -->\r\n <div style=\"position: relative; width: fit-content; min-width: 200px;\">\r\n <input (input)=\"onSearchInputChange($event)\" type=\"text\" placeholder=\"Search by display name, email\" style=\"width: 100%; height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 12px 6px 44px; border: 1px solid #00000080; background: #fff; color: #222; outline: none; box-sizing: border-box; min-width: 280px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">search</i>\r\n </span>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Filter Select -->\r\n <div style=\"display: flex; align-items: center; position: relative; width: fit-content; min-width: 200px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">filter_list</i>\r\n </span>\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 44px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Filter</option>\r\n </select>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Location Select -->\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Select a Location</option>\r\n </select>\r\n\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\"\r\n (change)=\"onTypeChange($event)\">\r\n <option value=\"null\" disabled selected hidden>Select type</option>\r\n <option value=\"\">All</option>\r\n <option value=\"CUCM\">Dedicated Instance</option>\r\n <option value=\"WEBEX\">Multi-Tenant</option>\r\n <option value=\"ONPREM\">On Prem</option>\r\n </select>\r\n <span style=\"margin-left: 8px; color: #757575; font-size: 1rem; white-space: nowrap;\">{{ totalUsersCount }} users</span>\r\n </div>\r\n </div>\r\n <div style=\"display: flex; gap: 1rem;\">\r\n <button class=\"btn si\">\r\n Send invitations\r\n </button>\r\n <button class=\"btn mu\">\r\n Manage users\r\n </button>\r\n </div>\r\n </div>\r\n</header>", styles: [".btn{position:relative;display:inline-flex;gap:6px;align-items:center;justify-content:center;overflow:hidden!important;width:min-content;max-width:100%;padding:0rem .75rem;border:1px solid transparent;border-radius:6.25rem;font-weight:500;font-size:14px;text-overflow:ellipsis;white-space:nowrap;transition:all .1s cubic-bezier(.25,.1,.25,1);height:2rem;cursor:pointer}.btn:hover{background-color:#0000000d}.si{border-color:#0000004d;background-color:#0000;color:#000000f2}.mu{color:#fff;background-color:#000000f2}.mu:hover{background-color:#232323e6!important}\n"], dependencies: [{ kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
25
+ TableToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableToolbarComponent, selector: "tk-users-table-toolbar", inputs: { totalUsersCount: "totalUsersCount" }, outputs: { searchChange: "searchChange", searchByType: "searchByType", addUser: "addUser" }, ngImport: i0, template: "<header style=\"margin-bottom: 1rem;\">\r\n <div style=\"display: flex; align-items: center; justify-content: space-between;\">\r\n <div class=\"collection-header-left\">\r\n <div style=\"display: flex; align-items: center; gap: 12px;\">\r\n <!-- Search Input -->\r\n <div style=\"position: relative; width: fit-content; min-width: 200px;\">\r\n <input (input)=\"onSearchInputChange($event)\" type=\"text\" placeholder=\"Search by display name, email\" style=\"width: 100%; height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 12px 6px 44px; border: 1px solid #00000080; background: #fff; color: #222; outline: none; box-sizing: border-box; min-width: 280px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">search</i>\r\n </span>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Filter Select -->\r\n <div style=\"display: flex; align-items: center; position: relative; width: fit-content; min-width: 200px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">filter_list</i>\r\n </span>\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 44px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Filter</option>\r\n </select>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Location Select -->\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Select a Location</option>\r\n </select>\r\n\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\"\r\n (change)=\"onTypeChange($event)\">\r\n <option value=\"null\" disabled selected hidden>Select type</option>\r\n <option value=\"\">All</option>\r\n <option value=\"CUCM\">Dedicated Instance</option>\r\n <option value=\"WEBEX\">Multi-Tenant</option>\r\n <option value=\"ONPREM\">On Prem</option>\r\n </select>\r\n <span style=\"margin-left: 8px; color: #757575; font-size: 1rem; white-space: nowrap;\">{{ totalUsersCount }} users</span>\r\n </div>\r\n </div>\r\n <div style=\"display: flex; gap: 1rem;\">\r\n <button class=\"btn mu\" (click)=\"onAddUser()\">\r\n Add user\r\n </button>\r\n </div>\r\n </div>\r\n</header>", styles: [".btn{position:relative;display:inline-flex;gap:6px;align-items:center;justify-content:center;overflow:hidden!important;width:min-content;max-width:100%;padding:0rem .75rem;border:1px solid transparent;border-radius:6.25rem;font-weight:500;font-size:14px;text-overflow:ellipsis;white-space:nowrap;transition:all .1s cubic-bezier(.25,.1,.25,1);height:2rem;cursor:pointer}.btn:hover{background-color:#0000000d}.si{border-color:#0000004d;background-color:#0000;color:#000000f2}.mu{color:#fff;background-color:#000000f2}.mu:hover{background-color:#232323e6!important}\n"], dependencies: [{ kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
22
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableToolbarComponent, decorators: [{
23
27
  type: Component,
24
- args: [{ selector: 'tk-users-table-toolbar', template: "<header style=\"margin-bottom: 1rem;\">\r\n <div style=\"display: flex; align-items: center; justify-content: space-between;\">\r\n <div class=\"collection-header-left\">\r\n <div style=\"display: flex; align-items: center; gap: 12px;\">\r\n <!-- Search Input -->\r\n <div style=\"position: relative; width: fit-content; min-width: 200px;\">\r\n <input (input)=\"onSearchInputChange($event)\" type=\"text\" placeholder=\"Search by display name, email\" style=\"width: 100%; height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 12px 6px 44px; border: 1px solid #00000080; background: #fff; color: #222; outline: none; box-sizing: border-box; min-width: 280px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">search</i>\r\n </span>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Filter Select -->\r\n <div style=\"display: flex; align-items: center; position: relative; width: fit-content; min-width: 200px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">filter_list</i>\r\n </span>\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 44px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Filter</option>\r\n </select>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Location Select -->\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Select a Location</option>\r\n </select>\r\n\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\"\r\n (change)=\"onTypeChange($event)\">\r\n <option value=\"null\" disabled selected hidden>Select type</option>\r\n <option value=\"\">All</option>\r\n <option value=\"CUCM\">Dedicated Instance</option>\r\n <option value=\"WEBEX\">Multi-Tenant</option>\r\n <option value=\"ONPREM\">On Prem</option>\r\n </select>\r\n <span style=\"margin-left: 8px; color: #757575; font-size: 1rem; white-space: nowrap;\">{{ totalUsersCount }} users</span>\r\n </div>\r\n </div>\r\n <div style=\"display: flex; gap: 1rem;\">\r\n <button class=\"btn si\">\r\n Send invitations\r\n </button>\r\n <button class=\"btn mu\">\r\n Manage users\r\n </button>\r\n </div>\r\n </div>\r\n</header>", styles: [".btn{position:relative;display:inline-flex;gap:6px;align-items:center;justify-content:center;overflow:hidden!important;width:min-content;max-width:100%;padding:0rem .75rem;border:1px solid transparent;border-radius:6.25rem;font-weight:500;font-size:14px;text-overflow:ellipsis;white-space:nowrap;transition:all .1s cubic-bezier(.25,.1,.25,1);height:2rem;cursor:pointer}.btn:hover{background-color:#0000000d}.si{border-color:#0000004d;background-color:#0000;color:#000000f2}.mu{color:#fff;background-color:#000000f2}.mu:hover{background-color:#232323e6!important}\n"] }]
28
+ args: [{ selector: 'tk-users-table-toolbar', template: "<header style=\"margin-bottom: 1rem;\">\r\n <div style=\"display: flex; align-items: center; justify-content: space-between;\">\r\n <div class=\"collection-header-left\">\r\n <div style=\"display: flex; align-items: center; gap: 12px;\">\r\n <!-- Search Input -->\r\n <div style=\"position: relative; width: fit-content; min-width: 200px;\">\r\n <input (input)=\"onSearchInputChange($event)\" type=\"text\" placeholder=\"Search by display name, email\" style=\"width: 100%; height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 12px 6px 44px; border: 1px solid #00000080; background: #fff; color: #222; outline: none; box-sizing: border-box; min-width: 280px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">search</i>\r\n </span>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Filter Select -->\r\n <div style=\"display: flex; align-items: center; position: relative; width: fit-content; min-width: 200px;\">\r\n <span style=\"position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: #757575; font-size: 18px; font-weight: normal; pointer-events: none;\">\r\n <i class=\"material-icons\" style=\"font-size: 18px; font-weight: normal;\">filter_list</i>\r\n </span>\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 44px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Filter</option>\r\n </select>\r\n </div>\r\n <span style=\"margin: 0 4px; color: #757575; font-size: 1rem;\">or</span>\r\n <!-- Location Select -->\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\">\r\n <option>Select a Location</option>\r\n </select>\r\n\r\n <select style=\"height: 34px; border-radius: .5rem; font-size: 16px; padding: 6px 32px 6px 12px; border: 1px solid #00000080; background: #fff; min-width: 200px; width: fit-content; color: #222; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url('data:image/svg+xml;utf8,<svg fill=\\'%23757575\\' height=\\'20\\' viewBox=\\'0 0 24 24\\' width=\\'20\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M7 10l5 5 5-5z\\'/></svg>'); background-repeat: no-repeat; background-position: right 12px center; background-size: 20px 20px;\"\r\n (change)=\"onTypeChange($event)\">\r\n <option value=\"null\" disabled selected hidden>Select type</option>\r\n <option value=\"\">All</option>\r\n <option value=\"CUCM\">Dedicated Instance</option>\r\n <option value=\"WEBEX\">Multi-Tenant</option>\r\n <option value=\"ONPREM\">On Prem</option>\r\n </select>\r\n <span style=\"margin-left: 8px; color: #757575; font-size: 1rem; white-space: nowrap;\">{{ totalUsersCount }} users</span>\r\n </div>\r\n </div>\r\n <div style=\"display: flex; gap: 1rem;\">\r\n <button class=\"btn mu\" (click)=\"onAddUser()\">\r\n Add user\r\n </button>\r\n </div>\r\n </div>\r\n</header>", styles: [".btn{position:relative;display:inline-flex;gap:6px;align-items:center;justify-content:center;overflow:hidden!important;width:min-content;max-width:100%;padding:0rem .75rem;border:1px solid transparent;border-radius:6.25rem;font-weight:500;font-size:14px;text-overflow:ellipsis;white-space:nowrap;transition:all .1s cubic-bezier(.25,.1,.25,1);height:2rem;cursor:pointer}.btn:hover{background-color:#0000000d}.si{border-color:#0000004d;background-color:#0000;color:#000000f2}.mu{color:#fff;background-color:#000000f2}.mu:hover{background-color:#232323e6!important}\n"] }]
25
29
  }], propDecorators: { totalUsersCount: [{
26
30
  type: Input
27
31
  }], searchChange: [{
28
32
  type: Output
29
33
  }], searchByType: [{
30
34
  type: Output
35
+ }], addUser: [{
36
+ type: Output
31
37
  }] } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvY29tcG9uZW50cy90YWJsZS10b29sYmFyL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL2NvbXBvbmVudHMvdGFibGUtdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVMvRSxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBT3VCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0tBaUJ6RTtJQWJHLG1CQUFtQixDQUFDLEtBQVk7UUFDNUIsTUFBTSxLQUFLLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUVsRixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBWTtRQUM1QixNQUFNLEtBQUssR0FBSSxLQUFLLENBQUMsTUFBNEIsQ0FBQyxLQUF3QixDQUFDO1FBRTNFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O21IQW5CUSxxQkFBcUI7dUdBQXJCLHFCQUFxQix1TENUbEMsaTNJQStDUzs0RkR0Q0kscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNJLHdCQUF3Qjs4QkFLekIsZUFBZTtzQkFBdkIsS0FBSztnQkFDYSxZQUFZO3NCQUE5QixNQUFNO2dCQUNZLFlBQVk7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVTRVJfVFlQRVNfVFlQRSB9IGZyb20gXCIuLi8uLi9hcHAuY29uc3RhbnRzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndGstdXNlcnMtdGFibGUtdG9vbGJhcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS10b29sYmFyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlVG9vbGJhckNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSB0b3RhbFVzZXJzQ291bnQhOiBudW1iZXI7XHJcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VhcmNoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VhcmNoQnlUeXBlID0gbmV3IEV2ZW50RW1pdHRlcjxVU0VSX1RZUEVTX1RZUEU+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSB0aW1lcklkITogbnVtYmVyOyBcclxuXHJcbiAgICBvblNlYXJjaElucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZXJJZCkgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKSwgMTUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVHlwZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlIGFzIFVTRVJfVFlQRVNfVFlQRTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hCeVR5cGUuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcbn0iLCI8aGVhZGVyIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uLWhlYWRlci1sZWZ0XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTJweDtcIj5cclxuICAgICAgICAgIDwhLS0gU2VhcmNoIElucHV0IC0tPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IGZpdC1jb250ZW50OyBtaW4td2lkdGg6IDIwMHB4O1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgKGlucHV0KT1cIm9uU2VhcmNoSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgZGlzcGxheSBuYW1lLCBlbWFpbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzRweDsgYm9yZGVyLXJhZGl1czogLjVyZW07IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZzogNnB4IDEycHggNnB4IDQ0cHg7IGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA4MDsgYmFja2dyb3VuZDogI2ZmZjsgY29sb3I6ICMyMjI7IG91dGxpbmU6IG5vbmU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IG1pbi13aWR0aDogMjgwcHg7XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMnB4OyB0b3A6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyBjb2xvcjogIzc1NzU3NTsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogbm9ybWFsOyBwb2ludGVyLWV2ZW50czogbm9uZTtcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+c2VhcmNoPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luOiAwIDRweDsgY29sb3I6ICM3NTc1NzU7IGZvbnQtc2l6ZTogMXJlbTtcIj5vcjwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gRmlsdGVyIFNlbGVjdCAtLT5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiBmaXQtY29udGVudDsgbWluLXdpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEycHg7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IGNvbG9yOiAjNzU3NTc1OyBmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IHBvaW50ZXItZXZlbnRzOiBub25lO1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDtcIj5maWx0ZXJfbGlzdDwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IHN0eWxlPVwiaGVpZ2h0OiAzNHB4OyBib3JkZXItcmFkaXVzOiAuNXJlbTsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nOiA2cHggMzJweCA2cHggNDRweDsgYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMDgwOyBiYWNrZ3JvdW5kOiAjZmZmOyBtaW4td2lkdGg6IDIwMHB4OyB3aWR0aDogZml0LWNvbnRlbnQ7IGNvbG9yOiAjMjIyOyBhcHBlYXJhbmNlOiBub25lOyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IC1tb3otYXBwZWFyYW5jZTogbm9uZTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9XFwnJTIzNzU3NTc1XFwnIGhlaWdodD1cXCcyMFxcJyB2aWV3Qm94PVxcJzAgMCAyNCAyNFxcJyB3aWR0aD1cXCcyMFxcJyB4bWxucz1cXCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcJz48cGF0aCBkPVxcJ003IDEwbDUgNSA1LTV6XFwnLz48L3N2Zz4nKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgMTJweCBjZW50ZXI7IGJhY2tncm91bmQtc2l6ZTogMjBweCAyMHB4O1wiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+RmlsdGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbjogMCA0cHg7IGNvbG9yOiAjNzU3NTc1OyBmb250LXNpemU6IDFyZW07XCI+b3I8L3NwYW4+XHJcbiAgICAgICAgICA8IS0tIExvY2F0aW9uIFNlbGVjdCAtLT5cclxuICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9XCJoZWlnaHQ6IDM0cHg7IGJvcmRlci1yYWRpdXM6IC41cmVtOyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6IDZweCAzMnB4IDZweCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwODA7IGJhY2tncm91bmQ6ICNmZmY7IG1pbi13aWR0aDogMjAwcHg7IHdpZHRoOiBmaXQtY29udGVudDsgY29sb3I6ICMyMjI7IGFwcGVhcmFuY2U6IG5vbmU7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLW1vei1hcHBlYXJhbmNlOiBub25lOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cXCclMjM3NTc1NzVcXCcgaGVpZ2h0PVxcJzIwXFwnIHZpZXdCb3g9XFwnMCAwIDI0IDI0XFwnIHdpZHRoPVxcJzIwXFwnIHhtbG5zPVxcJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFwnPjxwYXRoIGQ9XFwnTTcgMTBsNSA1IDUtNXpcXCcvPjwvc3ZnPicpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAxMnB4IGNlbnRlcjsgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7XCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24+U2VsZWN0IGEgTG9jYXRpb248L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9XCJoZWlnaHQ6IDM0cHg7IGJvcmRlci1yYWRpdXM6IC41cmVtOyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6IDZweCAzMnB4IDZweCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwODA7IGJhY2tncm91bmQ6ICNmZmY7IG1pbi13aWR0aDogMjAwcHg7IHdpZHRoOiBmaXQtY29udGVudDsgY29sb3I6ICMyMjI7IGFwcGVhcmFuY2U6IG5vbmU7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLW1vei1hcHBlYXJhbmNlOiBub25lOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cXCclMjM3NTc1NzVcXCcgaGVpZ2h0PVxcJzIwXFwnIHZpZXdCb3g9XFwnMCAwIDI0IDI0XFwnIHdpZHRoPVxcJzIwXFwnIHhtbG5zPVxcJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFwnPjxwYXRoIGQ9XFwnTTcgMTBsNSA1IDUtNXpcXCcvPjwvc3ZnPicpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAxMnB4IGNlbnRlcjsgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7XCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVsbFwiIGRpc2FibGVkIHNlbGVjdGVkIGhpZGRlbj5TZWxlY3QgdHlwZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDVUNNXCI+RGVkaWNhdGVkIEluc3RhbmNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJXRUJFWFwiPk11bHRpLVRlbmFudDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiT05QUkVNXCI+T24gUHJlbTwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA4cHg7IGNvbG9yOiAjNzU3NTc1OyBmb250LXNpemU6IDFyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+e3sgdG90YWxVc2Vyc0NvdW50IH19IHVzZXJzPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbTtcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHNpXCI+XHJcbiAgICAgICAgICBTZW5kIGludml0YXRpb25zXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBtdVwiPlxyXG4gICAgICAgICAgTWFuYWdlIHVzZXJzXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvaGVhZGVyPiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvY29tcG9uZW50cy90YWJsZS10b29sYmFyL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL2NvbXBvbmVudHMvdGFibGUtdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVMvRSxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBT3VCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMxQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBQ25ELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBcUJ6RDtJQWpCRyxtQkFBbUIsQ0FBQyxLQUFZO1FBQzVCLE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFbEYsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQVk7UUFDNUIsTUFBTSxLQUFLLEdBQUksS0FBSyxDQUFDLE1BQTRCLENBQUMsS0FBd0IsQ0FBQztRQUUzRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7bUhBeEJRLHFCQUFxQjt1R0FBckIscUJBQXFCLDJNQ1RsQyw2eUlBNENTOzRGRG5DSSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksd0JBQXdCOzhCQUt6QixlQUFlO3NCQUF2QixLQUFLO2dCQUNhLFlBQVk7c0JBQTlCLE1BQU07Z0JBQ1ksWUFBWTtzQkFBOUIsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVU0VSX1RZUEVTX1RZUEUgfSBmcm9tIFwiLi4vLi4vYXBwLmNvbnN0YW50c1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3RrLXVzZXJzLXRhYmxlLXRvb2xiYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtdG9vbGJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVRvb2xiYXJDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgdG90YWxVc2Vyc0NvdW50ITogbnVtYmVyO1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlYXJjaENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlYXJjaEJ5VHlwZSA9IG5ldyBFdmVudEVtaXR0ZXI8VVNFUl9UWVBFU19UWVBFPigpO1xyXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGFkZFVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSB0aW1lcklkITogbnVtYmVyOyBcclxuXHJcbiAgICBvblNlYXJjaElucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZXJJZCkgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKSwgMTUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVHlwZUNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlIGFzIFVTRVJfVFlQRVNfVFlQRTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hCeVR5cGUuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGRVc2VyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWRkVXNlci5lbWl0KCk7XHJcbiAgICB9XHJcbn0iLCI8aGVhZGVyIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xsZWN0aW9uLWhlYWRlci1sZWZ0XCI+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTJweDtcIj5cclxuICAgICAgICAgIDwhLS0gU2VhcmNoIElucHV0IC0tPlxyXG4gICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IGZpdC1jb250ZW50OyBtaW4td2lkdGg6IDIwMHB4O1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgKGlucHV0KT1cIm9uU2VhcmNoSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgZGlzcGxheSBuYW1lLCBlbWFpbFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzRweDsgYm9yZGVyLXJhZGl1czogLjVyZW07IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZzogNnB4IDEycHggNnB4IDQ0cHg7IGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA4MDsgYmFja2dyb3VuZDogI2ZmZjsgY29sb3I6ICMyMjI7IG91dGxpbmU6IG5vbmU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IG1pbi13aWR0aDogMjgwcHg7XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMnB4OyB0b3A6IDUwJTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOyBjb2xvcjogIzc1NzU3NTsgZm9udC1zaXplOiAxOHB4OyBmb250LXdlaWdodDogbm9ybWFsOyBwb2ludGVyLWV2ZW50czogbm9uZTtcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+c2VhcmNoPC9pPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luOiAwIDRweDsgY29sb3I6ICM3NTc1NzU7IGZvbnQtc2l6ZTogMXJlbTtcIj5vcjwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gRmlsdGVyIFNlbGVjdCAtLT5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiBmaXQtY29udGVudDsgbWluLXdpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEycHg7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IGNvbG9yOiAjNzU3NTc1OyBmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IHBvaW50ZXItZXZlbnRzOiBub25lO1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDtcIj5maWx0ZXJfbGlzdDwvaT5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IHN0eWxlPVwiaGVpZ2h0OiAzNHB4OyBib3JkZXItcmFkaXVzOiAuNXJlbTsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nOiA2cHggMzJweCA2cHggNDRweDsgYm9yZGVyOiAxcHggc29saWQgIzAwMDAwMDgwOyBiYWNrZ3JvdW5kOiAjZmZmOyBtaW4td2lkdGg6IDIwMHB4OyB3aWR0aDogZml0LWNvbnRlbnQ7IGNvbG9yOiAjMjIyOyBhcHBlYXJhbmNlOiBub25lOyAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IC1tb3otYXBwZWFyYW5jZTogbm9uZTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9XFwnJTIzNzU3NTc1XFwnIGhlaWdodD1cXCcyMFxcJyB2aWV3Qm94PVxcJzAgMCAyNCAyNFxcJyB3aWR0aD1cXCcyMFxcJyB4bWxucz1cXCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcJz48cGF0aCBkPVxcJ003IDEwbDUgNSA1LTV6XFwnLz48L3N2Zz4nKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgMTJweCBjZW50ZXI7IGJhY2tncm91bmQtc2l6ZTogMjBweCAyMHB4O1wiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24+RmlsdGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbjogMCA0cHg7IGNvbG9yOiAjNzU3NTc1OyBmb250LXNpemU6IDFyZW07XCI+b3I8L3NwYW4+XHJcbiAgICAgICAgICA8IS0tIExvY2F0aW9uIFNlbGVjdCAtLT5cclxuICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9XCJoZWlnaHQ6IDM0cHg7IGJvcmRlci1yYWRpdXM6IC41cmVtOyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6IDZweCAzMnB4IDZweCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwODA7IGJhY2tncm91bmQ6ICNmZmY7IG1pbi13aWR0aDogMjAwcHg7IHdpZHRoOiBmaXQtY29udGVudDsgY29sb3I6ICMyMjI7IGFwcGVhcmFuY2U6IG5vbmU7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLW1vei1hcHBlYXJhbmNlOiBub25lOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cXCclMjM3NTc1NzVcXCcgaGVpZ2h0PVxcJzIwXFwnIHZpZXdCb3g9XFwnMCAwIDI0IDI0XFwnIHdpZHRoPVxcJzIwXFwnIHhtbG5zPVxcJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFwnPjxwYXRoIGQ9XFwnTTcgMTBsNSA1IDUtNXpcXCcvPjwvc3ZnPicpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAxMnB4IGNlbnRlcjsgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7XCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24+U2VsZWN0IGEgTG9jYXRpb248L29wdGlvbj5cclxuICAgICAgICAgIDwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgIDxzZWxlY3Qgc3R5bGU9XCJoZWlnaHQ6IDM0cHg7IGJvcmRlci1yYWRpdXM6IC41cmVtOyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6IDZweCAzMnB4IDZweCAxMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwODA7IGJhY2tncm91bmQ6ICNmZmY7IG1pbi13aWR0aDogMjAwcHg7IHdpZHRoOiBmaXQtY29udGVudDsgY29sb3I6ICMyMjI7IGFwcGVhcmFuY2U6IG5vbmU7IC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLW1vei1hcHBlYXJhbmNlOiBub25lOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cXCclMjM3NTc1NzVcXCcgaGVpZ2h0PVxcJzIwXFwnIHZpZXdCb3g9XFwnMCAwIDI0IDI0XFwnIHdpZHRoPVxcJzIwXFwnIHhtbG5zPVxcJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFwnPjxwYXRoIGQ9XFwnTTcgMTBsNSA1IDUtNXpcXCcvPjwvc3ZnPicpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAxMnB4IGNlbnRlcjsgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7XCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblR5cGVDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVsbFwiIGRpc2FibGVkIHNlbGVjdGVkIGhpZGRlbj5TZWxlY3QgdHlwZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDVUNNXCI+RGVkaWNhdGVkIEluc3RhbmNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJXRUJFWFwiPk11bHRpLVRlbmFudDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiT05QUkVNXCI+T24gUHJlbTwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA4cHg7IGNvbG9yOiAjNzU3NTc1OyBmb250LXNpemU6IDFyZW07IHdoaXRlLXNwYWNlOiBub3dyYXA7XCI+e3sgdG90YWxVc2Vyc0NvdW50IH19IHVzZXJzPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMXJlbTtcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIG11XCIgKGNsaWNrKT1cIm9uQWRkVXNlcigpXCI+XHJcbiAgICAgICAgICBBZGQgdXNlclxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2hlYWRlcj4iXX0=