asp-lib 1.1.1 → 1.1.3

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.
@@ -1,7 +1,8 @@
1
1
  import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
- import { debounceTime, of, Subject, switchMap } from 'rxjs';
3
+ import { debounceTime, distinctUntilChanged, EMPTY, of, Subject, switchMap } from 'rxjs';
4
4
  import { defaultSwitchMapper } from '../utils/utils';
5
+ import { HttpParams } from '@angular/common/http';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/common/http";
7
8
  import * as i2 from "../services/snackbar.service";
@@ -98,15 +99,22 @@ export class ItemsViewerComponent {
98
99
  isItemSelected(item) { return this.selectedItem?.id === item.id; }
99
100
  loadItems() {
100
101
  this.loadingStatus = true;
101
- if (this.listEndpoint) {
102
- this.http.get(this.showPaginator ? `${this.listEndpoint}?page=${this.currentPage}&pageSize=${this.pageSize}&${this.endpointParams}` : this.listEndpoint)
103
- .pipe(switchMap(this.listRequestMapping ?? defaultSwitchMapper)).subscribe({
102
+ if (this.title && this.title === 'Users') {
103
+ let params = new HttpParams()
104
+ .set('page', this.currentPage)
105
+ .set('pageSize', this.pageSize);
106
+ if (this.search.value && this.search.value.trim() !== '') {
107
+ params = params.set('search', this.search.value.trim());
108
+ }
109
+ this.http.get(this.listEndpoint, { params })
110
+ .pipe(switchMap(this.listRequestMapping ?? defaultSwitchMapper))
111
+ .subscribe({
104
112
  next: (response) => {
105
113
  if (response.responseCode === 200) {
106
114
  this.loadedItems = response.load;
107
115
  this.itemsLoaded.emit(response.load);
108
116
  this.lengthUsers = response.totalRecords;
109
- this.search.setValue('');
117
+ this.filterItems = new Set(this.loadedItems.map(item => item.id));
110
118
  this.loadingStatus = false;
111
119
  }
112
120
  else {
@@ -119,11 +127,101 @@ export class ItemsViewerComponent {
119
127
  console.error(error);
120
128
  this.loadingStatus = false;
121
129
  this.snackbar.warning(this.translate.transform(this.itemsEndpoint.errors?.['default'] ?? 'Something went wrong'));
122
- console.log(error);
123
130
  }
124
131
  });
125
132
  }
133
+ else {
134
+ if (this.listEndpoint) {
135
+ this.http.get(this.showPaginator ? `${this.listEndpoint}?page=${this.currentPage}&pageSize=${this.pageSize}&${this.endpointParams}` : this.listEndpoint)
136
+ .pipe(switchMap(this.listRequestMapping ?? defaultSwitchMapper)).subscribe({
137
+ next: (response) => {
138
+ if (response.responseCode === 200) {
139
+ this.loadedItems = response.load;
140
+ this.itemsLoaded.emit(response.load);
141
+ this.lengthUsers = response.totalRecords;
142
+ this.filterItems = new Set(this.loadedItems.map(item => item.id));
143
+ //this.search.setValue('');
144
+ this.loadingStatus = false;
145
+ }
146
+ else {
147
+ console.error(response);
148
+ this.loadingStatus = false;
149
+ this.snackbar.warning(this.translate.transform(this.itemsEndpoint.errors?.[response.responseCode] ?? 'Something went wrong'));
150
+ }
151
+ },
152
+ error: (error) => {
153
+ console.error(error);
154
+ this.loadingStatus = false;
155
+ this.snackbar.warning(this.translate.transform(this.itemsEndpoint.errors?.['default'] ?? 'Something went wrong'));
156
+ console.log(error);
157
+ }
158
+ });
159
+ }
160
+ }
126
161
  }
162
+ ngOnInit() {
163
+ if (Boolean(this.listEndpoint)) {
164
+ this.reloadSubject?.subscribe({ next: () => this.loadItems() });
165
+ }
166
+ if (this.title && this.title === 'Users') {
167
+ this.search.valueChanges
168
+ .pipe(debounceTime(300), distinctUntilChanged(), switchMap((newSearch) => {
169
+ if (!this.listEndpoint || this.listEndpoint.trim() === '') {
170
+ return EMPTY;
171
+ }
172
+ else {
173
+ }
174
+ this.loadingStatus = true;
175
+ let params = new HttpParams();
176
+ if (this.showPaginator) {
177
+ params = params
178
+ .set('page', 1)
179
+ .set('pageSize', this.pageSize);
180
+ }
181
+ if (this.endpointParams) {
182
+ const extraParams = new URLSearchParams(this.endpointParams);
183
+ extraParams.forEach((value, key) => {
184
+ params = params.set(key, value);
185
+ });
186
+ }
187
+ params = params.set('search', newSearch?.trim() ?? '');
188
+ return this.http.get(this.listEndpoint, { params })
189
+ .pipe(switchMap(this.listRequestMapping ?? defaultSwitchMapper));
190
+ }))
191
+ .subscribe({
192
+ next: (response) => {
193
+ if (response.responseCode === 200) {
194
+ this.loadedItems = response.load;
195
+ this.itemsLoaded.emit(response.load);
196
+ this.lengthUsers = response.totalRecords;
197
+ this.filterItems = new Set(this.loadedItems.map(item => item.id));
198
+ }
199
+ else {
200
+ console.error(response);
201
+ this.snackbar.warning(this.translate.transform(this.itemsEndpoint.errors?.[response.responseCode] ?? 'Something went wrong'));
202
+ }
203
+ this.loadingStatus = false;
204
+ },
205
+ error: (error) => {
206
+ console.error(error);
207
+ this.loadingStatus = false;
208
+ this.snackbar.warning(this.translate.transform(this.itemsEndpoint.errors?.['default'] ?? 'Something went wrong'));
209
+ }
210
+ });
211
+ }
212
+ else {
213
+ this.search.valueChanges.pipe(debounceTime(300)).subscribe({
214
+ next: (newSearch) => {
215
+ this.filterItems = new Set(this.loadedItems.filter(item => (this.searchFilter ?? defaultFilter)(item)
216
+ .filter((value) => Boolean(value))
217
+ .some((value) => {
218
+ return value.toLowerCase?.().includes(newSearch?.toLowerCase() ?? '');
219
+ })).map(item => item.id));
220
+ }
221
+ });
222
+ }
223
+ }
224
+ /*
127
225
  ngOnInit() {
128
226
  if (Boolean(this.listEndpoint)) {
129
227
  // this.loadItems();
@@ -131,10 +229,17 @@ export class ItemsViewerComponent {
131
229
  }
132
230
  this.search.valueChanges.pipe(debounceTime(300)).subscribe({
133
231
  next: (newSearch) => {
134
- this.filterItems = new Set(this.loadedItems.filter(item => (this.searchFilter ?? defaultFilter)(item).filter((value) => Boolean(value)).some((value) => { return value.toLowerCase?.().includes(newSearch?.toLowerCase() ?? ''); })).map(item => item.id));
232
+ this.filterItems = new Set(this.loadedItems.filter(
233
+ item => (this.searchFilter ?? defaultFilter)(item)
234
+ .filter((value: any) => Boolean(value))
235
+ .some((value: string) => {
236
+ return value.toLowerCase?.().includes(newSearch?.toLowerCase() ?? '')
237
+ })
238
+ ).map(item => item.id));
135
239
  }
136
- });
240
+ })
137
241
  }
242
+ */
138
243
  ngOnChanges(changes) {
139
244
  let { listEndpoint, items, orderProperties } = changes;
140
245
  if (Boolean(listEndpoint) && (listEndpoint?.previousValue !== listEndpoint?.currentValue)) {
@@ -270,4 +375,4 @@ function switchMapper(mapper) {
270
375
  return mapper(value);
271
376
  };
272
377
  }
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9pdGVtcy12aWV3ZXIvaXRlbXMtdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9pdGVtcy12aWV3ZXIvaXRlbXMtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxZQUFZLEVBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9FLE9BQU8sRUFBaUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUdwRSxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQU8xRSxNQUFNLE9BQU8sb0JBQW9CO0lBZ0RoQyxJQUFJLFFBQVEsS0FBSyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQzdDLElBQUksT0FBTyxLQUFLLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDM0MsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ2hFLElBQUksT0FBTyxLQUFLLE9BQU8sSUFB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TUFBZ0I7SUFDdEMsT0FBTyxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQUEsQ0FBQyxDQUFBO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNpY0l0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9iYXNpYy1pdGVtL2Jhc2ljLWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBpc09ic2VydmFibGUsIG1hcCwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTbmFja2JhclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVxdWVzdERldGFpbHMsIFNlY3VyaXR5RW5kcG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0TWFwcGVyLCBkZWZhdWx0U3dpdGNoTWFwcGVyIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5cclxuY29uc3QgZGVmYXVsdEZpbHRlciA9IChpdGVtOiBhbnkpID0+IFtpdGVtPy5uYW1lID8/IEpTT04uc3RyaW5naWZ5KGl0ZW0pXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnbGliLWl0ZW1zLXZpZXdlcicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2l0ZW1zLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4uL2Fzc2V0cy9mb250cy9zdHlsZS5jc3MnLCAnLi4vYXNzZXRzL3RoZW1lLnNjc3MnLCAnLi9pdGVtcy12aWV3ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbXNWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG5cdEBJbnB1dCgpIGljb246IHN0cmluZyA9ICcnO1xyXG5cdEBJbnB1dCgpIHRoZW1lOiBzdHJpbmcgPSAnZGVmYXVsdCc7XHJcblx0QElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cdEBJbnB1dCgpIGl0ZW1JY29uOiBzdHJpbmcgPSAnJztcclxuXHRASW5wdXQoKSBpdGVtczogYW55W10gPSBbXTtcclxuXHRASW5wdXQoKSBlbnRpdHlVaUNvbXBvbmVudDogVHlwZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblx0QElucHV0KCkgdWlDb21wb25lbnRJbnB1dHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHQvLyBASW5wdXQoKSBzZWFyY2hCeTogc3RyaW5nW10gPSBbJ25hbWUnXTtcclxuXHRASW5wdXQoKSBzZWFyY2hGaWx0ZXI/OiBGdW5jdGlvbjtcclxuXHRASW5wdXQoKSBzaG93Q3JlYXRlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KCkgc2hvd09yZGVyQnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIHNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcclxuXHRASW5wdXQoKSBzZWxlY3Rpb25JZHM6IFNldDxzdHJpbmcgfCBudW1iZXI+ID0gbmV3IFNldChbXSk7XHJcblx0QElucHV0KCkgbXVsdGlwbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBzaG93U2VsZWN0ZWRBdFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIGl0ZW1Db250cm9sczogeyBba2V5OiBudW1iZXIgfCBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cdEBJbnB1dCgpIHNob3dQYWdpbmF0b3I6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdEBJbnB1dCgpIGRyYWdnYWJsZUl0ZW1zOiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KCkgc2hvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcblx0QElucHV0KCkgbGlzdEVuZHBvaW50OiBzdHJpbmcgPSAnJztcclxuXHRASW5wdXQoKSBpdGVtc0VuZHBvaW50OiBTZWN1cml0eUVuZHBvaW50ID0ge3VybDogJyd9O1xyXG5cdEBJbnB1dCgpIGxpc3RSZXF1ZXN0TWFwcGluZzogYW55ID0gKHJlc3BvbnNlOiBhbnkpID0+IG9mKHJlc3BvbnNlKTtcclxuXHRASW5wdXQoKSBlbmRwb2ludFBhcmFtczogc3RyaW5nID0gJyc7XHJcblx0QElucHV0KCkgcmVsb2FkU3ViamVjdD86IFN1YmplY3Q8Ym9vbGVhbj47XHJcblx0QElucHV0KCkgZXh0ZXJuYWxMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KCkgb3JkZXJQcm9wZXJ0aWVzOiB7IHByb3BlcnR5OiBzdHJpbmcsIGFzY0ljb246IHN0cmluZywgZGVzY0ljb246IHN0cmluZywgdG9vbHRpcD86IHN0cmluZyB9W10gPSBbXTtcclxuXHRASW5wdXQoKSBlbXB0eVBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnTm90IEZvdW5kIDInO1xyXG5cdEBJbnB1dCgpIGl0ZW1MYWJlbE1hcDogYW55ID0gKGl0ZW06IGFueSkgPT4gaXRlbS5uYW1lO1xyXG5cdEBPdXRwdXQoKSBzZWxlY3RJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QE91dHB1dCgpIHRvZ2dsZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHRAT3V0cHV0KCkgYWRkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHRAT3V0cHV0KCkgaXRlbXNMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHRASG9zdEJpbmRpbmcoJ3N0eWxlJykgaG9zdFN0eWxlOiBhbnk7XHJcblxyXG5cdG9yZGVyUHJvcGVydHlJY29uOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IG5hbWU6ICdtZW51LWFscGhhYmV0LWFzYycgfTtcclxuXHRjdXJyZW50T3JkZXI6IHsgcHJvcGVydHk6IHN0cmluZywgYXNjOiBib29sZWFuIH0gPSB7IHByb3BlcnR5OiAnbmFtZScsIGFzYzogdHJ1ZSB9O1xyXG5cdG9yZGVySXRlbXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblx0c2VhcmNoID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xyXG5cdGN1cnJlbnRQYWdlID0gMTtcclxuXHRASW5wdXQoKSBwYWdlU2l6ZSA9IDUwO1xyXG5cdHBhZ2VJbmRleFVzZXJzID0gMTtcclxuXHRsZW5ndGhVc2VycyA9IDEwO1xyXG5cdHBhZ2VFdmVudDogYW55ID0gJyc7XHJcblx0ZmlsdGVySXRlbXM6IFNldDxudW1iZXI+ID0gbmV3IFNldChbXSk7XHJcblx0bG9hZGVkSXRlbXM6IGFueVtdID0gW107XHJcblx0bG9hZGluZ1N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGdldCBoYXNUaXRsZSgpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy50aXRsZSkgfVxyXG5cdGdldCBoYXNJY29uKCkgeyByZXR1cm4gQm9vbGVhbih0aGlzLmljb24pIH1cclxuXHRnZXQgaGFzT3JkZXJCdXR0b25zKCkgeyByZXR1cm4gdGhpcy5vcmRlclByb3BlcnRpZXMubGVuZ3RoID4gMCB9XHJcblx0Z2V0IGxvYWRpbmcoKSB7IHJldHVybiB0aGlzLmxvYWRpbmdTdGF0dXMgfHwgdGhpcy5leHRlcm5hbExvYWRpbmcgfVxyXG5cclxuXHRnZXQgaXNEeW5hbWljKCkgeyByZXR1cm4gQm9vbGVhbih0aGlzLmxpc3RFbmRwb2ludCkgfVxyXG5cdEBJbnB1dCgpIHNldCBzdHlsZShzdHlsZUlucHV0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcblx0XHR0aGlzLmhvc3RTdHlsZSA9IHN0eWxlSW5wdXQ7XHJcblx0fTtcclxuXHJcblx0Z2V0IGlzRW1wdHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5saXN0SXRlbXMubGVuZ3RoIDwgMVxyXG5cdH1cclxuXHJcblx0Z2V0IGVtcHR5TGFiZWwoKSB7XHJcblx0XHRyZXR1cm4gQm9vbGVhbih0aGlzLnNlYXJjaC52YWx1ZSkgPyBcIk5vdCBGb3VuZCAxXCIgOiB0aGlzLmVtcHR5UGxhY2Vob2xkZXI7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gWydmaWx0ZXItaXRlbScsIHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gPyAodGhpcy5zZWxlY3Rpb25JZHMuaGFzKGl0ZW0uaWQpID8gJ3NlbGVjdGVkLWl0ZW0nIDogJycpIDogKHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkgPyAnc2VsZWN0ZWQtaXRlbScgOiAnJyksICh0aGlzLm11bHRpcGxlU2VsZWN0aW9uICYmIHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpID8gJ3NlY29uZC1zZWxlY3Rpb24nIDogJycsIHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gPyAnY2hlY2tib3gtbWFyZ2luJyA6ICcnXVxyXG5cdH1cclxuXHJcblxyXG5cdGdldCBsaXN0SXRlbXMoKSB7XHJcblx0XHQvLyByZXR1cm4gKEJvb2xlYW4odGhpcy5saXN0RW5kcG9pbnQpID8gdGhpcy5sb2FkZWRJdGVtcyA6IHRoaXMuaXRlbXMpLmZpbHRlcigoaXRlbTogYW55KSA9PiB0aGlzLnNlYXJjaEJhclByb3BlcnRpZXMuc29tZShwcm9wZXJ0eSA9PiBpdGVtW3Byb3BlcnR5XT8uaW5jbHVkZXModGhpcy5zZWFyY2gudmFsdWU/LnRvTG93ZXJDYXNlKCkgPz8gJycpKSlcclxuXHRcdC8vIFx0LnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xyXG5cdFx0cmV0dXJuIHRoaXMubG9hZGVkSXRlbXNcclxuXHR9XHJcblxyXG5cdGdldE9yZGVySWNvbihwcm9wZXJ0eTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcmRlclByb3BlcnR5SWNvbltwcm9wZXJ0eV07XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgc25hY2tiYXI6IFNuYWNrYmFyU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVBpcGUpIHtcclxuXHRcdHRoaXMub3JkZXJJdGVtcy5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAobmV3T3JkZXJQcm9wZXJ0eSkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudE9yZGVyID0geyBwcm9wZXJ0eTogbmV3T3JkZXJQcm9wZXJ0eS5wcm9wZXJ0eSwgYXNjOiAhdGhpcy5jdXJyZW50T3JkZXIuYXNjIH1cclxuXHRcdFx0XHR0aGlzLmxvYWRlZEl0ZW1zID0gYWxwaGFiZXRTb3J0KHRoaXMubG9hZGVkSXRlbXMsIG5ld09yZGVyUHJvcGVydHkucHJvcGVydHksIHRoaXMuY3VycmVudE9yZGVyLmFzYyk7XHJcblx0XHRcdFx0dGhpcy5vcmRlclByb3BlcnR5SWNvbltuZXdPcmRlclByb3BlcnR5LnByb3BlcnR5XSA9IHRoaXMuY3VycmVudE9yZGVyLmFzYyA/IG5ld09yZGVyUHJvcGVydHkuYXNjSWNvbiA6IG5ld09yZGVyUHJvcGVydHkuZGVzY0ljb247XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpIHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtPy5pZCA9PT0gaXRlbS5pZCB9XHJcblxyXG5cclxuXHJcblx0bG9hZEl0ZW1zKCkge1xyXG5cdFx0dGhpcy5sb2FkaW5nU3RhdHVzID0gdHJ1ZTtcclxuXHRcdGlmICh0aGlzLmxpc3RFbmRwb2ludCkge3RoaXMuaHR0cC5nZXQodGhpcy5zaG93UGFnaW5hdG9yID8gYCR7dGhpcy5saXN0RW5kcG9pbnR9P3BhZ2U9JHt0aGlzLmN1cnJlbnRQYWdlfSZwYWdlU2l6ZT0ke3RoaXMucGFnZVNpemV9JiR7dGhpcy5lbmRwb2ludFBhcmFtc31gIDogdGhpcy5saXN0RW5kcG9pbnQpXHJcblx0XHRcdC5waXBlKHN3aXRjaE1hcCh0aGlzLmxpc3RSZXF1ZXN0TWFwcGluZyA/PyBkZWZhdWx0U3dpdGNoTWFwcGVyKSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlLnJlc3BvbnNlQ29kZSA9PT0gMjAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9hZGVkSXRlbXMgPSByZXNwb25zZS5sb2FkO1xyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1zTG9hZGVkLmVtaXQocmVzcG9uc2UubG9hZCk7XHJcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoVXNlcnMgPSByZXNwb25zZS50b3RhbFJlY29yZHM7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2VhcmNoLnNldFZhbHVlKCcnKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU3RhdHVzID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKHJlc3BvbnNlKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU3RhdHVzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMuc25hY2tiYXIud2FybmluZyh0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0odGhpcy5pdGVtc0VuZHBvaW50LmVycm9ycz8uW3Jlc3BvbnNlLnJlc3BvbnNlQ29kZV0gPz8gJ1NvbWV0aGluZyB3ZW50IHdyb25nJykpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRpbmdTdGF0dXMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuc25hY2tiYXIud2FybmluZyh0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0odGhpcy5pdGVtc0VuZHBvaW50LmVycm9ycz8uWydkZWZhdWx0J10gPz8gJ1NvbWV0aGluZyB3ZW50IHdyb25nJykpO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7fVxyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHRpZiAoQm9vbGVhbih0aGlzLmxpc3RFbmRwb2ludCkpIHtcclxuXHRcdFx0Ly8gdGhpcy5sb2FkSXRlbXMoKTtcclxuXHRcdFx0dGhpcy5yZWxvYWRTdWJqZWN0Py5zdWJzY3JpYmUoeyBuZXh0OiAoKSA9PiB0aGlzLmxvYWRJdGVtcygpIH0pO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWFyY2gudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSh7XHJcblx0XHRcdG5leHQ6IChuZXdTZWFyY2gpID0+IHtcclxuXHRcdFx0XHR0aGlzLmZpbHRlckl0ZW1zID0gbmV3IFNldCh0aGlzLmxvYWRlZEl0ZW1zLmZpbHRlcihcclxuXHRcdFx0XHRcdGl0ZW0gPT4gKHRoaXMuc2VhcmNoRmlsdGVyID8/IGRlZmF1bHRGaWx0ZXIpKGl0ZW0pLmZpbHRlcigodmFsdWU6IGFueSkgPT4gQm9vbGVhbih2YWx1ZSkpLnNvbWUoKHZhbHVlOiBzdHJpbmcpID0+IHsgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlPy4oKS5pbmNsdWRlcyhuZXdTZWFyY2g/LnRvTG93ZXJDYXNlKCkgPz8gJycpIH0pXHJcblx0XHRcdFx0KS5tYXAoaXRlbSA9PiBpdGVtLmlkKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblx0XHRsZXQgeyBsaXN0RW5kcG9pbnQsIGl0ZW1zLCBvcmRlclByb3BlcnRpZXMgfSA9IGNoYW5nZXM7XHJcblx0XHRpZiAoQm9vbGVhbihsaXN0RW5kcG9pbnQpICYmIChsaXN0RW5kcG9pbnQ/LnByZXZpb3VzVmFsdWUgIT09IGxpc3RFbmRwb2ludD8uY3VycmVudFZhbHVlKSkge1xyXG5cdFx0XHR0aGlzLmxvYWRJdGVtcygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGl0ZW1zKSB7XHJcblx0XHRcdFx0dGhpcy5sb2FkZWRJdGVtcyA9IGl0ZW1zLmN1cnJlbnRWYWx1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKCFCb29sZWFuKHRoaXMubGlzdEVuZHBvaW50KSAmJiBpdGVtcz8uY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdHRoaXMuc2VhcmNoLnNldFZhbHVlKCcnKTtcclxuXHRcdH1cclxuXHRcdGlmIChvcmRlclByb3BlcnRpZXM/LmN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLm9yZGVyUHJvcGVydHlJY29uID0gb3JkZXJQcm9wZXJ0aWVzLmN1cnJlbnRWYWx1ZS5yZWR1Y2UoKGFjYzogYW55LCBjdXJyOiBhbnkpID0+ICh7IC4uLmFjYywgW2N1cnIucHJvcGVydHldOiBjdXJyLmFzY0ljb24gfSksIHt9KVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c2V0T3JkZXIocHJvcGVydHk6IGFueSkge1xyXG5cdFx0dGhpcy5vcmRlckl0ZW1zLm5leHQocHJvcGVydHkpO1xyXG5cdH1cclxuXHJcblx0c2VsZWN0VXNlcih1c2VyOiBhbnkpIHsgfVxyXG5cclxuXHRnZXRTZXJ2ZXJEYXRhVXNlcnMoZXZlbnQ6IGFueSkge1xyXG5cdFx0dGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LnBhZ2VJbmRleCArIDFcclxuXHRcdHRoaXMubG9hZEl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRnZXRVaUNvbXBvbmVudElucHV0cyhpdGVtOiBhbnkpIHtcclxuXHRcdHJldHVybiAoeyAuLi50aGlzLnVpQ29tcG9uZW50SW5wdXRzLCBvYmplY3Q6IGl0ZW0gfSk7XHJcblx0fVxyXG5cclxuXHJcblx0aGFzRm9ybUNvbnRyb2woaXRlbTogYW55KSB7XHJcblx0XHRyZXR1cm4gQm9vbGVhbih0aGlzLml0ZW1Db250cm9sc1tpdGVtLmlkXSkgPz8gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRpdGVtQ29udHJvbChpdGVtOiBhbnkpIHtcclxuXHRcdHJldHVybiB0aGlzLml0ZW1Db250cm9sc1tpdGVtLmlkXTtcclxuXHR9XHJcblxyXG5cdGNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnksIGlkOiBudW1iZXIpIHtcclxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0dGhpcy50b2dnbGVJdGVtLmVtaXQoeyBpZCwgY2hlY2tlZDogZXZlbnQudGFyZ2V0LmNoZWNrZWQgfSk7XHJcblx0fVxyXG5cclxufVxyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBnZXROZXN0ZWRQcm9wZXJ0eShvYmo6IGFueSwgcHJvcGVydHk6IHN0cmluZykge1xyXG5cdHJldHVybiBwcm9wZXJ0eS5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhbHBoYWJldFNvcnQoYXJyYXk6IGFueVtdLCBwcm9wZXJ0eTogc3RyaW5nLCBhc2M6IGJvb2xlYW4pIHtcclxuXHRyZXR1cm4gYXJyYXkuc29ydCgoYSwgYikgPT4ge1xyXG5cdFx0Y29uc3QgYVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHkoYSwgcHJvcGVydHkpID8/ICcnO1xyXG5cdFx0Y29uc3QgYlZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHkoYiwgcHJvcGVydHkpID8/ICcnO1xyXG5cclxuXHRcdGlmIChhVmFsdWUgPCBiVmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIGFzYyA/IC0xIDogMTtcclxuXHRcdH1cclxuXHRcdGlmIChhVmFsdWUgPiBiVmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIGFzYyA/IDEgOiAtMTtcclxuXHRcdH1cclxuXHRcdHJldHVybiAwO1xyXG5cdH0pO1x0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN3aXRjaE1hcHBlciAobWFwcGVyOiBGdW5jdGlvbikgOiBhbnkge1xyXG5cdHJldHVybiAodmFsdWU6IGFueSkgPT4ge1xyXG5cdFx0cmV0dXJuIG1hcHBlcih2YWx1ZSl9XHJcbn0iLCI8ZGl2IFthdHRyLmRhdGEtdGhlbWVdPVwidGhlbWVcIiBjbGFzcz1cInRpdGxlLWluZm8taGVhZGVyXCJcclxuXHQqbmdJZj1cImhhc0ljb24gfHwgaGFzVGl0bGUgfHwgc2hvd0NyZWF0ZUJ1dHRvbiB8fCBzaG93T3JkZXJCdXR0b25zXCI+XHJcblx0PGRpdiBjbGFzcz1cInRpdGxlLWluZm9cIiAqbmdJZj1cImhhc0ljb24gfHwgaGFzVGl0bGUgfHwgc2hvd0NyZWF0ZUJ1dHRvblwiPlxyXG5cdFx0PGkgKm5nSWY9XCJoYXNJY29uXCIgW2NsYXNzXT1cIltpY29uXVwiPjwvaT5cclxuXHRcdDxzcGFuIGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cImhhc1RpdGxlXCI+e3t0aXRsZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG5cdFx0PGRpdiAqbmdJZj1cInNob3dDcmVhdGVCdXR0b25cIiBjbGFzcz1cImFkZC1idXR0b24tdXNlclwiIG1hdFRvb2x0aXA9XCJOdWV2byBVc3VhcmlvXCIgKGNsaWNrKT1cImFkZENsaWNrLmVtaXQoJGV2ZW50KVwiPlxyXG5cdFx0XHQ8aSBjbGFzcz1cIm1lbnUtcGx1c1wiPjwvaT5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cdDwhLS0gPGRpdiAqbmdJZj1cInNob3dPcmRlckJ1dHRvbnNcIiBjbGFzcz1cImJ1dHRvbnMtZmlsdGVyLXNlY3Rpb25cIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJhbHBoYWJldGljLXVzZXItZmlsdGVyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwib3JkZXJCeS5uYW1lID09ICduYW1lJ1wiIChjbGljayk9XCJzZXRPcmRlcignbmFtZScpXCJcclxuXHRcdFx0bWF0VG9vbHRpcD1cIk9yZGVyIEJ5IE5hbWVcIiBtYXRUb29sdGlwQ2xhc3M9XCJwdWxzZS10b29sdGlwXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJpY29uLWJ1dHRvbi1maWx0ZXJcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbi1idXR0b24tZmlsdGVyXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgIG9yZGVyQnkubmFtZSA9PSAnbmFtZScgJiYgb3JkZXJCeS5vcmRlckRpcmVjdGlvbiA9PSAnREVTQydcclxuICAgICAgICAgICAgICA/ICdtZW51LWFscGhhYmV0LWFzYydcclxuICAgICAgICAgICAgICA6ICdtZW51LWFscGhhYmV0LWRlc2MnXHJcbiAgICAgICAgICBcIj5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDxkaXYgY2xhc3M9XCJhbHBoYWJldGljLXVzZXItZmlsdGVyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwib3JkZXJCeS5uYW1lID09ICdzZWNvbmRuYW1lJ1wiXHJcblx0XHRcdChjbGljayk9XCJzZXRPcmRlcignbGFzdG5hbWUnKVwiIG1hdFRvb2x0aXA9XCJPcmRlciBCeSBMYXN0IE5hbWVcIiBtYXRUb29sdGlwQ2xhc3M9XCJwdWxzZS10b29sdGlwXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJpY29uLWJ1dHRvbi1maWx0ZXJcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgIG9yZGVyQnkubmFtZSA9PSAnc2Vjb25kbmFtZScgJiYgb3JkZXJCeS5vcmRlckRpcmVjdGlvbiA9PSAnREVTQydcclxuICAgICAgICAgICAgPyAnbWVudS11c2VyLWxlZnQnXHJcbiAgICAgICAgICAgIDogJ21lbnUtdXNlci1yaWdodCdcclxuICAgICAgICBcIj48L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cImFscGhhYmV0aWMtdXNlci1maWx0ZXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJvcmRlckJ5Lm5hbWUgPT0gJ2N1c3RvbWVyJ1wiXHJcblx0XHRcdChjbGljayk9XCJzZXRPcmRlcignY3VzdG9tZXIubmFtZScpXCIgbWF0VG9vbHRpcD1cIk9yZGVyIEJ5IEN1c3RvbWVyXCIgbWF0VG9vbHRpcENsYXNzPVwicHVsc2UtdG9vbHRpcFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbi1idXR0b24tZmlsdGVyXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICBvcmRlckJ5Lm5hbWUgPT0gJ2N1c3RvbWVyJyAmJiBvcmRlckJ5Lm9yZGVyRGlyZWN0aW9uID09ICdERVNDJ1xyXG4gICAgICAgICAgICA/ICdtZXVuLWN1c3RvbWVyLWFzYydcclxuICAgICAgICAgICAgOiAnbWVudS1jdXN0b21lci1kZXNjJ1xyXG4gICAgICAgIFwiPjwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+IC0tPlxyXG5cdDxkaXYgKm5nSWY9XCJoYXNPcmRlckJ1dHRvbnNcIiBjbGFzcz1cImJ1dHRvbnMtZmlsdGVyLXNlY3Rpb25cIj5cclxuXHRcdDxkaXYgKm5nRm9yPVwibGV0IG9yZGVyIG9mIG9yZGVyUHJvcGVydGllc1wiIGNsYXNzPVwiYWxwaGFiZXRpYy11c2VyLWZpbHRlci1idXR0b25cIlxyXG5cdFx0XHRbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRPcmRlci5wcm9wZXJ0eSA9PT0gb3JkZXIucHJvcGVydHlcIiAoY2xpY2spPVwic2V0T3JkZXIob3JkZXIpXCJcclxuXHRcdFx0W21hdFRvb2x0aXBdPVwib3JkZXIudG9vbHRpcCA/PyAnJ1wiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbi1idXR0b24tZmlsdGVyXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImljb24tYnV0dG9uLWZpbHRlclwiIFtjbGFzc109XCJbb3JkZXJQcm9wZXJ0eUljb25bb3JkZXIucHJvcGVydHldXVwiPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXYgW2F0dHIuZGF0YS10aGVtZV09XCJ0aGVtZVwiIGNsYXNzPVwiZmlsdGVyLWl0ZW0gc2VsZWN0ZWQtaXRlbVwiICpuZ0lmPVwic2VsZWN0ZWRJdGVtICYmIHNob3dTZWxlY3RlZEF0VG9wXCI+XHJcblx0PG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJlbnRpdHlVaUNvbXBvbmVudDsgaW5wdXRzOmdldFVpQ29tcG9uZW50SW5wdXRzKHNlbGVjdGVkSXRlbSlcIj5cclxuXHJcblx0PC9uZy1jb250YWluZXI+XHJcblxyXG48L2Rpdj4gLS0+XHJcblxyXG5cclxuPGxpYi1pbnB1dCBuZ0RlZmF1bHRDb250cm9sIFtmb3JtQ29udHJvbF09XCJzZWFyY2hcIiBuYW1lPVwic2VhcmNoXCIgW2xhYmVsXT1cIidTZWFyY2guLi4nIHwgdHJhbnNsYXRlXCIgW2NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG5cdGljb249XCJtZW51LXNlYXJjaFwiIFt0aGVtZV09XCJ0aGVtZVwiICpuZ0lmPVwic2hvd1NlYXJjaFwiPjwvbGliLWlucHV0PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0tY29udGFpbmVyXCI+XHJcblx0PGxpYi1sb2FkZXIgW3RoZW1lXT1cInRoZW1lXCIgW3R5cGVdPVwiJ2JhcidcIiBbbG9hZGluZ109XCJsb2FkaW5nXCI+PC9saWItbG9hZGVyPlxyXG5cdDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXJcIiAqbmdJZj1cIiFsb2FkaW5nICYmIGlzRW1wdHlcIj57e2VtcHR5TGFiZWwgfCB0cmFuc2xhdGVcclxuXHRcdH19PC9zcGFuPlxyXG5cdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdEl0ZW1zXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVySXRlbXMuaGFzKGl0ZW0uaWQpXCI+XHJcblx0XHRcdDxkaXYgKm5nSWY9XCJkcmFnZ2FibGVJdGVtc1wiIGNka0RyYWcgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIj5cclxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiIWRyYWdnYWJsZUl0ZW1zXCI+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGU+XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0PGRpdiBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCJcclxuXHRcdFx0XHRcdFtjbGFzc109XCJnZXRJdGVtQ2xhc3MoaXRlbSlcIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cInNlbGVjdEl0ZW0uZW1pdChpdGVtKVwiPlxyXG5cdFx0XHRcdFx0PGxpYi1jaGVja2JveCAqbmdJZj1cIm11bHRpcGxlU2VsZWN0aW9uXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uSWRzLmhhcyhpdGVtLmlkKVwiXHJcblx0XHRcdFx0XHRcdChpbnB1dENoYW5nZSk9XCJjaGVja2JveENoYW5nZSgkZXZlbnQsIGl0ZW0uaWQpXCIgLz5cclxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRpdHlVaUNvbXBvbmVudFwiPlxyXG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cImVudGl0eVVpQ29tcG9uZW50OyBpbnB1dHM6Z2V0VWlDb21wb25lbnRJbnB1dHMoaXRlbSlcIj48L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNpbXBsZS1pdGVtXCIgKm5nSWY9XCIhZW50aXR5VWlDb21wb25lbnRcIj5cclxuXHRcdFx0XHRcdFx0e3tpdGVtTGFiZWxNYXAoaXRlbSkgPz8gaXRlbS5uYW1lfX1cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8IS0tIDxkaXYgW2F0dHIuZGF0YS10aGVtZV09XCJ0aGVtZVwiXHJcbiAgICAgICAgW2NsYXNzXT1cIlsnZmlsdGVyLWl0ZW0nLCBzZWxlY3Rpb25JZHMuaGFzKGl0ZW0uaWQpID8gJ3NlbGVjdGVkLWl0ZW0nOiAnJywgbXVsdGlwbGVTZWxlY3Rpb24gPyAnY2hlY2tib3gtbWFyZ2luJyA6ICcnXVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0uZW1pdChpdGVtKVwiPlxyXG4gICAgICAgIDxsaWItY2hlY2tib3ggKm5nSWY9XCJtdWx0aXBsZVNlbGVjdGlvblwiIFtjaGVja2VkXT1cInNlbGVjdGlvbklkcy5oYXMoaXRlbS5pZClcIlxyXG4gICAgICAgICAgKGlucHV0Q2hhbmdlKT1cImNoZWNrYm94Q2hhbmdlKCRldmVudCwgaXRlbS5pZClcIiAvPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiZW50aXR5VWlDb21wb25lbnQ7IGlucHV0czpnZXRVaUNvbXBvbmVudElucHV0cyhpdGVtKVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICBcdDwvZGl2PiAtLT5cclxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cdDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuPG1hdC1wYWdpbmF0b3IgKm5nSWY9XCJzaG93UGFnaW5hdG9yICYmIGlzRHluYW1pY1wiICNwYWdpbmF0b3IgaGlkZVBhZ2VTaXplIHNob3dGaXJzdExhc3RCdXR0b25zIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcblx0W3BhZ2VJbmRleF09XCJjdXJyZW50UGFnZSAtIDFcIiBbbGVuZ3RoXT1cImxlbmd0aFVzZXJzXCIgKHBhZ2UpPVwicGFnZUV2ZW50ID0gZ2V0U2VydmVyRGF0YVVzZXJzKCRldmVudClcIlxyXG5cdGNsYXNzPVwibXNmLXBhZ2luYXRvci1tYXBwaW5nIG1zZi1wYWdpbmF0b3ItU3R5bGVcIj5cclxuXHJcbjwvbWF0LXBhZ2luYXRvcj5cclxuPCEtLSBcclxuPG1hdC1wYWdpbmF0b3JcclxuICAgICAgICAqbmdJZj1cIiFpc0xvYWRpbmdUeXBlRmlsdGVyc1wiXHJcbiAgICAgICAgI3BhZ2luYXRvclxyXG4gICAgICAgIGhpZGVQYWdlU2l6ZVxyXG4gICAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zXHJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplVXNlcnNcIlxyXG4gICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4VXNlcnNcIlxyXG4gICAgICAgIFtsZW5ndGhdPVwibGVuZ3RoVXNlcnNcIlxyXG4gICAgICAgIChwYWdlKT1cInBhZ2VFdmVudCA9IGdldFNlcnZlckRhdGFVc2VycygkZXZlbnQpXCJcclxuICAgICAgICBjbGFzcz1cIm1zZi1wYWdpbmF0b3ItbWFwcGluZyBtc2YtcGFnaW5hdG9yLVN0eWxlXCJcclxuICAgICAgPlxyXG48L21hdC1wYWdpbmF0b3I+IC0tPiJdfQ==
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9pdGVtcy12aWV3ZXIvaXRlbXMtdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzcC1saWIvc3JjL2xpYi9pdGVtcy12aWV3ZXIvaXRlbXMtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUVsRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQU8xRSxNQUFNLE9BQU8sb0JBQW9CO0lBZ0RoQyxJQUFJLFFBQVEsS0FBSyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQzdDLElBQUksT0FBTyxLQUFLLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDM0MsSUFBSSxlQUFlLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxD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QUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBRSxNQUFnQjtJQUN0QyxPQUFPLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDckIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFBQSxDQUFDLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIEVNUFRZLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNuYWNrYmFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWN1cml0eUVuZHBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgZGVmYXVsdFN3aXRjaE1hcHBlciB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmNvbnN0IGRlZmF1bHRGaWx0ZXIgPSAoaXRlbTogYW55KSA9PiBbaXRlbT8ubmFtZSA/PyBKU09OLnN0cmluZ2lmeShpdGVtKV07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2xpYi1pdGVtcy12aWV3ZXInLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9pdGVtcy12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuLi9hc3NldHMvZm9udHMvc3R5bGUuY3NzJywgJy4uL2Fzc2V0cy90aGVtZS5zY3NzJywgJy4vaXRlbXMtdmlld2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEl0ZW1zVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuXHRASW5wdXQoKSBpY29uOiBzdHJpbmcgPSAnJztcclxuXHRASW5wdXQoKSB0aGVtZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xyXG5cdEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHRASW5wdXQoKSBpdGVtSWNvbjogc3RyaW5nID0gJyc7XHJcblx0QElucHV0KCkgaXRlbXM6IGFueVtdID0gW107XHJcblx0QElucHV0KCkgZW50aXR5VWlDb21wb25lbnQ6IFR5cGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cdEBJbnB1dCgpIHVpQ29tcG9uZW50SW5wdXRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblx0Ly8gQElucHV0KCkgc2VhcmNoQnk6IHN0cmluZ1tdID0gWyduYW1lJ107XHJcblx0QElucHV0KCkgc2VhcmNoRmlsdGVyPzogRnVuY3Rpb247XHJcblx0QElucHV0KCkgc2hvd0NyZWF0ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIHNob3dPcmRlckJ1dHRvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XHJcblx0QElucHV0KCkgc2VsZWN0aW9uSWRzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPiA9IG5ldyBTZXQoW10pO1xyXG5cdEBJbnB1dCgpIG11bHRpcGxlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblx0QElucHV0KCkgc2hvd1NlbGVjdGVkQXRUb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRASW5wdXQoKSBpdGVtQ29udHJvbHM6IHsgW2tleTogbnVtYmVyIHwgc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHRASW5wdXQoKSBzaG93UGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuXHRASW5wdXQoKSBkcmFnZ2FibGVJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIHNob3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdEBJbnB1dCgpIGxpc3RFbmRwb2ludDogc3RyaW5nID0gJyc7XHJcblx0QElucHV0KCkgaXRlbXNFbmRwb2ludDogU2VjdXJpdHlFbmRwb2ludCA9IHt1cmw6ICcnfTtcclxuXHRASW5wdXQoKSBsaXN0UmVxdWVzdE1hcHBpbmc6IGFueSA9IChyZXNwb25zZTogYW55KSA9PiBvZihyZXNwb25zZSk7XHJcblx0QElucHV0KCkgZW5kcG9pbnRQYXJhbXM6IHN0cmluZyA9ICcnO1xyXG5cdEBJbnB1dCgpIHJlbG9hZFN1YmplY3Q/OiBTdWJqZWN0PGJvb2xlYW4+O1xyXG5cdEBJbnB1dCgpIGV4dGVybmFsTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdEBJbnB1dCgpIG9yZGVyUHJvcGVydGllczogeyBwcm9wZXJ0eTogc3RyaW5nLCBhc2NJY29uOiBzdHJpbmcsIGRlc2NJY29uOiBzdHJpbmcsIHRvb2x0aXA/OiBzdHJpbmcgfVtdID0gW107XHJcblx0QElucHV0KCkgZW1wdHlQbGFjZWhvbGRlcjogc3RyaW5nID0gJ05vdCBGb3VuZCAyJztcclxuXHRASW5wdXQoKSBpdGVtTGFiZWxNYXA6IGFueSA9IChpdGVtOiBhbnkpID0+IGl0ZW0ubmFtZTtcclxuXHRAT3V0cHV0KCkgc2VsZWN0SXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoKSB0b2dnbGVJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QE91dHB1dCgpIGFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QE91dHB1dCgpIGl0ZW1zTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QEhvc3RCaW5kaW5nKCdzdHlsZScpIGhvc3RTdHlsZTogYW55O1xyXG5cclxuXHRvcmRlclByb3BlcnR5SWNvbjogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9ID0geyBuYW1lOiAnbWVudS1hbHBoYWJldC1hc2MnIH07XHJcblx0Y3VycmVudE9yZGVyOiB7IHByb3BlcnR5OiBzdHJpbmcsIGFzYzogYm9vbGVhbiB9ID0geyBwcm9wZXJ0eTogJ25hbWUnLCBhc2M6IHRydWUgfTtcclxuXHRvcmRlckl0ZW1zOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cdHNlYXJjaCA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmc+KCcnKTtcclxuXHRjdXJyZW50UGFnZSA9IDE7XHJcblx0QElucHV0KCkgcGFnZVNpemUgPSA1MDtcclxuXHRwYWdlSW5kZXhVc2VycyA9IDE7XHJcblx0bGVuZ3RoVXNlcnMgPSAxMDtcclxuXHRwYWdlRXZlbnQ6IGFueSA9ICcnO1xyXG5cdGZpbHRlckl0ZW1zOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoW10pO1xyXG5cdGxvYWRlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cdGxvYWRpbmdTdGF0dXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRnZXQgaGFzVGl0bGUoKSB7IHJldHVybiBCb29sZWFuKHRoaXMudGl0bGUpIH1cclxuXHRnZXQgaGFzSWNvbigpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy5pY29uKSB9XHJcblx0Z2V0IGhhc09yZGVyQnV0dG9ucygpIHsgcmV0dXJuIHRoaXMub3JkZXJQcm9wZXJ0aWVzLmxlbmd0aCA+IDAgfVxyXG5cdGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5sb2FkaW5nU3RhdHVzIHx8IHRoaXMuZXh0ZXJuYWxMb2FkaW5nIH1cclxuXHJcblx0Z2V0IGlzRHluYW1pYygpIHsgcmV0dXJuIEJvb2xlYW4odGhpcy5saXN0RW5kcG9pbnQpIH1cclxuXHRASW5wdXQoKSBzZXQgc3R5bGUoc3R5bGVJbnB1dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xyXG5cdFx0dGhpcy5ob3N0U3R5bGUgPSBzdHlsZUlucHV0O1xyXG5cdH07XHJcblxyXG5cdGdldCBpc0VtcHR5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMubGlzdEl0ZW1zLmxlbmd0aCA8IDFcclxuXHR9XHJcblxyXG5cdGdldCBlbXB0eUxhYmVsKCkge1xyXG5cdFx0cmV0dXJuIEJvb2xlYW4odGhpcy5zZWFyY2gudmFsdWUpID8gXCJOb3QgRm91bmQgMVwiIDogdGhpcy5lbXB0eVBsYWNlaG9sZGVyO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUNsYXNzKGl0ZW06IGFueSkge1xyXG5cdFx0cmV0dXJuIFsnZmlsdGVyLWl0ZW0nLCB0aGlzLm11bHRpcGxlU2VsZWN0aW9uID8gKHRoaXMuc2VsZWN0aW9uSWRzLmhhcyhpdGVtLmlkKSA/ICdzZWxlY3RlZC1pdGVtJyA6ICcnKSA6ICh0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pID8gJ3NlbGVjdGVkLWl0ZW0nIDogJycpLCAodGhpcy5tdWx0aXBsZVNlbGVjdGlvbiAmJiB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pKSA/ICdzZWNvbmQtc2VsZWN0aW9uJyA6ICcnLCB0aGlzLm11bHRpcGxlU2VsZWN0aW9uID8gJ2NoZWNrYm94LW1hcmdpbicgOiAnJ11cclxuXHR9XHJcblxyXG5cclxuXHRnZXQgbGlzdEl0ZW1zKCkge1xyXG5cdFx0Ly8gcmV0dXJuIChCb29sZWFuKHRoaXMubGlzdEVuZHBvaW50KSA/IHRoaXMubG9hZGVkSXRlbXMgOiB0aGlzLml0ZW1zKS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gdGhpcy5zZWFyY2hCYXJQcm9wZXJ0aWVzLnNvbWUocHJvcGVydHkgPT4gaXRlbVtwcm9wZXJ0eV0/LmluY2x1ZGVzKHRoaXMuc2VhcmNoLnZhbHVlPy50b0xvd2VyQ2FzZSgpID8/ICcnKSkpXHJcblx0XHQvLyBcdC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuXHRcdHJldHVybiB0aGlzLmxvYWRlZEl0ZW1zXHJcblx0fVxyXG5cclxuXHRnZXRPcmRlckljb24ocHJvcGVydHk6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMub3JkZXJQcm9wZXJ0eUljb25bcHJvcGVydHldO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIHNuYWNrYmFyOiBTbmFja2JhclNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVQaXBlKSB7XHJcblx0XHR0aGlzLm9yZGVySXRlbXMuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKG5ld09yZGVyUHJvcGVydHkpID0+IHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRPcmRlciA9IHsgcHJvcGVydHk6IG5ld09yZGVyUHJvcGVydHkucHJvcGVydHksIGFzYzogIXRoaXMuY3VycmVudE9yZGVyLmFzYyB9XHJcblx0XHRcdFx0dGhpcy5sb2FkZWRJdGVtcyA9IGFscGhhYmV0U29ydCh0aGlzLmxvYWRlZEl0ZW1zLCBuZXdPcmRlclByb3BlcnR5LnByb3BlcnR5LCB0aGlzLmN1cnJlbnRPcmRlci5hc2MpO1xyXG5cdFx0XHRcdHRoaXMub3JkZXJQcm9wZXJ0eUljb25bbmV3T3JkZXJQcm9wZXJ0eS5wcm9wZXJ0eV0gPSB0aGlzLmN1cnJlbnRPcmRlci5hc2MgPyBuZXdPcmRlclByb3BlcnR5LmFzY0ljb24gOiBuZXdPcmRlclByb3BlcnR5LmRlc2NJY29uO1xyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcblx0aXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KSB7IHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbT8uaWQgPT09IGl0ZW0uaWQgfVxyXG5cclxuXHJcblxyXG5cdGxvYWRJdGVtcygpIHtcclxuXHRcdHRoaXMubG9hZGluZ1N0YXR1cyA9IHRydWU7XHJcblx0XHRpZih0aGlzLnRpdGxlICYmIHRoaXMudGl0bGUgPT09ICdVc2Vycycpe1xyXG5cdFx0XHRsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxyXG5cdFx0XHRcdC5zZXQoJ3BhZ2UnLCB0aGlzLmN1cnJlbnRQYWdlKVxyXG5cdFx0XHRcdC5zZXQoJ3BhZ2VTaXplJywgdGhpcy5wYWdlU2l6ZSk7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5zZWFyY2gudmFsdWUgJiYgdGhpcy5zZWFyY2gudmFsdWUudHJpbSgpICE9PSAnJykge1xyXG5cdFx0XHRcdHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3NlYXJjaCcsIHRoaXMuc2VhcmNoLnZhbHVlLnRyaW0oKSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuaHR0cC5nZXQodGhpcy5saXN0RW5kcG9pbnQsIHsgcGFyYW1zIH0pXHJcblx0XHRcdFx0LnBpcGUoc3dpdGNoTWFwKHRoaXMubGlzdFJlcXVlc3RNYXBwaW5nID8/IGRlZmF1bHRTd2l0Y2hNYXBwZXIpKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0bmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHJlc3BvbnNlLnJlc3BvbnNlQ29kZSA9PT0gMjAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkZWRJdGVtcyA9IHJlc3BvbnNlLmxvYWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pdGVtc0xvYWRlZC5lbWl0KHJlc3BvbnNlLmxvYWQpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoVXNlcnMgPSByZXNwb25zZS50b3RhbFJlY29yZHM7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maWx0ZXJJdGVtcyA9IG5ldyBTZXQodGhpcy5sb2FkZWRJdGVtcy5tYXAoaXRlbSA9PiBpdGVtLmlkKSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU3RhdHVzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihyZXNwb25zZSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU3RhdHVzID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja2Jhci53YXJuaW5nKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLml0ZW1zRW5kcG9pbnQuZXJyb3JzPy5bcmVzcG9uc2UucmVzcG9uc2VDb2RlXSA/PyAnU29tZXRoaW5nIHdlbnQgd3JvbmcnXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XHJcblx0XHRcdFx0XHRcdHRoaXMubG9hZGluZ1N0YXR1cyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNuYWNrYmFyLndhcm5pbmcoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5pdGVtc0VuZHBvaW50LmVycm9ycz8uWydkZWZhdWx0J10gPz8gJ1NvbWV0aGluZyB3ZW50IHdyb25nJ1xyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRpZiAodGhpcy5saXN0RW5kcG9pbnQpIHt0aGlzLmh0dHAuZ2V0KHRoaXMuc2hvd1BhZ2luYXRvciA/IGAke3RoaXMubGlzdEVuZHBvaW50fT9wYWdlPSR7dGhpcy5jdXJyZW50UGFnZX0mcGFnZVNpemU9JHt0aGlzLnBhZ2VTaXplfSYke3RoaXMuZW5kcG9pbnRQYXJhbXN9YCA6IHRoaXMubGlzdEVuZHBvaW50KVxyXG5cdFx0XHQucGlwZShzd2l0Y2hNYXAodGhpcy5saXN0UmVxdWVzdE1hcHBpbmcgPz8gZGVmYXVsdFN3aXRjaE1hcHBlcikpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZS5yZXNwb25zZUNvZGUgPT09IDIwMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRlZEl0ZW1zID0gcmVzcG9uc2UubG9hZDtcclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtc0xvYWRlZC5lbWl0KHJlc3BvbnNlLmxvYWQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aFVzZXJzID0gcmVzcG9uc2UudG90YWxSZWNvcmRzO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZpbHRlckl0ZW1zID0gbmV3IFNldChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxvYWRlZEl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaWQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdC8vdGhpcy5zZWFyY2guc2V0VmFsdWUoJycpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRpbmdTdGF0dXMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IocmVzcG9uc2UpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRpbmdTdGF0dXMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zbmFja2Jhci53YXJuaW5nKHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh0aGlzLml0ZW1zRW5kcG9pbnQuZXJyb3JzPy5bcmVzcG9uc2UucmVzcG9uc2VDb2RlXSA/PyAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHRcdHRoaXMubG9hZGluZ1N0YXR1cyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5zbmFja2Jhci53YXJuaW5nKHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSh0aGlzLml0ZW1zRW5kcG9pbnQuZXJyb3JzPy5bJ2RlZmF1bHQnXSA/PyAnU29tZXRoaW5nIHdlbnQgd3JvbmcnKSk7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlcnJvcik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTt9XHJcblx0XHR9XHJcblx0XHRcclxuXHR9XHJcblx0XHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHRpZiAoQm9vbGVhbih0aGlzLmxpc3RFbmRwb2ludCkpIHtcclxuXHRcdFx0dGhpcy5yZWxvYWRTdWJqZWN0Py5zdWJzY3JpYmUoeyBuZXh0OiAoKSA9PiB0aGlzLmxvYWRJdGVtcygpIH0pO1xyXG5cdFx0fVxyXG5cdFx0aWYodGhpcy50aXRsZSAmJiB0aGlzLnRpdGxlID09PSAnVXNlcnMnKXtcclxuXHRcdFx0dGhpcy5zZWFyY2gudmFsdWVDaGFuZ2VzXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdGRlYm91bmNlVGltZSgzMDApLFxyXG5cdFx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcblx0XHRcdFx0c3dpdGNoTWFwKChuZXdTZWFyY2gpID0+IHtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5saXN0RW5kcG9pbnQgfHwgdGhpcy5saXN0RW5kcG9pbnQudHJpbSgpID09PSAnJykge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gRU1QVFk7XHJcblx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5sb2FkaW5nU3RhdHVzID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnNob3dQYWdpbmF0b3IpIHtcclxuXHRcdFx0XHRcdFx0cGFyYW1zID0gcGFyYW1zXHJcblx0XHRcdFx0XHRcdFx0LnNldCgncGFnZScsIDEpXHJcblx0XHRcdFx0XHRcdFx0LnNldCgncGFnZVNpemUnLCB0aGlzLnBhZ2VTaXplKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICh0aGlzLmVuZHBvaW50UGFyYW1zKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGV4dHJhUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0aGlzLmVuZHBvaW50UGFyYW1zKTtcclxuXHRcdFx0XHRcdFx0ZXh0cmFQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHBhcmFtcyA9IHBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3NlYXJjaCcsIG5ld1NlYXJjaD8udHJpbSgpID8/ICcnKTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmxpc3RFbmRwb2ludCwgeyBwYXJhbXMgfSlcclxuXHRcdFx0XHRcdFx0LnBpcGUoc3dpdGNoTWFwKHRoaXMubGlzdFJlcXVlc3RNYXBwaW5nID8/IGRlZmF1bHRTd2l0Y2hNYXBwZXIpKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmVzcG9uc2UucmVzcG9uc2VDb2RlID09PSAyMDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkZWRJdGVtcyA9IHJlc3BvbnNlLmxvYWQ7XHJcblx0XHRcdFx0XHRcdHRoaXMuaXRlbXNMb2FkZWQuZW1pdChyZXNwb25zZS5sb2FkKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGhVc2VycyA9IHJlc3BvbnNlLnRvdGFsUmVjb3JkcztcclxuXHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsdGVySXRlbXMgPSBuZXcgU2V0KFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMubG9hZGVkSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pZClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IocmVzcG9uc2UpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNuYWNrYmFyLndhcm5pbmcoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5pdGVtc0VuZHBvaW50LmVycm9ycz8uW3Jlc3BvbnNlLnJlc3BvbnNlQ29kZV0gPz8gJ1NvbWV0aGluZyB3ZW50IHdyb25nJ1xyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMubG9hZGluZ1N0YXR1cyA9IGZhbHNlO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRpbmdTdGF0dXMgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuc25hY2tiYXIud2FybmluZyhcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuaXRlbXNFbmRwb2ludC5lcnJvcnM/LlsnZGVmYXVsdCddID8/ICdTb21ldGhpbmcgd2VudCB3cm9uZydcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdHRoaXMuc2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChuZXdTZWFyY2gpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZmlsdGVySXRlbXMgPSBuZXcgU2V0KHRoaXMubG9hZGVkSXRlbXMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRpdGVtID0+ICh0aGlzLnNlYXJjaEZpbHRlciA/PyBkZWZhdWx0RmlsdGVyKShpdGVtKVxyXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKHZhbHVlOiBhbnkpID0+IEJvb2xlYW4odmFsdWUpKVxyXG5cdFx0XHRcdFx0XHRcdC5zb21lKCh2YWx1ZTogc3RyaW5nKSA9PiB7IFxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlPy4oKS5pbmNsdWRlcyhuZXdTZWFyY2g/LnRvTG93ZXJDYXNlKCkgPz8gJycpIFxyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpLm1hcChpdGVtID0+IGl0ZW0uaWQpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9XHJcblx0XHRcclxuXHRcdFxyXG5cdH1cclxuXHQvKlxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0aWYgKEJvb2xlYW4odGhpcy5saXN0RW5kcG9pbnQpKSB7XHJcblx0XHRcdC8vIHRoaXMubG9hZEl0ZW1zKCk7XHJcblx0XHRcdHRoaXMucmVsb2FkU3ViamVjdD8uc3Vic2NyaWJlKHsgbmV4dDogKCkgPT4gdGhpcy5sb2FkSXRlbXMoKSB9KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAobmV3U2VhcmNoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJJdGVtcyA9IG5ldyBTZXQodGhpcy5sb2FkZWRJdGVtcy5maWx0ZXIoXHJcblx0XHRcdFx0XHRpdGVtID0+ICh0aGlzLnNlYXJjaEZpbHRlciA/PyBkZWZhdWx0RmlsdGVyKShpdGVtKVxyXG5cdFx0XHRcdFx0XHQuZmlsdGVyKCh2YWx1ZTogYW55KSA9PiBCb29sZWFuKHZhbHVlKSlcclxuXHRcdFx0XHRcdFx0LnNvbWUoKHZhbHVlOiBzdHJpbmcpID0+IHsgXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlPy4oKS5pbmNsdWRlcyhuZXdTZWFyY2g/LnRvTG93ZXJDYXNlKCkgPz8gJycpIFxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCkubWFwKGl0ZW0gPT4gaXRlbS5pZCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH1cclxuXHQqL1xyXG5cclxuXHRcdFxyXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuXHRcdGxldCB7IGxpc3RFbmRwb2ludCwgaXRlbXMsIG9yZGVyUHJvcGVydGllcyB9ID0gY2hhbmdlcztcclxuXHRcdGlmIChCb29sZWFuKGxpc3RFbmRwb2ludCkgJiYgKGxpc3RFbmRwb2ludD8ucHJldmlvdXNWYWx1ZSAhPT0gbGlzdEVuZHBvaW50Py5jdXJyZW50VmFsdWUpKSB7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW1zKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoaXRlbXMpIHtcclxuXHRcdFx0XHR0aGlzLmxvYWRlZEl0ZW1zID0gaXRlbXMuY3VycmVudFZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoIUJvb2xlYW4odGhpcy5saXN0RW5kcG9pbnQpICYmIGl0ZW1zPy5jdXJyZW50VmFsdWUpIHtcclxuXHRcdFx0dGhpcy5zZWFyY2guc2V0VmFsdWUoJycpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKG9yZGVyUHJvcGVydGllcz8uY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdHRoaXMub3JkZXJQcm9wZXJ0eUljb24gPSBvcmRlclByb3BlcnRpZXMuY3VycmVudFZhbHVlLnJlZHVjZSgoYWNjOiBhbnksIGN1cnI6IGFueSkgPT4gKHsgLi4uYWNjLCBbY3Vyci5wcm9wZXJ0eV06IGN1cnIuYXNjSWNvbiB9KSwge30pXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzZXRPcmRlcihwcm9wZXJ0eTogYW55KSB7XHJcblx0XHR0aGlzLm9yZGVySXRlbXMubmV4dChwcm9wZXJ0eSk7XHJcblx0fVxyXG5cclxuXHRzZWxlY3RVc2VyKHVzZXI6IGFueSkgeyB9XHJcblxyXG5cdGdldFNlcnZlckRhdGFVc2VycyhldmVudDogYW55KSB7XHJcblx0XHR0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQucGFnZUluZGV4ICsgMVxyXG5cdFx0dGhpcy5sb2FkSXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdGdldFVpQ29tcG9uZW50SW5wdXRzKGl0ZW06IGFueSkge1xyXG5cdFx0cmV0dXJuICh7IC4uLnRoaXMudWlDb21wb25lbnRJbnB1dHMsIG9iamVjdDogaXRlbSB9KTtcclxuXHR9XHJcblxyXG5cclxuXHRoYXNGb3JtQ29udHJvbChpdGVtOiBhbnkpIHtcclxuXHRcdHJldHVybiBCb29sZWFuKHRoaXMuaXRlbUNvbnRyb2xzW2l0ZW0uaWRdKSA/PyBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGl0ZW1Db250cm9sKGl0ZW06IGFueSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUNvbnRyb2xzW2l0ZW0uaWRdO1xyXG5cdH1cclxuXHJcblx0Y2hlY2tib3hDaGFuZ2UoZXZlbnQ6IGFueSwgaWQ6IG51bWJlcikge1xyXG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR0aGlzLnRvZ2dsZUl0ZW0uZW1pdCh7IGlkLCBjaGVja2VkOiBldmVudC50YXJnZXQuY2hlY2tlZCB9KTtcclxuXHR9XHJcblxyXG59XHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIGdldE5lc3RlZFByb3BlcnR5KG9iajogYW55LCBwcm9wZXJ0eTogc3RyaW5nKSB7XHJcblx0cmV0dXJuIHByb3BlcnR5LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIG9iaik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFscGhhYmV0U29ydChhcnJheTogYW55W10sIHByb3BlcnR5OiBzdHJpbmcsIGFzYzogYm9vbGVhbikge1xyXG5cdHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcblx0XHRjb25zdCBhVmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eShhLCBwcm9wZXJ0eSkgPz8gJyc7XHJcblx0XHRjb25zdCBiVmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eShiLCBwcm9wZXJ0eSkgPz8gJyc7XHJcblxyXG5cdFx0aWYgKGFWYWx1ZSA8IGJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gYXNjID8gLTEgOiAxO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFWYWx1ZSA+IGJWYWx1ZSkge1xyXG5cdFx0XHRyZXR1cm4gYXNjID8gMSA6IC0xO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDA7XHJcblx0fSk7XHRcclxufVxyXG5cclxuZnVuY3Rpb24gc3dpdGNoTWFwcGVyIChtYXBwZXI6IEZ1bmN0aW9uKSA6IGFueSB7XHJcblx0cmV0dXJuICh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRyZXR1cm4gbWFwcGVyKHZhbHVlKX1cclxufSIsIjxkaXYgW2F0dHIuZGF0YS10aGVtZV09XCJ0aGVtZVwiIGNsYXNzPVwidGl0bGUtaW5mby1oZWFkZXJcIlxyXG5cdCpuZ0lmPVwiaGFzSWNvbiB8fCBoYXNUaXRsZSB8fCBzaG93Q3JlYXRlQnV0dG9uIHx8IHNob3dPcmRlckJ1dHRvbnNcIj5cclxuXHQ8ZGl2IGNsYXNzPVwidGl0bGUtaW5mb1wiICpuZ0lmPVwiaGFzSWNvbiB8fCBoYXNUaXRsZSB8fCBzaG93Q3JlYXRlQnV0dG9uXCI+XHJcblx0XHQ8aSAqbmdJZj1cImhhc0ljb25cIiBbY2xhc3NdPVwiW2ljb25dXCI+PC9pPlxyXG5cdFx0PHNwYW4gY2xhc3M9XCJ0aXRsZVwiICpuZ0lmPVwiaGFzVGl0bGVcIj57e3RpdGxlIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcblx0XHQ8ZGl2ICpuZ0lmPVwic2hvd0NyZWF0ZUJ1dHRvblwiIGNsYXNzPVwiYWRkLWJ1dHRvbi11c2VyXCIgbWF0VG9vbHRpcD1cIk51ZXZvIFVzdWFyaW9cIiAoY2xpY2spPVwiYWRkQ2xpY2suZW1pdCgkZXZlbnQpXCI+XHJcblx0XHRcdDxpIGNsYXNzPVwibWVudS1wbHVzXCI+PC9pPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblx0PCEtLSA8ZGl2ICpuZ0lmPVwic2hvd09yZGVyQnV0dG9uc1wiIGNsYXNzPVwiYnV0dG9ucy1maWx0ZXItc2VjdGlvblwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImFscGhhYmV0aWMtdXNlci1maWx0ZXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJvcmRlckJ5Lm5hbWUgPT0gJ25hbWUnXCIgKGNsaWNrKT1cInNldE9yZGVyKCduYW1lJylcIlxyXG5cdFx0XHRtYXRUb29sdGlwPVwiT3JkZXIgQnkgTmFtZVwiIG1hdFRvb2x0aXBDbGFzcz1cInB1bHNlLXRvb2x0aXBcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImljb24tYnV0dG9uLWZpbHRlclwiPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJpY29uLWJ1dHRvbi1maWx0ZXJcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgb3JkZXJCeS5uYW1lID09ICduYW1lJyAmJiBvcmRlckJ5Lm9yZGVyRGlyZWN0aW9uID09ICdERVNDJ1xyXG4gICAgICAgICAgICAgID8gJ21lbnUtYWxwaGFiZXQtYXNjJ1xyXG4gICAgICAgICAgICAgIDogJ21lbnUtYWxwaGFiZXQtZGVzYydcclxuICAgICAgICAgIFwiPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cImFscGhhYmV0aWMtdXNlci1maWx0ZXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJvcmRlckJ5Lm5hbWUgPT0gJ3NlY29uZG5hbWUnXCJcclxuXHRcdFx0KGNsaWNrKT1cInNldE9yZGVyKCdsYXN0bmFtZScpXCIgbWF0VG9vbHRpcD1cIk9yZGVyIEJ5IExhc3QgTmFtZVwiIG1hdFRvb2x0aXBDbGFzcz1cInB1bHNlLXRvb2x0aXBcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImljb24tYnV0dG9uLWZpbHRlclwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgb3JkZXJCeS5uYW1lID09ICdzZWNvbmRuYW1lJyAmJiBvcmRlckJ5Lm9yZGVyRGlyZWN0aW9uID09ICdERVNDJ1xyXG4gICAgICAgICAgICA/ICdtZW51LXVzZXItbGVmdCdcclxuICAgICAgICAgICAgOiAnbWVudS11c2VyLXJpZ2h0J1xyXG4gICAgICAgIFwiPjwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiYWxwaGFiZXRpYy11c2VyLWZpbHRlci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cIm9yZGVyQnkubmFtZSA9PSAnY3VzdG9tZXInXCJcclxuXHRcdFx0KGNsaWNrKT1cInNldE9yZGVyKCdjdXN0b21lci5uYW1lJylcIiBtYXRUb29sdGlwPVwiT3JkZXIgQnkgQ3VzdG9tZXJcIiBtYXRUb29sdGlwQ2xhc3M9XCJwdWxzZS10b29sdGlwXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJpY29uLWJ1dHRvbi1maWx0ZXJcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgIG9yZGVyQnkubmFtZSA9PSAnY3VzdG9tZXInICYmIG9yZGVyQnkub3JkZXJEaXJlY3Rpb24gPT0gJ0RFU0MnXHJcbiAgICAgICAgICAgID8gJ21ldW4tY3VzdG9tZXItYXNjJ1xyXG4gICAgICAgICAgICA6ICdtZW51LWN1c3RvbWVyLWRlc2MnXHJcbiAgICAgICAgXCI+PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj4gLS0+XHJcblx0PGRpdiAqbmdJZj1cImhhc09yZGVyQnV0dG9uc1wiIGNsYXNzPVwiYnV0dG9ucy1maWx0ZXItc2VjdGlvblwiPlxyXG5cdFx0PGRpdiAqbmdGb3I9XCJsZXQgb3JkZXIgb2Ygb3JkZXJQcm9wZXJ0aWVzXCIgY2xhc3M9XCJhbHBoYWJldGljLXVzZXItZmlsdGVyLWJ1dHRvblwiXHJcblx0XHRcdFtjbGFzcy5hY3RpdmVdPVwiY3VycmVudE9yZGVyLnByb3BlcnR5ID09PSBvcmRlci5wcm9wZXJ0eVwiIChjbGljayk9XCJzZXRPcmRlcihvcmRlcilcIlxyXG5cdFx0XHRbbWF0VG9vbHRpcF09XCJvcmRlci50b29sdGlwID8/ICcnXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJpY29uLWJ1dHRvbi1maWx0ZXJcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbi1idXR0b24tZmlsdGVyXCIgW2NsYXNzXT1cIltvcmRlclByb3BlcnR5SWNvbltvcmRlci5wcm9wZXJ0eV1dXCI+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPGRpdiBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCIgY2xhc3M9XCJmaWx0ZXItaXRlbSBzZWxlY3RlZC1pdGVtXCIgKm5nSWY9XCJzZWxlY3RlZEl0ZW0gJiYgc2hvd1NlbGVjdGVkQXRUb3BcIj5cclxuXHQ8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cImVudGl0eVVpQ29tcG9uZW50OyBpbnB1dHM6Z2V0VWlDb21wb25lbnRJbnB1dHMoc2VsZWN0ZWRJdGVtKVwiPlxyXG5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvZGl2PiAtLT5cclxuXHJcblxyXG48bGliLWlucHV0IG5nRGVmYXVsdENvbnRyb2wgW2Zvcm1Db250cm9sXT1cInNlYXJjaFwiIG5hbWU9XCJzZWFyY2hcIiBbbGFiZWxdPVwiJ1NlYXJjaC4uLicgfCB0cmFuc2xhdGVcIiBbY2xlYXJCdXR0b25dPVwidHJ1ZVwiXHJcblx0aWNvbj1cIm1lbnUtc2VhcmNoXCIgW3RoZW1lXT1cInRoZW1lXCIgKm5nSWY9XCJzaG93U2VhcmNoXCI+PC9saWItaW5wdXQ+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImxpc3QtaXRlbS1jb250YWluZXJcIj5cclxuXHQ8bGliLWxvYWRlciBbdGhlbWVdPVwidGhlbWVcIiBbdHlwZV09XCInYmFyJ1wiIFtsb2FkaW5nXT1cImxvYWRpbmdcIj48L2xpYi1sb2FkZXI+XHJcblx0PHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgaXNFbXB0eVwiPnt7ZW1wdHlMYWJlbCB8IHRyYW5zbGF0ZVxyXG5cdFx0fX08L3NwYW4+XHJcblx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsaXN0SXRlbXNcIj5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJJdGVtcy5oYXMoaXRlbS5pZClcIj5cclxuXHRcdFx0PGRpdiAqbmdJZj1cImRyYWdnYWJsZUl0ZW1zXCIgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwiaXRlbVwiPlxyXG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxkaXYgKm5nSWY9XCIhZHJhZ2dhYmxlSXRlbXNcIj5cclxuXHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZT5cclxuXHRcdFx0XHRcclxuXHRcdFx0XHQ8ZGl2IFthdHRyLmRhdGEtdGhlbWVdPVwidGhlbWVcIlxyXG5cdFx0XHRcdFx0W2NsYXNzXT1cImdldEl0ZW1DbGFzcyhpdGVtKVwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwic2VsZWN0SXRlbS5lbWl0KGl0ZW0pXCI+XHJcblx0XHRcdFx0XHQ8bGliLWNoZWNrYm94ICpuZ0lmPVwibXVsdGlwbGVTZWxlY3Rpb25cIiBbY2hlY2tlZF09XCJzZWxlY3Rpb25JZHMuaGFzKGl0ZW0uaWQpXCJcclxuXHRcdFx0XHRcdFx0KGlucHV0Q2hhbmdlKT1cImNoZWNrYm94Q2hhbmdlKCRldmVudCwgaXRlbS5pZClcIiAvPlxyXG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImVudGl0eVVpQ29tcG9uZW50XCI+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiZW50aXR5VWlDb21wb25lbnQ7IGlucHV0czpnZXRVaUNvbXBvbmVudElucHV0cyhpdGVtKVwiPjwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2ltcGxlLWl0ZW1cIiAqbmdJZj1cIiFlbnRpdHlVaUNvbXBvbmVudFwiPlxyXG5cdFx0XHRcdFx0XHR7e2l0ZW1MYWJlbE1hcChpdGVtKSA/PyBpdGVtLm5hbWV9fVxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwhLS0gPGRpdiBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCJcclxuICAgICAgICBbY2xhc3NdPVwiWydmaWx0ZXItaXRlbScsIHNlbGVjdGlvbklkcy5oYXMoaXRlbS5pZCkgPyAnc2VsZWN0ZWQtaXRlbSc6ICcnLCBtdWx0aXBsZVNlbGVjdGlvbiA/ICdjaGVja2JveC1tYXJnaW4nIDogJyddXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbS5lbWl0KGl0ZW0pXCI+XHJcbiAgICAgICAgPGxpYi1jaGVja2JveCAqbmdJZj1cIm11bHRpcGxlU2VsZWN0aW9uXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uSWRzLmhhcyhpdGVtLmlkKVwiXHJcbiAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiY2hlY2tib3hDaGFuZ2UoJGV2ZW50LCBpdGVtLmlkKVwiIC8+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJlbnRpdHlVaUNvbXBvbmVudDsgaW5wdXRzOmdldFVpQ29tcG9uZW50SW5wdXRzKGl0ZW0pXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIFx0PC9kaXY+IC0tPlxyXG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0PC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG48bWF0LXBhZ2luYXRvciAqbmdJZj1cInNob3dQYWdpbmF0b3IgJiYgaXNEeW5hbWljXCIgI3BhZ2luYXRvciBoaWRlUGFnZVNpemUgc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuXHRbcGFnZUluZGV4XT1cImN1cnJlbnRQYWdlIC0gMVwiIFtsZW5ndGhdPVwibGVuZ3RoVXNlcnNcIiAocGFnZSk9XCJwYWdlRXZlbnQgPSBnZXRTZXJ2ZXJEYXRhVXNlcnMoJGV2ZW50KVwiXHJcblx0Y2xhc3M9XCJtc2YtcGFnaW5hdG9yLW1hcHBpbmcgbXNmLXBhZ2luYXRvci1TdHlsZVwiPlxyXG5cclxuPC9tYXQtcGFnaW5hdG9yPlxyXG48IS0tIFxyXG48bWF0LXBhZ2luYXRvclxyXG4gICAgICAgICpuZ0lmPVwiIWlzTG9hZGluZ1R5cGVGaWx0ZXJzXCJcclxuICAgICAgICAjcGFnaW5hdG9yXHJcbiAgICAgICAgaGlkZVBhZ2VTaXplXHJcbiAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcclxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVVc2Vyc1wiXHJcbiAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhVc2Vyc1wiXHJcbiAgICAgICAgW2xlbmd0aF09XCJsZW5ndGhVc2Vyc1wiXHJcbiAgICAgICAgKHBhZ2UpPVwicGFnZUV2ZW50ID0gZ2V0U2VydmVyRGF0YVVzZXJzKCRldmVudClcIlxyXG4gICAgICAgIGNsYXNzPVwibXNmLXBhZ2luYXRvci1tYXBwaW5nIG1zZi1wYWdpbmF0b3ItU3R5bGVcIlxyXG4gICAgICA+XHJcbjwvbWF0LXBhZ2luYXRvcj4gLS0+Il19