@touchpoll/tp-survey 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/esm2022/lib/component/answer/answer.additional/answer.additional.component.mjs +3 -3
  2. package/esm2022/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.mjs +3 -3
  3. package/esm2022/lib/component/answer/answer.end/answer.end.component.mjs +3 -3
  4. package/esm2022/lib/component/answer/answer.info/answer.info.component.mjs +3 -3
  5. package/esm2022/lib/component/answer/answer.lang/answer.lang.component.mjs +3 -3
  6. package/esm2022/lib/component/answer/answer.master/answer.master.component.mjs +6 -4
  7. package/esm2022/lib/component/answer/answer.ms/answer.ms.component.mjs +3 -3
  8. package/esm2022/lib/component/answer/answer.od/answer.od.component.mjs +3 -3
  9. package/esm2022/lib/component/answer/answer.ol/answer.ol.component.mjs +3 -3
  10. package/esm2022/lib/component/answer/answer.sl/answer.sl.component.mjs +3 -3
  11. package/esm2022/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.mjs +3 -3
  12. package/esm2022/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.mjs +3 -3
  13. package/esm2022/lib/component/answer/answer.ss/answer.ss.component.mjs +6 -6
  14. package/esm2022/lib/component/answer/container.answer/container.answer.component.mjs +7 -5
  15. package/esm2022/lib/component/navigation.button/navigation.button.component.mjs +3 -3
  16. package/esm2022/lib/component/question.caption/question.caption.component.mjs +3 -3
  17. package/esm2022/lib/component/survey.play/survey.play.component.mjs +24 -6
  18. package/esm2022/lib/component/survey.question.preview/survey.question.preview.component.mjs +6 -6
  19. package/esm2022/lib/core/tp.survey.core/tp.survey.core.service.mjs +63 -20
  20. package/esm2022/lib/core/tp.survey.interview/tp.survey.interview.service.mjs +3 -3
  21. package/esm2022/lib/core/tp.survey.logic/tp.survey.logic.service.mjs +8 -9
  22. package/esm2022/lib/directive/alternatives.container/alternatives.container.directive.mjs +3 -3
  23. package/esm2022/lib/directive/focus.and.select/focus.and.select.directive.mjs +3 -3
  24. package/esm2022/lib/directive/survey.theme/survey.theme.directive.mjs +3 -3
  25. package/esm2022/lib/directive/update.font.size/update.font.size.directive.mjs +3 -3
  26. package/esm2022/lib/icons/default.icons/default.icons.module.mjs +4 -4
  27. package/esm2022/lib/pipe/get.active.language/get.active.language.pipe.mjs +3 -3
  28. package/esm2022/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.mjs +3 -3
  29. package/esm2022/lib/pipe/key.values/key.values.pipe.mjs +3 -3
  30. package/esm2022/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.mjs +15 -7
  31. package/esm2022/lib/tp.survey.interface.mjs +1 -1
  32. package/esm2022/lib/tp.survey.module.mjs +4 -4
  33. package/esm2022/lib/tp.survey.type.mjs +1 -1
  34. package/fesm2022/touchpoll-tp-survey.mjs +198 -126
  35. package/fesm2022/touchpoll-tp-survey.mjs.map +1 -1
  36. package/lib/component/answer/answer.master/answer.master.component.d.ts +4 -2
  37. package/lib/component/answer/container.answer/container.answer.component.d.ts +4 -2
  38. package/lib/component/survey.play/survey.play.component.d.ts +1 -0
  39. package/lib/core/tp.survey.core/tp.survey.core.service.d.ts +1 -1
  40. package/lib/core/tp.survey.logic/tp.survey.logic.service.d.ts +2 -2
  41. package/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.d.ts +2 -1
  42. package/lib/tp.survey.interface.d.ts +3 -0
  43. package/lib/tp.survey.type.d.ts +1 -0
  44. package/package.json +1 -1
@@ -10,22 +10,18 @@ import * as i0 from "@angular/core";
10
10
  import * as i1 from "../tp.survey.logic/tp.survey.logic.service";
11
11
  import * as i2 from "../tp.survey.interview/tp.survey.interview.service";
12
12
  export class TpSurveyCoreService {
13
- #currentQuestion;
14
- #surveyQuotas;
13
+ #eventBus = new Subject();
14
+ #currentQuestion = new BehaviorSubject(null);
15
+ #surveyQuotas = new SurveyQuotas();
15
16
  #questionary;
16
- #displayedQuestions; // нужно для навигации по кнопке back
17
- #destroyRef;
17
+ #displayedQuestions = []; // нужно для навигации по кнопке back
18
+ #destroyRef = inject(DestroyRef);
18
19
  constructor(platformId, _logic, _interview) {
19
20
  this.platformId = platformId;
20
21
  this._logic = _logic;
21
22
  this._interview = _interview;
22
- this._eventBus = new Subject();
23
- this.#currentQuestion = new BehaviorSubject(null);
24
- this.#surveyQuotas = new SurveyQuotas();
25
- this.#displayedQuestions = []; // нужно для навигации по кнопке back
26
- this.#destroyRef = inject(DestroyRef);
27
23
  // запускам проверку квот, после скрытия каждого(почти) вопроса (seQuestionHide)
28
- this._eventBus.asObservable().pipe(filter(ev => ev.key === SurveyEvents.seQuestionHide), takeUntilDestroyed(this.#destroyRef)).subscribe({
24
+ this.#eventBus.asObservable().pipe(filter(ev => ev.key === SurveyEvents.seQuestionHide), takeUntilDestroyed(this.#destroyRef)).subscribe({
29
25
  next: () => this.#surveyQuotas.findFilledQuotas(this.#currentQuestion.value?.QuestionNum ?? -1, Object.assign({}, this._logic.getLogicVars()), this._interview.getAnswerList())
30
26
  });
31
27
  }
@@ -62,12 +58,12 @@ export class TpSurveyCoreService {
62
58
  startQuestionNum = this.#activeLangCount > 1 ? 0 : this.#nextQuestionNum();
63
59
  }
64
60
  //пошлём событие о начале опроса
65
- this._eventBus.next({ key: SurveyEvents.seSurveyStart, data: { questionary: this.#questionary } });
61
+ this.#eventBus.next({ key: SurveyEvents.seSurveyStart, data: { questionary: this.#questionary } });
66
62
  //показываем вопрос
67
63
  this.#changeCurrentQuestion(this.#questionary.Questions[startQuestionNum]);
68
64
  }
69
65
  on(...key) {
70
- return this._eventBus.asObservable().pipe(filter(event => key.includes(event.key)), map(event => event.data));
66
+ return this.#eventBus.asObservable().pipe(filter(event => key.includes(event.key)), map(event => event.data));
71
67
  }
72
68
  goToNextQuestion() {
73
69
  const currentQuestion = this.#currentQuestion.value;
@@ -98,6 +94,24 @@ export class TpSurveyCoreService {
98
94
  const answer = this._interview.findAnswerByGuid(guid);
99
95
  return answer?.answerIsComplete ?? false;
100
96
  }
97
+ guidToTextAnswer(guid, languageId) {
98
+ const answer = this.findAnswerByGuid(guid);
99
+ const question = this.#findQuestionByGuid(guid);
100
+ if (!question || !answer || answer.AnswerValue === -97) {
101
+ return '';
102
+ }
103
+ debugger;
104
+ const questionType = question.QuestionType;
105
+ switch (questionType) {
106
+ case QuestionsType.eqOL: return answer.AnswerValue;
107
+ case QuestionsType.eqSS: {
108
+ const alternative = question.Alternativelist.find(alt => alt.Value === answer.AnswerValue);
109
+ const altText = alternative?.MultiLangCaptions.find(obj => obj.lang === languageId);
110
+ return altText?.CaptionHtml ?? '';
111
+ }
112
+ default: return '';
113
+ }
114
+ }
101
115
  #fillOldInterviewData(logicVars, answerList) {
102
116
  //пропишем старые логические переменные
103
117
  if (Array.isArray(logicVars)) {
@@ -129,7 +143,7 @@ export class TpSurveyCoreService {
129
143
  if (!!answer) {
130
144
  answer.FinishedAt = currentTime;
131
145
  }
132
- this._eventBus.next({ key: SurveyEvents.seQuestionHide, data: currentQuestion });
146
+ this.#eventBus.next({ key: SurveyEvents.seQuestionHide, data: currentQuestion });
133
147
  }
134
148
  this.#displayedQuestions.push(newQuestion.QuestionNum);
135
149
  this.#currentQuestion.next(newQuestion);
@@ -138,11 +152,15 @@ export class TpSurveyCoreService {
138
152
  if (!!answerNew) {
139
153
  answerNew.StartedAt = currentTime;
140
154
  }
141
- this._eventBus.next({ key: SurveyEvents.seQuestionShow, data: newQuestion });
155
+ this.#eventBus.next({ key: SurveyEvents.seQuestionShow, data: newQuestion });
142
156
  //если новый экран это end тогда завершаем интервью
143
157
  if (newQuestion.QuestionType === 'END') {
144
158
  this.#finishInterview();
145
159
  }
160
+ //если это неявный вопрос и это ss или ms вопрос тогда посчитаем значения у этого вопроса
161
+ if (newQuestion.Implicit) {
162
+ this.#calculateImplicitQuestion(newQuestion);
163
+ }
146
164
  }
147
165
  currentQuestion$() {
148
166
  return this.#currentQuestion.asObservable();
@@ -198,7 +216,7 @@ export class TpSurveyCoreService {
198
216
  Object.entries(answer.AnswerAdditional).forEach(([key]) => delete answer.AnswerAdditional[Number(key)]);
199
217
  Object.entries(eventData.additionalAnswers).forEach(([key, value]) => answer.AnswerAdditional[Number(key)] = value);
200
218
  this.updateLogic(eventData.logicVars);
201
- this._eventBus.next({ key: SurveyEvents.seQuestionAnswersChange, data: { question: this.#currentQuestion.value, answerIsComplete: answer.answerIsComplete } });
219
+ this.#eventBus.next({ key: SurveyEvents.seQuestionAnswersChange, data: { question: this.#currentQuestion.value, answerIsComplete: answer.answerIsComplete } });
202
220
  //может возникнуть ситуация, когда нет ни одной альтернативы или секции для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий
203
221
  const question = this.#findQuestionByGuid(eventData.guid);
204
222
  //ситуация для ss/ms вопросов,
@@ -255,7 +273,7 @@ export class TpSurveyCoreService {
255
273
  };
256
274
  const logicVars = this._logic.getLogicVars();
257
275
  Object.entries(logicVars).forEach(([key, value]) => interview.LogicVars.push({ nm: key, vl: value }));
258
- this._eventBus.next({ key: SurveyEvents.seSurveyEnd, data: interview });
276
+ this.#eventBus.next({ key: SurveyEvents.seSurveyEnd, data: interview });
259
277
  }
260
278
  #nextQuestionNum() {
261
279
  const currentQuestion = this.#currentQuestion.value;
@@ -355,10 +373,35 @@ export class TpSurveyCoreService {
355
373
  return false;
356
374
  }
357
375
  }
358
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyCoreService, deps: [{ token: PLATFORM_ID }, { token: i1.TpSurveyLogicService }, { token: i2.TpSurveyInterviewService }], target: i0.ɵɵFactoryTarget.Injectable }); }
359
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyCoreService, providedIn: 'root' }); }
376
+ #calculateImplicitQuestion(question) {
377
+ if (question.Implicit && (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS)) {
378
+ let questionAnswer;
379
+ if (question.QuestionType === QuestionsType.eqSS) {
380
+ const alt = question.Alternativelist.find(alt => this._logic.executeLogic(alt.EnableExpression));
381
+ questionAnswer = !!alt ? alt.Value : 0;
382
+ }
383
+ if (question.QuestionType === QuestionsType.eqMS) {
384
+ questionAnswer = question.Alternativelist
385
+ .filter(alt => this._logic.executeLogic(alt.EnableExpression))
386
+ .map(alt => alt.Value);
387
+ }
388
+ const answerChange = {
389
+ guid: question.QuestionGuid,
390
+ isComplete: true,
391
+ answer: questionAnswer,
392
+ additionalAnswers: {},
393
+ logicVars: {},
394
+ viewedAlternativeValues: [],
395
+ viewedSectionGuids: [],
396
+ alternativeSequenceClicks: []
397
+ };
398
+ this.updateAnswer(answerChange);
399
+ }
400
+ }
401
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyCoreService, deps: [{ token: PLATFORM_ID }, { token: i1.TpSurveyLogicService }, { token: i2.TpSurveyInterviewService }], target: i0.ɵɵFactoryTarget.Injectable }); }
402
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyCoreService, providedIn: 'root' }); }
360
403
  }
361
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyCoreService, decorators: [{
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyCoreService, decorators: [{
362
405
  type: Injectable,
363
406
  args: [{
364
407
  providedIn: 'root'
@@ -367,4 +410,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
367
410
  type: Inject,
368
411
  args: [PLATFORM_ID]
369
412
  }] }, { type: i1.TpSurveyLogicService }, { type: i2.TpSurveyInterviewService }] });
