ngx-edu-sharing-ui 10.0.20 → 10.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/scss/material-theme.scss +3 -3
- package/assets/scss/mixins.scss +1 -1
- package/assets/scss/variables-root.scss +2 -0
- package/assets/scss/variables-scss.scss +3 -4
- package/assets/scss/variables.scss +1 -1
- package/fesm2022/ngx-edu-sharing-ui.mjs +376 -319
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +14 -0
- package/lib/mds-viewer/widget/mds-widget.component.d.ts +6 -4
- package/package.json +8 -9
- package/esm2022/lib/actionbar/actionbar.component.mjs +0 -206
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +0 -170
- package/esm2022/lib/directives/border-box-observer.directive.mjs +0 -71
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +0 -71
- package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +0 -14
- package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +0 -79
- package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +0 -49
- package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +0 -105
- package/esm2022/lib/directives/focus-state.directive.mjs +0 -44
- package/esm2022/lib/directives/icon.directive.mjs +0 -184
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -85
- package/esm2022/lib/dropdown/dropdown.component.mjs +0 -83
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +0 -48
- package/esm2022/lib/edu-sharing-ui.module.mjs +0 -82
- package/esm2022/lib/index.mjs +0 -96
- package/esm2022/lib/list-items/available-widgets.mjs +0 -27
- package/esm2022/lib/list-items/format-duration.pipe.mjs +0 -20
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +0 -46
- package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +0 -29
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +0 -56
- package/esm2022/lib/list-items/list-items.module.mjs +0 -50
- package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +0 -41
- package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +0 -47
- package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +0 -24
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +0 -106
- package/esm2022/lib/list-items/list-widget.mjs +0 -49
- package/esm2022/lib/list-items/node-row/node-row.component.mjs +0 -24
- package/esm2022/lib/list-items/node-source.pipe.mjs +0 -49
- package/esm2022/lib/mds/mds-helper.service.mjs +0 -167
- package/esm2022/lib/mds/mds.module.mjs +0 -16
- package/esm2022/lib/mds-viewer/mds-viewer.component.mjs +0 -170
- package/esm2022/lib/mds-viewer/mds-viewer.service.mjs +0 -18
- package/esm2022/lib/mds-viewer/replace-element-with-div.mjs +0 -47
- package/esm2022/lib/mds-viewer/view-instance.service.mjs +0 -27
- package/esm2022/lib/mds-viewer/widget/mds-widget.component.mjs +0 -379
- package/esm2022/lib/node-entries/combined-data-source.mjs +0 -41
- package/esm2022/lib/node-entries/custom-templates-data-source.mjs +0 -7
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +0 -21
- package/esm2022/lib/node-entries/entries-model.mjs +0 -24
- package/esm2022/lib/node-entries/items-cap.mjs +0 -47
- package/esm2022/lib/node-entries/list-item-label.pipe.mjs +0 -37
- package/esm2022/lib/node-entries/node-cache.mjs +0 -73
- package/esm2022/lib/node-entries/node-data-source-remote.mjs +0 -4
- package/esm2022/lib/node-entries/node-data-source.mjs +0 -117
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +0 -117
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +0 -329
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +0 -44
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +0 -27
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +0 -71
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +0 -42
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +0 -294
- package/esm2022/lib/node-entries/node-entries-templates.service.mjs +0 -11
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +0 -369
- package/esm2022/lib/node-entries/node-entries.component.mjs +0 -132
- package/esm2022/lib/node-entries/node-entries.module.mjs +0 -161
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +0 -125
- package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +0 -48
- package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +0 -36
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +0 -75
- package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +0 -53
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +0 -41
- package/esm2022/lib/node-url/node-url.component.mjs +0 -132
- package/esm2022/lib/pipes/file-size.pipe.mjs +0 -32
- package/esm2022/lib/pipes/format-date.pipe.mjs +0 -38
- package/esm2022/lib/pipes/mds-duration.pipe.mjs +0 -25
- package/esm2022/lib/pipes/node-icon.pipe.mjs +0 -18
- package/esm2022/lib/pipes/node-image-size.pipe.mjs +0 -24
- package/esm2022/lib/pipes/node-image.pipe.mjs +0 -55
- package/esm2022/lib/pipes/node-license.pipe.mjs +0 -24
- package/esm2022/lib/pipes/node-person-name.pipe.mjs +0 -50
- package/esm2022/lib/pipes/node-title.pipe.mjs +0 -35
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +0 -33
- package/esm2022/lib/pipes/property-slug.pipe.mjs +0 -16
- package/esm2022/lib/pipes/replace-chars.pipe.mjs +0 -29
- package/esm2022/lib/pipes/vcard-name.pipe.mjs +0 -25
- package/esm2022/lib/services/abstract/app.service.mjs +0 -3
- package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +0 -10
- package/esm2022/lib/services/abstract/options-helper.service.mjs +0 -3
- package/esm2022/lib/services/abstract/toast.service.mjs +0 -3
- package/esm2022/lib/services/accessibility.service.mjs +0 -73
- package/esm2022/lib/services/app-container.service.mjs +0 -69
- package/esm2022/lib/services/local-events.service.mjs +0 -43
- package/esm2022/lib/services/node-entries.service.mjs +0 -201
- package/esm2022/lib/services/node-helper.service.mjs +0 -330
- package/esm2022/lib/services/nodes-drag-drop.service.mjs +0 -155
- package/esm2022/lib/services/options-helper-data.service.mjs +0 -142
- package/esm2022/lib/services/render-helper.service.mjs +0 -114
- package/esm2022/lib/services/repo-url.service.mjs +0 -50
- package/esm2022/lib/services/search-helper.service.mjs +0 -52
- package/esm2022/lib/services/temporary-storage.service.mjs +0 -48
- package/esm2022/lib/services/ui.service.mjs +0 -327
- package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +0 -50
- package/esm2022/lib/spinner/spinner.component.mjs +0 -19
- package/esm2022/lib/spinner-small/spinner-small.component.mjs +0 -18
- package/esm2022/lib/translations/fallback-translation-handler.mjs +0 -6
- package/esm2022/lib/translations/translation-loader.mjs +0 -219
- package/esm2022/lib/translations/translation-source.mjs +0 -11
- package/esm2022/lib/translations/translations.module.mjs +0 -82
- package/esm2022/lib/translations/translations.service.mjs +0 -238
- package/esm2022/lib/types/accessibillity.mjs +0 -19
- package/esm2022/lib/types/api-models.mjs +0 -2
- package/esm2022/lib/types/drag-drop.mjs +0 -2
- package/esm2022/lib/types/injection-tokens.mjs +0 -31
- package/esm2022/lib/types/keyboard-shortcuts.mjs +0 -11
- package/esm2022/lib/types/list-item.mjs +0 -41
- package/esm2022/lib/types/option-item.mjs +0 -192
- package/esm2022/lib/types/workflow.mjs +0 -25
- package/esm2022/lib/util/DateHelper.mjs +0 -200
- package/esm2022/lib/util/VCard.mjs +0 -278
- package/esm2022/lib/util/color-helper.mjs +0 -124
- package/esm2022/lib/util/duration-helper.mjs +0 -102
- package/esm2022/lib/util/functions.mjs +0 -13
- package/esm2022/lib/util/helper.mjs +0 -64
- package/esm2022/lib/util/isNumeric.mjs +0 -11
- package/esm2022/lib/util/rest-helper.mjs +0 -42
- package/esm2022/lib/util/ui-animation.mjs +0 -146
- package/esm2022/lib/util/ui-constants.mjs +0 -21
- package/esm2022/ngx-edu-sharing-ui.mjs +0 -5
- package/esm2022/public-api.mjs +0 -2
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, from, of, of as observableOf } from 'rxjs';
|
|
3
|
-
import { first, map, switchMap, tap } from 'rxjs/operators';
|
|
4
|
-
import { LANGUAGES, SessionStorageService } from 'ngx-edu-sharing-api';
|
|
5
|
-
import { I18N_CONFIG, I18nConfig } from '../types/injection-tokens';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "ngx-edu-sharing-api";
|
|
8
|
-
import * as i2 from "@angular/router";
|
|
9
|
-
import * as i3 from "@ngx-translate/core";
|
|
10
|
-
import * as i4 from "../services/abstract/app.service";
|
|
11
|
-
import * as i5 from "../types/injection-tokens";
|
|
12
|
-
// 'none' means that only labels should be shown (for dev)
|
|
13
|
-
const DEFAULT_SUPPORTED_LANGUAGES = [
|
|
14
|
-
'de',
|
|
15
|
-
'de-informal',
|
|
16
|
-
'de-no-binnen-i',
|
|
17
|
-
'en',
|
|
18
|
-
'fr',
|
|
19
|
-
'it',
|
|
20
|
-
'none',
|
|
21
|
-
];
|
|
22
|
-
export class TranslationsService {
|
|
23
|
-
constructor(config, injector,
|
|
24
|
-
// optional, some web components may don't have it!
|
|
25
|
-
route, i18nConfig, translate, ref, appService) {
|
|
26
|
-
this.config = config;
|
|
27
|
-
this.injector = injector;
|
|
28
|
-
this.route = route;
|
|
29
|
-
this.i18nConfig = i18nConfig;
|
|
30
|
-
this.translate = translate;
|
|
31
|
-
this.ref = ref;
|
|
32
|
-
this.appService = appService;
|
|
33
|
-
this.languageLoaded = new BehaviorSubject(false);
|
|
34
|
-
if (!this.i18nConfig) {
|
|
35
|
-
this.i18nConfig = new I18nConfig();
|
|
36
|
-
}
|
|
37
|
-
if (this.i18nConfig.obeyUserProfile) {
|
|
38
|
-
this.injector
|
|
39
|
-
.get(SessionStorageService)
|
|
40
|
-
?.observe('language')
|
|
41
|
-
.subscribe((lang) => {
|
|
42
|
-
// language has changed, i.e. user has different preference
|
|
43
|
-
if (this.translate.currentLang && this.translate.currentLang !== lang) {
|
|
44
|
-
this.initialize().subscribe(() => {
|
|
45
|
-
this.ref.tick();
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Determines and configures the language to use and triggers loading of translations with
|
|
53
|
-
* ngx-translate.
|
|
54
|
-
*
|
|
55
|
-
* Call this once in the app component.
|
|
56
|
-
*/
|
|
57
|
-
initialize() {
|
|
58
|
-
const supportedLanguages$ = from(this.config.get('supportedLanguages', DEFAULT_SUPPORTED_LANGUAGES));
|
|
59
|
-
if (this.appService?.isRunningApp()) {
|
|
60
|
-
return supportedLanguages$.pipe(switchMap((supportedLanguages) => this.initializeCordova(supportedLanguages)), map(() => void 0));
|
|
61
|
-
}
|
|
62
|
-
supportedLanguages$
|
|
63
|
-
.pipe(tap((supportedLanguages) => {
|
|
64
|
-
if (!supportedLanguages.includes('none')) {
|
|
65
|
-
supportedLanguages.push('none');
|
|
66
|
-
}
|
|
67
|
-
}), tap((supportedLanguages) => this.translate.addLangs(supportedLanguages)),
|
|
68
|
-
// Select queryParams.locale if set meaningfully
|
|
69
|
-
switchMap((supportedLanguages) => (this.route ? this.route.queryParams : of(null)).pipe(first(), map((params) => {
|
|
70
|
-
let selectedLanguage = null;
|
|
71
|
-
if (supportedLanguages.indexOf(params?.locale) !== -1) {
|
|
72
|
-
selectedLanguage = params?.locale;
|
|
73
|
-
}
|
|
74
|
-
else if (params?.locale) {
|
|
75
|
-
if (params?.locale === 'de') {
|
|
76
|
-
const deVariants = supportedLanguages.filter((l) => l.startsWith('de-'));
|
|
77
|
-
if (deVariants?.length === 1) {
|
|
78
|
-
selectedLanguage = deVariants[0];
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.warn(`Url requested language ${params.locale}, ` +
|
|
82
|
-
'but ambiguous variants are present: ' +
|
|
83
|
-
supportedLanguages);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
console.warn(`Url requested language ${params.locale}, ` +
|
|
88
|
-
'but it was not found or is not configured in the allowed languages: ' +
|
|
89
|
-
supportedLanguages);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
supportedLanguages,
|
|
94
|
-
selectedLanguage,
|
|
95
|
-
};
|
|
96
|
-
}))),
|
|
97
|
-
// Select storage.get('language') if set meaningfully
|
|
98
|
-
switchMap(({ supportedLanguages, selectedLanguage }) => {
|
|
99
|
-
if (selectedLanguage) {
|
|
100
|
-
return observableOf({
|
|
101
|
-
supportedLanguages,
|
|
102
|
-
selectedLanguage,
|
|
103
|
-
useStored: false,
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
if (!this.i18nConfig.obeyUserProfile) {
|
|
108
|
-
console.info('obeyUserProfile is disabled, using default language ' +
|
|
109
|
-
supportedLanguages[0]);
|
|
110
|
-
return of({
|
|
111
|
-
supportedLanguages,
|
|
112
|
-
selectedLanguage,
|
|
113
|
-
useStored: false,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
return this.injector
|
|
117
|
-
.get(SessionStorageService)
|
|
118
|
-
.get('language')
|
|
119
|
-
.pipe(map((storageLanguage) => {
|
|
120
|
-
let useStored = false;
|
|
121
|
-
if (supportedLanguages.indexOf(storageLanguage) !== -1) {
|
|
122
|
-
selectedLanguage = storageLanguage;
|
|
123
|
-
useStored = true;
|
|
124
|
-
}
|
|
125
|
-
return {
|
|
126
|
-
supportedLanguages,
|
|
127
|
-
selectedLanguage,
|
|
128
|
-
useStored,
|
|
129
|
-
};
|
|
130
|
-
}));
|
|
131
|
-
}
|
|
132
|
-
}),
|
|
133
|
-
// Use browser language if available, otherwise fall back to the first supported
|
|
134
|
-
// language.
|
|
135
|
-
map(({ supportedLanguages, selectedLanguage, useStored }) => {
|
|
136
|
-
if (selectedLanguage) {
|
|
137
|
-
return {
|
|
138
|
-
supportedLanguages,
|
|
139
|
-
selectedLanguage,
|
|
140
|
-
useStored,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
else if (
|
|
144
|
-
// Select browser language if set meaningfully
|
|
145
|
-
supportedLanguages.indexOf(this.translate.getBrowserLang()) !== -1) {
|
|
146
|
-
return {
|
|
147
|
-
supportedLanguages,
|
|
148
|
-
selectedLanguage: this.translate.getBrowserLang(),
|
|
149
|
-
useStored,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
// Select first supported language
|
|
154
|
-
return {
|
|
155
|
-
supportedLanguages,
|
|
156
|
-
selectedLanguage: supportedLanguages[0],
|
|
157
|
-
useStored,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
}),
|
|
161
|
-
// Set fallback language
|
|
162
|
-
tap(({ supportedLanguages, selectedLanguage, useStored }) => {
|
|
163
|
-
if (!useStored && this.i18nConfig.obeyUserProfile) {
|
|
164
|
-
void this.injector
|
|
165
|
-
.get(SessionStorageService)
|
|
166
|
-
.set('language', selectedLanguage);
|
|
167
|
-
}
|
|
168
|
-
if (selectedLanguage === 'none') {
|
|
169
|
-
this.translate.setDefaultLang('none');
|
|
170
|
-
}
|
|
171
|
-
else if (selectedLanguage?.startsWith('de-')) {
|
|
172
|
-
this.translate.setDefaultLang('de');
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
this.translate.setDefaultLang(supportedLanguages[0]);
|
|
176
|
-
}
|
|
177
|
-
}),
|
|
178
|
-
// Configure `ngx-translate` to use the determined language and trigger loading of
|
|
179
|
-
// translations.
|
|
180
|
-
switchMap(({ selectedLanguage }) => {
|
|
181
|
-
// console.log('language used: ' + selectedLanguage);
|
|
182
|
-
this.language = selectedLanguage;
|
|
183
|
-
return this.translate.use(selectedLanguage).pipe(map(() => void 0));
|
|
184
|
-
}))
|
|
185
|
-
.subscribe(() => {
|
|
186
|
-
// Notify anyone waiting for translations to be loaded.
|
|
187
|
-
this.languageLoaded.next(true);
|
|
188
|
-
});
|
|
189
|
-
return this.waitForInit();
|
|
190
|
-
}
|
|
191
|
-
async initializeCordova(supportedLanguages = DEFAULT_SUPPORTED_LANGUAGES) {
|
|
192
|
-
this.translate.addLangs(supportedLanguages);
|
|
193
|
-
let language = supportedLanguages[0];
|
|
194
|
-
this.translate.setDefaultLang(language);
|
|
195
|
-
this.translate.use(language);
|
|
196
|
-
this.language = language;
|
|
197
|
-
const data = await this.appService.getLanguage();
|
|
198
|
-
if (supportedLanguages.indexOf(data) != -1) {
|
|
199
|
-
language = data;
|
|
200
|
-
}
|
|
201
|
-
this.language = language;
|
|
202
|
-
this.translate.use(language).subscribe(() => {
|
|
203
|
-
this.languageLoaded.next(true);
|
|
204
|
-
});
|
|
205
|
-
// this.translate.getTranslation(language).subscribe(() => {
|
|
206
|
-
// });
|
|
207
|
-
return this.waitForInit();
|
|
208
|
-
}
|
|
209
|
-
waitForInit() {
|
|
210
|
-
return this.languageLoaded.pipe(first((languageLoaded) => languageLoaded), map(() => void 0));
|
|
211
|
-
}
|
|
212
|
-
/** Same as `translate.currentLang`. */
|
|
213
|
-
getLanguage() {
|
|
214
|
-
return this.language;
|
|
215
|
-
}
|
|
216
|
-
getISOLanguage() {
|
|
217
|
-
return LANGUAGES[this.language];
|
|
218
|
-
}
|
|
219
|
-
getLocale() {
|
|
220
|
-
return this.getISOLanguage().replace('_', '-');
|
|
221
|
-
}
|
|
222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsService, deps: [{ token: i1.ConfigService }, { token: i0.Injector }, { token: i2.ActivatedRoute, optional: true }, { token: I18N_CONFIG, optional: true }, { token: i3.TranslateService }, { token: i0.ApplicationRef }, { token: i4.AppService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
223
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsService, providedIn: 'root' }); }
|
|
224
|
-
}
|
|
225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsService, decorators: [{
|
|
226
|
-
type: Injectable,
|
|
227
|
-
args: [{ providedIn: 'root' }]
|
|
228
|
-
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i0.Injector }, { type: i2.ActivatedRoute, decorators: [{
|
|
229
|
-
type: Optional
|
|
230
|
-
}] }, { type: i5.I18nConfig, decorators: [{
|
|
231
|
-
type: Optional
|
|
232
|
-
}, {
|
|
233
|
-
type: Inject,
|
|
234
|
-
args: [I18N_CONFIG]
|
|
235
|
-
}] }, { type: i3.TranslateService }, { type: i0.ApplicationRef }, { type: i4.AppService, decorators: [{
|
|
236
|
-
type: Optional
|
|
237
|
-
}] }] });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQWlCLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFFcEUsMERBQTBEO0FBQzFELE1BQU0sMkJBQTJCLEdBQUc7SUFDaEMsSUFBSTtJQUNKLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osTUFBTTtDQUNULENBQUM7QUFHRixNQUFNLE9BQU8sbUJBQW1CO0lBSTVCLFlBQ1ksTUFBcUIsRUFDckIsUUFBa0I7SUFDMUIsbURBQW1EO0lBQy9CLEtBQXFCLEVBQ0EsVUFBc0IsRUFDdkQsU0FBMkIsRUFDM0IsR0FBbUIsRUFDUCxVQUFzQjtRQVBsQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFFTixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNBLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdkQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDUCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBVnRDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFZaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsUUFBUTtpQkFDUixHQUFHLENBQUMscUJBQXFCLENBQUM7Z0JBQzNCLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQztpQkFDcEIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2hCLDJEQUEyRDtnQkFDM0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVO1FBQ04sTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLDJCQUEyQixDQUFDLENBQ3JFLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUNsQyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FDM0IsU0FBUyxDQUFDLENBQUMsa0JBQTRCLEVBQUUsRUFBRSxDQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FDN0MsRUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDcEIsQ0FBQztRQUNOLENBQUM7UUFDRCxtQkFBbUI7YUFDZCxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsa0JBQTRCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEYsZ0RBQWdEO1FBQ2hELFNBQVMsQ0FBQyxDQUFDLGtCQUE0QixFQUFFLEVBQUUsQ0FDdkMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqRCxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNYLElBQUksZ0JBQWdCLEdBQVcsSUFBSSxDQUFDO1lBQ3BDLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxnQkFBZ0IsR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksTUFBTSxFQUFFLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDL0MsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDdEIsQ0FBQztvQkFDRixJQUFJLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzNCLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLE9BQU8sQ0FBQyxJQUFJLENBQ1IsMEJBQTBCLE1BQU0sQ0FBQyxNQUFNLElBQUk7NEJBQ3ZDLHNDQUFzQzs0QkFDdEMsa0JBQWtCLENBQ3pCLENBQUM7b0JBQ04sQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxDQUFDLElBQUksQ0FDUiwwQkFBMEIsTUFBTSxDQUFDLE1BQU0sSUFBSTt3QkFDdkMsc0VBQXNFO3dCQUN0RSxrQkFBa0IsQ0FDekIsQ0FBQztnQkFDTixDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU87Z0JBQ0gsa0JBQWtCO2dCQUNsQixnQkFBZ0I7YUFDbkIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUNMLENBQ0o7UUFDRCxxREFBcUQ7UUFDckQsU0FBUyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQixPQUFPLFlBQVksQ0FBQztvQkFDaEIsa0JBQWtCO29CQUNsQixnQkFBZ0I7b0JBQ2hCLFNBQVMsRUFBRSxLQUFLO2lCQUNuQixDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQ1Isc0RBQXNEO3dCQUNsRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsQ0FBQztvQkFDRixPQUFPLEVBQUUsQ0FBQzt3QkFDTixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsU0FBUyxFQUFFLEtBQUs7cUJBQ25CLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDLFFBQVE7cUJBQ2YsR0FBRyxDQUFDLHFCQUFxQixDQUFDO3FCQUMxQixHQUFHLENBQUMsVUFBVSxDQUFDO3FCQUNmLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN0QixJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNyRCxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7d0JBQ25DLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3JCLENBQUM7b0JBQ0QsT0FBTzt3QkFDSCxrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsU0FBUztxQkFDWixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUNMLENBQUM7WUFDVixDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsZ0ZBQWdGO1FBQ2hGLFlBQVk7UUFDWixHQUFHLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDeEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQixPQUFPO29CQUNILGtCQUFrQjtvQkFDbEIsZ0JBQWdCO29CQUNoQixTQUFTO2lCQUNaLENBQUM7WUFDTixDQUFDO2lCQUFNO1lBQ0gsOENBQThDO1lBQzlDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3BFLENBQUM7Z0JBQ0MsT0FBTztvQkFDSCxrQkFBa0I7b0JBQ2xCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFO29CQUNqRCxTQUFTO2lCQUNaLENBQUM7WUFDTixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osa0NBQWtDO2dCQUNsQyxPQUFPO29CQUNILGtCQUFrQjtvQkFDbEIsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxTQUFTO2lCQUNaLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0Ysd0JBQXdCO1FBQ3hCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUN4RCxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ2hELEtBQUssSUFBSSxDQUFDLFFBQVE7cUJBQ2IsR0FBRyxDQUFDLHFCQUFxQixDQUFDO3FCQUMxQixHQUFHLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksZ0JBQWdCLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUM7aUJBQU0sSUFBSSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLGtGQUFrRjtRQUNsRixnQkFBZ0I7UUFDaEIsU0FBUyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUU7WUFDL0IscURBQXFEO1lBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLHVEQUF1RDtZQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEdBQUcsMkJBQTJCO1FBQzVFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUMsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pELElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNILDREQUE0RDtRQUM1RCxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUMzQixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUN6QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDcEIsQ0FBQztJQUNOLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsY0FBYztRQUNWLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0FwT1EsbUJBQW1CLHFIQVNKLFdBQVc7bUhBVDFCLG1CQUFtQixjQUROLE1BQU07OzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzswQkFHOUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgb2YgYXMgb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UsIExBTkdVQUdFUywgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QvYXBwLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4Tl9DT05GSUcsIEkxOG5Db25maWcgfSBmcm9tICcuLi90eXBlcy9pbmplY3Rpb24tdG9rZW5zJztcblxuLy8gJ25vbmUnIG1lYW5zIHRoYXQgb25seSBsYWJlbHMgc2hvdWxkIGJlIHNob3duIChmb3IgZGV2KVxuY29uc3QgREVGQVVMVF9TVVBQT1JURURfTEFOR1VBR0VTID0gW1xuICAgICdkZScsXG4gICAgJ2RlLWluZm9ybWFsJyxcbiAgICAnZGUtbm8tYmlubmVuLWknLFxuICAgICdlbicsXG4gICAgJ2ZyJyxcbiAgICAnaXQnLFxuICAgICdub25lJyxcbl07XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25zU2VydmljZSB7XG4gICAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nO1xuICAgIHByaXZhdGUgbGFuZ3VhZ2VMb2FkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIC8vIG9wdGlvbmFsLCBzb21lIHdlYiBjb21wb25lbnRzIG1heSBkb24ndCBoYXZlIGl0IVxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJMThOX0NPTkZJRykgcHJpdmF0ZSBpMThuQ29uZmlnOiBJMThuQ29uZmlnLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5pMThuQ29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmkxOG5Db25maWcgPSBuZXcgSTE4bkNvbmZpZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmkxOG5Db25maWcub2JleVVzZXJQcm9maWxlKSB7XG4gICAgICAgICAgICB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgLmdldChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpXG4gICAgICAgICAgICAgICAgPy5vYnNlcnZlKCdsYW5ndWFnZScpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgobGFuZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZSBoYXMgY2hhbmdlZCwgaS5lLiB1c2VyIGhhcyBkaWZmZXJlbnQgcHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgJiYgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgIT09IGxhbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYudGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGxhbmd1YWdlIHRvIHVzZSBhbmQgdHJpZ2dlcnMgbG9hZGluZyBvZiB0cmFuc2xhdGlvbnMgd2l0aFxuICAgICAqIG5neC10cmFuc2xhdGUuXG4gICAgICpcbiAgICAgKiBDYWxsIHRoaXMgb25jZSBpbiB0aGUgYXBwIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBpbml0aWFsaXplKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRMYW5ndWFnZXMkID0gZnJvbShcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmdldCgnc3VwcG9ydGVkTGFuZ3VhZ2VzJywgREVGQVVMVF9TVVBQT1JURURfTEFOR1VBR0VTKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuYXBwU2VydmljZT8uaXNSdW5uaW5nQXBwKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRMYW5ndWFnZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzdXBwb3J0ZWRMYW5ndWFnZXM6IHN0cmluZ1tdKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb3Jkb3ZhKHN1cHBvcnRlZExhbmd1YWdlcyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdm9pZCAwKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChzdXBwb3J0ZWRMYW5ndWFnZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdXBwb3J0ZWRMYW5ndWFnZXMuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzLnB1c2goJ25vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRhcCgoc3VwcG9ydGVkTGFuZ3VhZ2VzOiBzdHJpbmdbXSkgPT4gdGhpcy50cmFuc2xhdGUuYWRkTGFuZ3Moc3VwcG9ydGVkTGFuZ3VhZ2VzKSksXG4gICAgICAgICAgICAgICAgLy8gU2VsZWN0IHF1ZXJ5UGFyYW1zLmxvY2FsZSBpZiBzZXQgbWVhbmluZ2Z1bGx5XG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChzdXBwb3J0ZWRMYW5ndWFnZXM6IHN0cmluZ1tdKSA9PlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5yb3V0ZSA/IHRoaXMucm91dGUucXVlcnlQYXJhbXMgOiBvZihudWxsKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRMYW5ndWFnZXMuaW5kZXhPZihwYXJhbXM/LmxvY2FsZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2UgPSBwYXJhbXM/LmxvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcz8ubG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXM/LmxvY2FsZSA9PT0gJ2RlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVWYXJpYW50cyA9IHN1cHBvcnRlZExhbmd1YWdlcy5maWx0ZXIoKGwpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbC5zdGFydHNXaXRoKCdkZS0nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVWYXJpYW50cz8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZSA9IGRlVmFyaWFudHNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFVybCByZXF1ZXN0ZWQgbGFuZ3VhZ2UgJHtwYXJhbXMubG9jYWxlfSwgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IGFtYmlndW91cyB2YXJpYW50cyBhcmUgcHJlc2VudDogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVXJsIHJlcXVlc3RlZCBsYW5ndWFnZSAke3BhcmFtcy5sb2NhbGV9LCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCBpdCB3YXMgbm90IGZvdW5kIG9yIGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBhbGxvd2VkIGxhbmd1YWdlczogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZExhbmd1YWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBzdG9yYWdlLmdldCgnbGFuZ3VhZ2UnKSBpZiBzZXQgbWVhbmluZ2Z1bGx5XG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IHN1cHBvcnRlZExhbmd1YWdlcywgc2VsZWN0ZWRMYW5ndWFnZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZExhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VTdG9yZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaTE4bkNvbmZpZy5vYmV5VXNlclByb2ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYmV5VXNlclByb2ZpbGUgaXMgZGlzYWJsZWQsIHVzaW5nIGRlZmF1bHQgbGFuZ3VhZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMYW5ndWFnZXNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMYW5ndWFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVN0b3JlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmplY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2xhbmd1YWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChzdG9yYWdlTGFuZ3VhZ2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1c2VTdG9yZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRMYW5ndWFnZXMuaW5kZXhPZihzdG9yYWdlTGFuZ3VhZ2UpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2UgPSBzdG9yYWdlTGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlU3RvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlU3RvcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIFVzZSBicm93c2VyIGxhbmd1YWdlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB0aGUgZmlyc3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgLy8gbGFuZ3VhZ2UuXG4gICAgICAgICAgICAgICAgbWFwKCh7IHN1cHBvcnRlZExhbmd1YWdlcywgc2VsZWN0ZWRMYW5ndWFnZSwgdXNlU3RvcmVkIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlU3RvcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBicm93c2VyIGxhbmd1YWdlIGlmIHNldCBtZWFuaW5nZnVsbHlcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZExhbmd1YWdlcy5pbmRleE9mKHRoaXMudHJhbnNsYXRlLmdldEJyb3dzZXJMYW5nKCkpICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U6IHRoaXMudHJhbnNsYXRlLmdldEJyb3dzZXJMYW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlU3RvcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlbGVjdCBmaXJzdCBzdXBwb3J0ZWQgbGFuZ3VhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U6IHN1cHBvcnRlZExhbmd1YWdlc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VTdG9yZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gU2V0IGZhbGxiYWNrIGxhbmd1YWdlXG4gICAgICAgICAgICAgICAgdGFwKCh7IHN1cHBvcnRlZExhbmd1YWdlcywgc2VsZWN0ZWRMYW5ndWFnZSwgdXNlU3RvcmVkIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VTdG9yZWQgJiYgdGhpcy5pMThuQ29uZmlnLm9iZXlVc2VyUHJvZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldCgnbGFuZ3VhZ2UnLCBzZWxlY3RlZExhbmd1YWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRMYW5ndWFnZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnbm9uZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTGFuZ3VhZ2U/LnN0YXJ0c1dpdGgoJ2RlLScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKHN1cHBvcnRlZExhbmd1YWdlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyBDb25maWd1cmUgYG5neC10cmFuc2xhdGVgIHRvIHVzZSB0aGUgZGV0ZXJtaW5lZCBsYW5ndWFnZSBhbmQgdHJpZ2dlciBsb2FkaW5nIG9mXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNsYXRpb25zLlxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBzZWxlY3RlZExhbmd1YWdlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2xhbmd1YWdlIHVzZWQ6ICcgKyBzZWxlY3RlZExhbmd1YWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZSA9IHNlbGVjdGVkTGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS51c2Uoc2VsZWN0ZWRMYW5ndWFnZSkucGlwZShtYXAoKCkgPT4gdm9pZCAwKSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBOb3RpZnkgYW55b25lIHdhaXRpbmcgZm9yIHRyYW5zbGF0aW9ucyB0byBiZSBsb2FkZWQuXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUxvYWRlZC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLndhaXRGb3JJbml0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplQ29yZG92YShzdXBwb3J0ZWRMYW5ndWFnZXMgPSBERUZBVUxUX1NVUFBPUlRFRF9MQU5HVUFHRVMpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuYWRkTGFuZ3Moc3VwcG9ydGVkTGFuZ3VhZ2VzKTtcbiAgICAgICAgbGV0IGxhbmd1YWdlID0gc3VwcG9ydGVkTGFuZ3VhZ2VzWzBdO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZyhsYW5ndWFnZSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5ndWFnZSk7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5nZXRMYW5ndWFnZSgpO1xuICAgICAgICBpZiAoc3VwcG9ydGVkTGFuZ3VhZ2VzLmluZGV4T2YoZGF0YSkgIT0gLTEpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5ndWFnZSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VMb2FkZWQubmV4dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRoaXMudHJhbnNsYXRlLmdldFRyYW5zbGF0aW9uKGxhbmd1YWdlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMud2FpdEZvckluaXQoKTtcbiAgICB9XG5cbiAgICB3YWl0Rm9ySW5pdCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VMb2FkZWQucGlwZShcbiAgICAgICAgICAgIGZpcnN0KChsYW5ndWFnZUxvYWRlZCkgPT4gbGFuZ3VhZ2VMb2FkZWQpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHZvaWQgMCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIFNhbWUgYXMgYHRyYW5zbGF0ZS5jdXJyZW50TGFuZ2AuICovXG4gICAgZ2V0TGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgZ2V0SVNPTGFuZ3VhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIExBTkdVQUdFU1t0aGlzLmxhbmd1YWdlXTtcbiAgICB9XG5cbiAgICBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SVNPTGFuZ3VhZ2UoKS5yZXBsYWNlKCdfJywgJy0nKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export class AccessibilitySettings {
|
|
2
|
-
constructor() {
|
|
3
|
-
this.toastMode = 'all';
|
|
4
|
-
this.toastDuration = ToastDuration.Seconds_5;
|
|
5
|
-
this.contrastMode = false;
|
|
6
|
-
this.indicatorIcons = true;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export var ToastDuration;
|
|
10
|
-
(function (ToastDuration) {
|
|
11
|
-
ToastDuration[ToastDuration["Seconds_3"] = 3] = "Seconds_3";
|
|
12
|
-
ToastDuration[ToastDuration["Seconds_5"] = 5] = "Seconds_5";
|
|
13
|
-
ToastDuration[ToastDuration["Seconds_8"] = 8] = "Seconds_8";
|
|
14
|
-
ToastDuration[ToastDuration["Seconds_15"] = 15] = "Seconds_15";
|
|
15
|
-
ToastDuration[ToastDuration["Seconds_30"] = 30] = "Seconds_30";
|
|
16
|
-
ToastDuration[ToastDuration["Seconds_60"] = 60] = "Seconds_60";
|
|
17
|
-
ToastDuration[ToastDuration["Infinite"] = null] = "Infinite";
|
|
18
|
-
})(ToastDuration || (ToastDuration = {}));
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzaWJpbGxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3R5cGVzL2FjY2Vzc2liaWxsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxxQkFBcUI7SUFBbEM7UUFDSSxjQUFTLEdBQXdCLEtBQUssQ0FBQztRQUN2QyxrQkFBYSxHQUFrQixhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3ZELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7Q0FBQTtBQUNELE1BQU0sQ0FBTixJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDckIsMkRBQWEsQ0FBQTtJQUNiLDJEQUFhLENBQUE7SUFDYiwyREFBYSxDQUFBO0lBQ2IsOERBQWUsQ0FBQTtJQUNmLDhEQUFlLENBQUE7SUFDZiw4REFBZSxDQUFBO0lBQ2YsMENBQVcsSUFBSSxjQUFBLENBQUE7QUFDbkIsQ0FBQyxFQVJXLGFBQWEsS0FBYixhQUFhLFFBUXhCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFjY2Vzc2liaWxpdHlTZXR0aW5ncyB7XG4gICAgdG9hc3RNb2RlOiAnaW1wb3J0YW50JyB8ICdhbGwnID0gJ2FsbCc7XG4gICAgdG9hc3REdXJhdGlvbjogVG9hc3REdXJhdGlvbiA9IFRvYXN0RHVyYXRpb24uU2Vjb25kc181O1xuICAgIGNvbnRyYXN0TW9kZSA9IGZhbHNlO1xuICAgIGluZGljYXRvckljb25zID0gdHJ1ZTtcbn1cbmV4cG9ydCBlbnVtIFRvYXN0RHVyYXRpb24ge1xuICAgIFNlY29uZHNfMyA9IDMsXG4gICAgU2Vjb25kc181ID0gNSxcbiAgICBTZWNvbmRzXzggPSA4LFxuICAgIFNlY29uZHNfMTUgPSAxNSxcbiAgICBTZWNvbmRzXzMwID0gMzAsXG4gICAgU2Vjb25kc182MCA9IDYwLFxuICAgIEluZmluaXRlID0gbnVsbCxcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdHlwZXMvYXBpLW1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsTm9kZSBleHRlbmRzIE5vZGUge1xuICAgIHZpcnR1YWw6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogc2hvdWxkIHRoZSB2aXJ0dWFsIG5vZGUgb3ZlcnJpZGUgYW4gZXhpc3Rpbmcgbm9kZVxuICAgICAqIChpZiB1bnNldCwgZXF1YWxzIHRydWUpXG4gICAgICovXG4gICAgb3ZlcnJpZGU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIG9ic2VydmUgdGhpcyBub2RlIGZvciBjaGFuZ2VzIChpLmUuIGNvbm5lY3RvciBub2RlcylcbiAgICAgKi9cbiAgICBvYnNlcnZlPzogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1kcm9wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi90eXBlcy9kcmFnLWRyb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGUgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcblxuZXhwb3J0IHR5cGUgRHJvcEFjdGlvbiA9ICdtb3ZlJyB8ICdjb3B5JyB8ICdsaW5rJztcblxuZXhwb3J0IGludGVyZmFjZSBEcmFnRGF0YTxUID0gdW5rbm93bj4ge1xuICAgIGRyYWdnZWROb2RlczogTm9kZVtdO1xuICAgIGFjdGlvbjogRHJvcEFjdGlvbjtcbiAgICB0YXJnZXQ6IFQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIERyb3BUYXJnZXRTdGF0ZSB7XG4gICAgYWN0aW9uOiBEcm9wQWN0aW9uO1xuICAgIGNhbkRyb3A6IENhbkRyb3A7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuRHJvcCB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhcmdldCBpcyBhIHZhbGlkIGRyb3AgdGFyZ2V0IGZvciB0aGUgZHJhZ2dlZCBub2RlcyBhbmQgdGhlIGdpdmVuIGFjdGlvbi4gKi9cbiAgICBhY2NlcHQ6IGJvb2xlYW47XG4gICAgLyoqIFdoZW4gZGVuaWVkLCB3aGV0aGVyIHRvIGV4cGxpY2l0bHkgbWFyayB0aGUgdGFyZ2V0IHdoZW4gaG92ZXJlZC4gKi9cbiAgICBkZW55RXhwbGljaXQ/OiBib29sZWFuO1xuICAgIC8qKiBBIG1lc3NhZ2UgdG8gc2hvdyB3aGVuIHRyaWVkIHRvIGRyb3Agb24gYSBkZW5pZWQgdGFyZ2V0LiAqL1xuICAgIGRlbnlSZWFzb24/OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* A custom base path for the assets directory.
|
|
4
|
-
*
|
|
5
|
-
* This is useful when the application cannot be served from the base HREF set in index.html. This
|
|
6
|
-
* is the case when it is embedded as a web component into another website.
|
|
7
|
-
*/
|
|
8
|
-
export const ASSETS_BASE_PATH = new InjectionToken('ASSETS_BASE_PATH');
|
|
9
|
-
export class I18nConfig {
|
|
10
|
-
constructor() {
|
|
11
|
-
/**
|
|
12
|
-
* shall the user profile be read
|
|
13
|
-
* If not set, defaults to true
|
|
14
|
-
*/
|
|
15
|
-
this.obeyUserProfile = true;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* additional configuration options
|
|
20
|
-
*/
|
|
21
|
-
export const I18N_CONFIG = new InjectionToken('I18N_CONFIG');
|
|
22
|
-
/**
|
|
23
|
-
* custom additional uris to fetch language files from
|
|
24
|
-
*
|
|
25
|
-
* Might be used if additional angular modules require language data
|
|
26
|
-
*
|
|
27
|
-
* Example
|
|
28
|
-
*{provide: ADDITIONAL_I18N_PROVIDER, useValue: (lang: string) => { return ['/edu-sharing/assets/i18n/myI18n/' + lang + '.json']}},
|
|
29
|
-
*/
|
|
30
|
-
export const ADDITIONAL_I18N_PROVIDER = new InjectionToken('ADDITIONAL_I18N_PROVIDER');
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdHlwZXMvaW5qZWN0aW9uLXRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQVMsa0JBQWtCLENBQUMsQ0FBQztBQUUvRSxNQUFNLE9BQU8sVUFBVTtJQUF2QjtRQUNJOzs7V0FHRztRQUNILG9CQUFlLEdBQWEsSUFBSSxDQUFDO0lBQ3JDLENBQUM7Q0FBQTtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksY0FBYyxDQUFhLGFBQWEsQ0FBQyxDQUFDO0FBQ3pFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsMEJBQTBCLENBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgY3VzdG9tIGJhc2UgcGF0aCBmb3IgdGhlIGFzc2V0cyBkaXJlY3RvcnkuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgYXBwbGljYXRpb24gY2Fubm90IGJlIHNlcnZlZCBmcm9tIHRoZSBiYXNlIEhSRUYgc2V0IGluIGluZGV4Lmh0bWwuIFRoaXNcbiAqIGlzIHRoZSBjYXNlIHdoZW4gaXQgaXMgZW1iZWRkZWQgYXMgYSB3ZWIgY29tcG9uZW50IGludG8gYW5vdGhlciB3ZWJzaXRlLlxuICovXG5leHBvcnQgY29uc3QgQVNTRVRTX0JBU0VfUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdBU1NFVFNfQkFTRV9QQVRIJyk7XG5cbmV4cG9ydCBjbGFzcyBJMThuQ29uZmlnIHtcbiAgICAvKipcbiAgICAgKiBzaGFsbCB0aGUgdXNlciBwcm9maWxlIGJlIHJlYWRcbiAgICAgKiBJZiBub3Qgc2V0LCBkZWZhdWx0cyB0byB0cnVlXG4gICAgICovXG4gICAgb2JleVVzZXJQcm9maWxlPzogYm9vbGVhbiA9IHRydWU7XG59XG5cbi8qKlxuICogYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IEkxOE5fQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEkxOG5Db25maWc+KCdJMThOX0NPTkZJRycpO1xuLyoqXG4gKiBjdXN0b20gYWRkaXRpb25hbCB1cmlzIHRvIGZldGNoIGxhbmd1YWdlIGZpbGVzIGZyb21cbiAqXG4gKiBNaWdodCBiZSB1c2VkIGlmIGFkZGl0aW9uYWwgYW5ndWxhciBtb2R1bGVzIHJlcXVpcmUgbGFuZ3VhZ2UgZGF0YVxuICpcbiAqIEV4YW1wbGVcbiAqe3Byb3ZpZGU6IEFERElUSU9OQUxfSTE4Tl9QUk9WSURFUiwgdXNlVmFsdWU6IChsYW5nOiBzdHJpbmcpID0+IHsgcmV0dXJuIFsnL2VkdS1zaGFyaW5nL2Fzc2V0cy9pMThuL215STE4bi8nICsgbGFuZyArICcuanNvbiddfX0sXG4gKi9cbmV4cG9ydCBjb25zdCBBRERJVElPTkFMX0kxOE5fUFJPVklERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48KGxhbmc6IHN0cmluZykgPT4gc3RyaW5nW10+KFxuICAgICdBRERJVElPTkFMX0kxOE5fUFJPVklERVInLFxuKTtcbiJdfQ==
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export function matchesShortcutCondition(event, condition) {
|
|
2
|
-
return (event.code === condition.keyCode &&
|
|
3
|
-
matchesModifiers(event, condition.modifiers) &&
|
|
4
|
-
!condition.ignoreWhen?.(event));
|
|
5
|
-
}
|
|
6
|
-
function matchesModifiers(event, modifiers = []) {
|
|
7
|
-
return (modifiers.includes('Alt') === event.altKey &&
|
|
8
|
-
modifiers.includes('Shift') === event.shiftKey &&
|
|
9
|
-
modifiers.includes('Ctrl/Cmd') === (event.ctrlKey || event.metaKey));
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtc2hvcnRjdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi90eXBlcy9rZXlib2FyZC1zaG9ydGN1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxVQUFVLHdCQUF3QixDQUNwQyxLQUFvQixFQUNwQixTQUFvQztJQUVwQyxPQUFPLENBQ0gsS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsT0FBTztRQUNoQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUM1QyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDakMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQW9CLEVBQUUsWUFBd0IsRUFBRTtJQUN0RSxPQUFPLENBQ0gsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTTtRQUMxQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxRQUFRO1FBQzlDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDdEUsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBNb2RpZmllciA9ICdDdHJsL0NtZCcgfCAnU2hpZnQnIHwgJ0FsdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Ym9hcmRTaG9ydGN1dENvbmRpdGlvbiB7XG4gICAgbW9kaWZpZXJzPzogTW9kaWZpZXJbXTtcbiAgICBrZXlDb2RlOiBzdHJpbmc7XG4gICAgaWdub3JlV2hlbj86IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Ym9hcmRTaG9ydGN1dCBleHRlbmRzIEtleWJvYXJkU2hvcnRjdXRDb25kaXRpb24ge1xuICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc1Nob3J0Y3V0Q29uZGl0aW9uKFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgIGNvbmRpdGlvbjogS2V5Ym9hcmRTaG9ydGN1dENvbmRpdGlvbixcbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIGV2ZW50LmNvZGUgPT09IGNvbmRpdGlvbi5rZXlDb2RlICYmXG4gICAgICAgIG1hdGNoZXNNb2RpZmllcnMoZXZlbnQsIGNvbmRpdGlvbi5tb2RpZmllcnMpICYmXG4gICAgICAgICFjb25kaXRpb24uaWdub3JlV2hlbj8uKGV2ZW50KVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXNNb2RpZmllcnMoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG1vZGlmaWVyczogTW9kaWZpZXJbXSA9IFtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgbW9kaWZpZXJzLmluY2x1ZGVzKCdBbHQnKSA9PT0gZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgIG1vZGlmaWVycy5pbmNsdWRlcygnU2hpZnQnKSA9PT0gZXZlbnQuc2hpZnRLZXkgJiZcbiAgICAgICAgbW9kaWZpZXJzLmluY2x1ZGVzKCdDdHJsL0NtZCcpID09PSAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KVxuICAgICk7XG59XG4iXX0=
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A list item info, which is basically a column
|
|
3
|
-
* Example:
|
|
4
|
-
this.columns.push(new ListItem(RestConstants.CM_NAME));
|
|
5
|
-
this.columns.push(new ListItem(RestConstants.CM_ARCHIVED_DATE));
|
|
6
|
-
*/
|
|
7
|
-
export class ListItem {
|
|
8
|
-
constructor(type, name, config = {
|
|
9
|
-
showLabel: false,
|
|
10
|
-
}) {
|
|
11
|
-
this.type = type;
|
|
12
|
-
this.name = name;
|
|
13
|
-
this.config = config;
|
|
14
|
-
/**
|
|
15
|
-
* Should this item be shown by default
|
|
16
|
-
* @type {boolean}
|
|
17
|
-
*/
|
|
18
|
-
this.visible = true;
|
|
19
|
-
}
|
|
20
|
-
static getCollectionDefaults() {
|
|
21
|
-
let columns = [];
|
|
22
|
-
columns.push(new ListItem('COLLECTION', 'title'));
|
|
23
|
-
columns.push(new ListItem('COLLECTION', 'info'));
|
|
24
|
-
columns.push(new ListItem('COLLECTION', 'scope'));
|
|
25
|
-
return columns;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export class ListItemSort extends ListItem {
|
|
29
|
-
constructor(type, name, mode = null, config = {
|
|
30
|
-
showLabel: false,
|
|
31
|
-
}) {
|
|
32
|
-
super(type, name, config);
|
|
33
|
-
this.type = type;
|
|
34
|
-
this.name = name;
|
|
35
|
-
this.mode = mode;
|
|
36
|
-
this.config = config;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export class SortEvent extends ListItemSort {
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi90eXBlcy9saXN0LWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQWdCakIsWUFDVyxJQUFrQixFQUNsQixJQUFZLEVBQ1osU0FBUztRQUNaLFNBQVMsRUFBRSxLQUFLO0tBQ25CO1FBSk0sU0FBSSxHQUFKLElBQUksQ0FBYztRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osV0FBTSxHQUFOLE1BQU0sQ0FFWjtRQXBCTDs7O1dBR0c7UUFDSSxZQUFPLEdBQUcsSUFBSSxDQUFDO0lBaUJuQixDQUFDO0lBRUosTUFBTSxDQUFDLHFCQUFxQjtRQUN4QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUNKO0FBQ0QsTUFBTSxPQUFPLFlBQWEsU0FBUSxRQUFRO0lBQ3RDLFlBQ1csSUFBa0IsRUFDbEIsSUFBWSxFQUNaLE9BQTBDLElBQUksRUFDOUMsU0FBUztRQUNaLFNBQVMsRUFBRSxLQUFLO0tBQ25CO1FBRUQsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFQbkIsU0FBSSxHQUFKLElBQUksQ0FBYztRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osU0FBSSxHQUFKLElBQUksQ0FBMEM7UUFDOUMsV0FBTSxHQUFOLE1BQU0sQ0FFWjtJQUdMLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxTQUFVLFNBQVEsWUFBWTtDQUUxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBMaXN0SXRlbVR5cGUgPSAnTk9ERScgfCAnTk9ERV9QUk9QT1NBTCcgfCAnQ09MTEVDVElPTicgfCAnT1JHJyB8ICdHUk9VUCcgfCAnVVNFUic7XG5cbi8qKlxuICogQSBsaXN0IGl0ZW0gaW5mbywgd2hpY2ggaXMgYmFzaWNhbGx5IGEgY29sdW1uXG4gKiBFeGFtcGxlOlxuIHRoaXMuY29sdW1ucy5wdXNoKG5ldyBMaXN0SXRlbShSZXN0Q29uc3RhbnRzLkNNX05BTUUpKTtcbiB0aGlzLmNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oUmVzdENvbnN0YW50cy5DTV9BUkNISVZFRF9EQVRFKSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSB7XG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoaXMgaXRlbSBiZSBzaG93biBieSBkZWZhdWx0XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHVibGljIHZpc2libGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogTGFiZWwgdG8gZGlzcGxheSwgaWYgc2V0LCBzaG91bGQgYmUgcHJlZmVycmVkIGluc3RlYWQgb2YgYXV0b21hdGljIGkxOG5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIGN1c3RvbSBmb3JtYXQgc3RyaW5nIGZvciBkYXRlIGZpZWxkcywgbWF5IGJlIG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybWF0OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB0eXBlOiBMaXN0SXRlbVR5cGUsXG4gICAgICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBjb25maWcgPSB7XG4gICAgICAgICAgICBzaG93TGFiZWw6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICkge31cblxuICAgIHN0YXRpYyBnZXRDb2xsZWN0aW9uRGVmYXVsdHMoKSB7XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ0NPTExFQ1RJT04nLCAndGl0bGUnKSk7XG4gICAgICAgIGNvbHVtbnMucHVzaChuZXcgTGlzdEl0ZW0oJ0NPTExFQ1RJT04nLCAnaW5mbycpKTtcbiAgICAgICAgY29sdW1ucy5wdXNoKG5ldyBMaXN0SXRlbSgnQ09MTEVDVElPTicsICdzY29wZScpKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtU29ydCBleHRlbmRzIExpc3RJdGVtIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHR5cGU6IExpc3RJdGVtVHlwZSxcbiAgICAgICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIG1vZGU6ICdhc2NlbmRpbmcnIHwgJ2Rlc2NlbmRpbmcnIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHB1YmxpYyBjb25maWcgPSB7XG4gICAgICAgICAgICBzaG93TGFiZWw6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICkge1xuICAgICAgICBzdXBlcih0eXBlLCBuYW1lLCBjb25maWcpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBTb3J0RXZlbnQgZXh0ZW5kcyBMaXN0SXRlbVNvcnQge1xuICAgIGFzY2VuZGluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVSSBlbGVtZW50IHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGNob29zZSBzb3J0aW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRQYW5lbCB7XG4gICAgYWN0aXZlOiBzdHJpbmc7XG4gICAgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICAgIHJlYWRvbmx5IHNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTb3J0Pjtcbn1cbiJdfQ==
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
export var NodesRightMode;
|
|
2
|
-
(function (NodesRightMode) {
|
|
3
|
-
// rights on the current node, no matter if its a reference or origianl
|
|
4
|
-
NodesRightMode[NodesRightMode["Local"] = 0] = "Local";
|
|
5
|
-
// effective rights on the current node, only relevant for collection references (for non-refs, this equals to local)
|
|
6
|
-
NodesRightMode[NodesRightMode["Effective"] = 1] = "Effective";
|
|
7
|
-
})(NodesRightMode || (NodesRightMode = {}));
|
|
8
|
-
export class OptionItem {
|
|
9
|
-
/**
|
|
10
|
-
*
|
|
11
|
-
* @param name the option name, which is used for the translation
|
|
12
|
-
* @param icon A material icon name
|
|
13
|
-
* @param callback A function callback when this option is chosen. Will get the current node
|
|
14
|
-
* passed as an argument. If available, the relevant nodes are passed as second argument,
|
|
15
|
-
* i.e., the selection, if any, or the current node as single-item array otherwise.
|
|
16
|
-
*/
|
|
17
|
-
constructor(name, icon,
|
|
18
|
-
// TODO: Maybe switch to only providing the second parameter.
|
|
19
|
-
callback) {
|
|
20
|
-
this.name = name;
|
|
21
|
-
this.icon = icon;
|
|
22
|
-
this.callback = callback;
|
|
23
|
-
/**
|
|
24
|
-
* If true, this option will be shown all the time in the node table
|
|
25
|
-
* @type {boolean}
|
|
26
|
-
*/
|
|
27
|
-
this.showAlways = false;
|
|
28
|
-
/**
|
|
29
|
-
* If true, this option will be shown as an action (if room). If none of the items has showAsAction set, the first items will always be shown as action
|
|
30
|
-
* @type {boolean}
|
|
31
|
-
*/
|
|
32
|
-
this.showAsAction = false;
|
|
33
|
-
/**
|
|
34
|
-
* If true, this option will be shown as a toggle on the right side (provide iconToggle as a toggle icon)
|
|
35
|
-
* @type {boolean}
|
|
36
|
-
*/
|
|
37
|
-
this.isToggle = false;
|
|
38
|
-
/**
|
|
39
|
-
* Only when @isToggle. is the toggle currently visible
|
|
40
|
-
*/
|
|
41
|
-
this.isToggleVisible = true;
|
|
42
|
-
/**
|
|
43
|
-
* Only when @isToggle. Where to place the toggle, before or after all other actions
|
|
44
|
-
* @type {boolean}
|
|
45
|
-
*/
|
|
46
|
-
this.togglePosition = 'after';
|
|
47
|
-
/**
|
|
48
|
-
* If true, shows a line at the top.
|
|
49
|
-
*
|
|
50
|
-
* This feature is usually handled now by associating an entry to a `group`
|
|
51
|
-
* now. However `isSeparate` is kept as fallback for now.
|
|
52
|
-
*/
|
|
53
|
-
this.isSeparate = false;
|
|
54
|
-
/**
|
|
55
|
-
* The item will be indicated with an accent color in the menu.
|
|
56
|
-
*
|
|
57
|
-
* Used by the dropdown variant of the main menu to indicate the currently
|
|
58
|
-
* active scope.
|
|
59
|
-
*/
|
|
60
|
-
this.isSelected = false;
|
|
61
|
-
/**
|
|
62
|
-
* If true, only displayed on a mobile device (based on the navigator agent)
|
|
63
|
-
* @type {boolean}
|
|
64
|
-
*/
|
|
65
|
-
this.onlyMobile = false;
|
|
66
|
-
/**
|
|
67
|
-
* custom aria-label
|
|
68
|
-
* @type {string}
|
|
69
|
-
*/
|
|
70
|
-
this.ariaLabel = '';
|
|
71
|
-
/**
|
|
72
|
-
* If true, only displayed on a desktop device (based on the navigator agent)
|
|
73
|
-
* @type {boolean}
|
|
74
|
-
*/
|
|
75
|
-
this.onlyDesktop = false;
|
|
76
|
-
/**
|
|
77
|
-
* Set to false if the action should be shown, but should not be clickable
|
|
78
|
-
* @type {boolean}
|
|
79
|
-
*/
|
|
80
|
-
this.isEnabled = true;
|
|
81
|
-
/**
|
|
82
|
-
* Show the given name (if false, only icon will show)
|
|
83
|
-
*/
|
|
84
|
-
this.showName = true;
|
|
85
|
-
/**
|
|
86
|
-
* Or concat of supported element types for the action
|
|
87
|
-
*/
|
|
88
|
-
this.elementType = [ElementType.Node];
|
|
89
|
-
this.permissionsMode = HideMode.Disable;
|
|
90
|
-
this.permissionsRightMode = NodesRightMode.Local;
|
|
91
|
-
this.toolpermissionsMode = HideMode.Disable;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
export class CustomOptions {
|
|
95
|
-
constructor() {
|
|
96
|
-
/**
|
|
97
|
-
* If true, all existing or available options for the object stay
|
|
98
|
-
* If false, no options will be set, only the options in "addOptions" are used
|
|
99
|
-
*/
|
|
100
|
-
this.useDefaultOptions = true;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export var HideMode;
|
|
104
|
-
(function (HideMode) {
|
|
105
|
-
HideMode[HideMode["Disable"] = 0] = "Disable";
|
|
106
|
-
HideMode[HideMode["Hide"] = 1] = "Hide";
|
|
107
|
-
})(HideMode || (HideMode = {}));
|
|
108
|
-
export var Scope;
|
|
109
|
-
(function (Scope) {
|
|
110
|
-
Scope["Render"] = "Render";
|
|
111
|
-
Scope["Search"] = "Search";
|
|
112
|
-
Scope["SearchCollections"] = "SearchCollections";
|
|
113
|
-
Scope["SavedSearches"] = "SavedSearches";
|
|
114
|
-
Scope["CollectionsReferences"] = "CollectionsReferences";
|
|
115
|
-
Scope["CollectionsProposals"] = "CollectionsProposals";
|
|
116
|
-
Scope["CollectionsCollection"] = "CollectionsCollection";
|
|
117
|
-
Scope["WorkspaceList"] = "WorkspaceList";
|
|
118
|
-
Scope["WorkspaceTree"] = "WorkspaceTree";
|
|
119
|
-
Scope["Sharing"] = "Sharing";
|
|
120
|
-
Scope["Oer"] = "Oer";
|
|
121
|
-
Scope["UserManagement"] = "UserManagement";
|
|
122
|
-
Scope["UserProfile"] = "UserProfile";
|
|
123
|
-
Scope["Stream"] = "Stream";
|
|
124
|
-
Scope["CreateMenu"] = "CreateMenu";
|
|
125
|
-
Scope["MediacenterNodesList"] = "MediacenterNodesList";
|
|
126
|
-
Scope["Admin"] = "Admin";
|
|
127
|
-
Scope["DebugShowAll"] = "DebugShowAll";
|
|
128
|
-
})(Scope || (Scope = {}));
|
|
129
|
-
export var ElementType;
|
|
130
|
-
(function (ElementType) {
|
|
131
|
-
ElementType[ElementType["Node"] = 0] = "Node";
|
|
132
|
-
ElementType[ElementType["NodeChild"] = 1] = "NodeChild";
|
|
133
|
-
ElementType[ElementType["MapRef"] = 2] = "MapRef";
|
|
134
|
-
ElementType[ElementType["NodePublishedCopy"] = 3] = "NodePublishedCopy";
|
|
135
|
-
ElementType[ElementType["NodeRevoked"] = 4] = "NodeRevoked";
|
|
136
|
-
ElementType[ElementType["NodeBlockedImport"] = 5] = "NodeBlockedImport";
|
|
137
|
-
ElementType[ElementType["NodeProposal"] = 6] = "NodeProposal";
|
|
138
|
-
ElementType[ElementType["Person"] = 7] = "Person";
|
|
139
|
-
ElementType[ElementType["Group"] = 8] = "Group";
|
|
140
|
-
ElementType[ElementType["SavedSearch"] = 9] = "SavedSearch";
|
|
141
|
-
ElementType[ElementType["Unknown"] = 10] = "Unknown";
|
|
142
|
-
})(ElementType || (ElementType = {}));
|
|
143
|
-
export class OptionGroup {
|
|
144
|
-
/**
|
|
145
|
-
* @param id The group identifier. Used to seperate elements based on the group
|
|
146
|
-
* @param priority Group with 0 has highest priority, higher values mean lower priority
|
|
147
|
-
*/
|
|
148
|
-
constructor(id, priority) {
|
|
149
|
-
this.id = id;
|
|
150
|
-
this.priority = priority;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
export class DefaultGroups {
|
|
154
|
-
static { this.Primary = new OptionGroup('Primary', 10); }
|
|
155
|
-
static { this.Create = new OptionGroup('Create', 15); }
|
|
156
|
-
static { this.View = new OptionGroup('View', 20); }
|
|
157
|
-
static { this.CreateConnector = new OptionGroup('CreateConnector', 25); }
|
|
158
|
-
static { this.CreateLtiTools = new OptionGroup('CreateLtiTools', 28); }
|
|
159
|
-
static { this.Reuse = new OptionGroup('Reuse', 30); }
|
|
160
|
-
static { this.Edit = new OptionGroup('Edit', 40); }
|
|
161
|
-
static { this.FileOperations = new OptionGroup('FileOperations', 50); }
|
|
162
|
-
static { this.Delete = new OptionGroup('Delete', 60); }
|
|
163
|
-
static { this.Toggles = new OptionGroup('Toggles', 70); }
|
|
164
|
-
}
|
|
165
|
-
export var Constrain;
|
|
166
|
-
(function (Constrain) {
|
|
167
|
-
Constrain[Constrain["CollectionReference"] = 0] = "CollectionReference";
|
|
168
|
-
Constrain[Constrain["NoCollectionReference"] = 1] = "NoCollectionReference";
|
|
169
|
-
Constrain[Constrain["Directory"] = 2] = "Directory";
|
|
170
|
-
Constrain[Constrain["Collections"] = 3] = "Collections";
|
|
171
|
-
Constrain[Constrain["Files"] = 4] = "Files";
|
|
172
|
-
Constrain[Constrain["FilesAndDirectories"] = 5] = "FilesAndDirectories";
|
|
173
|
-
Constrain[Constrain["Admin"] = 6] = "Admin";
|
|
174
|
-
Constrain[Constrain["AdminOrDebug"] = 7] = "AdminOrDebug";
|
|
175
|
-
Constrain[Constrain["NoBulk"] = 8] = "NoBulk";
|
|
176
|
-
Constrain[Constrain["NoSelection"] = 9] = "NoSelection";
|
|
177
|
-
Constrain[Constrain["ClipboardContent"] = 10] = "ClipboardContent";
|
|
178
|
-
Constrain[Constrain["AddObjects"] = 11] = "AddObjects";
|
|
179
|
-
Constrain[Constrain["HomeRepository"] = 12] = "HomeRepository";
|
|
180
|
-
Constrain[Constrain["User"] = 13] = "User";
|
|
181
|
-
Constrain[Constrain["NoScope"] = 14] = "NoScope";
|
|
182
|
-
Constrain[Constrain["ReurlMode"] = 15] = "ReurlMode";
|
|
183
|
-
Constrain[Constrain["LTIMode"] = 16] = "LTIMode";
|
|
184
|
-
})(Constrain || (Constrain = {}));
|
|
185
|
-
export var Target;
|
|
186
|
-
(function (Target) {
|
|
187
|
-
Target[Target["List"] = 0] = "List";
|
|
188
|
-
Target[Target["ListDropdown"] = 1] = "ListDropdown";
|
|
189
|
-
Target[Target["Actionbar"] = 2] = "Actionbar";
|
|
190
|
-
Target[Target["CreateMenu"] = 3] = "CreateMenu";
|
|
191
|
-
})(Target || (Target = {}));
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3R5cGVzL29wdGlvbi1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDdEIsdUVBQXVFO0lBQ3ZFLHFEQUFLLENBQUE7SUFDTCxxSEFBcUg7SUFDckgsNkRBQVMsQ0FBQTtBQUNiLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQUNELE1BQU0sT0FBTyxVQUFVO0lBb0luQjs7Ozs7OztPQU9HO0lBQ0gsWUFDVyxJQUFZLEVBQ1osSUFBWTtJQUNuQiw2REFBNkQ7SUFDdEQsUUFBaUU7UUFIakUsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFNBQUksR0FBSixJQUFJLENBQVE7UUFFWixhQUFRLEdBQVIsUUFBUSxDQUF5RDtRQS9JNUU7OztXQUdHO1FBQ0ksZUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7O1dBR0c7UUFDSSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUM1Qjs7O1dBR0c7UUFDSSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3hCOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUI7OztXQUdHO1FBQ0ksbUJBQWMsR0FBdUIsT0FBTyxDQUFDO1FBQ3BEOzs7OztXQUtHO1FBQ0ksZUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7Ozs7V0FLRztRQUNJLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUI7OztXQUdHO1FBQ0ksZUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7O1dBR0c7UUFDSSxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3RCOzs7V0FHRztRQUNJLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBWTNCOzs7V0FHRztRQUNJLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFtQ3hCOztXQUVHO1FB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O0FBbEJELFdBQVksU0FBUztJQUNqQix1RUFBbUIsQ0FBQTtJQUNuQiwyRUFBcUIsQ0FBQTtJQUNyQixtREFBUyxDQUFBO0lBQ1QsdURBQVcsQ0FBQTtJQUNYLDJDQUFLLENBQUE7SUFDTCx1RUFBbUIsQ0FBQTtJQUNuQiwyQ0FBSyxDQUFBO0lBQ0wseURBQVksQ0FBQTtJQUNaLDZDQUFNLENBQUE7SUFDTix1REFBVyxDQUFBO0lBQ1gsa0VBQWdCLENBQUE7SUFDaEIsc0RBQVUsQ0FBQTtJQUNWLDhEQUFjLENBQUE7SUFDZCwwQ0FBSSxDQUFBO0lBQ0osZ0RBQU8sQ0FBQTtJQUNQLG9EQUFTLENBQUE7SUFDVCxnREFBTyxDQUFBO0FBQ1gsQ0FBQyxFQWxCVyxTQUFTLEtBQVQsU0FBUyxRQWtCcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxNQUtYO0FBTEQsV0FBWSxNQUFNO0lBQ2QsbUNBQUksQ0FBQTtJQUNKLG1EQUFZLENBQUE7SUFDWiw2Q0FBUyxDQUFBO0lBQ1QsK0NBQVUsQ0FBQTtBQUNkLENBQUMsRUFMVyxNQUFNLEtBQU4sTUFBTSxRQUtqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBvcHRpb24gZnJvbSB0aGUgYWN0aW9uYmFyK2Ryb3Bkb3duIG1lbnVcbiAqIEV4YW1wbGU6XG4gdGhpcy5vcHRpb25zLnB1c2gobmV3IE9wdGlvbkl0ZW0oXCJSRVNUT1JFX1NJTkdMRVwiLFwidW5kb1wiLCAobm9kZSkgPT4gdGhpcy5yZXN0b3JlU2luZ2xlKG5vZGUpKSk7XG4gdGhpcy5vcHRpb25zLnB1c2gobmV3IE9wdGlvbkl0ZW0oXCJERUxFVEVfU0lOR0xFXCIsXCJhcmNoaXZlRGVsZXRlXCIsIChub2RlKSA9PiB0aGlzLmRlbGV0ZVNpbmdsZShub2RlKSkpO1xuXG4gKi9cbmltcG9ydCB7IEtleWJvYXJkU2hvcnRjdXRDb25kaXRpb24gfSBmcm9tICcuLi90eXBlcy9rZXlib2FyZC1zaG9ydGN1dHMnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuXG5leHBvcnQgZW51bSBOb2Rlc1JpZ2h0TW9kZSB7XG4gICAgLy8gcmlnaHRzIG9uIHRoZSBjdXJyZW50IG5vZGUsIG5vIG1hdHRlciBpZiBpdHMgYSByZWZlcmVuY2Ugb3Igb3JpZ2lhbmxcbiAgICBMb2NhbCxcbiAgICAvLyBlZmZlY3RpdmUgcmlnaHRzIG9uIHRoZSBjdXJyZW50IG5vZGUsIG9ubHkgcmVsZXZhbnQgZm9yIGNvbGxlY3Rpb24gcmVmZXJlbmNlcyAoZm9yIG5vbi1yZWZzLCB0aGlzIGVxdWFscyB0byBsb2NhbClcbiAgICBFZmZlY3RpdmUsXG59XG5leHBvcnQgY2xhc3MgT3B0aW9uSXRlbSB7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhpcyBvcHRpb24gd2lsbCBiZSBzaG93biBhbGwgdGhlIHRpbWUgaW4gdGhlIG5vZGUgdGFibGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0Fsd2F5cyA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHRoaXMgb3B0aW9uIHdpbGwgYmUgc2hvd24gYXMgYW4gYWN0aW9uIChpZiByb29tKS4gSWYgbm9uZSBvZiB0aGUgaXRlbXMgaGFzIHNob3dBc0FjdGlvbiBzZXQsIHRoZSBmaXJzdCBpdGVtcyB3aWxsIGFsd2F5cyBiZSBzaG93biBhcyBhY3Rpb25cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0FzQWN0aW9uID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdGhpcyBvcHRpb24gd2lsbCBiZSBzaG93biBhcyBhIHRvZ2dsZSBvbiB0aGUgcmlnaHQgc2lkZSAocHJvdmlkZSBpY29uVG9nZ2xlIGFzIGEgdG9nZ2xlIGljb24pXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHVibGljIGlzVG9nZ2xlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogT25seSB3aGVuIEBpc1RvZ2dsZS4gaXMgdGhlIHRvZ2dsZSBjdXJyZW50bHkgdmlzaWJsZVxuICAgICAqL1xuICAgIHB1YmxpYyBpc1RvZ2dsZVZpc2libGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIE9ubHkgd2hlbiBAaXNUb2dnbGUuIFdoZXJlIHRvIHBsYWNlIHRoZSB0b2dnbGUsIGJlZm9yZSBvciBhZnRlciBhbGwgb3RoZXIgYWN0aW9uc1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVQb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2FmdGVyJztcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCBzaG93cyBhIGxpbmUgYXQgdGhlIHRvcC5cbiAgICAgKlxuICAgICAqIFRoaXMgZmVhdHVyZSBpcyB1c3VhbGx5IGhhbmRsZWQgbm93IGJ5IGFzc29jaWF0aW5nIGFuIGVudHJ5IHRvIGEgYGdyb3VwYFxuICAgICAqIG5vdy4gSG93ZXZlciBgaXNTZXBhcmF0ZWAgaXMga2VwdCBhcyBmYWxsYmFjayBmb3Igbm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBpc1NlcGFyYXRlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogVGhlIGl0ZW0gd2lsbCBiZSBpbmRpY2F0ZWQgd2l0aCBhbiBhY2NlbnQgY29sb3IgaW4gdGhlIG1lbnUuXG4gICAgICpcbiAgICAgKiBVc2VkIGJ5IHRoZSBkcm9wZG93biB2YXJpYW50IG9mIHRoZSBtYWluIG1lbnUgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnRseVxuICAgICAqIGFjdGl2ZSBzY29wZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIElmIHRydWUsIG9ubHkgZGlzcGxheWVkIG9uIGEgbW9iaWxlIGRldmljZSAoYmFzZWQgb24gdGhlIG5hdmlnYXRvciBhZ2VudClcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgb25seU1vYmlsZSA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIGN1c3RvbSBhcmlhLWxhYmVsXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgb25seSBkaXNwbGF5ZWQgb24gYSBkZXNrdG9wIGRldmljZSAoYmFzZWQgb24gdGhlIG5hdmlnYXRvciBhZ2VudClcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgb25seURlc2t0b3AgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBZb3UgY2FuIHNldCBhIG1lZGlhLXF1ZXJ5IHNpbWlsYXIgdG8gQ1NTLCBzZWUgdGhlIE1FRElBX1FVRVJZIGNvbnN0YW50cyBpbiB1aS1jb25zdGFudHNcbiAgICAgKiBVc2UgaW4gY29tYmluYXRpb24gd2l0aCBtZWRpYVF1ZXJ5VmFsdWVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgbWVkaWFRdWVyeVR5cGU6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgZm9yIHRoZSBkZWZpbmVkIG1lZGlhIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIG1lZGlhUXVlcnlWYWx1ZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGZhbHNlIGlmIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHNob3duLCBidXQgc2hvdWxkIG5vdCBiZSBjbGlja2FibGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNFbmFibGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgbWFudWFsbHkgbWFya2VkIGFzIHByaW1hcnkgYWN0aW9uIHdoZW4gYWx3YXlzIHZpc2libGUgb24gYW5cbiAgICAgKiBgYWN0aW9uYmFyYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNQcmltYXJ5OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCB0aGUgbm9kZSBhcyBwYXJhbSB3aGljaCBzaG91bGQgcmV0dXJuIHRydWUgb3IgZmFsc2UgaWYgdGhlIG9wdGlvbiBzaG91bGQgYmUgc2hvd24gZm9yIHRoaXMgbm9kZVxuICAgICAqIElzIGhhbmRsZWQgYnkgb3B0aW9uc0hlbHBlciBhbmQgbWF5IG5vdCBiZSB1c2VkIG90aGVyd2lzZVxuICAgICAqIFBsZWFzZSB1c2UgQGN1c3RvbVNob3dDYWxsYmFjayBpbnN0ZWFkXG4gICAgICovXG4gICAgcHVibGljIHNob3dDYWxsYmFjazogKG5vZGVzPzogTm9kZVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gY2FsbGVkIHdpdGggdGhlIG5vZGUgYXMgcGFybSB3aGljaCBzaG91bGQgcmV0dXJuIHRydWUgb3IgZmFsc2UgaWYgdGhlIG9wdGlvbiBzaG91bGQgYmUgc2hvd24gZm9yIHRoaXMgbm9kZVxuICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBvcHRpb25zSGVscGVyXG4gICAgICovXG4gICAgcHVibGljIGN1c3RvbVNob3dDYWxsYmFjazogKG5vZGVzPzogTm9kZVtdIHwgYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCB0aGUgbm9kZSBhcyBwYXJhbSB3aGljaCBzaG91bGQgcmV0dXJuIHRydWUgb3IgZmFsc2UgaWYgdGhlIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3RcbiAgICAgKiBJcyBoYW5kbGVkIGJ5IG9wdGlvbnNIZWxwZXIgYW5kIG1heSBub3QgYmUgdXNlZCBvdGhlcndpc2VcbiAgICAgKiBQbGVhc2UgdXNlIEBjdXN0b21FbmFibGVkQ2FsbGJhY2sgaW5zdGVhZFxuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVkQ2FsbGJhY2s6IChub2Rlcz86IE5vZGVbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIHRoZSBub2RlIGFzIHBhcmFtIHdoaWNoIHNob3VsZCByZXR1cm4gdHJ1ZSBvciBmYWxzZSBpZiB0aGUgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdFxuICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBvcHRpb25zSGVscGVyXG4gICAgICovXG4gICAgcHVibGljIGN1c3RvbUVuYWJsZWRDYWxsYmFjazogKG5vZGVzPzogTm9kZVtdIHwgYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiAgIE9wdGlvbmFsOiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBvcHRpb24gd2hlbiBpdCdzIGN1cnJlbnRseSBkaXNhYmxlZCAoZ3JleWVkIG91dClcbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzYWJsZWRDYWxsYmFjazogKG5vZGU/OiBOb2RlIHwgYW55KSA9PiB2b2lkO1xuICAgIC8qKlxuICAgICAqICAgU2hvdyB0aGUgZ2l2ZW4gbmFtZSAoaWYgZmFsc2UsIG9ubHkgaWNvbiB3aWxsIHNob3cpXG4gICAgICovXG4gICAgcHVibGljIHNob3dOYW1lID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIGVsZW1lbnQgd2l0aCAwIGhhcyBoaWdoZXN0IHByaW9yaXR5IGluIGl0J3MgZ3JvdXAsIGhpZ2hlciB2YWx1ZXMgbWVhbiBsb3dlciBwcmlvcml0eVxuICAgICAqL1xuICAgIHB1YmxpYyBwcmlvcml0eTogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIHRoZSBncm91cCB0aGlzIG9wdGlvbiBiZWxvbmdzIHRvXG4gICAgICovXG4gICAgcHVibGljIGdyb3VwOiBPcHRpb25Hcm91cDtcblxuICAgIHB1YmxpYyBrZXlib2FyZFNob3J0Y3V0OiBLZXlib2FyZFNob3J0Y3V0Q29uZGl0aW9uO1xuXG4gICAgLyoqXG4gICAgICogT3IgY29uY2F0IG9mIHN1cHBvcnRlZCBlbGVtZW50IHR5cGVzIGZvciB0aGUgYWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGVsZW1lbnRUeXBlID0gW0VsZW1lbnRUeXBlLk5vZGVdO1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gICAgcHVibGljIGNvbnN0cmFpbnM6IENvbnN0cmFpbltdO1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uc01vZGUgPSBIaWRlTW9kZS5EaXNhYmxlO1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uc1JpZ2h0TW9kZSA9IE5vZGVzUmlnaHRNb2RlLkxvY2FsO1xuICAgIHB1YmxpYyB0b29scGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyB0b29scGVybWlzc2lvbnNNb2RlID0gSGlkZU1vZGUuRGlzYWJsZTtcbiAgICBwdWJsaWMgc2NvcGVzOiBTY29wZVtdO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZSB0aGUgb3B0aW9uIG5hbWUsIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSB0cmFuc2xhdGlvblxuICAgICAqIEBwYXJhbSBpY29uIEEgbWF0ZXJpYWwgaWNvbiBuYW1lXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gY2FsbGJhY2sgd2hlbiB0aGlzIG9wdGlvbiBpcyBjaG9zZW4uIFdpbGwgZ2V0IHRoZSBjdXJyZW50IG5vZGVcbiAgICAgKiBwYXNzZWQgYXMgYW4gYXJndW1lbnQuIElmIGF2YWlsYWJsZSwgdGhlIHJlbGV2YW50IG5vZGVzIGFyZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50LFxuICAgICAqIGkuZS4sIHRoZSBzZWxlY3Rpb24sIGlmIGFueSwgb3IgdGhlIGN1cnJlbnQgbm9kZSBhcyBzaW5nbGUtaXRlbSBhcnJheSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBpY29uOiBzdHJpbmcsXG4gICAgICAgIC8vIFRPRE86IE1heWJlIHN3aXRjaCB0byBvbmx5IHByb3ZpZGluZyB0aGUgc2Vjb25kIHBhcmFtZXRlci5cbiAgICAgICAgcHVibGljIGNhbGxiYWNrOiAob2JqZWN0PzogTm9kZSB8IGFueSwgb2JqZWN0cz86IChOb2RlIHwgYW55KVtdKSA9PiB2b2lkLFxuICAgICkge31cbn1cbmV4cG9ydCBjbGFzcyBDdXN0b21PcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCBhbGwgZXhpc3Rpbmcgb3IgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIHRoZSBvYmplY3Qgc3RheVxuICAgICAqIElmIGZhbHNlLCBubyBvcHRpb25zIHdpbGwgYmUgc2V0LCBvbmx5IHRoZSBvcHRpb25zIGluIFwiYWRkT3B0aW9uc1wiIGFyZSB1c2VkXG4gICAgICovXG4gICAgcHVibGljIHVzZURlZmF1bHRPcHRpb25zPyA9IHRydWU7XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpZHMgb2Ygb3B0aW9ucyB0byBleHBsaWNpdGx5IHN1cHBvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3VwcG9ydGVkT3B0aW9ucz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgaWRzIG9mIG9wdGlvbnMgdG8gZXhwbGljaXRseSByZW1vdmVcbiAgICAgKiBPbmx5IHN1cHBvcnRlZCBpZiBzdXBwb3J0ZWRPcHRpb25zIGlzIGVtcHR5XG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZU9wdGlvbnM/OiBzdHJpbmdbXTtcbiAgICAvKipcbiAgICAgKiBPcHRpb25zIHRvIGFkZC9pbnNlcnQgaW50byB0aGUgbWVudVxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRPcHRpb25zPzogT3B0aW9uSXRlbVtdO1xufVxuZXhwb3J0IGVudW0gSGlkZU1vZGUge1xuICAgIERpc2FibGUsXG4gICAgSGlkZSxcbn1cbmV4cG9ydCBlbnVtIFNjb3BlIHtcbiAgICBSZW5kZXIgPSAnUmVuZGVyJyxcbiAgICBTZWFyY2ggPSAnU2VhcmNoJyxcbiAgICBTZWFyY2hDb2xsZWN0aW9ucyA9ICdTZWFyY2hDb2xsZWN0aW9ucycsXG4gICAgU2F2ZWRTZWFyY2hlcyA9ICdTYXZlZFNlYXJjaGVzJyxcbiAgICBDb2xsZWN0aW9uc1JlZmVyZW5jZXMgPSAnQ29sbGVjdGlvbnNSZWZlcmVuY2VzJyxcbiAgICBDb2xsZWN0aW9uc1Byb3Bvc2FscyA9ICdDb2xsZWN0aW9uc1Byb3Bvc2FscycsXG4gICAgQ29sbGVjdGlvbnNDb2xsZWN0aW9uID0gJ0NvbGxlY3Rpb25zQ29sbGVjdGlvbicsXG4gICAgV29ya3NwYWNlTGlzdCA9ICdXb3Jrc3BhY2VMaXN0JyxcbiAgICBXb3Jrc3BhY2VUcmVlID0gJ1dvcmtzcGFjZVRyZWUnLFxuICAgIFNoYXJpbmcgPSAnU2hhcmluZycsXG4gICAgT2VyID0gJ09lcicsXG4gICAgVXNlck1hbmFnZW1lbnQgPSAnVXNlck1hbmFnZW1lbnQnLFxuICAgIFVzZXJQcm9maWxlID0gJ1VzZXJQcm9maWxlJyxcbiAgICBTdHJlYW0gPSAnU3RyZWFtJyxcbiAgICBDcmVhdGVNZW51ID0gJ0NyZWF0ZU1lbnUnLFxuXG4gICAgTWVkaWFjZW50ZXJOb2Rlc0xpc3QgPSAnTWVkaWFjZW50ZXJOb2Rlc0xpc3QnLFxuICAgIEFkbWluID0gJ0FkbWluJywgLy8gQWRtaW4gVG9vbHMgLyBEZWJ1Z2dpbmdcbiAgICBEZWJ1Z1Nob3dBbGwgPSAnRGVidWdTaG93QWxsJywgLy8gRnVsbCBkZWJ1ZyBtb2RlIHdoaWNoIGVuYWJsZXMgYWxsIG9wdGlvbnNcbn1cbmV4cG9ydCBlbnVtIEVsZW1lbnRUeXBlIHtcbiAgICBOb2RlLFxuICAgIE5vZGVDaGlsZCwgLy8gQ2hpbGQgb2JqZWN0XG4gICAgTWFwUmVmLCAvLyBNYXAgcmVmIChsaW5rIHRvIGFub3RoZXIgbWFwKVxuICAgIE5vZGVQdWJsaXNoZWRDb3B5LFxuICAgIE5vZGVSZXZva2VkLCAvLyByZXZva2VkIGNvcHkgLyByZXZva2VkIHB1Ymxpc2hlZCBub2RlXG4gICAgTm9kZUJsb2NrZWRJbXBvcnQsIC8vIG5vZGUgd2l0aCBwcm9wZXJ0eSBjY206aW1wb3J0YmxvY2tlZCA9PSB0cnVlXG4gICAgTm9kZVByb3Bvc2FsLCAvLyBub2RlIHByb3Bvc2FsIGZvciBhIGNvbGxlY3Rpb25cbiAgICBQZXJzb24sXG4gICAgR3JvdXAsXG4gICAgU2F2ZWRTZWFyY2gsXG4gICAgVW5rbm93bixcbn1cbmV4cG9ydCBjbGFzcyBPcHRpb25Hcm91cCB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGlkIFRoZSBncm91cCBpZGVudGlmaWVyLiBVc2VkIHRvIHNlcGVyYXRlIGVsZW1lbnRzIGJhc2VkIG9uIHRoZSBncm91cFxuICAgICAqIEBwYXJhbSBwcmlvcml0eSBHcm91cCB3aXRoIDAgaGFzIGhpZ2hlc3QgcHJpb3JpdHksIGhpZ2hlciB2YWx1ZXMgbWVhbiBsb3dlciBwcmlvcml0eVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogc3RyaW5nLCBwdWJsaWMgcHJpb3JpdHk6IG51bWJlcikge31cbn1cbmV4cG9ydCBjbGFzcyBEZWZhdWx0R3JvdXBzIHtcbiAgICBzdGF0aWMgUHJpbWFyeSA9IG5ldyBPcHRpb25Hcm91cCgnUHJpbWFyeScsIDEwKTtcbiAgICBzdGF0aWMgQ3JlYXRlID0gbmV3IE9wdGlvbkdyb3VwKCdDcmVhdGUnLCAxNSk7XG4gICAgc3RhdGljIFZpZXcgPSBuZXcgT3B0aW9uR3JvdXAoJ1ZpZXcnLCAyMCk7XG4gICAgc3RhdGljIENyZWF0ZUNvbm5lY3RvciA9IG5ldyBPcHRpb25Hcm91cCgnQ3JlYXRlQ29ubmVjdG9yJywgMjUpO1xuICAgIHN0YXRpYyBDcmVhdGVMdGlUb29scyA9IG5ldyBPcHRpb25Hcm91cCgnQ3JlYXRlTHRpVG9vbHMnLCAyOCk7XG4gICAgc3RhdGljIFJldXNlID0gbmV3IE9wdGlvbkdyb3VwKCdSZXVzZScsIDMwKTtcbiAgICBzdGF0aWMgRWRpdCA9IG5ldyBPcHRpb25Hcm91cCgnRWRpdCcsIDQwKTtcbiAgICBzdGF0aWMgRmlsZU9wZXJhdGlvbnMgPSBuZXcgT3B0aW9uR3JvdXAoJ0ZpbGVPcGVyYXRpb25zJywgNTApO1xuICAgIHN0YXRpYyBEZWxldGUgPSBuZXcgT3B0aW9uR3JvdXAoJ0RlbGV0ZScsIDYwKTtcbiAgICBzdGF0aWMgVG9nZ2xlcyA9IG5ldyBPcHRpb25Hcm91cCgnVG9nZ2xlcycsIDcwKTtcbn1cbmV4cG9ydCBlbnVtIENvbnN0cmFpbiB7XG4gICAgQ29sbGVjdGlvblJlZmVyZW5jZSwgLy8gb3B0aW9uIGlzIG9ubHkgdmlzaWJsZSBmb3IgY29sbGVjdGlvbiByZWZlcmVuY2VzXG4gICAgTm9Db2xsZWN0aW9uUmVmZXJlbmNlLCAvLyBvcHRpb24gaXMgb25seSB2aXNpYmxlIGZvciBub24tY29sbGVjdGlvbiByZWZlcmVuY2VzXG4gICAgRGlyZWN0b3J5LCAvLyBvbmx5IHZpc2libGUgZm9yIGRpcmVjdG9yaWVzIChjY206bWFwKVxuICAgIENvbGxlY3Rpb25zLCAvLyBvbmx5IHZpc2libGUgZm9yIGNvbGxlY3Rpb25zXG4gICAgRmlsZXMsIC8vIG9ubHkgdmlzaWJsZSBmb3IgZmlsZXMgKGNjbTppbylcbiAgICBGaWxlc0FuZERpcmVjdG9yaWVzLCAvLyBvbmx5IHZpc2libGUgZm9yIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAoY2NtOmlvIC8gY2NtOm1hcCkgLSBubyBjb2xsZWN0aW9ucyFcbiAgICBBZG1pbiwgLy8gb25seSB2aXNpYmxlIGlmIHVzZXIgaXMgYWRtaW4gb3IgZXNEZWJ1ZyBpcyBlbmFibGVkIG9uIHdpbmRvdyBjb21wb25lbnRcbiAgICBBZG1pbk9yRGVidWcsIC8vIG9ubHkgdmlzaWJsZSBpZiB1c2VyIGlzIGFkbWluIG9yIGVzRGVidWcgaXMgZW5hYmxlZCBvbiB3aW5kb3cgY29tcG9uZW50XG4gICAgTm9CdWxrLCAvLyBObyBzdXBwb3J0IGZvciBidWxrIChtdWx0aXBsZSBvYmplY3RzKVxuICAgIE5vU2VsZWN0aW9uLCAvLyBPbmx5IHZpc2libGUgd2hlbiBjdXJyZW50bHkgbm8gZWxlbWVudCBpcyBzZWxlY3RlZFxuICAgIENsaXBib2FyZENvbnRlbnQsIC8vIE9ubHkgdmlzaWJsZSB3aGVuIHRoZSBjbGlwYm9hcmQgaGFzIGNvbnRlbnRcbiAgICBBZGRPYmplY3RzLCAvLyBPbmx5IHZpc2libGUgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byBhZGQgb2JqZWN0cyBpbnRvIHRoZSBjdXJyZW50IGxpc3RcbiAgICBIb21lUmVwb3NpdG9yeSwgLy8gT25seSB2aXNpYmxlIHdoZW4gdGhlIG5vZGVzIGFyZSBmcm9tIHRoZSBsb2NhbCAoaG9tZSkgcmVwb3NpdG9yeVxuICAgIFVzZXIsIC8vIE9ubHkgdmlzaWJsZSB3aGVuIGEgdXNlciBpcyBwcmVzZW50IGFuZCBsb2dnZWQgaW5cbiAgICBOb1Njb3BlLCAvLyBPbmx5IHZpc2libGUgd2hlbiBubyBjdXJyZW50IHNjb3BlIChpLmUgXCJzYWZlXCIgc2NvcGUpIGlzIHNldFxuICAgIFJldXJsTW9kZSwgLy8gT25seSB2aXNpYmxlIHdoZW4gYSByZXVybCBpcyBwcmVzZW50IChjYWxsZWQgdG8gcGljayBvYmplY3QgZnJvbSBsbXMpXG4gICAgTFRJTW9kZSwgLy8gT25seSB2aXNpYmxlIHdoZW4gYSBsdGkgc2Vzc2lvbiBpcyBwcmVzZW50IChjYWxsZWQgdG8gcGljayBvYmplY3QgZnJvbSBsdGkgcGxhdGZvcm0pXG59XG5cbmV4cG9ydCBlbnVtIFRhcmdldCB7XG4gICAgTGlzdCwgLy8gVGFyZ2V0IGlzIHRoZSBMaXN0VGFibGVDb21wb25lbnRcbiAgICBMaXN0RHJvcGRvd24sXG4gICAgQWN0aW9uYmFyLFxuICAgIENyZWF0ZU1lbnUsXG59XG4iXX0=
|