370
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAuc3VydmV5LmNvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RwLnN1cnZleS9zcmMvbGliL2NvcmUvdHAuc3VydmV5LmNvcmUvdHAuc3VydmV5LmNvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUduQyxPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFTOUQsTUFBTSxPQUFPLG1CQUFtQjtJQUVyQixnQkFBZ0IsQ0FBaUQ7SUFDMUUsYUFBYSxDQUFzQjtJQUNuQyxZQUFZLENBQWtCO0lBQzlCLG1CQUFtQixDQUFxQixDQUFDLHFDQUFxQztJQUNyRSxXQUFXLENBQXNCO0lBQzFDLFlBQWtELFVBQWtCLEVBQW1CLE1BQTRCLEVBQW1CLFVBQW9DO1FBQXhILGVBQVUsR0FBVixVQUFVLENBQVE7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFBbUIsZUFBVSxHQUFWLFVBQVUsQ0FBMEI7UUFOekosY0FBUyxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQ2xELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUMxRSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkMsd0JBQW1CLEdBQWtCLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztRQUNyRSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4QyxnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2pDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLGNBQWMsQ0FBRSxFQUNyRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3BDLENBQUMsU0FBUyxDQUFDO1lBQ1YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDaEwsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxrQkFBa0MsRUFBRSxTQUFxQyxFQUFFLFVBQW1DLEVBQUUsWUFBcUI7UUFDL0ksaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBRXZDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMseUVBQXlFO1lBQ3pFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBRXRILHNCQUFzQjtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFlBQVksSUFBSSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4SyxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRXBELG1NQUFtTTtRQUNuTSxJQUFJLGdCQUFnQixHQUF1QixTQUFTLENBQUM7UUFDckQsc0dBQXNHO1FBQ3RHLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsRCxpREFBaUQ7WUFDakQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUVsRCw4REFBOEQ7WUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFaEUsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZCLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsMktBQTJLO1lBQzNLLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0UsQ0FBQztRQUVELGdDQUFnQztRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBRS9GLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFlBQWEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxFQUFFLENBQUMsR0FBRyxHQUFrQjtRQUN0QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN4QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUNwRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBUTtRQUNWLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFlBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxxREFBcUQ7UUFDckYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyw4RkFBOEY7UUFDMUosSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxFQUFFLGdCQUFnQixJQUFJLEtBQUssQ0FBQTtJQUMxQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBb0MsRUFBRSxVQUFrQztRQUM1Rix1Q0FBdUM7UUFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVDLHVIQUF1SDtRQUN2SCwyRUFBMkU7UUFDM0UsTUFBTSxjQUFjLEdBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFHLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQXdCO1FBQzdDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6QyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN0Qjs7O2dCQUdJO1lBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1lBQzFDLENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7WUFDbEMsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEMsd0RBQXdEO1FBQ3hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO1FBRTNFLG1EQUFtRDtRQUNuRCxJQUFJLFdBQVcsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFlLEVBQUUsS0FBVTtRQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF1QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPO1FBQ1QsQ0FBQztRQUVELDBKQUEwSjtRQUMxSixtS0FBbUs7UUFDbkssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFlBQVksS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7WUFFN0QsMkhBQTJIO1lBQzNILElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQixXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM1QixNQUFNLHNCQUFzQixHQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN0RixJQUFJLENBQUMsc0JBQXNCLEVBQUMsQ0FBQzt3QkFDM0IsT0FBTTtvQkFDUixDQUFDO29CQUNELE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUcsU0FBUyxDQUFDLE1BQXVCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ2pJLHNCQUFzQixDQUFDLFdBQVcsR0FBRyxxQkFBcUIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7Z0JBQ25ILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELDhDQUE4QztZQUM5QyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLHVDQUF1QztZQUN2QyxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDeEMsQ0FBQztRQUVELG1HQUFtRztRQUNuRyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVyRiwrRkFBK0Y7UUFDL0YsTUFBTSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RixNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9FLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFHN0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUVwSCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBRTNKLGlMQUFpTDtRQUNqTCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELDhCQUE4QjtRQUM5QixJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUE4QjtRQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDcEMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLElBQUksZ0JBQWdCO1FBQ2xCLHNEQUFzRDtRQUN0RCxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFBQSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1YsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQW1CO1lBQ2hDLFFBQVEsRUFBRSxDQUFDLEVBQUssV0FBVztZQUMzQixNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLENBQUM7WUFDYixXQUFXLEVBQUUsaUJBQWlCLENBQUMsT0FBTztZQUN0QyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU87WUFDMUIsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDO1lBQy9DLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtZQUNuRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQztZQUM5RCxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO1lBQ3BDLFVBQVUsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ2pDLFlBQVksRUFBRSxXQUFXLENBQUMsaUJBQWlCLEVBQUU7WUFDN0MsYUFBYSxFQUFFLFdBQVc7WUFDMUIsT0FBTyxFQUFFO2dCQUNQLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDekQ7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsMEJBQTBCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO2FBQ25HO1lBQ0QsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixrQkFBa0IsRUFBRSxFQUFFO1lBQ3RCLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUNwRCxpQkFBaUI7UUFDakIsTUFBTSxXQUFXLEdBQUcsZUFBZSxFQUFFLFlBQVksSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3RHLDBGQUEwRjtZQUMxRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzFGLCtEQUErRDtZQUMvRCxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO1FBRUQseUpBQXlKO1FBQ3pKLElBQUksZUFBZSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFOUQsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFFLENBQUM7WUFDNUksSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFdBQVcsQ0FBQztnQkFDdEYsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyw0Q0FBNEM7b0JBQ2hGLGVBQWUsR0FBRyxRQUFTLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELG9FQUFvRTtRQUNwRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNDLEdBQUcsQ0FBQztZQUNGLCtCQUErQjtZQUMvQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBYSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUV4RCx1SEFBdUg7WUFDdkgsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUcsQ0FBQztnQkFDL0osT0FBTyxlQUFlLENBQUM7WUFDekIsQ0FBQztZQUNELHFFQUFxRTtZQUNyRSxlQUFlLEVBQUUsQ0FBQztRQUNwQixDQUFDLFFBQVEsZUFBZSxHQUFHLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQyx3Q0FBd0M7UUFDdkYsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFlBQWdDO1FBQ2pELFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsbUNBQW1DO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXJGLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1lBRXhGLHFDQUFxQztZQUNyQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztZQUNuSCxDQUFDLENBQUMsQ0FBQztZQUVILGlJQUFpSTtZQUNqSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5TCxDQUFDO1lBRUQsK0ZBQStGO1lBQy9GLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQSxxQkFBcUI7Z0JBQzFELFFBQVEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3pILENBQUM7aUJBQU0sQ0FBQztnQkFDTixvRUFBb0U7Z0JBQ3BFLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUVyQyxrQ0FBa0M7b0JBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFOUUsbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUN0QyxDQUFDO29CQUVELG9HQUFvRztvQkFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtvQkFFckYsK0JBQStCO29CQUMvQixRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDeEgsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLG1CQUFtQixDQUFDLElBQVk7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUNsRixnREFBZ0Q7UUFDaEQsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7OEdBclpVLG1CQUFtQixrQkFPVixXQUFXO2tIQVBwQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXN0cm95UmVmLCBpbmplY3QsIEluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTdXJ2ZXlRdW90YXN9IGZyb20gJy4uL3RwLnNlcnZleS5xdW90YS90cC5zdXJ2ZXkucXVvdGEnO1xyXG5pbXBvcnQge1RwU3VydmV5TG9naWNTZXJ2aWNlfSBmcm9tICcuLi90cC5zdXJ2ZXkubG9naWMvdHAuc3VydmV5LmxvZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0Fuc3dlckNoYW5nZSwgSWRiUXVlc3Rpb24sIElkYlF1ZXN0aW9uYXJ5LCBJSW50ZXJ2aWV3RGF0YSwgSUludGVydmlld0xvZ2ljVmFyLCBJUXVlc3Rpb25BbnN3ZXJ9IGZyb20gJy4uLy4uL3RwLnN1cnZleS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1RwU3VydmV5SW50ZXJ2aWV3U2VydmljZX0gZnJvbSAnLi4vdHAuc3VydmV5LmludGVydmlldy90cC5zdXJ2ZXkuaW50ZXJ2aWV3LnNlcnZpY2UnO1xyXG5pbXBvcnQge1F1ZXN0aW9uc1R5cGUsIFJlc3VsdGF0aXZlU3RhdHVzLCBTdXJ2ZXlFdmVudHMsIFZhbGlkU3RhdHVzfSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkuZW51bSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICcuLi90cC5zdXJ2ZXkuYW5zd2VyL3RwLnN1cnZleS5hbnN3ZXInO1xyXG5pbXBvcnQge0Fuc3dlclNsVHlwZSwgTG9naWNPYmplY3R9IGZyb20gJy4uLy4uL3RwLnN1cnZleS50eXBlJztcclxuaW1wb3J0IHtNSVNTSU5HX1ZBTFVFfSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkuY29uc3QnO1xyXG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuaW50ZXJmYWNlIEJyb2FkY2FzdEV2ZW50IHtcclxuICBrZXk6IHN0cmluZztcclxuICBkYXRhPzogYW55O1xyXG59XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRwU3VydmV5Q29yZVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50QnVzID0gbmV3IFN1YmplY3Q8QnJvYWRjYXN0RXZlbnQ+KCk7XHJcbiAgcmVhZG9ubHkgI2N1cnJlbnRRdWVzdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWRiUXVlc3Rpb24gfCBudWxsPihudWxsKTtcclxuICAjc3VydmV5UXVvdGFzID0gbmV3IFN1cnZleVF1b3RhcygpO1xyXG4gICNxdWVzdGlvbmFyeT86IElkYlF1ZXN0aW9uYXJ5O1xyXG4gICNkaXNwbGF5ZWRRdWVzdGlvbnM6IEFycmF5PG51bWJlcj4gPSBbXTsgLy8g0L3Rg9C20L3QviDQtNC70Y8g0L3QsNCy0LjQs9Cw0YbQuNC4INC/0L4g0LrQvdC+0L/QutC1IGJhY2tcclxuICByZWFkb25seSAjZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQ6IG9iamVjdCwgcHJpdmF0ZSByZWFkb25seSBfbG9naWM6IFRwU3VydmV5TG9naWNTZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcnZpZXc6IFRwU3VydmV5SW50ZXJ2aWV3U2VydmljZSkge1xyXG4gICAgLy8g0LfQsNC/0YPRgdC60LDQvCDQv9GA0L7QstC10YDQutGDINC60LLQvtGCLCDQv9C+0YHQu9C1INGB0LrRgNGL0YLQuNGPINC60LDQttC00L7Qs9C+KNC/0L7Rh9GC0LgpINCy0L7Qv9GA0L7RgdCwIChzZVF1ZXN0aW9uSGlkZSlcclxuICAgIHRoaXMuX2V2ZW50QnVzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgZmlsdGVyKGV2ID0+IGV2LmtleSA9PT0gU3VydmV5RXZlbnRzLnNlUXVlc3Rpb25IaWRlICksXHJcbiAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpLFxyXG4gICAgKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB0aGlzLiNzdXJ2ZXlRdW90YXMuZmluZEZpbGxlZFF1b3Rhcyh0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWU/LlF1ZXN0aW9uTnVtID8/IC0xLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9sb2dpYy5nZXRMb2dpY1ZhcnMoKSksIHRoaXMuX2ludGVydmlldy5nZXRBbnN3ZXJMaXN0KCkpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldHVwU3VydmV5KHF1ZXN0aW9uYXJ5UmF3RGF0YTogSWRiUXVlc3Rpb25hcnksIGxvZ2ljVmFycz86IEFycmF5PElJbnRlcnZpZXdMb2dpY1Zhcj4sIGFuc3dlckxpc3Q/OiBBcnJheTxJUXVlc3Rpb25BbnN3ZXI+LCBxdWVzdGlvbkd1aWQ/OiBudW1iZXIpIHtcclxuICAgIC8v0LXRgdC70Lgg0LDQvdC60LXRgtGLINC90LXRgiwg0LTQtdC70LDRgtGMINC90LXRh9C10LPQvi5cclxuICAgIGlmICghcXVlc3Rpb25hcnlSYXdEYXRhKSB7XHJcbiAgICAgIHRoaXMuI2N1cnJlbnRRdWVzdGlvbi5uZXh0KG51bGwpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy4jcXVlc3Rpb25hcnkgPSBxdWVzdGlvbmFyeVJhd0RhdGE7XHJcblxyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgLy/Rg9C30L3QsNC10Lwg0LXRgdGC0Ywg0LvQuCDQstC+0L/RgNC+0YEg0LrQvtGC0L7RgNGL0Lkg0YPQutCw0LfQsNC70Lgg0LTQu9GPINC/0LXRgNC10YXQvtC00LAg0L/RgNC4INC30LDQv9C+0LvQvdC10L3QuNC4INC60LLQvtGC0YtcclxuICAgICAgY29uc3QgZGVzdGluYXRpb25RdWVzdGlvbiA9IHRoaXMuI2ZpbmRRdWVzdGlvbkJ5R3VpZChxdWVzdGlvbmFyeVJhd0RhdGEuQmFzZVBhcmFtcy5RdW90YUxpbWl0RGVzdGluYXRpb25RdWVzdGlvbkd1aWQpO1xyXG5cclxuICAgICAgLy/QuNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdC8INC60LLQvtGC0YtcclxuICAgICAgdGhpcy4jc3VydmV5UXVvdGFzLnNldFF1b3RhcyhxdWVzdGlvbmFyeVJhd0RhdGEuUXVvdGFzLCBxdWVzdGlvbmFyeVJhd0RhdGEuUXVvdGFzMmQsIGRlc3RpbmF0aW9uUXVlc3Rpb24/LlF1ZXN0aW9uR3VpZCA/PyAtMSwgZGVzdGluYXRpb25RdWVzdGlvbj8uUXVlc3Rpb25OdW0gPz8gLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v0YHQvtC30LTQsNC00LjQvCDQvtGC0LLQtdGC0Ysg0Lgg0LvQvtCz0LjRh9C10YHQutC40LUg0L/QtdGA0LXQvNC10L3QvdGL0LVcclxuICAgIHRoaXMuI2luaXRpYXRlUXVlc3Rpb25zKHRoaXMuI3F1ZXN0aW9uYXJ5LlF1ZXN0aW9ucylcclxuXHJcbiAgICAvLyDQnNC+0LbQtdGCINCx0YvRgtGMIDIg0LLQsNGA0LjQsNC90YLQsCDQt9Cw0L/Rg9GB0LrQsCDQuNC90YLQtdGA0LLRjNGOLCAxLdC90L7QstC+0LUg0LjQvdGC0LXRgNCy0YzRjiwgMi3Qv9C10YDQtdC30LDQv9GD0YHQuiDRgdGC0LDRgNC+0LPQviDQuNC90YLQtdGA0LLRjNGOLiDQkiDQv9C10YDQstC+0Lwg0YHQu9GD0YfQsNC1INC90LDRh9Cw0LvQviDRjdGC0L4gbGFuZyDQuNC70Lgg0L/QtdGA0LLRi9C5INCy0L7Qv9GA0L7RgS4g0JLQviDQstGC0L7RgNC+0LwsINGBINC/0L7RgdC70LXQtNC90LXQs9C+INCy0L7Qv9GA0L7RgdCwINC90LAg0LrQvtGC0L7RgNGL0Lkg0L7RgtCy0LXRgtC40LvQuC5cclxuICAgIGxldCBzdGFydFF1ZXN0aW9uTnVtOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAvL9C10YHQu9C4INC30LDQs9GA0YPQttCw0LXQvCDRgNCw0L3QtdC1INC90LUg0LfQsNC60L7QvdGH0LXQvdC90L7QtSDQuNC90YLQtdGA0LLRjNGOLCDQv9GA0L7QtNC+0LvQttCw0LXQvCDRgSDQvNC10YHRgtCwINC/0L7RgdC70LXQtNC90LXQs9C+INCy0L7Qv9GA0L7RgdCwICjRgdC70YPRh9Cw0Lkg0L3QvtC80LXRgCAyKVxyXG4gICAgaWYgKCEhbG9naWNWYXJzICYmICEhYW5zd2VyTGlzdCAmJiAhIXF1ZXN0aW9uR3VpZCkge1xyXG4gICAgICAvL9C30LDQs9GA0YPQttCw0LXQvCDRgdGC0LDRgNGL0LUg0LvQvtCz0LjRh9C10YHQutC40LUg0L/QtdGA0LXQvNC10L3QvdGL0LUg0Lgg0L7RgtCy0LXRgtGLXHJcbiAgICAgIHRoaXMuI2ZpbGxPbGRJbnRlcnZpZXdEYXRhKGxvZ2ljVmFycywgYW5zd2VyTGlzdCk7XHJcblxyXG4gICAgICAvL9C40YnQtdC8INC90L7QvNC10YAg0LLQvtC/0YDQvtGB0LAsINC60L7RgtC+0YDRi9C5INCx0YvQuyDQv9C+0YHQu9C10LTQvdC40Lkg0L/QtdGA0LXQtCDRgdC+0YXRgNCw0L3QtdC90LjQtdC8LlxyXG4gICAgICBjb25zdCBxdWVzdGlvbkxhc3RTYXZlID0gdGhpcy4jZmluZFF1ZXN0aW9uQnlHdWlkKHF1ZXN0aW9uR3VpZCk7XHJcblxyXG4gICAgICAvL9CS0L7Qv9GA0L7RgSDQvNC+0LPQu9C4INGD0LTQsNC70LjRgtGMLiDQotC+0LPQtNCwINC90LDRh9C90LXQvCDRgdC90LDRh9Cw0LvQsC5cclxuICAgICAgaWYgKCEhcXVlc3Rpb25MYXN0U2F2ZSkge1xyXG4gICAgICAgIHN0YXJ0UXVlc3Rpb25OdW0gPSBxdWVzdGlvbkxhc3RTYXZlLlF1ZXN0aW9uTnVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoc3RhcnRRdWVzdGlvbk51bSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8v0K3RgtC+INC90L7QstC+0LUg0LjQvdGC0LXRgNCy0YzRjiwg0LHQtdC3INGA0LDQvdC10LUg0YHQvtGF0YDQsNC90ZHQvdC90YvRhSDQtNCw0L3QvdGL0YUo0YHQu9GD0YfQsNC5IDEpLiDQl9Cw0L/Rg9GB0LrQsNC10Lwg0L7Qv9GA0L7RgSwg0L/QtdGA0LLRi9C5INGN0LrRgNCw0L0g0Y3RgtC+IExhbmcg0LLQvtC/0YDQvtGBLCDQvdC+INC10YHQu9C4INCy0YvQsdC+0YDQsCDRj9C30YvQutCwINC90LXRgiwg0L/RgNC+0L/Rg9GB0LrQsNC10Lwg0Lgg0L/QtdGA0LXRhdC+0LTQuNC8INC90LAgMS3QuSDQstC+0L/RgNC+0YFcclxuICAgICAgc3RhcnRRdWVzdGlvbk51bSA9IHRoaXMuI2FjdGl2ZUxhbmdDb3VudCA+IDEgPyAwIDogdGhpcy4jbmV4dFF1ZXN0aW9uTnVtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/Qv9C+0YjQu9GR0Lwg0YHQvtCx0YvRgtC40LUg0L4g0L3QsNGH0LDQu9C1INC+0L/RgNC+0YHQsFxyXG4gICAgdGhpcy5fZXZlbnRCdXMubmV4dCh7a2V5OiBTdXJ2ZXlFdmVudHMuc2VTdXJ2ZXlTdGFydCwgZGF0YToge3F1ZXN0aW9uYXJ5OiB0aGlzLiNxdWVzdGlvbmFyeX19KTtcclxuXHJcbiAgICAvL9C/0L7QutCw0LfRi9Cy0LDQtdC8INCy0L7Qv9GA0L7RgVxyXG4gICAgdGhpcy4jY2hhbmdlQ3VycmVudFF1ZXN0aW9uKHRoaXMuI3F1ZXN0aW9uYXJ5IS5RdWVzdGlvbnNbc3RhcnRRdWVzdGlvbk51bV0pO1xyXG4gIH1cclxuXHJcbiAgb24oLi4ua2V5OiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9ldmVudEJ1cy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgIGZpbHRlcihldmVudCA9PiBrZXkuaW5jbHVkZXMoZXZlbnQua2V5KSksXHJcbiAgICAgbWFwKGV2ZW50ID0+IGV2ZW50LmRhdGEpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ29Ub05leHRRdWVzdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRRdWVzdGlvbiA9IHRoaXMuI2N1cnJlbnRRdWVzdGlvbi52YWx1ZTtcclxuICAgIGlmICghY3VycmVudFF1ZXN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8v0LXRgdC70Lgg0L7RgtCy0LXRgiDQvdCwINGC0LXQutGD0YnQuNC5INCy0L7Qv9GA0L7RgSDQvdC1INC30LDQutC+0L3Rh9C10L0sINCy0YvRhdC+0LTQuNC8XHJcbiAgICBpZiAoIXRoaXMuX2ludGVydmlldy5xdWVzdGlvbklzQ29tcGxldGUoY3VycmVudFF1ZXN0aW9uLlF1ZXN0aW9uR3VpZCkpIHtcclxuICAgICAgcmV0dXJuIDtcclxuICAgIH1cclxuXHJcbiAgICAvL9C10YHQu9C4INGD0LrQsNC30LDQvSBQb3N0U2NyaXB0LCDQstGL0L/QvtC70L3QuNC8INC10LPQvlxyXG4gICAgaWYgKCEhY3VycmVudFF1ZXN0aW9uLlBvc3RTY3JpcHQpIHtcclxuICAgICAgdGhpcy5fbG9naWMuZXhlY3V0ZVBvc3RTY3JpcHQoY3VycmVudFF1ZXN0aW9uLlBvc3RTY3JpcHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jY2hhbmdlQ3VycmVudFF1ZXN0aW9uKHRoaXMuI3F1ZXN0aW9uYXJ5IS5RdWVzdGlvbnNbdGhpcy4jbmV4dFF1ZXN0aW9uTnVtKCldKTtcclxuICB9XHJcblxyXG4gIGdvVG9CYWNrUXVlc3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLiNkaXNwbGF5ZWRRdWVzdGlvbnMucG9wKCk7IC8vINGD0LTQsNC70LjQvCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRgtC+0Lwg0YfRgtC+INC/0L7QutCw0LfRi9Cy0LDQu9C4INGN0YLQvtGCINCy0L7Qv9GA0L7RgVxyXG4gICAgY29uc3QgcHJldmlvdXNRdWVzdGlvbk51bSA9IHRoaXMuI2Rpc3BsYXllZFF1ZXN0aW9ucy5wb3AoKTsgLy8g0YPQt9C90LDQtdC8INC90L7QvNC10YAg0LLQvtC/0YDQvtGB0LAg0L3QsCDQutC+0YLQvtGA0YvQuSDQvdCw0Lwg0L3QsNC00L4g0L/QtdGA0LXQudGC0LgsINC4INGD0LTQsNC70LjQvCDQuNC90YTQvtGA0LzQsNGG0LjRjiDRh9GC0L4t0LHRiyDQvdC1INC00YPQsdC70LjRgNC+0LLQsNGC0YxcclxuICAgIGlmICghIXByZXZpb3VzUXVlc3Rpb25OdW0pIHtcclxuICAgICAgY29uc3QgcHJldlF1ZXN0aW9uID0gdGhpcy4jcXVlc3Rpb25hcnk/LlF1ZXN0aW9uc1twcmV2aW91c1F1ZXN0aW9uTnVtXTtcclxuICAgICAgaWYgKCEhcHJldlF1ZXN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy4jY2hhbmdlQ3VycmVudFF1ZXN0aW9uKHByZXZRdWVzdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHF1ZXN0aW9uSXNDb21wbGV0ZShndWlkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2ludGVydmlldy5maW5kQW5zd2VyQnlHdWlkKGd1aWQpO1xyXG4gICAgcmV0dXJuIGFuc3dlcj8uYW5zd2VySXNDb21wbGV0ZSA/PyBmYWxzZVxyXG4gIH1cclxuXHJcbiAgI2ZpbGxPbGRJbnRlcnZpZXdEYXRhKGxvZ2ljVmFyczogQXJyYXk8SUludGVydmlld0xvZ2ljVmFyPiwgYW5zd2VyTGlzdDogQXJyYXk8SVF1ZXN0aW9uQW5zd2VyPik6IHZvaWR7XHJcbiAgICAvL9C/0YDQvtC/0LjRiNC10Lwg0YHRgtCw0YDRi9C1INC70L7Qs9C40YfQtdGB0LrQuNC1INC/0LXRgNC10LzQtdC90L3Ri9C1XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsb2dpY1ZhcnMpKSB7XHJcbiAgICAgIGxvZ2ljVmFycy5mb3JFYWNoKGxvZ2ljVmFyT2JqID0+IHtcclxuICAgICAgICB0aGlzLl9sb2dpYy5zZXRMb2dpY1ZhbHVlKGxvZ2ljVmFyT2JqLm5tLCBsb2dpY1Zhck9iai52bCk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy/Qv9GA0L7Qv9C40YjQtdC8INGB0YLQsNGA0YvQtSDQvtGC0LLQtdGC0YtcclxuICAgIHRoaXMuX2ludGVydmlldy5vdmVycmlkZUFuc3dlcnMoYW5zd2VyTGlzdCk7XHJcblxyXG4gICAgLy/QvdGD0LbQvdC+INCy0LXRgNC90YPRgtGMINCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINC40L3RgtC10YDQstGM0Y4sINC+0YLQtNC10LvRjNC90L4g0L7QvdC+INC90LUg0YHQvtGF0YDQsNC90Y/QtdGC0YHRjywg0L/QvtGN0YLQvtC80YMg0LLQvtC30YzQvNGR0Lwg0LzQuNC90LjQvNCw0LvRjNC90L7QtSDQstGA0LXQvNGPINC90LDRh9Cw0LvQsCDQuNC3INC+0YLQstC10YLQvtCyXHJcbiAgICAvL9GE0LjQu9GM0YLRgNGD0LXQvCDQstGB0LUg0LLQvtC/0YDQvtGB0Ysg0YMg0LrQvtGC0L7RgNGL0YUg0L7QvdC+INGD0LrQsNC30LDQvdC+KD4wKSDQuCDRgtGA0LDQvdGB0YTQvtGA0LzQuNGA0YPQtdC8INCyINGH0LjRgdC70L4uXHJcbiAgICBjb25zdCBzdGFydGVkQXRBcnJheSA9ICBhbnN3ZXJMaXN0LmZpbHRlcihhbnN3ZXIgPT4gYW5zd2VyLlN0YXJ0ZWRBdCA+IDApLm1hcChhbnN3ZXIgPT4gYW5zd2VyLlN0YXJ0ZWRBdCk7XHJcblxyXG4gICAgLy/QsdC10YDRkdC8INC80LjQvdC40LzQsNC70YzQvdC+0LVcclxuICAgIHRoaXMuX2ludGVydmlldy5zdGFydGVkQXQgPSBNYXRoLm1pbiguLi5zdGFydGVkQXRBcnJheSk7XHJcbiAgfVxyXG5cclxuICAjY2hhbmdlQ3VycmVudFF1ZXN0aW9uKG5ld1F1ZXN0aW9uOiBJZGJRdWVzdGlvbik6IHZvaWQge1xyXG4gICAgY29uc3QgY3VycmVudFF1ZXN0aW9uID0gdGhpcy4jY3VycmVudFF1ZXN0aW9uLnZhbHVlO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICBpZiAoISFjdXJyZW50UXVlc3Rpb24pIHtcclxuICAgICAgLypcclxuICAgICAg0KHQvtGF0YDQsNC90LjQvCDQstGA0LXQvNGPINC90LDRh9Cw0LvQsCDQuNC90YLQtdGA0LLRjNGOLiDQpNC40LrRgdC40YDQvtCy0LDRgtGMINCx0YPQtNC10Lwg0L3QtSDRgSDRgdCw0LzQvtCz0L4g0L3QsNGH0LDQu9CwLCDQsCDRgSDQvtGC0LLQtdGC0LAg0L3QsCDQv9C10YDQstGL0Lkg0LLQvtC/0YDQvtGBLlxyXG4gICAgICDQn9C+0YLQvtC80YMg0YfRgtC+INC/0YDQsNC60YLQuNC60LAg0YLQsNC60LDRjywg0L7RgtC60YDRi9GC0Ywg0LDQvdC60LXRgtGDINC90LAg0L/Qu9Cw0L3RiNC10YLQtSDQuCDRhdC+0LTQuNGC0Ywg0LjRgdC60LDRgtGMINGA0LXRgdC/0L7QvdC00LXQvdGC0L7QsiDQuCDQuNC3LdC30LAg0Y3RgtC+0LPQviDQtNC70LjRgtC10LvRjNC90L7RgdGC0Ywg0LjQvdGC0LXRgNCy0YzRjiDQvNC+0LbQtdGCINCx0YvRgtGMINC90LXRgNC10LvQtdCy0LDQvdGC0L3Qvi5cclxuICAgICAgKiAqL1xyXG4gICAgICBpZiAodGhpcy5faW50ZXJ2aWV3LnN0YXJ0ZWRBdCA9PT0gMCAmJiBjdXJyZW50UXVlc3Rpb24uUXVlc3Rpb25OdW0gPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2ludGVydmlldy5zdGFydGVkQXQgPSBjdXJyZW50VGltZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy/QvdGD0LbQvdC+INGB0L7RhdGA0LDQvdC40YLRjCBGaW5pc2hlZEF0INCyINC+0YLQstC10YLQsNGFINC00LvRjyDRgdGC0LDRgNC+0LPQviDQstC+0L/RgNC+0YHQsFxyXG4gICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLl9pbnRlcnZpZXcuZmluZEFuc3dlckJ5R3VpZChjdXJyZW50UXVlc3Rpb24uUXVlc3Rpb25HdWlkKTtcclxuICAgICAgaWYgKCEhYW5zd2VyKSB7XHJcbiAgICAgICAgYW5zd2VyLkZpbmlzaGVkQXQgPSBjdXJyZW50VGltZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9ldmVudEJ1cy5uZXh0KHtrZXk6IFN1cnZleUV2ZW50cy5zZVF1ZXN0aW9uSGlkZSwgZGF0YTogY3VycmVudFF1ZXN0aW9ufSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLiNkaXNwbGF5ZWRRdWVzdGlvbnMucHVzaChuZXdRdWVzdGlvbi5RdWVzdGlvbk51bSk7XHJcbiAgICB0aGlzLiNjdXJyZW50UXVlc3Rpb24ubmV4dChuZXdRdWVzdGlvbik7XHJcblxyXG4gICAgLy/QvdGD0LbQvdC+INGB0L7RhdGA0LDQvdC40YLRjCBTdGFydGVkQXQg0LIg0L7RgtCy0LXRgtCw0YUg0LTQu9GPINC90L7QstC+0LPQviDQstC+0L/RgNC+0YHQsFxyXG4gICAgY29uc3QgYW5zd2VyTmV3ID0gdGhpcy5faW50ZXJ2aWV3LmZpbmRBbnN3ZXJCeUd1aWQobmV3UXVlc3Rpb24uUXVlc3Rpb25HdWlkKTtcclxuICAgIGlmICghIWFuc3dlck5ldykge1xyXG4gICAgICBhbnN3ZXJOZXcuU3RhcnRlZEF0ID0gY3VycmVudFRpbWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ldmVudEJ1cy5uZXh0KHtrZXk6IFN1cnZleUV2ZW50cy5zZVF1ZXN0aW9uU2hvdywgZGF0YTogbmV3UXVlc3Rpb259KTtcclxuXHJcbiAgICAvL9C10YHQu9C4INC90L7QstGL0Lkg0Y3QutGA0LDQvSDRjdGC0L4gZW5kINGC0L7Qs9C00LAg0LfQsNCy0LXRgNGI0LDQtdC8INC40L3RgtC10YDQstGM0Y5cclxuICAgIGlmIChuZXdRdWVzdGlvbi5RdWVzdGlvblR5cGUgPT09ICdFTkQnKSB7XHJcbiAgICAgIHRoaXMuI2ZpbmlzaEludGVydmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3VycmVudFF1ZXN0aW9uJCgpOiBPYnNlcnZhYmxlPElkYlF1ZXN0aW9uIHwgbnVsbD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRRdWVzdGlvbi5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGZpbmRBbnN3ZXJCeUd1aWQoZ3VpZDogbnVtYmVyKTogQW5zd2VyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcnZpZXcuZmluZEFuc3dlckJ5R3VpZChndWlkKTtcclxuICB9XHJcblxyXG4gIHNldExvZ2ljVmFsdWUodmFyTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2dpYy5zZXRMb2dpY1ZhbHVlKHZhck5hbWUsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldExvZ2ljVmFycygpOiBMb2dpY09iamVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9naWMuZ2V0TG9naWNWYXJzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbnN3ZXJMaXN0KCk6IEFycmF5PEFuc3dlcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludGVydmlldy5nZXRBbnN3ZXJMaXN0KCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBbnN3ZXIoZXZlbnREYXRhOiBBbnN3ZXJDaGFuZ2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2ludGVydmlldy5maW5kQW5zd2VyQnlHdWlkKGV2ZW50RGF0YS5ndWlkKTtcclxuICAgIGlmICghYW5zd2VyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL9Cy0L7Qv9GA0L7RgdGLINC60L7RgtC+0YDRi9C1INCyINGB0LLQvtC10Lwg0YHQvtGB0YLQsNCy0LUg0LjQvNC10LXRgiDRgdC10LrRhtC40LgsINGF0YDQsNC90Y/RgiDQvtGC0LLQtdGC0Ysg0YfRg9GC0Ywg0L/QviDQtNGA0YPQs9C+0LzRgywg0YLQvtGH0L3QtdC1INC+0YLQstC10YIg0L3QsCDQutCw0LbQtNGD0Y4g0YHQtdC60YbQuNGOINGN0YLQviDQvtGC0LTQtdC70YzQvdGL0Lkg0L7QsdGK0LXQutGCINCyICBfaW50ZXJ2aWV3LmFuc3dlckxpc3RcclxuICAgIC8v0L/QvtGN0YLQvtC80YMg0L7RgtCy0LXRgiDQtNC70Y8g0YLQsNC60LjRhSDRgtC40L/QvtCyINCy0L7Qv9GA0L7RgdC+0LIg0Y3RgtC+IFtrZXk6IHN0cmluZ106IEFycmF5PG51bWJlcj4gfCBudW1iZXIsINCz0LTQtSBrZXkoZ3VpZCDRgdC10LrRhtC40LgpINGN0YLQviDQvtGC0LLQtdGCINC90LAg0YHQtdC60YbQuNGOLCDQtdGB0LvQuCBrZXkg0L3QtdGCLCDRgdC10LrRhtC40Y8g0L3QtSDQsdGL0LvQsCDQv9C+0LrQsNC30LDQvdCwXHJcbiAgICBpZiAodGhpcy4jY3VycmVudFF1ZXN0aW9uLnZhbHVlPy5RdWVzdGlvblR5cGUgPT09IFF1ZXN0aW9uc1R5cGUuZXFTTCkge1xyXG4gICAgICBjb25zdCBzZWN0aW9uTGlzdCA9IHRoaXMuI2N1cnJlbnRRdWVzdGlvbi52YWx1ZT8uU2VjdGlvbmxpc3Q7XHJcblxyXG4gICAgICAvL9C/0YDQvtC50LTRkdC80YHRjyDQv9C+INC60LDQttC00L7QuSDRgdC10LrRhtC40Lgg0Lgg0LXRgdC70Lgg0LTQu9GPINC90LXRkSDQtdGB0YLRjCDQvtGC0LLQtdGCLCDQt9Cw0L/QuNGI0LXQvCwg0LIg0L/RgNC+0YLQuNCy0L3QvtC8INGB0LvRg9GH0LDQtSDQstC80LXRgdGC0L4g0L7RgtCy0LXRgtCwINGD0LrQsNC20LXQvCAtOTcoTUlTU0lOR19WQUxVRSlcclxuICAgICAgaWYgKCEhc2VjdGlvbkxpc3QpIHtcclxuICAgICAgICBzZWN0aW9uTGlzdC5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbkludGVydmlld0Fuc3dlciA9ICB0aGlzLl9pbnRlcnZpZXcuZmluZEFuc3dlckJ5R3VpZChzZWN0aW9uLlNlY3Rpb25HdWlkKTtcclxuICAgICAgICAgIGlmICghc2VjdGlvbkludGVydmlld0Fuc3dlcil7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvblF1ZXN0aW9uQW5zd2VyID0gZXZlbnREYXRhLmFuc3dlciA/ICAoZXZlbnREYXRhLmFuc3dlciBhcyBBbnN3ZXJTbFR5cGUpW3NlY3Rpb24uU2VjdGlvbkd1aWQudG9TdHJpbmcoKV0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBzZWN0aW9uSW50ZXJ2aWV3QW5zd2VyLkFuc3dlclZhbHVlID0gc2VjdGlvblF1ZXN0aW9uQW5zd2VyID09PSB1bmRlZmluZWQgPyBNSVNTSU5HX1ZBTFVFIDogc2VjdGlvblF1ZXN0aW9uQW5zd2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8v0L7RgtCy0LXRgiDRgdCw0LzQvtCz0L4g0LjRgdGF0L7QtNC90L7Qs9C+INCy0L7Qv9GA0L7RgdCwINC00L7Qu9C20LXQvSDQsdGL0YLRjCAxXHJcbiAgICAgIGFuc3dlci5BbnN3ZXJWYWx1ZSA9IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL9C+0YLQstC10YIg0L3QsCDQstC+0L/RgNC+0YEg0YMg0LrQvtGC0L7RgNC+0LPQviDQvdC10YIg0YHQtdC60YbQuNC5XHJcbiAgICAgIGFuc3dlci5BbnN3ZXJWYWx1ZSA9IGV2ZW50RGF0YS5hbnN3ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy/QvdCwINCy0L7Qv9GA0L7RgSDQvtGC0LLQtdGC0LjQu9C4INGC0L7Qs9C00LAg0LrQvtCz0LTQsCDQtdGB0YLRjCDQstGB0LUg0L7RgtCy0LXRgtGLINC4INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0LvQvtCz0LjQutCwINC60L3QvtC/0LrQuCDQtNCw0LvQtdC1KNC10YHQu9C4INC10ZEg0YPQutCw0LfQsNC70LgpXHJcbiAgICBhbnN3ZXIuYW5zd2VySXNDb21wbGV0ZSA9IGV2ZW50RGF0YS5pc0NvbXBsZXRlICYmIHRoaXMuI25leHRCdXR0b25FeHByZXNzaW9uSXNUcnVlKCk7XHJcblxyXG4gICAgLy9WaWV3ZWRBbHRlcm5hdGl2ZVZhbHVlcyDQuCBWaWV3ZWRTZWN0aW9uR3VpZHMuINCiLtC6LiDQvtC90LggcmVhZG9ubHkg0YHQvdCw0YfQsNC70LAg0YPQtNCw0LvQuNC8LCDQv9C+0YLQvtC8INC00L7QsdCw0LLQuNC8XHJcbiAgICBhbnN3ZXIuVmlld2VkQWx0ZXJuYXRpdmVWYWx1ZXMubGVuZ3RoID0gMDtcclxuICAgIGV2ZW50RGF0YS52aWV3ZWRBbHRlcm5hdGl2ZVZhbHVlcy5mb3JFYWNoKG9hID0+IGFuc3dlci5WaWV3ZWRBbHRlcm5hdGl2ZVZhbHVlcy5wdXNoKG9hKSk7XHJcblxyXG4gICAgYW5zd2VyLlZpZXdlZFNlY3Rpb25HdWlkcy5sZW5ndGggPSAwO1xyXG4gICAgZXZlbnREYXRhLnZpZXdlZFNlY3Rpb25HdWlkcy5mb3JFYWNoKG9hID0+IGFuc3dlci5WaWV3ZWRTZWN0aW9uR3VpZHMucHVzaChvYSkpO1xyXG5cclxuICAgIGFuc3dlci5BbHRlcm5hdGl2ZVNlcXVlbmNlQ2xpY2tzLmxlbmd0aCA9IDA7XHJcbiAgICBldmVudERhdGEuYWx0ZXJuYXRpdmVTZXF1ZW5jZUNsaWNrcy5mb3JFYWNoKG9hID0+IGFuc3dlci5BbHRlcm5hdGl2ZVNlcXVlbmNlQ2xpY2tzLnB1c2gob2EpKTtcclxuXHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXMoYW5zd2VyLkFuc3dlckFkZGl0aW9uYWwpLmZvckVhY2goKFtrZXldKSA9PiBkZWxldGUgYW5zd2VyLkFuc3dlckFkZGl0aW9uYWxbTnVtYmVyKGtleSldKTtcclxuICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50RGF0YS5hZGRpdGlvbmFsQW5zd2VycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBhbnN3ZXIuQW5zd2VyQWRkaXRpb25hbFtOdW1iZXIoa2V5KV0gPSB2YWx1ZSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVMb2dpYyhldmVudERhdGEubG9naWNWYXJzKTtcclxuXHJcbiAgICB0aGlzLl9ldmVudEJ1cy5uZXh0KHtrZXk6IFN1cnZleUV2ZW50cy5zZVF1ZXN0aW9uQW5zd2Vyc0NoYW5nZSwgZGF0YToge3F1ZXN0aW9uOiB0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWUsIGFuc3dlcklzQ29tcGxldGU6IGFuc3dlci5hbnN3ZXJJc0NvbXBsZXRlfX0pO1xyXG5cclxuICAgIC8v0LzQvtC20LXRgiDQstC+0LfQvdC40LrQvdGD0YLRjCDRgdC40YLRg9Cw0YbQuNGPLCDQutC+0LPQtNCwINC90LXRgiDQvdC4INC+0LTQvdC+0Lkg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstGLINC40LvQuCDRgdC10LrRhtC40Lgg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8u0LIg0Y3RgtC+0Lwg0YHQu9GD0YfQsNC1INCy0L7Qv9GA0L7RgSDQv9C+0LrQsNC30YvQstCw0YLRjCDQvdC1INC90YPQttC90L4sINC60LDQuiDQvtGC0LLQtdGCINC30LDQv9C40YHRi9Cy0LDQtdC8IDAg0Lgg0L/QtdGA0LXRhdC+0LTQuNC8INC90LAg0YHQu9C10LTRg9GO0YnQuNC5XHJcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuI2ZpbmRRdWVzdGlvbkJ5R3VpZChldmVudERhdGEuZ3VpZCk7XHJcbiAgICAvL9GB0LjRgtGD0LDRhtC40Y8g0LTQu9GPIHNzL21zINCy0L7Qv9GA0L7RgdC+0LIsXHJcbiAgICBpZiAoISFxdWVzdGlvbiAmJiBhbnN3ZXIuYW5zd2VySXNDb21wbGV0ZSAmJiAocXVlc3Rpb24uUXVlc3Rpb25UeXBlID09PSAnU1MnIHx8IHF1ZXN0aW9uLlF1ZXN0aW9uVHlwZSA9PT0gJ01TJykgJiYgKGV2ZW50RGF0YS52aWV3ZWRBbHRlcm5hdGl2ZVZhbHVlcy5sZW5ndGggPT09IDApKSB7XHJcbiAgICAgIHRoaXMuZ29Ub05leHRRdWVzdGlvbigpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMb2dpYyhsb2dpY1ZhcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lke1xyXG4gICAgT2JqZWN0LmVudHJpZXMobG9naWNWYXJzKS5mb3JFYWNoKChbdmFyTmFtZSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0TG9naWNWYWx1ZSh2YXJOYW1lLCB2YWx1ZSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL9Cy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INCw0LrRgtC40LLQvdGL0YUg0Y/Qt9GL0LrQvtCyXHJcbiAgZ2V0ICNhY3RpdmVMYW5nQ291bnQoKTogbnVtYmVyIHtcclxuICAgIC8v0LXRgdC70Lgg0LDQvdC60LXRgtCwINC/0L4g0LrQsNC60L7QuS3RgtC+INC/0YDQuNGH0LjQvdC1INC90YMg0YPQutCw0LfQsNC90LAsINCy0LXRgNC90ZHQvCAwXHJcbiAgICByZXR1cm4gdGhpcy4jcXVlc3Rpb25hcnk/LkJhc2VQYXJhbXMuTGFuZ3VhZ2VMaXN0LmZpbHRlciggbGFuZ09iaiA9PiBsYW5nT2JqLmlzQWN0aXZlKS5sZW5ndGggPz8gMDtcclxuICB9XHJcblxyXG4gIC8v0LLQvtC30LLRgNCw0YnQsNC10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0LLQvtC/0YDQvtGB0L7QslxyXG4gIGdldCAjcXVlc3Rpb25zQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLiNxdWVzdGlvbmFyeT8uUXVlc3Rpb25zLmxlbmd0aCA/PyAwO1xyXG4gIH1cclxuXHJcbiAgI2ZpbmlzaEludGVydmlldygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIGxldCByZXN1bHREaXJ0eTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJlc3VsdERpcnR5ID0gdGhpcy5fbG9naWMuZXhlY3V0ZUxvZ2ljKHRoaXMuI3F1ZXN0aW9uYXJ5Py5CYXNlUGFyYW1zLlJlc3VsdGF0aXZlU2NyaXB0ID8/ICcnKTtcclxuICAgIH1jYXRjaCAoZSkge1xyXG4gICAgICByZXN1bHREaXJ0eSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVydmlldzogSUludGVydmlld0RhdGEgPSB7XHJcbiAgICAgIExhbmd1YWdlOiAwLCAgICAvL3RvZG8gbGFuZ1xyXG4gICAgICBTcG90SWQ6IDAsXHJcbiAgICAgIERldmljZUlkOiAwLFxyXG4gICAgICBEZXZpY2VUeXBlOiAwLFxyXG4gICAgICBSZXN1bHRhdGl2ZTogUmVzdWx0YXRpdmVTdGF0dXMucnNVbnNldCxcclxuICAgICAgVmFsaWQ6IFZhbGlkU3RhdHVzLnZzVW5zZXQsXHJcbiAgICAgIFdhdmU6IHRoaXMuI3F1ZXN0aW9uYXJ5Py5JbmZvLmN1cnJlbnRfd2F2ZSA/PyAwLFxyXG4gICAgICBRdWVzdGlvbmFyeU5hbWU6IHRoaXMuI3F1ZXN0aW9uYXJ5Py5JbmZvLm5hbWUgPz8gJycsXHJcbiAgICAgIFF1ZXN0aW9uYXJ5R3VpZDogdGhpcy4jcXVlc3Rpb25hcnk/LkluZm8ucXVlc3Rpb25hcnlfZ3VpZCA/PyAwLFxyXG4gICAgICBTdGFydGVkQXQ6IHRoaXMuX2ludGVydmlldy5zdGFydGVkQXQsXHJcbiAgICAgIEZpbmlzaGVkQXQ6IGN1cnJlbnRUaW1lLmdldFRpbWUoKSxcclxuICAgICAgVGluZVpvbmVCaWFzOiBjdXJyZW50VGltZS5nZXRUaW1lem9uZU9mZnNldCgpLFxyXG4gICAgICBSZXN1bHRhdERpcnR5OiByZXN1bHREaXJ0eSxcclxuICAgICAgQW5zd2Vyczoge1xyXG4gICAgICAgIEFuc3ZlcnNMaXN0OiBBcnJheS5mcm9tKHRoaXMuX2ludGVydmlldy5nZXRBbnN3ZXJMaXN0KCkpXHJcbiAgICAgIH0sXHJcbiAgICAgIGFkZGl0aW9uYWxfaW5mbzoge1xyXG4gICAgICAgIFF1ZXN0aW9uYXJ5VXBkYXRlVGltZXN0YW1wOiBuZXcgRGF0ZSh0aGlzLiNxdWVzdGlvbmFyeT8uSW5mby5sYXN0X3VwZGF0ZV90aW1lc3RhbXAgPz8gMCkuZ2V0VGltZSgpICxcclxuICAgICAgfSxcclxuICAgICAgUmVzdWx0UXVvdGFHdWlkczogW10sXHJcbiAgICAgIFJlc3VsdFF1b3RhMmRHdWlkczogW10sXHJcbiAgICAgIExvZ2ljVmFyczogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxvZ2ljVmFycyA9IHRoaXMuX2xvZ2ljLmdldExvZ2ljVmFycygpO1xyXG4gICAgT2JqZWN0LmVudHJpZXMobG9naWNWYXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IGludGVydmlldy5Mb2dpY1ZhcnMucHVzaCh7bm06IGtleSwgdmw6IHZhbHVlfSkpO1xyXG5cclxuICAgIHRoaXMuX2V2ZW50QnVzLm5leHQoe2tleTogU3VydmV5RXZlbnRzLnNlU3VydmV5RW5kLCBkYXRhOiBpbnRlcnZpZXd9KTtcclxuICB9XHJcblxyXG4gICNuZXh0UXVlc3Rpb25OdW0oKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGN1cnJlbnRRdWVzdGlvbiA9IHRoaXMuI2N1cnJlbnRRdWVzdGlvbi52YWx1ZTtcclxuICAgIC8vINC/0YDQvtCy0LXRgNC40Lwg0LrQstC+0YLRi1xyXG4gICAgY29uc3QgY3VycmVudEd1aWQgPSBjdXJyZW50UXVlc3Rpb24/LlF1ZXN0aW9uR3VpZCA/PyAwO1xyXG4gICAgaWYgKHRoaXMuI3N1cnZleVF1b3Rhcy5xdW90YUlzQ29tcGxldGVkICYmICF0aGlzLiNzdXJ2ZXlRdW90YXMuZ3VpZElzRGVzdGluYXRpb25RdWVzdGlvbihjdXJyZW50R3VpZCkpIHtcclxuICAgICAgLy8g0YMg0L3QsNGBINC10YHRgtGMINC30LDQv9C+0LvQvdC10L3QvdCw0Y8g0LrQstC+0YLQsCwg0L3QsNC50LTQtdC8INCy0L7Qv9GA0L7RgSDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INC/0L7QutCw0LfQsNGC0Ywg0L/RgNC4INC30LDQv9C+0LvQvdC10L3QuNC4INC60LLQvtGC0YtcclxuICAgICAgY29uc3QgZGVzdGluYXRpb25RID0gdGhpcy4jZmluZFF1ZXN0aW9uQnlHdWlkKHRoaXMuI3N1cnZleVF1b3Rhcy5kZXN0aW5hdGlvblF1ZXN0aW9uR3VpZCk7XHJcbiAgICAgIC8v0LXRgdC70Lgg0LLQvtC/0YDQvtGBINC10YHRgtGMKNC10LPQviDQvNC+0LPQu9C4INGD0LTQsNC70LjRgtGMINC40Lcg0LDQvdC60LXRgtGLKSwg0L/QvtC60LDQt9GL0LLQsNC10YIg0LXQs9C+XHJcbiAgICAgIGlmICghIWRlc3RpbmF0aW9uUSkge1xyXG4gICAgICAgIHJldHVybiBkZXN0aW5hdGlvblEuUXVlc3Rpb25OdW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDQtdGB0LvQuCDQvdC10YIg0LfQsNC/0L7Qu9C90LXQvdC90L7QuSDQutCy0L7RgtGLLCDQv9C10YDQtdGF0L7QtNC40Lwg0L3QsCDRgdC70LXQtNGD0Y7RidC40Lkg0LLQvtC/0YDQvtGBLCDQuNGJ0LXQvCDRgdC70LXQtNGD0Y7RidC40Lkg0LLQvtC/0YDQvtGBINC60L7RgtC+0YDRi9C5INC80Ysg0LzQvtC20LXQvCDQvtGC0L7QsdGA0LDQt9C40YLRjCAo0LTQviDQu9C+0LPQuNC60LAg0LzQvtC20LXRgiDQt9Cw0L/RgNC10YLQuNGC0Ywg0L/QvtC60LDQtyDQstC+0L/RgNC+0YHQsClcclxuICAgIGxldCBuZXh0UXVlc3Rpb25OdW0gPSAoY3VycmVudFF1ZXN0aW9uPy5RdWVzdGlvbk51bSA/PyAwKSArIDE7XHJcblxyXG4gICAgLy8g0L3QviDRgdC90LDRh9Cw0LvQsCDQv9GA0L7QstC10YDQuNC8INC/0L7RgdC70LUg0LvQvtCz0LjQutGDXHJcbiAgICBpZiAoISFjdXJyZW50UXVlc3Rpb24pIHtcclxuICAgICAgY29uc3QgZGVzdFEgPSBjdXJyZW50UXVlc3Rpb24ubG9naWNsaXN0LmZpbmQobG9nT2JqID0+IChsb2dPYmouRGVzdGluYXRpb25RdWVzdGlvbkd1aWQgPiAwKSAmJiB0aGlzLl9sb2dpYy5leGVjdXRlTG9naWMobG9nT2JqLkxvZ2ljVGV4dCkgKTtcclxuICAgICAgaWYgKCEhZGVzdFEpIHtcclxuICAgICAgICBjb25zdCBkZXN0UU51bSA9IHRoaXMuI2ZpbmRRdWVzdGlvbkJ5R3VpZChkZXN0US5EZXN0aW5hdGlvblF1ZXN0aW9uR3VpZCk/LlF1ZXN0aW9uTnVtO1xyXG4gICAgICAgIGlmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihkZXN0UU51bSkpIHsgLy8g0LLQvtC/0YDQvtGBINC80L7QsyDQsdGL0YLRjCDRg9C00LDQu9GR0L0sINCwINC70L7Qs9C40LrRgyDQvtGB0YLQsNCy0LjRgtGMXHJcbiAgICAgICAgICBuZXh0UXVlc3Rpb25OdW0gPSBkZXN0UU51bSE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0L7QsdGJ0LXQtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQstC+0L/RgNC+0YHQvtCyLCDRhtC40LrQuyDQsdGD0LTQtdGCINGB0YfQuNGC0LDRgtGMINC00L4g0Y3RgtC+0LPQviDQutC+0LvQuNGH0LXRgdGC0LLQsFxyXG4gICAgY29uc3QgcXVlc3Rpb25Db3VudCA9IHRoaXMuI3F1ZXN0aW9uc0NvdW50O1xyXG4gICAgZG8ge1xyXG4gICAgICAvL9C/0L7RgtC10L3RhtC40LDQu9GM0L3QviDRgdC70LXQtNGD0Y7RidC40Lkg0LLQvtC/0YDQvtGBXHJcbiAgICAgIGNvbnN0IHEgPSB0aGlzLiNxdWVzdGlvbmFyeSEuUXVlc3Rpb25zW25leHRRdWVzdGlvbk51bV07XHJcblxyXG4gICAgICAvL9C10YHQu9C4INGN0YLQviDQv9C+0YHQu9C10LTQvdC40Lkg0LLQvtC/0YDQvtGBINC40LvQuCDQtdGB0LvQuCDQstGL0L/QvtC70L3Rj9C10YLRgdGPIEJlZm9yZUV4cHJlc3Npb24g0Lgg0Y3RgtC+0YIg0LLQvtC/0YDQvtGBINC90LUgRGVzdGluYXRpb25RdW90YSwg0LzQvtC20LXQvCDQtdCz0L4g0L/QvtC60LDQt9Cw0YLRjFxyXG4gICAgICBpZiAocS5RdWVzdGlvblR5cGUgPT09IFF1ZXN0aW9uc1R5cGUuZXFFTkQgfHwgKHRoaXMuX2xvZ2ljLmV4ZWN1dGVMb2dpYyhxLkJlZm9yZUV4cHJlc3Npb24pICYmICF0aGlzLiNzdXJ2ZXlRdW90YXMuZ3VpZElzRGVzdGluYXRpb25RdWVzdGlvbihxLlF1ZXN0aW9uR3VpZCkpICkge1xyXG4gICAgICAgIHJldHVybiBuZXh0UXVlc3Rpb25OdW07XHJcbiAgICAgIH1cclxuICAgICAgLy/QstC+0L/RgNC+0YEg0L3QtdC70YzQt9GPINC/0L7QutCw0LfRi9Cy0LDRgtGMLCDRg9Cy0LXQu9C40YfQuNCy0LDQtdC8INGB0YfRkdGC0YfQuNC6INGC0LXQutGD0YnQtdCz0L4g0LLQvtC/0YDQvtGB0LAg0L3QsCAxXHJcbiAgICAgIG5leHRRdWVzdGlvbk51bSsrO1xyXG4gICAgfSB3aGlsZSAobmV4dFF1ZXN0aW9uTnVtIDwgcXVlc3Rpb25Db3VudCAtIDEpOyAvLyBlbmQg0LLQvtC/0YDQvtGBINC00L7Qu9C20LXQvSDQstGB0LXQs9C00LAg0LHRi9GC0Ywg0L/QvtC60LDQt9Cw0L1cclxuICAgIHJldHVybiBuZXh0UXVlc3Rpb25OdW07XHJcbiAgfVxyXG5cclxuICAjaW5pdGlhdGVRdWVzdGlvbnMocXVlc3Rpb25MaXN0OiBBcnJheTxJZGJRdWVzdGlvbj4pOiB2b2lke1xyXG4gICAgcXVlc3Rpb25MaXN0LmZvckVhY2gocXVlc3Rpb24gPT4ge1xyXG4gICAgICAvL9GB0L7Qt9C00LDRkdC8INC/0YPRgdGC0L7QuSDQvtGC0LLQtdGCINC00LvRjyDQstC+0L/RgNC+0YHQsC5cclxuICAgICAgY29uc3QgYW5zd2VyID0gdGhpcy5faW50ZXJ2aWV3LmNyZWF0ZUFuc3dlcihxdWVzdGlvbi5RdWVzdGlvbkd1aWQsIHF1ZXN0aW9uLlZlcnNpb24pO1xyXG5cclxuICAgICAgLy/RgtCw0LrQvtCz0L4g0LHRi9GC0Ywg0L3QtSDQtNC+0LvQttC90L4sINGN0YLQviDQvtGI0LjQsdC60LBcclxuICAgICAgaWYgKCFhbnN3ZXIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Fuc3dlciBub3QgZm91bmQnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fbG9naWMuc2V0TG9naWNWYWx1ZShxdWVzdGlvbi5TeXNOYW1lLCBNSVNTSU5HX1ZBTFVFKTsgLy8g0L/QtdGA0LXQvNC10L3QvdCw0Y8g0YHQsNC80L7Qs9C+INCy0L7Qv9GA0L7RgdCwXHJcblxyXG4gICAgICAvL9C00L7QsdCw0LLQuNC8INC00L7QvyDQvtGC0LLQtdGC0Ysg0Lgg0LvQvtCz0LjQutGDINC00LvRjyDQvdC40YVcclxuICAgICAgcXVlc3Rpb24uQWRkaXRpb25hbEFuc3dlcmxpc3QuZm9yRWFjaChhYSA9PiB7XHJcbiAgICAgICAgYW5zd2VyLkFuc3dlckFkZGl0aW9uYWxbYWEuVmFsdWVdID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9sb2dpYy5zZXRMb2dpY1ZhbHVlKGAke3F1ZXN0aW9uLlN5c05hbWV9JHthYS5TeXNOYW1lfWAsIE1JU1NJTkdfVkFMVUUpOyAvLyDQu9C+0LPQuNC60LAg0LTQu9GPINC/0LXRgNC10LzQtdC90L3Ri9GFINC00L7QvyDQvtGC0LLQtdGC0LBcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyDQtdGB0LvQuCDQsiDRgtC10LrRgdGC0LUgcG9zdFNjcmlwdCDQtdGB0YLRjCDQt9Cw0L/QuNGB0Ywg0YLQuNC/0LAgc2V0VmFyKCd2YXJOYW1lJywgIHZhbHVlKTsgINC90YPQttC90L4g0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0L/QtdGA0LXQvNC10L3QvdGD0Y4gdmFyTmFtZSDQt9C90LDRh9C10L3QuNC10LwgLTk3LlxyXG4gICAgICBpZiAoISFxdWVzdGlvbi5Qb3N0U2NyaXB0KSB7XHJcbiAgICAgICAgKHF1ZXN0aW9uLlBvc3RTY3JpcHQubWF0Y2goLyhcXGJzZXR2YXJcXGIpXFwoWyd8XCJdKC4qPylbJ3xcIl0vZ2ltKSA/PyBbXSkubWFwKHNjcmlwdFZhciA9PiBzY3JpcHRWYXIubWF0Y2goL1snfFwiXSguKylbJ3xcIl0vaSkhWzFdKS5mb3JFYWNoKHZhck5hbWUgPT4gdGhpcy5fbG9naWMuc2V0TG9naWNWYWx1ZSh2YXJOYW1lLCBudWxsKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vINC00LvRjyDQktC+0L/RgNC+0YHQvtCyIFNTL01TINC90YPQttC90L4g0L/RgNC+0L/QuNGB0LDRgtGMINC70L7Qs9C40LrRgyDQsNC70YzRgtC10YDQvdCw0YLQuNCyIHN5c25hbWUg0LLQvtC/0YDQvtGB0LAgKyBzeXNuYW1lINCw0LvRjNGC0LXRgNC90LDRgtC40LLRi1xyXG4gICAgICBpZiAocXVlc3Rpb24uU2VjdGlvbmxpc3QubGVuZ3RoIDw9IDApIHsvLyDQtNC70Y8g0JLQvtC/0YDQvtGB0L7QsiBTUy9NU1xyXG4gICAgICAgIHF1ZXN0aW9uLkFsdGVybmF0aXZlbGlzdC5mb3JFYWNoKGFsdCA9PiB0aGlzLl9sb2dpYy5zZXRMb2dpY1ZhbHVlKGAke3F1ZXN0aW9uLlN5c05hbWV9JHthbHQuU3lzTmFtZX1gLCBNSVNTSU5HX1ZBTFVFKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy/QtNC70Y8g0LLQvtC/0YDQvtGB0L7QsiDRgyDQutC+0YLQvtGA0YvRhSDQtdGB0YLRjCDRgdC10LrRhtC40Lgg0L/RgNC+0LjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXQvCDQutCw0LbQtNGD0Y4g0YHQtdC60YbQuNGOXHJcbiAgICAgICAgcXVlc3Rpb24uU2VjdGlvbmxpc3QuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuXHJcbiAgICAgICAgICAvL9GB0L7Qt9C00LDRkdC8INC/0YPRgdGC0L7QuSDQvtGC0LLQtdGCINC00LvRjyDRgdC10LrRhtC40LguXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXJGb3JTZWN0aW9uID0gdGhpcy5faW50ZXJ2aWV3LmNyZWF0ZUFuc3dlcihzZWN0aW9uLlNlY3Rpb25HdWlkLCAxKTtcclxuXHJcbiAgICAgICAgICAvL9GC0LDQutC+0LPQviDQsdGL0YLRjCDQvdC1INC00L7Qu9C20L3Qviwg0Y3RgtC+INC+0YjQuNCx0LrQsFxyXG4gICAgICAgICAgaWYgKCFhbnN3ZXJGb3JTZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYW5zd2VyIG5vdCBmb3VuZCcpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vINC00LvRjyDQktC+0L/RgNC+0YHQvtCyIFNMINC90YPQttC90L4g0L/RgNC+0L/QuNGB0LDRgtGMINC70L7Qs9C40LrRgyDQsNC70YzRgtC10YDQvdCw0YLQuNCyINC4INGB0LXQutGG0LjQuSBzeXNuYW1lINGB0LXQutGG0LjQuCArIHN5c25hbWUg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstGLXHJcbiAgICAgICAgICB0aGlzLl9sb2dpYy5zZXRMb2dpY1ZhbHVlKHNlY3Rpb24uU3lzTmFtZSwgTUlTU0lOR19WQUxVRSk7IC8vINC/0LXRgNC10LzQtdC90L3QsNGPINGB0LDQvNC+0Lkg0YHQtdC60YbQuNC4XHJcblxyXG4gICAgICAgICAgLy/Qu9C+0LPQuNC60LAg0LDQu9GM0YLQtdGA0L3QsNGC0LjQsiBTTCDQstC+0L/RgNC+0YHQsFxyXG4gICAgICAgICAgcXVlc3Rpb24uQWx0ZXJuYXRpdmVsaXN0LmZvckVhY2goYWx0ID0+IHRoaXMuX2xvZ2ljLnNldExvZ2ljVmFsdWUoYCR7c2VjdGlvbi5TeXNOYW1lfSR7YWx0LlN5c05hbWV9YCwgTUlTU0lOR19WQUxVRSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL9C40YnQtdGCINCy0L7Qv9GA0L7RgSDQvdCwIGd1aWRcclxuICAjZmluZFF1ZXN0aW9uQnlHdWlkKGd1aWQ6IG51bWJlcik6IElkYlF1ZXN0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy4jcXVlc3Rpb25hcnkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLiNxdWVzdGlvbmFyeS5RdWVzdGlvbnMuZmluZChxID0+IHEuUXVlc3Rpb25HdWlkID09PSBndWlkKTtcclxuICB9XHJcblxyXG4gICNuZXh0QnV0dG9uRXhwcmVzc2lvbklzVHJ1ZSgpOiBib29sZWFue1xyXG4gICAgY29uc3QgYnV0dG9uTmV4dEV4cHJlc3Npb24gPSB0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWU/LkJ0bk5leHRFeHByZXNzaW9uID8/ICcnO1xyXG4gICAgLy/QtdGB0LvQuCDRgdC60YDQuNC/0YLQsCDQtNC70Y8g0LrQvdC+0L/QutC4INC00LDQu9C10LUg0L3QtdGCLCDQstC10YDQvdGR0LwgdHJ1ZVxyXG4gICAgaWYgKGJ1dHRvbk5leHRFeHByZXNzaW9uLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fbG9naWMuZXhlY3V0ZUxvZ2ljKGJ1dHRvbk5leHRFeHByZXNzaW9uKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAuc3VydmV5LmNvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RwLnN1cnZleS9zcmMvbGliL2NvcmUvdHAuc3VydmV5LmNvcmUvdHAuc3VydmV5LmNvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRWhFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUduQyxPQUFPLEVBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFTOUQsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7SUFDMUMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQXFCLElBQUksQ0FBQyxDQUFDO0lBQzFFLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ25DLFlBQVksQ0FBa0I7SUFDOUIsbUJBQW1CLEdBQWtCLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztJQUNyRSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLFlBQWtELFVBQWtCLEVBQW1CLE1B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QUFtQixrQkFPVixXQUFXO2tIQVBwQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXN0cm95UmVmLCBpbmplY3QsIEluamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtTdXJ2ZXlRdW90YXN9IGZyb20gJy4uL3RwLnNlcnZleS5xdW90YS90cC5zdXJ2ZXkucXVvdGEnO1xyXG5pbXBvcnQge1RwU3VydmV5TG9naWNTZXJ2aWNlfSBmcm9tICcuLi90cC5zdXJ2ZXkubG9naWMvdHAuc3VydmV5LmxvZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0Fuc3dlckNoYW5nZSwgSWRiUXVlc3Rpb24sIElkYlF1ZXN0aW9uYXJ5LCBJSW50ZXJ2aWV3RGF0YSwgSUludGVydmlld0xvZ2ljVmFyLCBJUXVlc3Rpb25BbnN3ZXJ9IGZyb20gJy4uLy4uL3RwLnN1cnZleS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1RwU3VydmV5SW50ZXJ2aWV3U2VydmljZX0gZnJvbSAnLi4vdHAuc3VydmV5LmludGVydmlldy90cC5zdXJ2ZXkuaW50ZXJ2aWV3LnNlcnZpY2UnO1xyXG5pbXBvcnQge1F1ZXN0aW9uc1R5cGUsIFJlc3VsdGF0aXZlU3RhdHVzLCBTdXJ2ZXlFdmVudHMsIFZhbGlkU3RhdHVzfSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkuZW51bSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICcuLi90cC5zdXJ2ZXkuYW5zd2VyL3RwLnN1cnZleS5hbnN3ZXInO1xyXG5pbXBvcnQge0Fuc3dlclNsVHlwZSwgTG9naWNPYmplY3R9IGZyb20gJy4uLy4uL3RwLnN1cnZleS50eXBlJztcclxuaW1wb3J0IHtNSVNTSU5HX1ZBTFVFfSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkuY29uc3QnO1xyXG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuaW50ZXJmYWNlIEJyb2FkY2FzdEV2ZW50IHtcclxuICBrZXk6IHN0cmluZztcclxuICBkYXRhPzogYW55O1xyXG59XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRwU3VydmV5Q29yZVNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5ICNldmVudEJ1cyA9IG5ldyBTdWJqZWN0PEJyb2FkY2FzdEV2ZW50PigpO1xyXG4gIHJlYWRvbmx5ICNjdXJyZW50UXVlc3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkYlF1ZXN0aW9uIHwgbnVsbD4obnVsbCk7XHJcbiAgI3N1cnZleVF1b3RhcyA9IG5ldyBTdXJ2ZXlRdW90YXMoKTtcclxuICAjcXVlc3Rpb25hcnk/OiBJZGJRdWVzdGlvbmFyeTtcclxuICAjZGlzcGxheWVkUXVlc3Rpb25zOiBBcnJheTxudW1iZXI+ID0gW107IC8vINC90YPQttC90L4g0LTQu9GPINC90LDQstC40LPQsNGG0LjQuCDQv9C+INC60L3QvtC/0LrQtSBiYWNrXHJcbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBvYmplY3QsIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2ljOiBUcFN1cnZleUxvZ2ljU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBfaW50ZXJ2aWV3OiBUcFN1cnZleUludGVydmlld1NlcnZpY2UpIHtcclxuICAgIC8vINC30LDQv9GD0YHQutCw0Lwg0L/RgNC+0LLQtdGA0LrRgyDQutCy0L7Rgiwg0L/QvtGB0LvQtSDRgdC60YDRi9GC0LjRjyDQutCw0LbQtNC+0LPQvijQv9C+0YfRgtC4KSDQstC+0L/RgNC+0YHQsCAoc2VRdWVzdGlvbkhpZGUpXHJcbiAgICB0aGlzLiNldmVudEJ1cy5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgIGZpbHRlcihldiA9PiBldi5rZXkgPT09IFN1cnZleUV2ZW50cy5zZVF1ZXN0aW9uSGlkZSApLFxyXG4gICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSxcclxuICAgICkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4gdGhpcy4jc3VydmV5UXVvdGFzLmZpbmRGaWxsZWRRdW90YXModGhpcy4jY3VycmVudFF1ZXN0aW9uLnZhbHVlPy5RdWVzdGlvbk51bSA/PyAtMSwgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fbG9naWMuZ2V0TG9naWNWYXJzKCkpLCB0aGlzLl9pbnRlcnZpZXcuZ2V0QW5zd2VyTGlzdCgpKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFN1cnZleShxdWVzdGlvbmFyeVJhd0RhdGE6IElkYlF1ZXN0aW9uYXJ5LCBsb2dpY1ZhcnM/OiBBcnJheTxJSW50ZXJ2aWV3TG9naWNWYXI+LCBhbnN3ZXJMaXN0PzogQXJyYXk8SVF1ZXN0aW9uQW5zd2VyPiwgcXVlc3Rpb25HdWlkPzogbnVtYmVyKSB7XHJcbiAgICAvL9C10YHQu9C4INCw0L3QutC10YLRiyDQvdC10YIsINC00LXQu9Cw0YLRjCDQvdC10YfQtdCz0L4uXHJcbiAgICBpZiAoIXF1ZXN0aW9uYXJ5UmF3RGF0YSkge1xyXG4gICAgICB0aGlzLiNjdXJyZW50UXVlc3Rpb24ubmV4dChudWxsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuI3F1ZXN0aW9uYXJ5ID0gcXVlc3Rpb25hcnlSYXdEYXRhO1xyXG5cclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIC8v0YPQt9C90LDQtdC8INC10YHRgtGMINC70Lgg0LLQvtC/0YDQvtGBINC60L7RgtC+0YDRi9C5INGD0LrQsNC30LDQu9C4INC00LvRjyDQv9C10YDQtdGF0L7QtNCwINC/0YDQuCDQt9Cw0L/QvtC70L3QtdC90LjQuCDQutCy0L7RgtGLXHJcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUXVlc3Rpb24gPSB0aGlzLiNmaW5kUXVlc3Rpb25CeUd1aWQocXVlc3Rpb25hcnlSYXdEYXRhLkJhc2VQYXJhbXMuUXVvdGFMaW1pdERlc3RpbmF0aW9uUXVlc3Rpb25HdWlkKTtcclxuXHJcbiAgICAgIC8v0LjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXQvCDQutCy0L7RgtGLXHJcbiAgICAgIHRoaXMuI3N1cnZleVF1b3Rhcy5zZXRRdW90YXMocXVlc3Rpb25hcnlSYXdEYXRhLlF1b3RhcywgcXVlc3Rpb25hcnlSYXdEYXRhLlF1b3RhczJkLCBkZXN0aW5hdGlvblF1ZXN0aW9uPy5RdWVzdGlvbkd1aWQgPz8gLTEsIGRlc3RpbmF0aW9uUXVlc3Rpb24/LlF1ZXN0aW9uTnVtID8/IC0xKTtcclxuICAgIH1cclxuXHJcbiAgICAvL9GB0L7Qt9C00LDQtNC40Lwg0L7RgtCy0LXRgtGLINC4INC70L7Qs9C40YfQtdGB0LrQuNC1INC/0LXRgNC10LzQtdC90L3Ri9C1XHJcbiAgICB0aGlzLiNpbml0aWF0ZVF1ZXN0aW9ucyh0aGlzLiNxdWVzdGlvbmFyeS5RdWVzdGlvbnMpXHJcblxyXG4gICAgLy8g0JzQvtC20LXRgiDQsdGL0YLRjCAyINCy0LDRgNC40LDQvdGC0LAg0LfQsNC/0YPRgdC60LAg0LjQvdGC0LXRgNCy0YzRjiwgMS3QvdC+0LLQvtC1INC40L3RgtC10YDQstGM0Y4sIDIt0L/QtdGA0LXQt9Cw0L/Rg9GB0Log0YHRgtCw0YDQvtCz0L4g0LjQvdGC0LXRgNCy0YzRji4g0JIg0L/QtdGA0LLQvtC8INGB0LvRg9GH0LDQtSDQvdCw0YfQsNC70L4g0Y3RgtC+IGxhbmcg0LjQu9C4INC/0LXRgNCy0YvQuSDQstC+0L/RgNC+0YEuINCS0L4g0LLRgtC+0YDQvtC8LCDRgSDQv9C+0YHQu9C10LTQvdC10LPQviDQstC+0L/RgNC+0YHQsCDQvdCwINC60L7RgtC+0YDRi9C5INC+0YLQstC10YLQuNC70LguXHJcbiAgICBsZXQgc3RhcnRRdWVzdGlvbk51bTogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgLy/QtdGB0LvQuCDQt9Cw0LPRgNGD0LbQsNC10Lwg0YDQsNC90LXQtSDQvdC1INC30LDQutC+0L3Rh9C10L3QvdC+0LUg0LjQvdGC0LXRgNCy0YzRjiwg0L/RgNC+0LTQvtC70LbQsNC10Lwg0YEg0LzQtdGB0YLQsCDQv9C+0YHQu9C10LTQvdC10LPQviDQstC+0L/RgNC+0YHQsCAo0YHQu9GD0YfQsNC5INC90L7QvNC10YAgMilcclxuICAgIGlmICghIWxvZ2ljVmFycyAmJiAhIWFuc3dlckxpc3QgJiYgISFxdWVzdGlvbkd1aWQpIHtcclxuICAgICAgLy/Qt9Cw0LPRgNGD0LbQsNC10Lwg0YHRgtCw0YDRi9C1INC70L7Qs9C40YfQtdGB0LrQuNC1INC/0LXRgNC10LzQtdC90L3Ri9C1INC4INC+0YLQstC10YLRi1xyXG4gICAgICB0aGlzLiNmaWxsT2xkSW50ZXJ2aWV3RGF0YShsb2dpY1ZhcnMsIGFuc3dlckxpc3QpO1xyXG5cclxuICAgICAgLy/QuNGJ0LXQvCDQvdC+0LzQtdGAINCy0L7Qv9GA0L7RgdCwLCDQutC+0YLQvtGA0YvQuSDQsdGL0Lsg0L/QvtGB0LvQtdC00L3QuNC5INC/0LXRgNC10LQg0YHQvtGF0YDQsNC90LXQvdC40LXQvC5cclxuICAgICAgY29uc3QgcXVlc3Rpb25MYXN0U2F2ZSA9IHRoaXMuI2ZpbmRRdWVzdGlvbkJ5R3VpZChxdWVzdGlvbkd1aWQpO1xyXG5cclxuICAgICAgLy/QktC+0L/RgNC+0YEg0LzQvtCz0LvQuCDRg9C00LDQu9C40YLRjC4g0KLQvtCz0LTQsCDQvdCw0YfQvdC10Lwg0YHQvdCw0YfQsNC70LAuXHJcbiAgICAgIGlmICghIXF1ZXN0aW9uTGFzdFNhdmUpIHtcclxuICAgICAgICBzdGFydFF1ZXN0aW9uTnVtID0gcXVlc3Rpb25MYXN0U2F2ZS5RdWVzdGlvbk51bTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHN0YXJ0UXVlc3Rpb25OdW0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL9Ct0YLQviDQvdC+0LLQvtC1INC40L3RgtC10YDQstGM0Y4sINCx0LXQtyDRgNCw0L3QtdC1INGB0L7RhdGA0LDQvdGR0L3QvdGL0YUg0LTQsNC90L3Ri9GFKNGB0LvRg9GH0LDQuSAxKS4g0JfQsNC/0YPRgdC60LDQtdC8INC+0L/RgNC+0YEsINC/0LXRgNCy0YvQuSDRjdC60YDQsNC9INGN0YLQviBMYW5nINCy0L7Qv9GA0L7RgSwg0L3QviDQtdGB0LvQuCDQstGL0LHQvtGA0LAg0Y/Qt9GL0LrQsCDQvdC10YIsINC/0YDQvtC/0YPRgdC60LDQtdC8INC4INC/0LXRgNC10YXQvtC00LjQvCDQvdCwIDEt0Lkg0LLQvtC/0YDQvtGBXHJcbiAgICAgIHN0YXJ0UXVlc3Rpb25OdW0gPSB0aGlzLiNhY3RpdmVMYW5nQ291bnQgPiAxID8gMCA6IHRoaXMuI25leHRRdWVzdGlvbk51bSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v0L/QvtGI0LvRkdC8INGB0L7QsdGL0YLQuNC1INC+INC90LDRh9Cw0LvQtSDQvtC/0YDQvtGB0LBcclxuICAgIHRoaXMuI2V2ZW50QnVzLm5leHQoe2tleTogU3VydmV5RXZlbnRzLnNlU3VydmV5U3RhcnQsIGRhdGE6IHtxdWVzdGlvbmFyeTogdGhpcy4jcXVlc3Rpb25hcnl9fSk7XHJcblxyXG4gICAgLy/Qv9C+0LrQsNC30YvQstCw0LXQvCDQstC+0L/RgNC+0YFcclxuICAgIHRoaXMuI2NoYW5nZUN1cnJlbnRRdWVzdGlvbih0aGlzLiNxdWVzdGlvbmFyeSEuUXVlc3Rpb25zW3N0YXJ0UXVlc3Rpb25OdW1dKTtcclxuICB9XHJcblxyXG4gIG9uKC4uLmtleTogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy4jZXZlbnRCdXMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICBmaWx0ZXIoZXZlbnQgPT4ga2V5LmluY2x1ZGVzKGV2ZW50LmtleSkpLFxyXG4gICAgIG1hcChldmVudCA9PiBldmVudC5kYXRhKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdvVG9OZXh0UXVlc3Rpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50UXVlc3Rpb24gPSB0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWU7XHJcbiAgICBpZiAoIWN1cnJlbnRRdWVzdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL9C10YHQu9C4INC+0YLQstC10YIg0L3QsCDRgtC10LrRg9GJ0LjQuSDQstC+0L/RgNC+0YEg0L3QtSDQt9Cw0LrQvtC90YfQtdC9LCDQstGL0YXQvtC00LjQvFxyXG4gICAgaWYgKCF0aGlzLl9pbnRlcnZpZXcucXVlc3Rpb25Jc0NvbXBsZXRlKGN1cnJlbnRRdWVzdGlvbi5RdWVzdGlvbkd1aWQpKSB7XHJcbiAgICAgIHJldHVybiA7XHJcbiAgICB9XHJcblxyXG4gICAgLy/QtdGB0LvQuCDRg9C60LDQt9Cw0L0gUG9zdFNjcmlwdCwg0LLRi9C/0L7Qu9C90LjQvCDQtdCz0L5cclxuICAgIGlmICghIWN1cnJlbnRRdWVzdGlvbi5Qb3N0U2NyaXB0KSB7XHJcbiAgICAgIHRoaXMuX2xvZ2ljLmV4ZWN1dGVQb3N0U2NyaXB0KGN1cnJlbnRRdWVzdGlvbi5Qb3N0U2NyaXB0KTtcclxuICAgIH1cclxuICAgIHRoaXMuI2NoYW5nZUN1cnJlbnRRdWVzdGlvbih0aGlzLiNxdWVzdGlvbmFyeSEuUXVlc3Rpb25zW3RoaXMuI25leHRRdWVzdGlvbk51bSgpXSk7XHJcbiAgfVxyXG5cclxuICBnb1RvQmFja1F1ZXN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy4jZGlzcGxheWVkUXVlc3Rpb25zLnBvcCgpOyAvLyDRg9C00LDQu9C40Lwg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YLQvtC8INGH0YLQviDQv9C+0LrQsNC30YvQstCw0LvQuCDRjdGC0L7RgiDQstC+0L/RgNC+0YFcclxuICAgIGNvbnN0IHByZXZpb3VzUXVlc3Rpb25OdW0gPSB0aGlzLiNkaXNwbGF5ZWRRdWVzdGlvbnMucG9wKCk7IC8vINGD0LfQvdCw0LXQvCDQvdC+0LzQtdGAINCy0L7Qv9GA0L7RgdCwINC90LAg0LrQvtGC0L7RgNGL0Lkg0L3QsNC8INC90LDQtNC+INC/0LXRgNC10LnRgtC4LCDQuCDRg9C00LDQu9C40Lwg0LjQvdGE0L7RgNC80LDRhtC40Y4g0YfRgtC+LdCx0Ysg0L3QtSDQtNGD0LHQu9C40YDQvtCy0LDRgtGMXHJcbiAgICBpZiAoISFwcmV2aW91c1F1ZXN0aW9uTnVtKSB7XHJcbiAgICAgIGNvbnN0IHByZXZRdWVzdGlvbiA9IHRoaXMuI3F1ZXN0aW9uYXJ5Py5RdWVzdGlvbnNbcHJldmlvdXNRdWVzdGlvbk51bV07XHJcbiAgICAgIGlmICghIXByZXZRdWVzdGlvbikge1xyXG4gICAgICAgIHRoaXMuI2NoYW5nZUN1cnJlbnRRdWVzdGlvbihwcmV2UXVlc3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBxdWVzdGlvbklzQ29tcGxldGUoZ3VpZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLl9pbnRlcnZpZXcuZmluZEFuc3dlckJ5R3VpZChndWlkKTtcclxuICAgIHJldHVybiBhbnN3ZXI/LmFuc3dlcklzQ29tcGxldGUgPz8gZmFsc2VcclxuICB9XHJcbiAgXHJcbiAgZ3VpZFRvVGV4dEFuc3dlcihndWlkOiBudW1iZXIsIGxhbmd1YWdlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLmZpbmRBbnN3ZXJCeUd1aWQoZ3VpZCk7XHJcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuI2ZpbmRRdWVzdGlvbkJ5R3VpZChndWlkKTtcclxuICAgIGlmICghcXVlc3Rpb24gfHwgIWFuc3dlciB8fCBhbnN3ZXIuQW5zd2VyVmFsdWUgPT09IC05Nykge1xyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuICAgIGRlYnVnZ2VyXHJcbiAgICBjb25zdCBxdWVzdGlvblR5cGUgPSBxdWVzdGlvbi5RdWVzdGlvblR5cGU7XHJcbiAgICBcclxuICAgIHN3aXRjaCAocXVlc3Rpb25UeXBlKSB7XHJcbiAgICAgIFxyXG4gICAgICBjYXNlIFF1ZXN0aW9uc1R5cGUuZXFPTDogcmV0dXJuIGFuc3dlci5BbnN3ZXJWYWx1ZTtcclxuICAgICAgY2FzZSBRdWVzdGlvbnNUeXBlLmVxU1M6IHtcclxuICAgICAgICBjb25zdCBhbHRlcm5hdGl2ZSA9IHF1ZXN0aW9uLkFsdGVybmF0aXZlbGlzdC5maW5kKGFsdCA9PiBhbHQuVmFsdWUgPT09IGFuc3dlci5BbnN3ZXJWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgYWx0VGV4dCA9IGFsdGVybmF0aXZlPy5NdWx0aUxhbmdDYXB0aW9ucy5maW5kKG9iaiA9PiBvYmoubGFuZyA9PT0gbGFuZ3VhZ2VJZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBhbHRUZXh0Py5DYXB0aW9uSHRtbCA/PyAnJztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjZmlsbE9sZEludGVydmlld0RhdGEobG9naWNWYXJzOiBBcnJheTxJSW50ZXJ2aWV3TG9naWNWYXI+LCBhbnN3ZXJMaXN0OiBBcnJheTxJUXVlc3Rpb25BbnN3ZXI+KTogdm9pZHtcclxuICAgIC8v0L/RgNC+0L/QuNGI0LXQvCDRgdGC0LDRgNGL0LUg0LvQvtCz0LjRh9C10YHQutC40LUg0L/QtdGA0LXQvNC10L3QvdGL0LVcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGxvZ2ljVmFycykpIHtcclxuICAgICAgbG9naWNWYXJzLmZvckVhY2gobG9naWNWYXJPYmogPT4ge1xyXG4gICAgICAgIHRoaXMuX2xvZ2ljLnNldExvZ2ljVmFsdWUobG9naWNWYXJPYmoubm0sIGxvZ2ljVmFyT2JqLnZsKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvL9C/0YDQvtC/0LjRiNC10Lwg0YHRgtCw0YDRi9C1INC+0YLQstC10YLRi1xyXG4gICAgdGhpcy5faW50ZXJ2aWV3Lm92ZXJyaWRlQW5zd2VycyhhbnN3ZXJMaXN0KTtcclxuXHJcbiAgICAvL9C90YPQttC90L4g0LLQtdGA0L3Rg9GC0Ywg0LLRgNC10LzRjyDQvdCw0YfQsNC70LAg0LjQvdGC0LXRgNCy0YzRjiwg0L7RgtC00LXQu9GM0L3QviDQvtC90L4g0L3QtSDRgdC+0YXRgNCw0L3Rj9C10YLRgdGPLCDQv9C+0Y3RgtC+0LzRgyDQstC+0LfRjNC80ZHQvCDQvNC40L3QuNC80LDQu9GM0L3QvtC1INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINC40Lcg0L7RgtCy0LXRgtC+0LJcclxuICAgIC8v0YTQuNC70YzRgtGA0YPQtdC8INCy0YHQtSDQstC+0L/RgNC+0YHRiyDRgyDQutC+0YLQvtGA0YvRhSDQvtC90L4g0YPQutCw0LfQsNC90L4oPjApINC4INGC0YDQsNC90YHRhNC+0YDQvNC40YDRg9C10Lwg0LIg0YfQuNGB0LvQvi5cclxuICAgIGNvbnN0IHN0YXJ0ZWRBdEFycmF5ID0gIGFuc3dlckxpc3QuZmlsdGVyKGFuc3dlciA9PiBhbnN3ZXIuU3RhcnRlZEF0ID4gMCkubWFwKGFuc3dlciA9PiBhbnN3ZXIuU3RhcnRlZEF0KTtcclxuXHJcbiAgICAvL9Cx0LXRgNGR0Lwg0LzQuNC90LjQvNCw0LvRjNC90L7QtVxyXG4gICAgdGhpcy5faW50ZXJ2aWV3LnN0YXJ0ZWRBdCA9IE1hdGgubWluKC4uLnN0YXJ0ZWRBdEFycmF5KTtcclxuICB9XHJcblxyXG4gICNjaGFuZ2VDdXJyZW50UXVlc3Rpb24obmV3UXVlc3Rpb246IElkYlF1ZXN0aW9uKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50UXVlc3Rpb24gPSB0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWU7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICghIWN1cnJlbnRRdWVzdGlvbikge1xyXG4gICAgICAvKlxyXG4gICAgICDQodC+0YXRgNCw0L3QuNC8INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINC40L3RgtC10YDQstGM0Y4uINCk0LjQutGB0LjRgNC+0LLQsNGC0Ywg0LHRg9C00LXQvCDQvdC1INGBINGB0LDQvNC+0LPQviDQvdCw0YfQsNC70LAsINCwINGBINC+0YLQstC10YLQsCDQvdCwINC/0LXRgNCy0YvQuSDQstC+0L/RgNC+0YEuXHJcbiAgICAgINCf0L7RgtC+0LzRgyDRh9GC0L4g0L/RgNCw0LrRgtC40LrQsCDRgtCw0LrQsNGPLCDQvtGC0LrRgNGL0YLRjCDQsNC90LrQtdGC0YMg0L3QsCDQv9C70LDQvdGI0LXRgtC1INC4INGF0L7QtNC40YLRjCDQuNGB0LrQsNGC0Ywg0YDQtdGB0L/QvtC90LTQtdC90YLQvtCyINC4INC40Lct0LfQsCDRjdGC0L7Qs9C+INC00LvQuNGC0LXQu9GM0L3QvtGB0YLRjCDQuNC90YLQtdGA0LLRjNGOINC80L7QttC10YIg0LHRi9GC0Ywg0L3QtdGA0LXQu9C10LLQsNC90YLQvdC+LlxyXG4gICAgICAqICovXHJcbiAgICAgIGlmICh0aGlzLl9pbnRlcnZpZXcuc3RhcnRlZEF0ID09PSAwICYmIGN1cnJlbnRRdWVzdGlvbi5RdWVzdGlvbk51bSA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5faW50ZXJ2aWV3LnN0YXJ0ZWRBdCA9IGN1cnJlbnRUaW1lO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL9C90YPQttC90L4g0YHQvtGF0YDQsNC90LjRgtGMIEZpbmlzaGVkQXQg0LIg0L7RgtCy0LXRgtCw0YUg0LTQu9GPINGB0YLQsNGA0L7Qs9C+INCy0L7Qv9GA0L7RgdCwXHJcbiAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2ludGVydmlldy5maW5kQW5zd2VyQnlHdWlkKGN1cnJlbnRRdWVzdGlvbi5RdWVzdGlvbkd1aWQpO1xyXG4gICAgICBpZiAoISFhbnN3ZXIpIHtcclxuICAgICAgICBhbnN3ZXIuRmluaXNoZWRBdCA9IGN1cnJlbnRUaW1lO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuI2V2ZW50QnVzLm5leHQoe2tleTogU3VydmV5RXZlbnRzLnNlUXVlc3Rpb25IaWRlLCBkYXRhOiBjdXJyZW50UXVlc3Rpb259KTtcclxuICAgIH1cclxuICAgIHRoaXMuI2Rpc3BsYXllZFF1ZXN0aW9ucy5wdXNoKG5ld1F1ZXN0aW9uLlF1ZXN0aW9uTnVtKTtcclxuICAgIHRoaXMuI2N1cnJlbnRRdWVzdGlvbi5uZXh0KG5ld1F1ZXN0aW9uKTtcclxuXHJcbiAgICAvL9C90YPQttC90L4g0YHQvtGF0YDQsNC90LjRgtGMIFN0YXJ0ZWRBdCDQsiDQvtGC0LLQtdGC0LDRhSDQtNC70Y8g0L3QvtCy0L7Qs9C+INCy0L7Qv9GA0L7RgdCwXHJcbiAgICBjb25zdCBhbnN3ZXJOZXcgPSB0aGlzLl9pbnRlcnZpZXcuZmluZEFuc3dlckJ5R3VpZChuZXdRdWVzdGlvbi5RdWVzdGlvbkd1aWQpO1xyXG4gICAgaWYgKCEhYW5zd2VyTmV3KSB7XHJcbiAgICAgIGFuc3dlck5ldy5TdGFydGVkQXQgPSBjdXJyZW50VGltZTtcclxuICAgIH1cclxuICAgIHRoaXMuI2V2ZW50QnVzLm5leHQoe2tleTogU3VydmV5RXZlbnRzLnNlUXVlc3Rpb25TaG93LCBkYXRhOiBuZXdRdWVzdGlvbn0pO1xyXG5cclxuICAgIC8v0LXRgdC70Lgg0L3QvtCy0YvQuSDRjdC60YDQsNC9INGN0YLQviBlbmQg0YLQvtCz0LTQsCDQt9Cw0LLQtdGA0YjQsNC10Lwg0LjQvdGC0LXRgNCy0YzRjlxyXG4gICAgaWYgKG5ld1F1ZXN0aW9uLlF1ZXN0aW9uVHlwZSA9PT0gJ0VORCcpIHtcclxuICAgICAgdGhpcy4jZmluaXNoSW50ZXJ2aWV3KCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8v0LXRgdC70Lgg0Y3RgtC+INC90LXRj9Cy0L3Ri9C5INCy0L7Qv9GA0L7RgSDQuCDRjdGC0L4gc3Mg0LjQu9C4IG1zINCy0L7Qv9GA0L7RgSDRgtC+0LPQtNCwINC/0L7RgdGH0LjRgtCw0LXQvCDQt9C90LDRh9C10L3QuNGPINGDINGN0YLQvtCz0L4g0LLQvtC/0YDQvtGB0LBcclxuICAgIGlmIChuZXdRdWVzdGlvbi5JbXBsaWNpdCkge1xyXG4gICAgICB0aGlzLiNjYWxjdWxhdGVJbXBsaWNpdFF1ZXN0aW9uKG5ld1F1ZXN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGN1cnJlbnRRdWVzdGlvbiQoKTogT2JzZXJ2YWJsZTxJZGJRdWVzdGlvbiB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLiNjdXJyZW50UXVlc3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kQW5zd2VyQnlHdWlkKGd1aWQ6IG51bWJlcik6IEFuc3dlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW50ZXJ2aWV3LmZpbmRBbnN3ZXJCeUd1aWQoZ3VpZCk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2dpY1ZhbHVlKHZhck5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9naWMuc2V0TG9naWNWYWx1ZSh2YXJOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2dpY1ZhcnMoKTogTG9naWNPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvZ2ljLmdldExvZ2ljVmFycygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QW5zd2VyTGlzdCgpOiBBcnJheTxBbnN3ZXI+IHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcnZpZXcuZ2V0QW5zd2VyTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQW5zd2VyKGV2ZW50RGF0YTogQW5zd2VyQ2hhbmdlKTogdm9pZCB7XHJcbiAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLl9pbnRlcnZpZXcuZmluZEFuc3dlckJ5R3VpZChldmVudERhdGEuZ3VpZCk7XHJcbiAgICBpZiAoIWFuc3dlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy/QstC+0L/RgNC+0YHRiyDQutC+0YLQvtGA0YvQtSDQsiDRgdCy0L7QtdC8INGB0L7RgdGC0LDQstC1INC40LzQtdC10YIg0YHQtdC60YbQuNC4LCDRhdGA0LDQvdGP0YIg0L7RgtCy0LXRgtGLINGH0YPRgtGMINC/0L4g0LTRgNGD0LPQvtC80YMsINGC0L7Rh9C90LXQtSDQvtGC0LLQtdGCINC90LAg0LrQsNC20LTRg9GOINGB0LXQutGG0LjRjiDRjdGC0L4g0L7RgtC00LXQu9GM0L3Ri9C5INC+0LHRitC10LrRgiDQsiAgX2ludGVydmlldy5hbnN3ZXJMaXN0XHJcbiAgICAvL9C/0L7RjdGC0L7QvNGDINC+0YLQstC10YIg0LTQu9GPINGC0LDQutC40YUg0YLQuNC/0L7QsiDQstC+0L/RgNC+0YHQvtCyINGN0YLQviBba2V5OiBzdHJpbmddOiBBcnJheTxudW1iZXI+IHwgbnVtYmVyLCDQs9C00LUga2V5KGd1aWQg0YHQtdC60YbQuNC4KSDRjdGC0L4g0L7RgtCy0LXRgiDQvdCwINGB0LXQutGG0LjRjiwg0LXRgdC70Lgga2V5INC90LXRgiwg0YHQtdC60YbQuNGPINC90LUg0LHRi9C70LAg0L/QvtC60LDQt9Cw0L3QsFxyXG4gICAgaWYgKHRoaXMuI2N1cnJlbnRRdWVzdGlvbi52YWx1ZT8uUXVlc3Rpb25UeXBlID09PSBRdWVzdGlvbnNUeXBlLmVxU0wpIHtcclxuICAgICAgY29uc3Qgc2VjdGlvbkxpc3QgPSB0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWU/LlNlY3Rpb25saXN0O1xyXG5cclxuICAgICAgLy/Qv9GA0L7QudC00ZHQvNGB0Y8g0L/QviDQutCw0LbQtNC+0Lkg0YHQtdC60YbQuNC4INC4INC10YHQu9C4INC00LvRjyDQvdC10ZEg0LXRgdGC0Ywg0L7RgtCy0LXRgiwg0LfQsNC/0LjRiNC10LwsINCyINC/0YDQvtGC0LjQstC90L7QvCDRgdC70YPRh9Cw0LUg0LLQvNC10YHRgtC+INC+0YLQstC10YLQsCDRg9C60LDQttC10LwgLTk3KE1JU1NJTkdfVkFMVUUpXHJcbiAgICAgIGlmICghIXNlY3Rpb25MaXN0KSB7XHJcbiAgICAgICAgc2VjdGlvbkxpc3QuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbnRlcnZpZXdBbnN3ZXIgPSAgdGhpcy5faW50ZXJ2aWV3LmZpbmRBbnN3ZXJCeUd1aWQoc2VjdGlvbi5TZWN0aW9uR3VpZCk7XHJcbiAgICAgICAgICBpZiAoIXNlY3Rpb25JbnRlcnZpZXdBbnN3ZXIpe1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25RdWVzdGlvbkFuc3dlciA9IGV2ZW50RGF0YS5hbnN3ZXIgPyAgKGV2ZW50RGF0YS5hbnN3ZXIgYXMgQW5zd2VyU2xUeXBlKVtzZWN0aW9uLlNlY3Rpb25HdWlkLnRvU3RyaW5nKCldIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgc2VjdGlvbkludGVydmlld0Fuc3dlci5BbnN3ZXJWYWx1ZSA9IHNlY3Rpb25RdWVzdGlvbkFuc3dlciA9PT0gdW5kZWZpbmVkID8gTUlTU0lOR19WQUxVRSA6IHNlY3Rpb25RdWVzdGlvbkFuc3dlcjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvL9C+0YLQstC10YIg0YHQsNC80L7Qs9C+INC40YHRhdC+0LTQvdC+0LPQviDQstC+0L/RgNC+0YHQsCDQtNC+0LvQttC10L0g0LHRi9GC0YwgMVxyXG4gICAgICBhbnN3ZXIuQW5zd2VyVmFsdWUgPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy/QvtGC0LLQtdGCINC90LAg0LLQvtC/0YDQvtGBINGDINC60L7RgtC+0YDQvtCz0L4g0L3QtdGCINGB0LXQutGG0LjQuVxyXG4gICAgICBhbnN3ZXIuQW5zd2VyVmFsdWUgPSBldmVudERhdGEuYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIC8v0L3QsCDQstC+0L/RgNC+0YEg0L7RgtCy0LXRgtC40LvQuCDRgtC+0LPQtNCwINC60L7Qs9C00LAg0LXRgdGC0Ywg0LLRgdC1INC+0YLQstC10YLRiyDQuCDQstGL0L/QvtC70L3Rj9C10YLRgdGPINC70L7Qs9C40LrQsCDQutC90L7Qv9C60Lgg0LTQsNC70LXQtSjQtdGB0LvQuCDQtdGRINGD0LrQsNC30LDQu9C4KVxyXG4gICAgYW5zd2VyLmFuc3dlcklzQ29tcGxldGUgPSBldmVudERhdGEuaXNDb21wbGV0ZSAmJiB0aGlzLiNuZXh0QnV0dG9uRXhwcmVzc2lvbklzVHJ1ZSgpO1xyXG5cclxuICAgIC8vVmlld2VkQWx0ZXJuYXRpdmVWYWx1ZXMg0LggVmlld2VkU2VjdGlvbkd1aWRzLiDQoi7Qui4g0L7QvdC4IHJlYWRvbmx5INGB0L3QsNGH0LDQu9CwINGD0LTQsNC70LjQvCwg0L/QvtGC0L7QvCDQtNC+0LHQsNCy0LjQvFxyXG4gICAgYW5zd2VyLlZpZXdlZEFsdGVybmF0aXZlVmFsdWVzLmxlbmd0aCA9IDA7XHJcbiAgICBldmVudERhdGEudmlld2VkQWx0ZXJuYXRpdmVWYWx1ZXMuZm9yRWFjaChvYSA9PiBhbnN3ZXIuVmlld2VkQWx0ZXJuYXRpdmVWYWx1ZXMucHVzaChvYSkpO1xyXG5cclxuICAgIGFuc3dlci5WaWV3ZWRTZWN0aW9uR3VpZHMubGVuZ3RoID0gMDtcclxuICAgIGV2ZW50RGF0YS52aWV3ZWRTZWN0aW9uR3VpZHMuZm9yRWFjaChvYSA9PiBhbnN3ZXIuVmlld2VkU2VjdGlvbkd1aWRzLnB1c2gob2EpKTtcclxuXHJcbiAgICBhbnN3ZXIuQWx0ZXJuYXRpdmVTZXF1ZW5jZUNsaWNrcy5sZW5ndGggPSAwO1xyXG4gICAgZXZlbnREYXRhLmFsdGVybmF0aXZlU2VxdWVuY2VDbGlja3MuZm9yRWFjaChvYSA9PiBhbnN3ZXIuQWx0ZXJuYXRpdmVTZXF1ZW5jZUNsaWNrcy5wdXNoKG9hKSk7XHJcblxyXG5cclxuICAgIE9iamVjdC5lbnRyaWVzKGFuc3dlci5BbnN3ZXJBZGRpdGlvbmFsKS5mb3JFYWNoKChba2V5XSkgPT4gZGVsZXRlIGFuc3dlci5BbnN3ZXJBZGRpdGlvbmFsW051bWJlcihrZXkpXSk7XHJcbiAgICBPYmplY3QuZW50cmllcyhldmVudERhdGEuYWRkaXRpb25hbEFuc3dlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gYW5zd2VyLkFuc3dlckFkZGl0aW9uYWxbTnVtYmVyKGtleSldID0gdmFsdWUpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlTG9naWMoZXZlbnREYXRhLmxvZ2ljVmFycyk7XHJcblxyXG4gICAgdGhpcy4jZXZlbnRCdXMubmV4dCh7a2V5OiBTdXJ2ZXlFdmVudHMuc2VRdWVzdGlvbkFuc3dlcnNDaGFuZ2UsIGRhdGE6IHtxdWVzdGlvbjogdGhpcy4jY3VycmVudFF1ZXN0aW9uLnZhbHVlLCBhbnN3ZXJJc0NvbXBsZXRlOiBhbnN3ZXIuYW5zd2VySXNDb21wbGV0ZX19KTtcclxuXHJcbiAgICAvL9C80L7QttC10YIg0LLQvtC30L3QuNC60L3Rg9GC0Ywg0YHQuNGC0YPQsNGG0LjRjywg0LrQvtCz0LTQsCDQvdC10YIg0L3QuCDQvtC00L3QvtC5INCw0LvRjNGC0LXRgNC90LDRgtC40LLRiyDQuNC70Lgg0YHQtdC60YbQuNC4INC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPLtCyINGN0YLQvtC8INGB0LvRg9GH0LDQtSDQstC+0L/RgNC+0YEg0L/QvtC60LDQt9GL0LLQsNGC0Ywg0L3QtSDQvdGD0LbQvdC+LCDQutCw0Log0L7RgtCy0LXRgiDQt9Cw0L/QuNGB0YvQstCw0LXQvCAwINC4INC/0LXRgNC10YXQvtC00LjQvCDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuVxyXG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLiNmaW5kUXVlc3Rpb25CeUd1aWQoZXZlbnREYXRhLmd1aWQpO1xyXG4gICAgLy/RgdC40YLRg9Cw0YbQuNGPINC00LvRjyBzcy9tcyDQstC+0L/RgNC+0YHQvtCyLFxyXG4gICAgaWYgKCEhcXVlc3Rpb24gJiYgYW5zd2VyLmFuc3dlcklzQ29tcGxldGUgJiYgKHF1ZXN0aW9uLlF1ZXN0aW9uVHlwZSA9PT0gJ1NTJyB8fCBxdWVzdGlvbi5RdWVzdGlvblR5cGUgPT09ICdNUycpICYmIChldmVudERhdGEudmlld2VkQWx0ZXJuYXRpdmVWYWx1ZXMubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICB0aGlzLmdvVG9OZXh0UXVlc3Rpb24oKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG9naWMobG9naWNWYXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGxvZ2ljVmFycykuZm9yRWFjaCgoW3Zhck5hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICB0aGlzLnNldExvZ2ljVmFsdWUodmFyTmFtZSwgdmFsdWUpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy/QstC+0LfQstGA0LDRidCw0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDQsNC60YLQuNCy0L3Ri9GFINGP0LfRi9C60L7QslxyXG4gIGdldCAjYWN0aXZlTGFuZ0NvdW50KCk6IG51bWJlciB7XHJcbiAgICAvL9C10YHQu9C4INCw0L3QutC10YLQsCDQv9C+INC60LDQutC+0Lkt0YLQviDQv9GA0LjRh9C40L3QtSDQvdGDINGD0LrQsNC30LDQvdCwLCDQstC10YDQvdGR0LwgMFxyXG4gICAgcmV0dXJuIHRoaXMuI3F1ZXN0aW9uYXJ5Py5CYXNlUGFyYW1zLkxhbmd1YWdlTGlzdC5maWx0ZXIoIGxhbmdPYmogPT4gbGFuZ09iai5pc0FjdGl2ZSkubGVuZ3RoID8/IDA7XHJcbiAgfVxyXG5cclxuICAvL9Cy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INCy0L7Qv9GA0L7RgdC+0LJcclxuICBnZXQgI3F1ZXN0aW9uc0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy4jcXVlc3Rpb25hcnk/LlF1ZXN0aW9ucy5sZW5ndGggPz8gMDtcclxuICB9XHJcblxyXG4gICNmaW5pc2hJbnRlcnZpZXcoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBsZXQgcmVzdWx0RGlydHk7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXN1bHREaXJ0eSA9IHRoaXMuX2xvZ2ljLmV4ZWN1dGVMb2dpYyh0aGlzLiNxdWVzdGlvbmFyeT8uQmFzZVBhcmFtcy5SZXN1bHRhdGl2ZVNjcmlwdCA/PyAnJyk7XHJcbiAgICB9Y2F0Y2ggKGUpIHtcclxuICAgICAgcmVzdWx0RGlydHkgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnRlcnZpZXc6IElJbnRlcnZpZXdEYXRhID0ge1xyXG4gICAgICBMYW5ndWFnZTogMCwgICAgLy90b2RvIGxhbmdcclxuICAgICAgU3BvdElkOiAwLFxyXG4gICAgICBEZXZpY2VJZDogMCxcclxuICAgICAgRGV2aWNlVHlwZTogMCxcclxuICAgICAgUmVzdWx0YXRpdmU6IFJlc3VsdGF0aXZlU3RhdHVzLnJzVW5zZXQsXHJcbiAgICAgIFZhbGlkOiBWYWxpZFN0YXR1cy52c1Vuc2V0LFxyXG4gICAgICBXYXZlOiB0aGlzLiNxdWVzdGlvbmFyeT8uSW5mby5jdXJyZW50X3dhdmUgPz8gMCxcclxuICAgICAgUXVlc3Rpb25hcnlOYW1lOiB0aGlzLiNxdWVzdGlvbmFyeT8uSW5mby5uYW1lID8/ICcnLFxyXG4gICAgICBRdWVzdGlvbmFyeUd1aWQ6IHRoaXMuI3F1ZXN0aW9uYXJ5Py5JbmZvLnF1ZXN0aW9uYXJ5X2d1aWQgPz8gMCxcclxuICAgICAgU3RhcnRlZEF0OiB0aGlzLl9pbnRlcnZpZXcuc3RhcnRlZEF0LFxyXG4gICAgICBGaW5pc2hlZEF0OiBjdXJyZW50VGltZS5nZXRUaW1lKCksXHJcbiAgICAgIFRpbmVab25lQmlhczogY3VycmVudFRpbWUuZ2V0VGltZXpvbmVPZmZzZXQoKSxcclxuICAgICAgUmVzdWx0YXREaXJ0eTogcmVzdWx0RGlydHksXHJcbiAgICAgIEFuc3dlcnM6IHtcclxuICAgICAgICBBbnN2ZXJzTGlzdDogQXJyYXkuZnJvbSh0aGlzLl9pbnRlcnZpZXcuZ2V0QW5zd2VyTGlzdCgpKVxyXG4gICAgICB9LFxyXG4gICAgICBhZGRpdGlvbmFsX2luZm86IHtcclxuICAgICAgICBRdWVzdGlvbmFyeVVwZGF0ZVRpbWVzdGFtcDogbmV3IERhdGUodGhpcy4jcXVlc3Rpb25hcnk/LkluZm8ubGFzdF91cGRhdGVfdGltZXN0YW1wID8/IDApLmdldFRpbWUoKSAsXHJcbiAgICAgIH0sXHJcbiAgICAgIFJlc3VsdFF1b3RhR3VpZHM6IFtdLFxyXG4gICAgICBSZXN1bHRRdW90YTJkR3VpZHM6IFtdLFxyXG4gICAgICBMb2dpY1ZhcnM6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2dpY1ZhcnMgPSB0aGlzLl9sb2dpYy5nZXRMb2dpY1ZhcnMoKTtcclxuICAgIE9iamVjdC5lbnRyaWVzKGxvZ2ljVmFycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBpbnRlcnZpZXcuTG9naWNWYXJzLnB1c2goe25tOiBrZXksIHZsOiB2YWx1ZX0pKTtcclxuXHJcbiAgICB0aGlzLiNldmVudEJ1cy5uZXh0KHtrZXk6IFN1cnZleUV2ZW50cy5zZVN1cnZleUVuZCwgZGF0YTogaW50ZXJ2aWV3fSk7XHJcbiAgfVxyXG5cclxuICAjbmV4dFF1ZXN0aW9uTnVtKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBjdXJyZW50UXVlc3Rpb24gPSB0aGlzLiNjdXJyZW50UXVlc3Rpb24udmFsdWU7XHJcbiAgICAvLyDQv9GA0L7QstC10YDQuNC8INC60LLQvtGC0YtcclxuICAgIGNvbnN0IGN1cnJlbnRHdWlkID0gY3VycmVudFF1ZXN0aW9uPy5RdWVzdGlvbkd1aWQgPz8gMDtcclxuICAgIGlmICh0aGlzLiNzdXJ2ZXlRdW90YXMucXVvdGFJc0NvbXBsZXRlZCAmJiAhdGhpcy4jc3VydmV5UXVvdGFzLmd1aWRJc0Rlc3RpbmF0aW9uUXVlc3Rpb24oY3VycmVudEd1aWQpKSB7XHJcbiAgICAgIC8vINGDINC90LDRgSDQtdGB0YLRjCDQt9Cw0L/QvtC70L3QtdC90L3QsNGPINC60LLQvtGC0LAsINC90LDQudC00LXQvCDQstC+0L/RgNC+0YEg0LrQvtGC0L7RgNGL0Lkg0L3Rg9C20L3QviDQv9C+0LrQsNC30LDRgtGMINC/0YDQuCDQt9Cw0L/QvtC70L3QtdC90LjQuCDQutCy0L7RgtGLXHJcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUSA9IHRoaXMuI2ZpbmRRdWVzdGlvbkJ5R3VpZCh0aGlzLiNzdXJ2ZXlRdW90YXMuZGVzdGluYXRpb25RdWVzdGlvbkd1aWQpO1xyXG4gICAgICAvL9C10YHQu9C4INCy0L7Qv9GA0L7RgSDQtdGB0YLRjCjQtdCz0L4g0LzQvtCz0LvQuCDRg9C00LDQu9C40YLRjCDQuNC3INCw0L3QutC10YLRiyksINC/0L7QutCw0LfRi9Cy0LDQtdGCINC10LPQvlxyXG4gICAgICBpZiAoISFkZXN0aW5hdGlvblEpIHtcclxuICAgICAgICByZXR1cm4gZGVzdGluYXRpb25RLlF1ZXN0aW9uTnVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0LXRgdC70Lgg0L3QtdGCINC30LDQv9C+0LvQvdC10L3QvdC+0Lkg0LrQstC+0YLRiywg0L/QtdGA0LXRhdC+0LTQuNC8INC90LAg0YHQu9C10LTRg9GO0YnQuNC5INCy0L7Qv9GA0L7RgSwg0LjRidC10Lwg0YHQu9C10LTRg9GO0YnQuNC5INCy0L7Qv9GA0L7RgSDQutC+0YLQvtGA0YvQuSDQvNGLINC80L7QttC10Lwg0L7RgtC+0LHRgNCw0LfQuNGC0YwgKNC00L4g0LvQvtCz0LjQutCwINC80L7QttC10YIg0LfQsNC/0YDQtdGC0LjRgtGMINC/0L7QutCw0Lcg0LLQvtC/0YDQvtGB0LApXHJcbiAgICBsZXQgbmV4dFF1ZXN0aW9uTnVtID0gKGN1cnJlbnRRdWVzdGlvbj8uUXVlc3Rpb25OdW0gPz8gMCkgKyAxO1xyXG5cclxuICAgIC8vINC90L4g0YHQvdCw0YfQsNC70LAg0L/RgNC+0LLQtdGA0LjQvCDQv9C+0YHQu9C1INC70L7Qs9C40LrRg1xyXG4gICAgaWYgKCEhY3VycmVudFF1ZXN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGRlc3RRID0gY3VycmVudFF1ZXN0aW9uLmxvZ2ljbGlzdC5maW5kKGxvZ09iaiA9PiAobG9nT2JqLkRlc3RpbmF0aW9uUXVlc3Rpb25HdWlkID4gMCkgJiYgdGhpcy5fbG9naWMuZXhlY3V0ZUxvZ2ljKGxvZ09iai5Mb2dpY1RleHQpICk7XHJcbiAgICAgIGlmICghIWRlc3RRKSB7XHJcbiAgICAgICAgY29uc3QgZGVzdFFOdW0gPSB0aGlzLiNmaW5kUXVlc3Rpb25CeUd1aWQoZGVzdFEuRGVzdGluYXRpb25RdWVzdGlvbkd1aWQpPy5RdWVzdGlvbk51bTtcclxuICAgICAgICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIoZGVzdFFOdW0pKSB7IC8vINCy0L7Qv9GA0L7RgSDQvNC+0LMg0LHRi9GC0Ywg0YPQtNCw0LvRkdC9LCDQsCDQu9C+0LPQuNC60YMg0L7RgdGC0LDQstC40YLRjFxyXG4gICAgICAgICAgbmV4dFF1ZXN0aW9uTnVtID0gZGVzdFFOdW0hO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vINC+0LHRidC10LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LLQvtC/0YDQvtGB0L7Qsiwg0YbQuNC60Lsg0LHRg9C00LXRgiDRgdGH0LjRgtCw0YLRjCDQtNC+INGN0YLQvtCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LBcclxuICAgIGNvbnN0IHF1ZXN0aW9uQ291bnQgPSB0aGlzLiNxdWVzdGlvbnNDb3VudDtcclxuICAgIGRvIHtcclxuICAgICAgLy/Qv9C+0YLQtdC90YbQuNCw0LvRjNC90L4g0YHQu9C10LTRg9GO0YnQuNC5INCy0L7Qv9GA0L7RgVxyXG4gICAgICBjb25zdCBxID0gdGhpcy4jcXVlc3Rpb25hcnkhLlF1ZXN0aW9uc1tuZXh0UXVlc3Rpb25OdW1dO1xyXG5cclxuICAgICAgLy/QtdGB0LvQuCDRjdGC0L4g0L/QvtGB0LvQtdC00L3QuNC5INCy0L7Qv9GA0L7RgSDQuNC70Lgg0LXRgdC70Lgg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyBCZWZvcmVFeHByZXNzaW9uINC4INGN0YLQvtGCINCy0L7Qv9GA0L7RgSDQvdC1IERlc3RpbmF0aW9uUXVvdGEsINC80L7QttC10Lwg0LXQs9C+INC/0L7QutCw0LfQsNGC0YxcclxuICAgICAgaWYgKHEuUXVlc3Rpb25UeXBlID09PSBRdWVzdGlvbnNUeXBlLmVxRU5EIHx8ICh0aGlzLl9sb2dpYy5leGVjdXRlTG9naWMocS5CZWZvcmVFeHByZXNzaW9uKSAmJiAhdGhpcy4jc3VydmV5UXVvdGFzLmd1aWRJc0Rlc3RpbmF0aW9uUXVlc3Rpb24ocS5RdWVzdGlvbkd1aWQpKSApIHtcclxuICAgICAgICByZXR1cm4gbmV4dFF1ZXN0aW9uTnVtO1xyXG4gICAgICB9XHJcbiAgICAgIC8v0LLQvtC/0YDQvtGBINC90LXQu9GM0LfRjyDQv9C+0LrQsNC30YvQstCw0YLRjCwg0YPQstC10LvQuNGH0LjQstCw0LXQvCDRgdGH0ZHRgtGH0LjQuiDRgtC10LrRg9GJ0LXQs9C+INCy0L7Qv9GA0L7RgdCwINC90LAgMVxyXG4gICAgICBuZXh0UXVlc3Rpb25OdW0rKztcclxuICAgIH0gd2hpbGUgKG5leHRRdWVzdGlvbk51bSA8IHF1ZXN0aW9uQ291bnQgLSAxKTsgLy8gZW5kINCy0L7Qv9GA0L7RgSDQtNC+0LvQttC10L0g0LLRgdC10LPQtNCwINCx0YvRgtGMINC/0L7QutCw0LfQsNC9XHJcbiAgICByZXR1cm4gbmV4dFF1ZXN0aW9uTnVtO1xyXG4gIH1cclxuXHJcbiAgI2luaXRpYXRlUXVlc3Rpb25zKHF1ZXN0aW9uTGlzdDogQXJyYXk8SWRiUXVlc3Rpb24+KTogdm9pZHtcclxuICAgIHF1ZXN0aW9uTGlzdC5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcclxuICAgICAgLy/RgdC+0LfQtNCw0ZHQvCDQv9GD0YHRgtC+0Lkg0L7RgtCy0LXRgiDQtNC70Y8g0LLQvtC/0YDQvtGB0LAuXHJcbiAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2ludGVydmlldy5jcmVhdGVBbnN3ZXIocXVlc3Rpb24uUXVlc3Rpb25HdWlkLCBxdWVzdGlvbi5WZXJzaW9uKTtcclxuXHJcbiAgICAgIC8v0YLQsNC60L7Qs9C+INCx0YvRgtGMINC90LUg0LTQvtC70LbQvdC+LCDRjdGC0L4g0L7RiNC40LHQutCwXHJcbiAgICAgIGlmICghYW5zd2VyKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhbnN3ZXIgbm90IGZvdW5kJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2xvZ2ljLnNldExvZ2ljVmFsdWUocXVlc3Rpb24uU3lzTmFtZSwgTUlTU0lOR19WQUxVRSk7IC8vINC/0LXRgNC10LzQtdC90L3QsNGPINGB0LDQvNC+0LPQviDQstC+0L/RgNC+0YHQsFxyXG5cclxuICAgICAgLy/QtNC+0LHQsNCy0LjQvCDQtNC+0L8g0L7RgtCy0LXRgtGLINC4INC70L7Qs9C40LrRgyDQtNC70Y8g0L3QuNGFXHJcbiAgICAgIHF1ZXN0aW9uLkFkZGl0aW9uYWxBbnN3ZXJsaXN0LmZvckVhY2goYWEgPT4ge1xyXG4gICAgICAgIGFuc3dlci5BbnN3ZXJBZGRpdGlvbmFsW2FhLlZhbHVlXSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbG9naWMuc2V0TG9naWNWYWx1ZShgJHtxdWVzdGlvbi5TeXNOYW1lfSR7YWEuU3lzTmFtZX1gLCBNSVNTSU5HX1ZBTFVFKTsgLy8g0LvQvtCz0LjQutCwINC00LvRjyDQv9C10YDQtdC80LXQvdC90YvRhSDQtNC+0L8g0L7RgtCy0LXRgtCwXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g0LXRgdC70Lgg0LIg0YLQtdC60YHRgtC1IHBvc3RTY3JpcHQg0LXRgdGC0Ywg0LfQsNC/0LjRgdGMINGC0LjQv9CwIHNldFZhcigndmFyTmFtZScsICB2YWx1ZSk7ICDQvdGD0LbQvdC+INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOIHZhck5hbWUg0LfQvdCw0YfQtdC90LjQtdC8IC05Ny5cclxuICAgICAgaWYgKCEhcXVlc3Rpb24uUG9zdFNjcmlwdCkge1xyXG4gICAgICAgIChxdWVzdGlvbi5Qb3N0U2NyaXB0Lm1hdGNoKC8oXFxic2V0dmFyXFxiKVxcKFsnfFwiXSguKj8pWyd8XCJdL2dpbSkgPz8gW10pLm1hcChzY3JpcHRWYXIgPT4gc2NyaXB0VmFyLm1hdGNoKC9bJ3xcIl0oLispWyd8XCJdL2kpIVsxXSkuZm9yRWFjaCh2YXJOYW1lID0+IHRoaXMuX2xvZ2ljLnNldExvZ2ljVmFsdWUodmFyTmFtZSwgbnVsbCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDQtNC70Y8g0JLQvtC/0YDQvtGB0L7QsiBTUy9NUyDQvdGD0LbQvdC+INC/0YDQvtC/0LjRgdCw0YLRjCDQu9C+0LPQuNC60YMg0LDQu9GM0YLQtdGA0L3QsNGC0LjQsiBzeXNuYW1lINCy0L7Qv9GA0L7RgdCwICsgc3lzbmFtZSDQsNC70YzRgtC10YDQvdCw0YLQuNCy0YtcclxuICAgICAgaWYgKHF1ZXN0aW9uLlNlY3Rpb25saXN0Lmxlbmd0aCA8PSAwKSB7Ly8g0LTQu9GPINCS0L7Qv9GA0L7RgdC+0LIgU1MvTVNcclxuICAgICAgICBxdWVzdGlvbi5BbHRlcm5hdGl2ZWxpc3QuZm9yRWFjaChhbHQgPT4gdGhpcy5fbG9naWMuc2V0TG9naWNWYWx1ZShgJHtxdWVzdGlvbi5TeXNOYW1lfSR7YWx0LlN5c05hbWV9YCwgTUlTU0lOR19WQUxVRSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8v0LTQu9GPINCy0L7Qv9GA0L7RgdC+0LIg0YMg0LrQvtGC0L7RgNGL0YUg0LXRgdGC0Ywg0YHQtdC60YbQuNC4INC/0YDQvtC40L3QuNGG0LjQsNC70LjQt9C40YDRg9C10Lwg0LrQsNC20LTRg9GOINGB0LXQutGG0LjRjlxyXG4gICAgICAgIHF1ZXN0aW9uLlNlY3Rpb25saXN0LmZvckVhY2goc2VjdGlvbiA9PiB7XHJcblxyXG4gICAgICAgICAgLy/RgdC+0LfQtNCw0ZHQvCDQv9GD0YHRgtC+0Lkg0L7RgtCy0LXRgiDQtNC70Y8g0YHQtdC60YbQuNC4LlxyXG4gICAgICAgICAgY29uc3QgYW5zd2VyRm9yU2VjdGlvbiA9IHRoaXMuX2ludGVydmlldy5jcmVhdGVBbnN3ZXIoc2VjdGlvbi5TZWN0aW9uR3VpZCwgMSk7XHJcblxyXG4gICAgICAgICAgLy/RgtCw0LrQvtCz0L4g0LHRi9GC0Ywg0L3QtSDQtNC+0LvQttC90L4sINGN0YLQviDQvtGI0LjQsdC60LBcclxuICAgICAgICAgIGlmICghYW5zd2VyRm9yU2VjdGlvbikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Fuc3dlciBub3QgZm91bmQnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyDQtNC70Y8g0JLQvtC/0YDQvtGB0L7QsiBTTCDQvdGD0LbQvdC+INC/0YDQvtC/0LjRgdCw0YLRjCDQu9C+0LPQuNC60YMg0LDQu9GM0YLQtdGA0L3QsNGC0LjQsiDQuCDRgdC10LrRhtC40Lkgc3lzbmFtZSDRgdC10LrRhtC40LggKyBzeXNuYW1lINCw0LvRjNGC0LXRgNC90LDRgtC40LLRi1xyXG4gICAgICAgICAgdGhpcy5fbG9naWMuc2V0TG9naWNWYWx1ZShzZWN0aW9uLlN5c05hbWUsIE1JU1NJTkdfVkFMVUUpOyAvLyDQv9C10YDQtdC80LXQvdC90LDRjyDRgdCw0LzQvtC5INGB0LXQutGG0LjQuFxyXG5cclxuICAgICAgICAgIC8v0LvQvtCz0LjQutCwINCw0LvRjNGC0LXRgNC90LDRgtC40LIgU0wg0LLQvtC/0YDQvtGB0LBcclxuICAgICAgICAgIHF1ZXN0aW9uLkFsdGVybmF0aXZlbGlzdC5mb3JFYWNoKGFsdCA9PiB0aGlzLl9sb2dpYy5zZXRMb2dpY1ZhbHVlKGAke3NlY3Rpb24uU3lzTmFtZX0ke2FsdC5TeXNOYW1lfWAsIE1JU1NJTkdfVkFMVUUpKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy/QuNGJ0LXRgiDQstC+0L/RgNC+0YEg0L3QsCBndWlkXHJcbiAgI2ZpbmRRdWVzdGlvbkJ5R3VpZChndWlkOiBudW1iZXIpOiBJZGJRdWVzdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuI3F1ZXN0aW9uYXJ5KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jcXVlc3Rpb25hcnkuUXVlc3Rpb25zLmZpbmQocSA9PiBxLlF1ZXN0aW9uR3VpZCA9PT0gZ3VpZCk7XHJcbiAgfVxyXG5cclxuICAjbmV4dEJ1dHRvbkV4cHJlc3Npb25Jc1RydWUoKTogYm9vbGVhbntcclxuICAgIGNvbnN0IGJ1dHRvbk5leHRFeHByZXNzaW9uID0gdGhpcy4jY3VycmVudFF1ZXN0aW9uLnZhbHVlPy5CdG5OZXh0RXhwcmVzc2lvbiA/PyAnJztcclxuICAgIC8v0LXRgdC70Lgg0YHQutGA0LjQv9GC0LAg0LTQu9GPINC60L3QvtC/0LrQuCDQtNCw0LvQtdC1INC90LXRgiwg0LLQtdGA0L3RkdC8IHRydWVcclxuICAgIGlmIChidXR0b25OZXh0RXhwcmVzc2lvbi50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ2ljLmV4ZWN1dGVMb2dpYyhidXR0b25OZXh0RXhwcmVzc2lvbik7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNjYWxjdWxhdGVJbXBsaWNpdFF1ZXN0aW9uKHF1ZXN0aW9uOiBJZGJRdWVzdGlvbik6IHZvaWR7XHJcbiAgICBpZiAocXVlc3Rpb24uSW1wbGljaXQgJiYgKHF1ZXN0aW9uLlF1ZXN0aW9uVHlwZSA9PT0gUXVlc3Rpb25zVHlwZS5lcVNTIHx8IHF1ZXN0aW9uLlF1ZXN0aW9uVHlwZSA9PT0gUXVlc3Rpb25zVHlwZS5lcU1TKSApIHtcclxuICAgICAgbGV0IHF1ZXN0aW9uQW5zd2VyOiBudW1iZXIgfCBBcnJheTxudW1iZXI+O1xyXG5cclxuICAgICAgaWYgKHF1ZXN0aW9uLlF1ZXN0aW9uVHlwZSA9PT0gUXVlc3Rpb25zVHlwZS5lcVNTKSB7XHJcbiAgICAgICAgY29uc3QgYWx0ID0gcXVlc3Rpb24uQWx0ZXJuYXRpdmVsaXN0LmZpbmQoYWx0ID0+IHRoaXMuX2xvZ2ljLmV4ZWN1dGVMb2dpYyhhbHQuRW5hYmxlRXhwcmVzc2lvbikpO1xyXG4gICAgICAgIHF1ZXN0aW9uQW5zd2VyID0gISFhbHQgPyBhbHQuVmFsdWUgOiAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocXVlc3Rpb24uUXVlc3Rpb25UeXBlID09PSBRdWVzdGlvbnNUeXBlLmVxTVMpIHtcclxuICAgICAgICBxdWVzdGlvbkFuc3dlciA9IHF1ZXN0aW9uLkFsdGVybmF0aXZlbGlzdFxyXG4gICAgICAgICAgLmZpbHRlcihhbHQgPT4gdGhpcy5fbG9naWMuZXhlY3V0ZUxvZ2ljKGFsdC5FbmFibGVFeHByZXNzaW9uKSlcclxuICAgICAgICAgIC5tYXAoYWx0ID0+IGFsdC5WYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGFuc3dlckNoYW5nZTogQW5zd2VyQ2hhbmdlID0ge1xyXG4gICAgICAgIGd1aWQ6IHF1ZXN0aW9uLlF1ZXN0aW9uR3VpZCxcclxuICAgICAgICBpc0NvbXBsZXRlOiB0cnVlLFxyXG4gICAgICAgIGFuc3dlcjogcXVlc3Rpb25BbnN3ZXIhLFxyXG4gICAgICAgIGFkZGl0aW9uYWxBbnN3ZXJzOiB7fSxcclxuICAgICAgICBsb2dpY1ZhcnM6IHt9LFxyXG4gICAgICAgIHZpZXdlZEFsdGVybmF0aXZlVmFsdWVzOiBbXSxcclxuICAgICAgICB2aWV3ZWRTZWN0aW9uR3VpZHM6IFtdLFxyXG4gICAgICAgIGFsdGVybmF0aXZlU2VxdWVuY2VDbGlja3M6IFtdXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVBbnN3ZXIoYW5zd2VyQ2hhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -56,10 +56,10 @@ export class TpSurveyInterviewService {
56
56
  }
57
57
  });
58
58
  }
59
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyInterviewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
60
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyInterviewService, providedIn: 'root' }); }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyInterviewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
60
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyInterviewService, providedIn: 'root' }); }
61
61
  }
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyInterviewService, decorators: [{
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyInterviewService, decorators: [{
63
63
  type: Injectable,
64
64
  args: [{
65
65
  providedIn: 'root'
@@ -14,7 +14,8 @@ export class TpSurveyLogicService {
14
14
  }
15
15
  executeLogic(expression) {
16
16
  try {
17
- return !expression ? true : new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(this.#vars);
17
+ const textExpression = typeof expression !== 'string' ? '' : expression.trim();
18
+ return !textExpression ? true : new Function(`${LOGIC_FUNC_TEXT} return ${textExpression}`).call(this.#vars);
18
19
  }
19
20
  catch (e) {
20
21
  return false;
@@ -22,22 +23,20 @@ export class TpSurveyLogicService {
22
23
  }
23
24
  executePostScript(expression) {
24
25
  try {
25
- if (!expression) {
26
- return;
27
- }
28
- new Function(`${LOGIC_FUNC_TEXT} ${expression}`).call(this.#vars);
26
+ const textExpression = typeof expression !== 'string' ? '' : expression.trim();
27
+ new Function(`${LOGIC_FUNC_TEXT} ${textExpression}`).call(this.#vars);
29
28
  }
30
29
  catch (e) {
31
30
  console.log(e);
32
31
  }
33
32
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyLogicService, providedIn: 'root' }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyLogicService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyLogicService, providedIn: 'root' }); }
36
35
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: TpSurveyLogicService, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: TpSurveyLogicService, decorators: [{
38
37
  type: Injectable,
39
38
  args: [{
40
39
  providedIn: 'root'
41
40
  }]
42
41
  }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAuc3VydmV5LmxvZ2ljLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cC5zdXJ2ZXkvc3JjL2xpYi9jb3JlL3RwLnN1cnZleS5sb2dpYy90cC5zdXJ2ZXkubG9naWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNdEQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixLQUFLLEdBQWdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZSxFQUFFLEtBQVU7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFrQjtRQUM3QixJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFFLElBQUksUUFBUSxDQUFDLEdBQUcsZUFBZSxXQUFXLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUFrQjtRQUNsQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxFQUFHLENBQUM7Z0JBQ2pCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxRQUFRLENBQUMsR0FBRyxlQUFlLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQzs4R0FoQ1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TE9HSUNfRlVOQ19URVhUfSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkuY29uc3QnO1xyXG5pbXBvcnQge0xvZ2ljT2JqZWN0fSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkudHlwZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcFN1cnZleUxvZ2ljU2VydmljZSB7XHJcbiAgI3ZhcnM6IExvZ2ljT2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuXHJcbiAgZ2V0IHZhcnMoKTogb2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLiN2YXJzO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9naWNWYWx1ZSh2YXJOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuI3ZhcnNbdmFyTmFtZV0gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldExvZ2ljVmFycygpOiBMb2dpY09iamVjdHtcclxuICAgIHJldHVybiB7Li4udGhpcy4jdmFyc307XHJcbiAgfVxyXG5cclxuICBleGVjdXRlTG9naWMoZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gIWV4cHJlc3Npb24gPyB0cnVlIDogIG5ldyBGdW5jdGlvbihgJHtMT0dJQ19GVU5DX1RFWFR9IHJldHVybiAke2V4cHJlc3Npb259YCkuY2FsbCh0aGlzLiN2YXJzKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZVBvc3RTY3JpcHQoZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIWV4cHJlc3Npb24gKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIG5ldyBGdW5jdGlvbihgJHtMT0dJQ19GVU5DX1RFWFR9ICR7ZXhwcmVzc2lvbn1gKS5jYWxsKHRoaXMuI3ZhcnMpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAuc3VydmV5LmxvZ2ljLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cC5zdXJ2ZXkvc3JjL2xpYi9jb3JlL3RwLnN1cnZleS5sb2dpYy90cC5zdXJ2ZXkubG9naWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7QUFNdEQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixLQUFLLEdBQWdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZSxFQUFFLEtBQVU7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQVksQ0FBQyxVQUFtQjtRQUM5QixJQUFJLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9FLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsSUFBSSxRQUFRLENBQUMsR0FBRyxlQUFlLFdBQVcsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQW1CO1FBQ25DLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0UsSUFBSSxRQUFRLENBQUMsR0FBRyxlQUFlLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQzs4R0EvQlUsb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TE9HSUNfRlVOQ19URVhUfSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkuY29uc3QnO1xyXG5pbXBvcnQge0xvZ2ljT2JqZWN0fSBmcm9tICcuLi8uLi90cC5zdXJ2ZXkudHlwZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcFN1cnZleUxvZ2ljU2VydmljZSB7XHJcbiAgI3ZhcnM6IExvZ2ljT2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuXHJcbiAgZ2V0IHZhcnMoKTogb2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLiN2YXJzO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9naWNWYWx1ZSh2YXJOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuI3ZhcnNbdmFyTmFtZV0gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldExvZ2ljVmFycygpOiBMb2dpY09iamVjdHtcclxuICAgIHJldHVybiB7Li4udGhpcy4jdmFyc307XHJcbiAgfVxyXG5cclxuICBleGVjdXRlTG9naWMoZXhwcmVzc2lvbj86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdGV4dEV4cHJlc3Npb24gPSB0eXBlb2YgZXhwcmVzc2lvbiAhPT0gJ3N0cmluZycgPyAnJyA6IGV4cHJlc3Npb24udHJpbSgpO1xyXG4gICAgICByZXR1cm4gIXRleHRFeHByZXNzaW9uID8gdHJ1ZSA6ICBuZXcgRnVuY3Rpb24oYCR7TE9HSUNfRlVOQ19URVhUfSByZXR1cm4gJHt0ZXh0RXhwcmVzc2lvbn1gKS5jYWxsKHRoaXMuI3ZhcnMpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleGVjdXRlUG9zdFNjcmlwdChleHByZXNzaW9uPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB0ZXh0RXhwcmVzc2lvbiA9IHR5cGVvZiBleHByZXNzaW9uICE9PSAnc3RyaW5nJyA/ICcnIDogZXhwcmVzc2lvbi50cmltKCk7XHJcbiAgICAgIG5ldyBGdW5jdGlvbihgJHtMT0dJQ19GVU5DX1RFWFR9ICR7dGV4dEV4cHJlc3Npb259YCkuY2FsbCh0aGlzLiN2YXJzKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -114,10 +114,10 @@ export class AlternativesContainerDirective {
114
114
  });
115
115
  }
116
116
  }
117
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AlternativesContainerDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive }); }
118
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: AlternativesContainerDirective, isStandalone: true, selector: "[tpSurveyAlternativesContainer]", inputs: { question: { classPropertyName: "question", publicName: "tpSurveyAlternativesContainer", isSignal: true, isRequired: true, transformFunction: null }, viewModel: { classPropertyName: "viewModel", publicName: "containerViewModel", isSignal: true, isRequired: true, transformFunction: null } }, queries: [{ propertyName: "alternatives", predicate: ["tablet_alt"], read: ElementRef }], ngImport: i0 }); }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AlternativesContainerDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive }); }
118
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: AlternativesContainerDirective, isStandalone: true, selector: "[tpSurveyAlternativesContainer]", inputs: { question: { classPropertyName: "question", publicName: "tpSurveyAlternativesContainer", isSignal: true, isRequired: true, transformFunction: null }, viewModel: { classPropertyName: "viewModel", publicName: "containerViewModel", isSignal: true, isRequired: true, transformFunction: null } }, queries: [{ propertyName: "alternatives", predicate: ["tablet_alt"], read: ElementRef }], ngImport: i0 }); }
119
119
  }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AlternativesContainerDirective, decorators: [{
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: AlternativesContainerDirective, decorators: [{
121
121
  type: Directive,
122
122
  args: [{
123
123
  selector: '[tpSurveyAlternativesContainer]',
@@ -14,10 +14,10 @@ export class FocusAndSelectDirective {
14
14
  input.select();
15
15
  }
16
16
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: FocusAndSelectDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
18
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.6", type: FocusAndSelectDirective, isStandalone: true, selector: "[tpSurveyFocusAndSelect]", ngImport: i0 }); }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: FocusAndSelectDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
18
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: FocusAndSelectDirective, isStandalone: true, selector: "[tpSurveyFocusAndSelect]", ngImport: i0 }); }
19
19
  }
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: FocusAndSelectDirective, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: FocusAndSelectDirective, decorators: [{
21
21
  type: Directive,
22
22
  args: [{
23
23
  selector: '[tpSurveyFocusAndSelect]',
@@ -22,10 +22,10 @@ export class SurveyThemeDirective {
22
22
  get classAzureBlueDark() {
23
23
  return this.theme() === 'azure-blue-dark';
24
24
  }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SurveyThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
26
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: SurveyThemeDirective, isStandalone: true, selector: "[tpSurveyTheme]", inputs: { theme: { classPropertyName: "theme", publicName: "tpSurveyTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.survey-theme-cyan-orange-light": "this.classCyanOrangeLight", "class.survey-theme-cyan-orange-dark": "this.classCyanOrangeDark", "class.survey-theme-rose-red-light": "this.classRoseRedLight", "class.survey-theme-rose-red-dark": "this.classRoseRedDark", "class.survey-theme-azure-blue-light": "this.classAzureBlueLight", "class.survey-theme-azure-blue-dark": "this.classAzureBlueDark" } }, ngImport: i0 }); }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SurveyThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
26
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: SurveyThemeDirective, isStandalone: true, selector: "[tpSurveyTheme]", inputs: { theme: { classPropertyName: "theme", publicName: "tpSurveyTheme", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.survey-theme-cyan-orange-light": "this.classCyanOrangeLight", "class.survey-theme-cyan-orange-dark": "this.classCyanOrangeDark", "class.survey-theme-rose-red-light": "this.classRoseRedLight", "class.survey-theme-rose-red-dark": "this.classRoseRedDark", "class.survey-theme-azure-blue-light": "this.classAzureBlueLight", "class.survey-theme-azure-blue-dark": "this.classAzureBlueDark" } }, ngImport: i0 }); }
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: SurveyThemeDirective, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: SurveyThemeDirective, decorators: [{
29
29
  type: Directive,
30
30
  args: [{
31
31
  selector: '[tpSurveyTheme]',
@@ -15,10 +15,10 @@ export class UpdateFontSizeDirective {
15
15
  }
16
16
  });
17
17
  }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: UpdateFontSizeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
19
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.6", type: UpdateFontSizeDirective, isStandalone: true, selector: "[tpSurveyUpdateFontSize]", inputs: { viewModel: { classPropertyName: "viewModel", publicName: "tpSurveyUpdateFontSize", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: UpdateFontSizeDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
19
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.1", type: UpdateFontSizeDirective, isStandalone: true, selector: "[tpSurveyUpdateFontSize]", inputs: { viewModel: { classPropertyName: "viewModel", publicName: "tpSurveyUpdateFontSize", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: UpdateFontSizeDirective, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: UpdateFontSizeDirective, decorators: [{
22
22
  type: Directive,
23
23
  args: [{
24
24
  selector: '[tpSurveyUpdateFontSize]',
@@ -14,11 +14,11 @@ export class DefaultIconsModule {
14
14
  this.matIconRegistry.addSvgIconLiteral(name, this.domSanitizer.bypassSecurityTrustHtml(iconText));
15
15
  }
16
16
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultIconsModule, deps: [{ token: i1.DomSanitizer }, { token: i2.MatIconRegistry }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.NgModule }); }
18
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: DefaultIconsModule }); }
19
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultIconsModule }); }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DefaultIconsModule, deps: [{ token: i1.DomSanitizer }, { token: i2.MatIconRegistry }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.NgModule }); }
18
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: DefaultIconsModule }); }
19
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DefaultIconsModule }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: DefaultIconsModule, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DefaultIconsModule, decorators: [{
22
22
  type: NgModule,
23
23
  args: [{
24
24
  declarations: [],
@@ -4,10 +4,10 @@ export class GetActiveLanguagePipe {
4
4
  transform(languageList, languageId) {
5
5
  return Array.isArray(languageList) ? languageList.find(langObj => langObj.Value === languageId && langObj.isActive) : undefined;
6
6
  }
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: GetActiveLanguagePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: GetActiveLanguagePipe, isStandalone: true, name: "getActiveLanguage" }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: GetActiveLanguagePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: GetActiveLanguagePipe, isStandalone: true, name: "getActiveLanguage" }); }
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: GetActiveLanguagePipe, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: GetActiveLanguagePipe, decorators: [{
11
11
  type: Pipe,
12
12
  args: [{
13
13
  name: 'getActiveLanguage',
@@ -5,10 +5,10 @@ export class GetAdditionalValueByValuePipe {
5
5
  const val = (typeof value === 'string') ? Number(value) : value;
6
6
  return additionalAnswerList.find(aa => aa.Value === val);
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: GetAdditionalValueByValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: GetAdditionalValueByValuePipe, isStandalone: true, name: "getAdditionalValueByValue" }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: GetAdditionalValueByValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
9
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: GetAdditionalValueByValuePipe, isStandalone: true, name: "getAdditionalValueByValue" }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: GetAdditionalValueByValuePipe, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: GetAdditionalValueByValuePipe, decorators: [{
12
12
  type: Pipe,
13
13
  args: [{
14
14
  name: 'getAdditionalValueByValue',
@@ -7,10 +7,10 @@ export class KeyValuesPipe {
7
7
  control: control,
8
8
  }));
9
9
  }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: KeyValuesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
11
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: KeyValuesPipe, isStandalone: true, name: "keyValues" }); }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: KeyValuesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
11
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: KeyValuesPipe, isStandalone: true, name: "keyValues" }); }
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: KeyValuesPipe, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: KeyValuesPipe, decorators: [{
14
14
  type: Pipe,
15
15
  args: [{
16
16
  name: 'keyValues',