survery-lib 0.1.59 → 0.2.1

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 (57) hide show
  1. package/README.md +52 -52
  2. package/assets/style.css +398 -398
  3. package/esm2022/lib/components/question-boolean-template/question-boolean-template.component.mjs +59 -54
  4. package/esm2022/lib/components/question-cascade-template/question-cascade-template.component.mjs +46 -20
  5. package/esm2022/lib/components/question-check-box-template/question-check-box-template.component.mjs +65 -55
  6. package/esm2022/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.mjs +62 -52
  7. package/esm2022/lib/components/question-dropdown-template/question-dropdown-template.component.mjs +54 -36
  8. package/esm2022/lib/components/question-matrix-template/question-matrix-template.component.mjs +67 -55
  9. package/esm2022/lib/components/question-radio-button-template/question-radio-button-template.component.mjs +62 -52
  10. package/esm2022/lib/components/question-text-template/question-text-template.component.mjs +77 -69
  11. package/esm2022/lib/core/states/entites/question-group.entity.mjs +8 -0
  12. package/esm2022/lib/core/states/entites/question.entity.mjs +8 -0
  13. package/esm2022/lib/core/states/entites/rule.entity.mjs +8 -0
  14. package/esm2022/lib/core/states/survey-store/question-group.selector.mjs +9 -0
  15. package/esm2022/lib/core/states/survey-store/question.selector.mjs +22 -0
  16. package/esm2022/lib/core/states/survey-store/survey.action.mjs +18 -0
  17. package/esm2022/lib/core/states/survey-store/survey.reducer.mjs +102 -0
  18. package/esm2022/lib/core/states/survey-store/survey.selector.mjs +33 -0
  19. package/esm2022/lib/directives/masked-for-min-max.directive.mjs +9 -6
  20. package/esm2022/lib/pipes/default-question-answer.pipe.mjs +1 -1
  21. package/esm2022/lib/pipes/default-question-answers.pipe.mjs +1 -1
  22. package/esm2022/lib/pipes/filter-question.pipe.mjs +3 -3
  23. package/esm2022/lib/pipes/find-question.pipe.mjs +19 -0
  24. package/esm2022/lib/pipes/text-box-type-attr.pipe.mjs +1 -1
  25. package/esm2022/lib/services/api.service.mjs +1 -1
  26. package/esm2022/lib/services/survey-lib.service.mjs +100 -51
  27. package/esm2022/lib/survery-lib.component.mjs +80 -285
  28. package/esm2022/lib/survery-lib.module.mjs +21 -7
  29. package/esm2022/lib/usecases/check-rule-exps.usecase.mjs +1 -1
  30. package/esm2022/public-api.mjs +1 -1
  31. package/esm2022/shared/form-interfaces/survery-lib.form-interface.mjs +1 -1
  32. package/fesm2022/survery-lib.mjs +840 -714
  33. package/fesm2022/survery-lib.mjs.map +1 -1
  34. package/lib/components/question-boolean-template/question-boolean-template.component.d.ts +7 -6
  35. package/lib/components/question-cascade-template/question-cascade-template.component.d.ts +9 -6
  36. package/lib/components/question-check-box-template/question-check-box-template.component.d.ts +7 -6
  37. package/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.d.ts +6 -6
  38. package/lib/components/question-dropdown-template/question-dropdown-template.component.d.ts +5 -2
  39. package/lib/components/question-matrix-template/question-matrix-template.component.d.ts +7 -6
  40. package/lib/components/question-radio-button-template/question-radio-button-template.component.d.ts +7 -6
  41. package/lib/components/question-text-template/question-text-template.component.d.ts +8 -7
  42. package/lib/core/states/entites/question-group.entity.d.ts +11 -0
  43. package/lib/core/states/entites/question.entity.d.ts +27 -0
  44. package/lib/core/states/entites/rule.entity.d.ts +8 -0
  45. package/lib/core/states/survey-store/question-group.selector.d.ts +4 -0
  46. package/lib/core/states/survey-store/question.selector.d.ts +7 -0
  47. package/lib/core/states/survey-store/survey.action.d.ts +54 -0
  48. package/lib/core/states/survey-store/survey.reducer.d.ts +12 -0
  49. package/lib/core/states/survey-store/survey.selector.d.ts +9 -0
  50. package/lib/pipes/filter-question.pipe.d.ts +2 -3
  51. package/lib/pipes/find-question.pipe.d.ts +8 -0
  52. package/lib/services/survey-lib.service.d.ts +4 -32
  53. package/lib/survery-lib.component.d.ts +15 -23
  54. package/lib/survery-lib.module.d.ts +9 -6
  55. package/lib/usecases/check-rule-exps.usecase.d.ts +2 -3
  56. package/package.json +1 -1
  57. package/shared/form-interfaces/survery-lib.form-interface.d.ts +3 -3
@@ -1,22 +1,28 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { QuestionTypeEnum } from '../shared/enums/question-type.enum';
3
3
  import { v4 as guidGenerator } from 'uuid';
4
- import { debounceTime, distinctUntilChanged } from 'rxjs';
5
- import { LogicActionEnum } from '../shared/enums/logic-action.enum';
4
+ import { map, take } from 'rxjs';
5
+ import { FormControl } from '@angular/forms';
6
6
  import { InputTypeEnum } from '../shared/enums/input-type.enum';
7
+ import { surveySelectors } from './core/states/survey-store/survey.selector';
8
+ import { questionGroupSelectors } from './core/states/survey-store/question-group.selector';
9
+ import { questionSelectors } from './core/states/survey-store/question.selector';
10
+ import { surveyActions } from './core/states/survey-store/survey.action';
7
11
  import * as i0 from "@angular/core";
8
12
  import * as i1 from "./services/survey-lib.service";
9
- import * as i2 from "@ng-stack/forms";
10
- import * as i3 from "./usecases/check-rule-exps.usecase";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "./components/question-text-template/question-text-template.component";
13
- import * as i6 from "./components/question-radio-button-template/question-radio-button-template.component";
14
- import * as i7 from "./components/question-check-box-template/question-check-box-template.component";
15
- import * as i8 from "./components/question-dropdown-template/question-dropdown-template.component";
16
- import * as i9 from "./components/question-matrix-template/question-matrix-template.component";
17
- import * as i10 from "./components/question-boolean-template/question-boolean-template.component";
18
- import * as i11 from "./components/question-dropdown-multi-template/question-dropdown-multi-template.component";
19
- import * as i12 from "./components/question-cascade-template/question-cascade-template.component";
13
+ import * as i2 from "@ngrx/store";
14
+ import * as i3 from "@angular/forms";
15
+ import * as i4 from "./usecases/check-rule-exps.usecase";
16
+ import * as i5 from "@angular/common";
17
+ import * as i6 from "./components/question-text-template/question-text-template.component";
18
+ import * as i7 from "./components/question-radio-button-template/question-radio-button-template.component";
19
+ import * as i8 from "./components/question-check-box-template/question-check-box-template.component";
20
+ import * as i9 from "./components/question-dropdown-template/question-dropdown-template.component";
21
+ import * as i10 from "./components/question-matrix-template/question-matrix-template.component";
22
+ import * as i11 from "./components/question-boolean-template/question-boolean-template.component";
23
+ import * as i12 from "./components/question-dropdown-multi-template/question-dropdown-multi-template.component";
24
+ import * as i13 from "./components/question-cascade-template/question-cascade-template.component";
25
+ import * as i14 from "./pipes/filter-question.pipe";
20
26
  export class SurveryLibComponent {
21
27
  get fCtrls() {
22
28
  return this.rForm.controls;
@@ -24,55 +30,25 @@ export class SurveryLibComponent {
24
30
  get questionTypeEnum() {
25
31
  return QuestionTypeEnum;
26
32
  }
27
- get isFirstPage() {
28
- if (this.showedSurveyPages.length > 0) {
29
- return this.showedSurveyPages.findIndex(x => x == this.fCtrls.currentPageIndex.value) == 0;
30
- }
31
- return true;
32
- }
33
- get isLastPage() {
34
- return this.showedSurveyPages.findIndex(x => x == this.fCtrls.currentPageIndex.value) == (this.showedSurveyPages.length - 1);
35
- }
36
- get showedSurveyPages() {
37
- var pageArr = [];
38
- for (let index = 0; index < this.fCtrls.questionArray.value.length; index++) {
39
- const question = this.fCtrls.questionArray.value[index];
40
- if (question.isShow == true) {
41
- if (question.questionType != this.questionTypeEnum.Matrix) {
42
- pageArr.push(question.surveyPageIndex);
43
- }
44
- else if (question.questionType == this.questionTypeEnum.Matrix && question.isMatrixGroup == true) {
45
- pageArr.push(question.surveyPageIndex);
46
- }
47
- }
48
- }
49
- const distinctArray = pageArr.filter((n, i) => pageArr.indexOf(n) === i);
50
- return distinctArray.sort((a, b) => a - b);
51
- }
52
- get curruntShowedSurveyPages() {
53
- return this.showedSurveyPages.findIndex(x => x == this.fCtrls.currentPageIndex.value) + 1;
54
- }
55
33
  get surveyResult() {
56
34
  return {
57
- currentPageIndex: this.fCtrls.currentPageIndex.value,
58
- answers: this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true).map(x => {
59
- return {
60
- SurveyPageIndex: x.surveyPageIndex,
61
- QuestionId: x.questionId,
62
- QuestionType: x.questionType,
63
- AnswerId: x.answerId,
64
- AnswerText: x.answerText,
65
- AnswerIdArr: x.answerIdArr
66
- };
67
- })
35
+ currentPageIndex: this.fCtrls.currentPageId.value,
36
+ answers: this.questionAnswerArr
68
37
  };
69
38
  }
70
- constructor(_surveyLibService, _formBuilder, _checkRuleExpsUsecase) {
39
+ constructor(_surveyLibService, _Store, _formBuilder, _checkRuleExpsUsecase) {
71
40
  this._surveyLibService = _surveyLibService;
41
+ this._Store = _Store;
72
42
  this._formBuilder = _formBuilder;
73
43
  this._checkRuleExpsUsecase = _checkRuleExpsUsecase;
74
44
  this.surveryLibraryDivId = guidGenerator();
75
45
  this.reloadDefaultAnswerId = guidGenerator();
46
+ this.questionAnswerArr = [];
47
+ this.pageQuestionGroups$ = this._Store.select(questionGroupSelectors.pageQuestionGroups);
48
+ this.pageQuestions$ = this._Store.select(questionSelectors.pageQuestions);
49
+ this.isFirstPage$ = this._Store.select(surveySelectors.isFirstPage);
50
+ this.isLastPage$ = this._Store.select(surveySelectors.isLastPage);
51
+ this.curruntShowedSurveyPages$ = this._Store.select(surveySelectors.selectedPageIndex).pipe(map(x => x + 1));
76
52
  this.isPre = false;
77
53
  this.surveyLanguageId = null;
78
54
  this.applicantKey = null;
@@ -80,119 +56,59 @@ export class SurveryLibComponent {
80
56
  this.surveyResultEmit = new EventEmitter();
81
57
  this.selectLanguageEmit = new EventEmitter();
82
58
  this.rForm = this._formBuilder.group({
83
- currentPageIndex: [0],
84
- questionArray: this._formBuilder.array([]),
85
- ruleQuestionArray: this._formBuilder.array([])
59
+ currentPageId: new FormControl(0),
60
+ showedSurveyPages: new FormControl([])
61
+ });
62
+ this._Store.select(questionSelectors.questionAnswers).subscribe(arr => {
63
+ this.questionAnswerArr = arr;
86
64
  });
87
65
  }
88
66
  ngAfterViewInit() {
89
67
  }
68
+ questionIdentify(index, item) {
69
+ return item.questionId;
70
+ }
90
71
  ngOnInit() {
91
- this._surveyLibService.surveyDataObsrv.pipe(debounceTime(300), distinctUntilChanged()).subscribe(survey => {
92
- this.fCtrls.questionArray.clear();
93
- this.fCtrls.ruleQuestionArray.clear();
94
- this.surveyData = null;
95
- if (survey != null) {
96
- this.surveyData = survey;
97
- this.loadQuestions(survey);
98
- }
72
+ this._Store.select(surveySelectors.selectedPageId).subscribe(value => {
73
+ this.fCtrls.currentPageId.setValue(value);
99
74
  });
100
- this._surveyLibService.addQuestionObsrv.subscribe(res => {
101
- this.addQuestionGroup(res.question, res.pageIndex);
102
- });
103
- this._surveyLibService.removeQuestionObsrv.subscribe(res => {
104
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == res.questionId);
105
- this.fCtrls.questionArray.removeAt(index);
75
+ this._Store.select(surveySelectors.showedSurveyPages).subscribe(value => {
76
+ this.fCtrls.showedSurveyPages.setValue(value);
106
77
  });
107
78
  }
108
79
  onPaggingNext() {
109
- var invalidRecords = this.haveInValidateQuestions();
110
- if (invalidRecords.length == 0) {
111
- const nextPageIndex = this.getNextShowedPage();
112
- if (nextPageIndex != null) {
113
- this.fCtrls.currentPageIndex.setValue(nextPageIndex);
114
- setTimeout(() => {
115
- this.loadQuestionUpdates(nextPageIndex);
116
- });
117
- $('html, body').animate({
118
- scrollTop: $(`#survery-card-${this.surveryLibraryDivId}`).offset().top - 120
119
- }, 2000);
80
+ this._Store.select(questionSelectors.pageQuestions).pipe(take(1)).subscribe(arr => {
81
+ var invalidRecords = this.haveInValidateQuestions(arr);
82
+ if (invalidRecords.length == 0) {
83
+ const nextPageId = this.getNextShowedPage();
84
+ if (nextPageId != null) {
85
+ this._Store.dispatch(surveyActions.updatePageId({ pageId: nextPageId }));
86
+ $('html, body').animate({
87
+ scrollTop: $(`#survery-card-${this.surveryLibraryDivId}`).offset().top - 30
88
+ }, 300);
89
+ }
90
+ else {
91
+ this.surveyResultEmit.emit(this.questionAnswerArr);
92
+ }
120
93
  }
121
94
  else {
122
- var questionArr = this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true).map(x => {
123
- return {
124
- SurveyPageIndex: x.surveyPageIndex,
125
- QuestionId: x.questionId,
126
- QuestionType: x.questionType,
127
- AnswerId: x.answerId,
128
- AnswerText: x.answerText,
129
- AnswerIdArr: x.answerIdArr
130
- };
131
- });
132
- this.surveyResultEmit.emit(questionArr);
95
+ var firstQuestion = $('.invalid-question')[0];
96
+ $('html, body').animate({
97
+ scrollTop: $(firstQuestion).offset().top - 250
98
+ }, 300);
133
99
  }
134
- }
135
- else {
136
- var firstQuestion = invalidRecords[0];
137
- $('html, body').animate({
138
- scrollTop: $(`#question_${firstQuestion.questionId}`).offset().top - 120
139
- }, 2000);
140
- }
141
- }
142
- onPaggingBack() {
143
- const prevPageIndex = this.getPrevShowedPage();
144
- if (prevPageIndex != null) {
145
- this.fCtrls.currentPageIndex.setValue(prevPageIndex);
146
- }
147
- }
148
- onUpdateAnswers(model) {
149
- model.forEach(elem => {
150
- this.onUpdateAnswer(elem);
151
100
  });
152
101
  }
153
- onUpdateAnswer(model) {
154
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == model.QuestionId);
155
- if (index > -1) {
156
- var questionGroup = this.fCtrls.questionArray.controls[index];
157
- questionGroup.controls.isValid.setValue(model.IsValid);
158
- if (questionGroup.value.questionType == this.questionTypeEnum.TextInput) {
159
- questionGroup.patchValue({
160
- answerId: model.SurveyAnswerId,
161
- answerText: model.Answer
162
- });
163
- }
164
- else if (questionGroup.value.questionType == this.questionTypeEnum.CheckBox || questionGroup.value.questionType == this.questionTypeEnum.DropDownMulti) {
165
- questionGroup.controls.answerIdArr.setValue(model.Answer);
166
- }
167
- else {
168
- questionGroup.controls.answerId.setValue(model.Answer);
169
- }
170
- if (this.fCtrls.ruleQuestionArray.value.findIndex(x => x.questionId == model.QuestionId) > -1) {
171
- this.checkRules(questionGroup.value.questionId);
172
- }
102
+ onPaggingBack() {
103
+ const prevPageId = this.getPrevShowedPage();
104
+ if (prevPageId != null) {
105
+ this._Store.dispatch(surveyActions.updatePageId({ pageId: prevPageId }));
173
106
  }
174
107
  }
175
- loadQuestions(survey) {
176
- survey.surveyPages.forEach((page, pageIndex) => {
177
- page.surveyQuestionGroups.forEach(group => {
178
- group.surveyQuestions.forEach(question => {
179
- this.addQuestionGroup(question, pageIndex);
180
- });
181
- });
182
- });
183
- survey.surveyRules.forEach(rule => {
184
- rule.ruleExps.forEach(ruleExp => {
185
- this.fCtrls.ruleQuestionArray.push(this._formBuilder.group({
186
- questionId: ruleExp.questionId,
187
- ruleId: rule.ruleId
188
- }));
189
- });
190
- });
191
- }
192
- haveInValidateQuestions() {
193
- const currentPageIndex = this.fCtrls.currentPageIndex.value;
108
+ haveInValidateQuestions(questionArr) {
109
+ const formValue = this.rForm.value;
194
110
  var invalidRecords = [];
195
- var arr = this.fCtrls.questionArray.value.filter(x => x.surveyPageIndex == currentPageIndex && x.isDisabled == false && x.isShow == true);
111
+ var arr = questionArr.filter(x => x.isDisabled == false && x.isShow == true);
196
112
  arr.map(x => {
197
113
  if (x.isRequired == true && x.isValid != true && x.isMatrixGroup != true) {
198
114
  invalidRecords.push(x);
@@ -206,159 +122,38 @@ export class SurveryLibComponent {
206
122
  }
207
123
  });
208
124
  if (invalidRecords.length > 0) {
209
- $(`#survey-page_${currentPageIndex}`).addClass('survey-page_submitted');
125
+ $(`#survey-page_${formValue.currentPageId}`).addClass('survey-page_submitted');
126
+ }
127
+ else {
128
+ $(`#survey-page_${formValue.currentPageId}`).removeClass('survey-page_submitted');
210
129
  }
211
130
  return invalidRecords;
212
131
  }
213
- checkRules(questionId) {
214
- var selectedRuleIdArr = this.rForm.value.ruleQuestionArray.filter(x => x.questionId == questionId).map(x => Number(x.ruleId));
215
- var arr = this.surveyData.surveyRules.filter(x => selectedRuleIdArr.find(c => c == x.ruleId) != null);
216
- arr.forEach(rule => {
217
- this._checkRuleExpsUsecase.execute({
218
- ruleExps: rule.ruleExps,
219
- questions: this.fCtrls.questionArray.value,
220
- currentPageIndex: this.fCtrls.currentPageIndex.value
221
- }).subscribe(result => {
222
- var isPassed = result.exprestionResultArr.filter(x => x == false).length == 0;
223
- if (isPassed) {
224
- rule.ruleResultQuestions.forEach(resultQuestion => {
225
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
226
- var questionGroup = this.fCtrls.questionArray.at(index);
227
- if (rule.logicActionId == LogicActionEnum.Show) {
228
- questionGroup.controls.isShow.setValue(true);
229
- this._surveyLibService.setQuestionIsShow(questionGroup.value.questionId, true);
230
- }
231
- else if (rule.logicActionId == LogicActionEnum.Hide) {
232
- questionGroup.controls.isShow.setValue(false);
233
- this._surveyLibService.setQuestionIsShow(questionGroup.value.questionId, false);
234
- }
235
- else if (rule.logicActionId == LogicActionEnum.Enable) {
236
- questionGroup.controls.isDisabled.setValue(false);
237
- this._surveyLibService.setQuestionIsDisabled(questionGroup.value.questionId, false);
238
- }
239
- else if (rule.logicActionId == LogicActionEnum.Disable) {
240
- questionGroup.controls.isDisabled.setValue(true);
241
- this._surveyLibService.setQuestionIsDisabled(questionGroup.value.questionId, true);
242
- }
243
- else if (rule.logicActionId == LogicActionEnum.SetAnswer) {
244
- }
245
- if (questionGroup.value.questionType == QuestionTypeEnum.Matrix && questionGroup.value.isMatrixGroup == true) {
246
- var subQuestions = this.fCtrls.questionArray.value.filter(x => x.surveyPageIndex == questionGroup.value.surveyPageIndex && x.isMatrixGroup == false);
247
- subQuestions.forEach(subQuestion => {
248
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == subQuestion.questionId);
249
- var subQuestionGroup = this.fCtrls.questionArray.at(index);
250
- subQuestionGroup.patchValue({
251
- isShow: questionGroup.value.isShow,
252
- isDisabled: questionGroup.value.isDisabled
253
- });
254
- this._surveyLibService.setQuestionIsDisabled(subQuestion.questionId, subQuestion.isDisabled);
255
- this._surveyLibService.setQuestionIsShow(subQuestion.questionId, subQuestion.isShow);
256
- });
257
- }
258
- });
259
- }
260
- else {
261
- rule.ruleResultQuestions.forEach(resultQuestion => {
262
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
263
- var questionGroup = this.fCtrls.questionArray.at(index);
264
- questionGroup.patchValue({
265
- isShow: questionGroup.value.isShow_default,
266
- isDisabled: questionGroup.value.isDisabled_default
267
- });
268
- this._surveyLibService.setQuestionIsDisabled(questionGroup.value.questionId, questionGroup.value.isDisabled_default);
269
- this._surveyLibService.setQuestionIsShow(questionGroup.value.questionId, questionGroup.value.isShow_default);
270
- });
271
- }
272
- });
273
- });
274
- }
275
132
  getNextShowedPage() {
276
- var currentPageIndex = this.fCtrls.currentPageIndex.value;
277
- var showedPages = this.showedSurveyPages;
278
- var nextShowedPages = showedPages.filter(x => x > currentPageIndex);
133
+ const formValue = this.rForm.value;
134
+ var showedPages = formValue.showedSurveyPages;
135
+ var nextShowedPages = showedPages.filter(x => x > formValue.currentPageId);
279
136
  if (nextShowedPages.length > 0) {
280
137
  return nextShowedPages[0];
281
138
  }
282
139
  return null;
283
140
  }
284
141
  getPrevShowedPage() {
285
- var currentPageIndex = this.fCtrls.currentPageIndex.value;
286
- var showedPages = this.showedSurveyPages;
287
- var prevShowedPages = showedPages.filter(x => x < currentPageIndex);
142
+ const formValue = this.rForm.value;
143
+ var showedPages = formValue.showedSurveyPages;
144
+ var prevShowedPages = showedPages.filter(x => x < formValue.currentPageId);
288
145
  if (prevShowedPages.length > 0) {
289
146
  return prevShowedPages[prevShowedPages.length - 1];
290
147
  }
291
148
  return null;
292
149
  }
293
- addQuestionGroup(question, pageIndex) {
294
- if (question.questionTypeId != 6) {
295
- this.fCtrls.questionArray.push(this._formBuilder.group({
296
- surveyPageIndex: pageIndex,
297
- questionId: [question.questionId],
298
- questionType: [question.questionTypeId],
299
- inputTypeId: [question.surveyAnswers[0].inputTypeId],
300
- isMatrixGroup: [false],
301
- answerId: [null],
302
- answerIdArr: [null],
303
- answerText: [null],
304
- isRequired: [question.isRequired],
305
- isValid: [null],
306
- isDisabled: [question.isReadOnly],
307
- isShow: [question.isVisable],
308
- isDisabled_default: [question.isReadOnly],
309
- isShow_default: [question.isVisable]
310
- }));
311
- }
312
- else {
313
- this.fCtrls.questionArray.push(this._formBuilder.group({
314
- surveyPageIndex: pageIndex,
315
- questionId: [question.questionId],
316
- questionType: [question.questionTypeId],
317
- inputTypeId: [question.surveyAnswers[0].inputTypeId],
318
- isMatrixGroup: [true],
319
- answerId: [null],
320
- answerIdArr: [null],
321
- answerText: [null],
322
- isRequired: [question.isRequired],
323
- isValid: [null],
324
- isDisabled: [question.isReadOnly],
325
- isShow: [question.isVisable],
326
- isDisabled_default: [question.isReadOnly],
327
- isShow_default: [question.isVisable],
328
- }));
329
- question.surveySubQuestions.forEach(subQuestion => {
330
- this.fCtrls.questionArray.push(this._formBuilder.group({
331
- surveyPageIndex: pageIndex,
332
- questionId: [subQuestion.questionId],
333
- questionType: [question.questionTypeId],
334
- inputTypeId: [question.surveyAnswers[0].inputTypeId],
335
- isMatrixGroup: [false],
336
- answerId: [null],
337
- answerIdArr: [null],
338
- answerText: [null],
339
- isRequired: [question.isRequired],
340
- isValid: [null],
341
- isDisabled: [question.isReadOnly],
342
- isShow: [question.isVisable],
343
- isDisabled_default: [question.isReadOnly],
344
- isShow_default: [question.isVisable]
345
- }));
346
- });
347
- }
348
- }
349
- loadQuestionUpdates(pageIndex) {
350
- this.fCtrls.questionArray.value.filter(x => x.surveyPageIndex == pageIndex).forEach(question => {
351
- this._surveyLibService.setQuestionIsShow(question.questionId, question.isShow);
352
- this._surveyLibService.setQuestionIsDisabled(question.questionId, question.isDisabled);
353
- });
354
- }
355
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibComponent, deps: [{ token: i1.SurveyLibService }, { token: i2.FormBuilder }, { token: i3.CheckRuleExpsUsecase }], target: i0.ɵɵFactoryTarget.Component }); }
356
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SurveryLibComponent, selector: "lib-survery-lib", inputs: { isPre: "isPre", surveyLanguageId: "surveyLanguageId", applicantKey: "applicantKey", isArabicLang: "isArabicLang" }, outputs: { surveyResultEmit: "surveyResultEmit", selectLanguageEmit: "selectLanguageEmit" }, ngImport: i0, template: "<div id=\"survery-card-{{surveryLibraryDivId}}\" class=\"survay-card\">\r\n <div *ngFor=\"let surveyPage of surveyData?.surveyPages; let surveyPageIndex = index\"\r\n [attr.id]=\"'survey-page_'+surveyPageIndex\" [ngClass]=\"{'d-none': surveyPageIndex != fCtrls.currentPageIndex.value}\">\r\n <ng-container *ngFor=\"let item of surveyPage.surveyQuestionGroups\">\r\n <div class=\"survay-card\">\r\n <div class=\"survay-card-body\">\r\n <div class=\"survay-group\">\r\n <div class=\"title\">\r\n <h2 class=\"group-title\" [innerHTML]=\"item.questionGroupName\">\r\n </h2>\r\n <span class=\"group-sub-title \" [innerHTML]=\"item.questionGroupDescription\">\r\n </span>\r\n </div>\r\n <ng-container *ngFor=\"let question of item.surveyQuestions\">\r\n <lib-question-boolean-template #questionBooleanTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.Boolean\">\r\n </lib-question-boolean-template>\r\n\r\n <lib-question-text-template #questionTextTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.TextInput\"\r\n [isTextArea]=\"question.isAdvanceTextArea\" [isArabicLang]=\"isArabicLang\"></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.RadioButton\">\r\n </lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDown\"></lib-question-dropdown-template>\r\n\r\n <lib-question-dropdown-multi-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDownMulti\">\r\n </lib-question-dropdown-multi-template>\r\n\r\n <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.CheckBox\">\r\n </lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template #questionMatrixTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.Matrix\">\r\n </lib-question-matrix-template>\r\n\r\n <lib-question-cascade-template #questionCascadeTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.Cascade\"\r\n [applicantKey]=\"applicantKey\" [isPre]=\"isPre\" [surveyLanguageId]=\"surveyLanguageId\"\r\n [pageIndex]=\"surveyPageIndex\"></lib-question-cascade-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"survay-card-footr\" *ngIf=\"surveyData != null\">\r\n <div class=\"container\" style=\" justify-content: start;\">\r\n <div class=\"survay-pagination fw-bold\">\r\n <span>{{curruntShowedSurveyPages}}</span>\r\n <span class=\"ms-2 me-2\">{{isArabicLang ? '\u0645\u0646' : 'of'}} </span>\r\n <span>{{showedSurveyPages?.length}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}.quastion{padding:10px}.quastion .quastion-title{color:var(--dark-100, #363636);text-align:right;font-family:Almarai;font-size:18px;font-style:normal;font-weight:700;line-height:20.6px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.QuestionTextTemplateComponent, selector: "lib-question-text-template", inputs: ["isArabicLang", "isTextArea", "setQuestion", "isDisabled"], outputs: ["emitter"] }, { kind: "component", type: i6.QuestionRadioButtonTemplateComponent, selector: "lib-question-radio-button-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i7.QuestionCheckBoxTemplateComponent, selector: "lib-question-check-box-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i8.QuestionDropdownTemplateComponent, selector: "lib-question-dropdown-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i9.QuestionMatrixTemplateComponent, selector: "lib-question-matrix-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i10.QuestionBooleanTemplateComponent, selector: "lib-question-boolean-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i11.QuestionDropdownMultiTemplateComponent, selector: "lib-question-dropdown-multi-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i12.QuestionCascadeTemplateComponent, selector: "lib-question-cascade-template", inputs: ["pageIndex", "isPre", "surveyLanguageId", "applicantKey", "setQuestion"], outputs: ["emitter"] }] }); }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibComponent, deps: [{ token: i1.SurveyLibService }, { token: i2.Store }, { token: i3.FormBuilder }, { token: i4.CheckRuleExpsUsecase }], target: i0.ɵɵFactoryTarget.Component }); }
151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SurveryLibComponent, selector: "lib-survery-lib", inputs: { isPre: "isPre", surveyLanguageId: "surveyLanguageId", applicantKey: "applicantKey", isArabicLang: "isArabicLang" }, outputs: { surveyResultEmit: "surveyResultEmit", selectLanguageEmit: "selectLanguageEmit" }, ngImport: i0, template: "<div id=\"survery-card-{{surveryLibraryDivId}}\" class=\"survay-card\">\r\n <div [attr.id]=\"'survey-page_'+fCtrls.currentPageId.value\">\r\n <ng-container *ngFor=\"let item of (pageQuestionGroups$ | async)\">\r\n <div class=\"survay-card\">\r\n <div class=\"survay-card-body\">\r\n <div class=\"survay-group\">\r\n <div class=\"title\">\r\n <h2 class=\"group-title\" [innerHTML]=\"item.questionGroupName\">\r\n </h2>\r\n <span class=\"group-sub-title \" [innerHTML]=\"item.questionGroupDescription\">\r\n </span>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let question of ((pageQuestions$|async) |filterQuestion : item.questionGroupId); trackBy:questionIdentify\">\r\n <lib-question-boolean-template #questionBooleanTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.Boolean\">\r\n </lib-question-boolean-template>\r\n\r\n <lib-question-text-template #questionTextTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.TextInput\"\r\n [isArabicLang]=\"isArabicLang\"></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.RadioButton\">\r\n </lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.DropDown\"></lib-question-dropdown-template>\r\n\r\n <lib-question-dropdown-multi-template [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.DropDownMulti\">\r\n </lib-question-dropdown-multi-template>\r\n\r\n <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.CheckBox\">\r\n </lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template #questionMatrixTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.Matrix\">\r\n </lib-question-matrix-template>\r\n\r\n <lib-question-cascade-template #questionCascadeTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.Cascade\"\r\n [applicantKey]=\"applicantKey\" [isPre]=\"isPre\" [surveyLanguageId]=\"surveyLanguageId\"\r\n [pageId]=\"question.surveyPageId\" [questionGroupId]=\"question.questionGroupId\"></lib-question-cascade-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"survay-card-footr\" *ngIf=\"fCtrls.showedSurveyPages.value.length > 0\">\r\n <div class=\"container\" style=\" justify-content: start;\">\r\n <div class=\"survay-pagination fw-bold\">\r\n <span>{{ curruntShowedSurveyPages$ | async}}</span>\r\n <span class=\"ms-2 me-2\">{{isArabicLang ? '\u0645\u0646' : 'of'}} </span>\r\n <span>{{fCtrls.showedSurveyPages.value.length}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}.quastion{padding:10px}.quastion .quastion-title{color:var(--dark-100, #363636);text-align:right;font-family:Almarai;font-size:18px;font-style:normal;font-weight:700;line-height:20.6px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.QuestionTextTemplateComponent, selector: "lib-question-text-template", inputs: ["isArabicLang", "setQuestion", "isDisabled"] }, { kind: "component", type: i7.QuestionRadioButtonTemplateComponent, selector: "lib-question-radio-button-template", inputs: ["setQuestion"] }, { kind: "component", type: i8.QuestionCheckBoxTemplateComponent, selector: "lib-question-check-box-template", inputs: ["setQuestion"] }, { kind: "component", type: i9.QuestionDropdownTemplateComponent, selector: "lib-question-dropdown-template", inputs: ["setQuestion"], outputs: ["emitter"] }, { kind: "component", type: i10.QuestionMatrixTemplateComponent, selector: "lib-question-matrix-template", inputs: ["setQuestion"] }, { kind: "component", type: i11.QuestionBooleanTemplateComponent, selector: "lib-question-boolean-template", inputs: ["setQuestion"] }, { kind: "component", type: i12.QuestionDropdownMultiTemplateComponent, selector: "lib-question-dropdown-multi-template", inputs: ["setQuestion"] }, { kind: "component", type: i13.QuestionCascadeTemplateComponent, selector: "lib-question-cascade-template", inputs: ["pageId", "questionGroupId", "isPre", "surveyLanguageId", "applicantKey", "setQuestion"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.FilterQuestionPipe, name: "filterQuestion" }] }); }
357
152
  }
358
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SurveryLibComponent, decorators: [{
359
154
  type: Component,
360
- args: [{ selector: 'lib-survery-lib', template: "<div id=\"survery-card-{{surveryLibraryDivId}}\" class=\"survay-card\">\r\n <div *ngFor=\"let surveyPage of surveyData?.surveyPages; let surveyPageIndex = index\"\r\n [attr.id]=\"'survey-page_'+surveyPageIndex\" [ngClass]=\"{'d-none': surveyPageIndex != fCtrls.currentPageIndex.value}\">\r\n <ng-container *ngFor=\"let item of surveyPage.surveyQuestionGroups\">\r\n <div class=\"survay-card\">\r\n <div class=\"survay-card-body\">\r\n <div class=\"survay-group\">\r\n <div class=\"title\">\r\n <h2 class=\"group-title\" [innerHTML]=\"item.questionGroupName\">\r\n </h2>\r\n <span class=\"group-sub-title \" [innerHTML]=\"item.questionGroupDescription\">\r\n </span>\r\n </div>\r\n <ng-container *ngFor=\"let question of item.surveyQuestions\">\r\n <lib-question-boolean-template #questionBooleanTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.Boolean\">\r\n </lib-question-boolean-template>\r\n\r\n <lib-question-text-template #questionTextTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.TextInput\"\r\n [isTextArea]=\"question.isAdvanceTextArea\" [isArabicLang]=\"isArabicLang\"></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.RadioButton\">\r\n </lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDown\"></lib-question-dropdown-template>\r\n\r\n <lib-question-dropdown-multi-template [setQuestion]=\"question\" (emitter)=\"onUpdateAnswer($event)\"\r\n *ngIf=\"question.questionTypeId == questionTypeEnum.DropDownMulti\">\r\n </lib-question-dropdown-multi-template>\r\n\r\n <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.CheckBox\">\r\n </lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template #questionMatrixTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.Matrix\">\r\n </lib-question-matrix-template>\r\n\r\n <lib-question-cascade-template #questionCascadeTemplate [setQuestion]=\"question\"\r\n (emitter)=\"onUpdateAnswer($event)\" *ngIf=\"question.questionTypeId == questionTypeEnum.Cascade\"\r\n [applicantKey]=\"applicantKey\" [isPre]=\"isPre\" [surveyLanguageId]=\"surveyLanguageId\"\r\n [pageIndex]=\"surveyPageIndex\"></lib-question-cascade-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"survay-card-footr\" *ngIf=\"surveyData != null\">\r\n <div class=\"container\" style=\" justify-content: start;\">\r\n <div class=\"survay-pagination fw-bold\">\r\n <span>{{curruntShowedSurveyPages}}</span>\r\n <span class=\"ms-2 me-2\">{{isArabicLang ? '\u0645\u0646' : 'of'}} </span>\r\n <span>{{showedSurveyPages?.length}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}.quastion{padding:10px}.quastion .quastion-title{color:var(--dark-100, #363636);text-align:right;font-family:Almarai;font-size:18px;font-style:normal;font-weight:700;line-height:20.6px}\n"] }]
361
- }], ctorParameters: function () { return [{ type: i1.SurveyLibService }, { type: i2.FormBuilder }, { type: i3.CheckRuleExpsUsecase }]; }, propDecorators: { isPre: [{
155
+ args: [{ selector: 'lib-survery-lib', template: "<div id=\"survery-card-{{surveryLibraryDivId}}\" class=\"survay-card\">\r\n <div [attr.id]=\"'survey-page_'+fCtrls.currentPageId.value\">\r\n <ng-container *ngFor=\"let item of (pageQuestionGroups$ | async)\">\r\n <div class=\"survay-card\">\r\n <div class=\"survay-card-body\">\r\n <div class=\"survay-group\">\r\n <div class=\"title\">\r\n <h2 class=\"group-title\" [innerHTML]=\"item.questionGroupName\">\r\n </h2>\r\n <span class=\"group-sub-title \" [innerHTML]=\"item.questionGroupDescription\">\r\n </span>\r\n </div>\r\n <ng-container\r\n *ngFor=\"let question of ((pageQuestions$|async) |filterQuestion : item.questionGroupId); trackBy:questionIdentify\">\r\n <lib-question-boolean-template #questionBooleanTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.Boolean\">\r\n </lib-question-boolean-template>\r\n\r\n <lib-question-text-template #questionTextTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.TextInput\"\r\n [isArabicLang]=\"isArabicLang\"></lib-question-text-template>\r\n\r\n <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.RadioButton\">\r\n </lib-question-radio-button-template>\r\n\r\n <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.DropDown\"></lib-question-dropdown-template>\r\n\r\n <lib-question-dropdown-multi-template [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.DropDownMulti\">\r\n </lib-question-dropdown-multi-template>\r\n\r\n <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.CheckBox\">\r\n </lib-question-check-box-template>\r\n\r\n <lib-question-matrix-template #questionMatrixTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.Matrix\">\r\n </lib-question-matrix-template>\r\n\r\n <lib-question-cascade-template #questionCascadeTemplate [setQuestion]=\"question\"\r\n *ngIf=\"question.questionType == questionTypeEnum.Cascade\"\r\n [applicantKey]=\"applicantKey\" [isPre]=\"isPre\" [surveyLanguageId]=\"surveyLanguageId\"\r\n [pageId]=\"question.surveyPageId\" [questionGroupId]=\"question.questionGroupId\"></lib-question-cascade-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"survay-card-footr\" *ngIf=\"fCtrls.showedSurveyPages.value.length > 0\">\r\n <div class=\"container\" style=\" justify-content: start;\">\r\n <div class=\"survay-pagination fw-bold\">\r\n <span>{{ curruntShowedSurveyPages$ | async}}</span>\r\n <span class=\"ms-2 me-2\">{{isArabicLang ? '\u0645\u0646' : 'of'}} </span>\r\n <span>{{fCtrls.showedSurveyPages.value.length}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".disable__btn{background-color:gray!important;cursor:not-allowed}.quastion{padding:10px}.quastion .quastion-title{color:var(--dark-100, #363636);text-align:right;font-family:Almarai;font-size:18px;font-style:normal;font-weight:700;line-height:20.6px}\n"] }]
156
+ }], ctorParameters: function () { return [{ type: i1.SurveyLibService }, { type: i2.Store }, { type: i3.FormBuilder }, { type: i4.CheckRuleExpsUsecase }]; }, propDecorators: { isPre: [{
362
157
  type: Input
363
158
  }], surveyLanguageId: [{
364
159
  type: Input
@@ -371,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
371
166
  }], selectLanguageEmit: [{
372
167
  type: Output
373
168
  }] } });
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmVyeS1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VydmVyeS1saWIvc3JjL2xpYi9zdXJ2ZXJ5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBS3ZILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxFQUFFLElBQUksYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxZQUFZLEVBQUUsb0JBQW9CLEVBQU0sTUFBTSxNQUFNLENBQUM7QUFJMUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBY3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRaEUsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1RjtR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UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzdGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTFYVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrUkNsQ2hDLDh1SEE2RE07OzJGRDNCTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCO29LQXVFbEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdXJ2ZXlMaWJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdXJ2ZXktbGliLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VydmV5RHRvIH0gZnJvbSAnLi4vc2hhcmVkL2R0b3Mvc3VydmV5LmR0byc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQG5nLXN0YWNrL2Zvcm1zJztcbmltcG9ydCB7IFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlLCBSdWxlUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2UsIFN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlIH0gZnJvbSAnLi4vc2hhcmVkL2Zvcm0taW50ZXJmYWNlcy9zdXJ2ZXJ5LWxpYi5mb3JtLWludGVyZmFjZSc7XG5pbXBvcnQgeyBRdWVzdGlvblR5cGVFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyB2NCBhcyBndWlkR2VuZXJhdG9yIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBRdWVzdGlvbkFuc3dlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9xdWVzdGlvbi1hbnN3ZXIubW9kZWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvZ2ljUHJvcGVydHlFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL0xvZ2ljLVByb3BlcnR5LmVudW0nO1xuaW1wb3J0IHsgUnVsZUV4cER0byB9IGZyb20gJy4uL3NoYXJlZC9kdG9zL3J1bGUtZXhwLmR0byc7XG5pbXBvcnQgeyBPcGVyYXRvckVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvb3BlcmF0b3IuZW51bSc7XG5pbXBvcnQgeyBMb2dpY0FjdGlvbkVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvbG9naWMtYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQ2hlY2tSdWxlRXhwc1VzZWNhc2UgfSBmcm9tICcuL3VzZWNhc2VzL2NoZWNrLXJ1bGUtZXhwcy51c2VjYXNlJztcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUmVzdWx0IH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9zdXJ2ZXJ5LXF1ZXN0aW9uLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBEZWZhdWx0UXVlc3Rpb25BbnN3ZXJEdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9kZWZhdWx0LXF1ZXN0aW9uLWFuc3dlcnMuZHRvJztcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhblRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUvcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZS9xdWVzdGlvbi10ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvQnV0dG9uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlL3F1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93blRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlL3F1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrQm94VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tY2hlY2stYm94LXRlbXBsYXRlL3F1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGUvcXVlc3Rpb24tbWF0cml4LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdXJ2ZXlMYW5ndWFnZUR0byB9IGZyb20gJy4uL3NoYXJlZC9kdG9zL3N1cnZleS1sYW5ndWFnZS5kdG8nO1xuaW1wb3J0IHsgU3VydmV5U2VjdGlvbkVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvc3VydmV5LXNlY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25EdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9zdXJ2ZXktcXVlc3Rpb24uZHRvJztcbmltcG9ydCB7IElucHV0VHlwZUVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvaW5wdXQtdHlwZS5lbnVtJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXN1cnZlcnktbGliJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdXJ2ZXktbGliLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3VydmVyeUxpYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgc3VydmVyeUxpYnJhcnlEaXZJZCA9IGd1aWRHZW5lcmF0b3IoKSBhcyBzdHJpbmc7XG4gIHJlbG9hZERlZmF1bHRBbnN3ZXJJZCA9IGd1aWRHZW5lcmF0b3IoKSBhcyBzdHJpbmc7XG4gIHN1cnZleURhdGE6IFN1cnZleUR0bztcbiAgZGVmYXVsdEFuc3dlcnM6IERlZmF1bHRRdWVzdGlvbkFuc3dlckR0b1tdO1xuICByRm9ybTogRm9ybUdyb3VwPFN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPjtcblxuICBnZXQgZkN0cmxzKCkge1xuICAgIHJldHVybiB0aGlzLnJGb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHF1ZXN0aW9uVHlwZUVudW0oKSB7XG4gICAgcmV0dXJuIFF1ZXN0aW9uVHlwZUVudW07XG4gIH1cblxuICBnZXQgaXNGaXJzdFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuc2hvd2VkU3VydmV5UGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd2VkU3VydmV5UGFnZXMuZmluZEluZGV4KHggPT4geCA9PSB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlKSA9PSAwO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc0xhc3RQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dlZFN1cnZleVBhZ2VzLmZpbmRJbmRleCh4ID0+IHggPT0gdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC52YWx1ZSkgPT0gKHRoaXMuc2hvd2VkU3VydmV5UGFnZXMubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIGdldCBzaG93ZWRTdXJ2ZXlQYWdlcygpOiBudW1iZXJbXSB7XG4gICAgdmFyIHBhZ2VBcnI6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWVbaW5kZXhdO1xuICAgICAgaWYgKHF1ZXN0aW9uLmlzU2hvdyA9PSB0cnVlKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGUgIT0gdGhpcy5xdWVzdGlvblR5cGVFbnVtLk1hdHJpeCkge1xuICAgICAgICAgIHBhZ2VBcnIucHVzaChxdWVzdGlvbi5zdXJ2ZXlQYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSA9PSB0aGlzLnF1ZXN0aW9uVHlwZUVudW0uTWF0cml4ICYmIHF1ZXN0aW9uLmlzTWF0cml4R3JvdXAgPT0gdHJ1ZSkge1xuICAgICAgICAgIHBhZ2VBcnIucHVzaChxdWVzdGlvbi5zdXJ2ZXlQYWdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGluY3RBcnJheSA9IHBhZ2VBcnIuZmlsdGVyKChuLCBpKSA9PiBwYWdlQXJyLmluZGV4T2YobikgPT09IGkpO1xuXG4gICAgcmV0dXJuIGRpc3RpbmN0QXJyYXkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG5cbiAgZ2V0IGN1cnJ1bnRTaG93ZWRTdXJ2ZXlQYWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93ZWRTdXJ2ZXlQYWdlcy5maW5kSW5kZXgoeCA9PiB4ID09IHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWUpICsgMTtcbiAgfVxuXG4gIGdldCBzdXJ2ZXlSZXN1bHQoKTogeyBhbnN3ZXJzOiBTdXJ2ZXlRdWVzdGlvblJlc3VsdFtdLCBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRQYWdlSW5kZXg6IHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWUsXG4gICAgICBhbnN3ZXJzOlxuICAgICAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbHRlcih4ID0+IHguaXNNYXRyaXhHcm91cCAhPSB0cnVlKS5tYXAoeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFN1cnZleVBhZ2VJbmRleDogeC5zdXJ2ZXlQYWdlSW5kZXgsXG4gICAgICAgICAgICBRdWVzdGlvbklkOiB4LnF1ZXN0aW9uSWQsXG4gICAgICAgICAgICBRdWVzdGlvblR5cGU6IHgucXVlc3Rpb25UeXBlLFxuICAgICAgICAgICAgQW5zd2VySWQ6IHguYW5zd2VySWQsXG4gICAgICAgICAgICBBbnN3ZXJUZXh0OiB4LmFuc3dlclRleHQsXG4gICAgICAgICAgICBBbnN3ZXJJZEFycjogeC5hbnN3ZXJJZEFyclxuICAgICAgICAgIH0gYXMgU3VydmV5UXVlc3Rpb25SZXN1bHRcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBpc1ByZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdXJ2ZXlMYW5ndWFnZUlkOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBhcHBsaWNhbnRLZXk6IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIGlzQXJhYmljTGFuZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBzdXJ2ZXlSZXN1bHRFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlRdWVzdGlvblJlc3VsdFtdPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TGFuZ3VhZ2VFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3VydmV5TGliU2VydmljZTogU3VydmV5TGliU2VydmljZVxuICAgICwgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9jaGVja1J1bGVFeHBzVXNlY2FzZTogQ2hlY2tSdWxlRXhwc1VzZWNhc2UpIHtcblxuICAgIHRoaXMuckZvcm0gPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgY3VycmVudFBhZ2VJbmRleDogWzBdLFxuICAgICAgcXVlc3Rpb25BcnJheTogdGhpcy5fZm9ybUJ1aWxkZXIuYXJyYXk8UXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KFtdKSxcbiAgICAgIHJ1bGVRdWVzdGlvbkFycmF5OiB0aGlzLl9mb3JtQnVpbGRlci5hcnJheTxSdWxlUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+KFtdKVxuICAgIH0pO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc3VydmV5RGF0YU9ic3J2LnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZShzdXJ2ZXkgPT4ge1xuICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5jbGVhcigpO1xuICAgICAgdGhpcy5mQ3RybHMucnVsZVF1ZXN0aW9uQXJyYXkuY2xlYXIoKTtcbiAgICAgIHRoaXMuc3VydmV5RGF0YSA9IG51bGw7XG5cbiAgICAgIGlmIChzdXJ2ZXkgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN1cnZleURhdGEgPSBzdXJ2ZXk7XG4gICAgICAgIHRoaXMubG9hZFF1ZXN0aW9ucyhzdXJ2ZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5hZGRRdWVzdGlvbk9ic3J2LnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5hZGRRdWVzdGlvbkdyb3VwKHJlcy5xdWVzdGlvbiwgcmVzLnBhZ2VJbmRleCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdXJ2ZXlMaWJTZXJ2aWNlLnJlbW92ZVF1ZXN0aW9uT2JzcnYuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IHJlcy5xdWVzdGlvbklkKTtcbiAgICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH0pO1xuXG4gIH1cblxuICBvblBhZ2dpbmdOZXh0KCkge1xuICAgIHZhciBpbnZhbGlkUmVjb3JkcyA9IHRoaXMuaGF2ZUluVmFsaWRhdGVRdWVzdGlvbnMoKTtcbiAgICBpZiAoaW52YWxpZFJlY29yZHMubGVuZ3RoID09IDApIHtcblxuICAgICAgY29uc3QgbmV4dFBhZ2VJbmRleCA9IHRoaXMuZ2V0TmV4dFNob3dlZFBhZ2UoKTtcblxuICAgICAgaWYgKG5leHRQYWdlSW5kZXggIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnNldFZhbHVlKG5leHRQYWdlSW5kZXgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRRdWVzdGlvblVwZGF0ZXMobmV4dFBhZ2VJbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgICAgICBzY3JvbGxUb3A6ICQoYCNzdXJ2ZXJ5LWNhcmQtJHt0aGlzLnN1cnZlcnlMaWJyYXJ5RGl2SWR9YCkub2Zmc2V0KCkudG9wIC0gMTIwXG4gICAgICAgIH0sIDIwMDApO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcXVlc3Rpb25BcnIgPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbHRlcih4ID0+IHguaXNNYXRyaXhHcm91cCAhPSB0cnVlKS5tYXAoeCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFN1cnZleVBhZ2VJbmRleDogeC5zdXJ2ZXlQYWdlSW5kZXgsXG4gICAgICAgICAgICBRdWVzdGlvbklkOiB4LnF1ZXN0aW9uSWQsXG4gICAgICAgICAgICBRdWVzdGlvblR5cGU6IHgucXVlc3Rpb25UeXBlLFxuICAgICAgICAgICAgQW5zd2VySWQ6IHguYW5zd2VySWQsXG4gICAgICAgICAgICBBbnN3ZXJUZXh0OiB4LmFuc3dlclRleHQsXG4gICAgICAgICAgICBBbnN3ZXJJZEFycjogeC5hbnN3ZXJJZEFyclxuICAgICAgICAgIH0gYXMgU3VydmV5UXVlc3Rpb25SZXN1bHRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3VydmV5UmVzdWx0RW1pdC5lbWl0KHF1ZXN0aW9uQXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0UXVlc3Rpb24gPSBpbnZhbGlkUmVjb3Jkc1swXTtcbiAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcbiAgICAgICAgc2Nyb2xsVG9wOiAkKGAjcXVlc3Rpb25fJHtmaXJzdFF1ZXN0aW9uLnF1ZXN0aW9uSWR9YCkub2Zmc2V0KCkudG9wIC0gMTIwXG4gICAgICB9LCAyMDAwKTtcbiAgICB9XG4gIH1cblxuICBvblBhZ2dpbmdCYWNrKCkge1xuICAgIGNvbnN0IHByZXZQYWdlSW5kZXggPSB0aGlzLmdldFByZXZTaG93ZWRQYWdlKCk7XG4gICAgaWYgKHByZXZQYWdlSW5kZXggIT0gbnVsbCkge1xuICAgICAgdGhpcy5mQ3RybHMuY3VycmVudFBhZ2VJbmRleC5zZXRWYWx1ZShwcmV2UGFnZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBvblVwZGF0ZUFuc3dlcnMobW9kZWw6IFF1ZXN0aW9uQW5zd2VyTW9kZWxbXSkge1xuICAgIG1vZGVsLmZvckVhY2goZWxlbSA9PiB7XG4gICAgICB0aGlzLm9uVXBkYXRlQW5zd2VyKGVsZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25VcGRhdGVBbnN3ZXIobW9kZWw6IFF1ZXN0aW9uQW5zd2VyTW9kZWwpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IG1vZGVsLlF1ZXN0aW9uSWQpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuY29udHJvbHNbaW5kZXhdO1xuICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc1ZhbGlkLnNldFZhbHVlKG1vZGVsLklzVmFsaWQpO1xuXG4gICAgICBpZiAocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvblR5cGUgPT0gdGhpcy5xdWVzdGlvblR5cGVFbnVtLlRleHRJbnB1dCkge1xuICAgICAgICBxdWVzdGlvbkdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGFuc3dlcklkOiBtb2RlbC5TdXJ2ZXlBbnN3ZXJJZCxcbiAgICAgICAgICBhbnN3ZXJUZXh0OiBtb2RlbC5BbnN3ZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uR3JvdXAudmFsdWUucXVlc3Rpb25UeXBlID09IHRoaXMucXVlc3Rpb25UeXBlRW51bS5DaGVja0JveCB8fCBxdWVzdGlvbkdyb3VwLnZhbHVlLnF1ZXN0aW9uVHlwZSA9PSB0aGlzLnF1ZXN0aW9uVHlwZUVudW0uRHJvcERvd25NdWx0aSkge1xuICAgICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmFuc3dlcklkQXJyLnNldFZhbHVlKG1vZGVsLkFuc3dlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmFuc3dlcklkLnNldFZhbHVlKG1vZGVsLkFuc3dlcik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZDdHJscy5ydWxlUXVlc3Rpb25BcnJheS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gbW9kZWwuUXVlc3Rpb25JZCkgPiAtMSkge1xuICAgICAgICB0aGlzLmNoZWNrUnVsZXMocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvbklkKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZFF1ZXN0aW9ucyhzdXJ2ZXk6IFN1cnZleUR0bykge1xuICAgIHN1cnZleS5zdXJ2ZXlQYWdlcy5mb3JFYWNoKChwYWdlLCBwYWdlSW5kZXgpID0+IHtcblxuICAgICAgcGFnZS5zdXJ2ZXlRdWVzdGlvbkdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcblxuICAgICAgICBncm91cC5zdXJ2ZXlRdWVzdGlvbnMuZm9yRWFjaChxdWVzdGlvbiA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRRdWVzdGlvbkdyb3VwKHF1ZXN0aW9uLCBwYWdlSW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc3VydmV5LnN1cnZleVJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICBydWxlLnJ1bGVFeHBzLmZvckVhY2gocnVsZUV4cCA9PiB7XG4gICAgICAgIHRoaXMuZkN0cmxzLnJ1bGVRdWVzdGlvbkFycmF5LnB1c2godGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXA8UnVsZVF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgICAgcXVlc3Rpb25JZDogcnVsZUV4cC5xdWVzdGlvbklkLFxuICAgICAgICAgIHJ1bGVJZDogcnVsZS5ydWxlSWRcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaGF2ZUluVmFsaWRhdGVRdWVzdGlvbnMoKSB7XG4gICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWU7XG4gICAgdmFyIGludmFsaWRSZWNvcmRzID0gW107XG5cbiAgICB2YXIgYXJyID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maWx0ZXIoeCA9PiB4LnN1cnZleVBhZ2VJbmRleCA9PSBjdXJyZW50UGFnZUluZGV4ICYmIHguaXNEaXNhYmxlZCA9PSBmYWxzZSAmJiB4LmlzU2hvdyA9PSB0cnVlKTtcbiAgICBhcnIubWFwKHggPT4ge1xuICAgICAgaWYgKHguaXNSZXF1aXJlZCA9PSB0cnVlICYmIHguaXNWYWxpZCAhPSB0cnVlICYmIHguaXNNYXRyaXhHcm91cCAhPSB0cnVlKSB7XG4gICAgICAgIGludmFsaWRSZWNvcmRzLnB1c2goeCk7XG4gICAgICB9IFxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh4LnF1ZXN0aW9uVHlwZSA9PSBRdWVzdGlvblR5cGVFbnVtLlRleHRJbnB1dCAmJiB4LmlucHV0VHlwZUlkID09IElucHV0VHlwZUVudW0uRW1haWwpIHtcbiAgICAgICAgICBpZiAoeC5hbnN3ZXJUZXh0Py50cmltKCkgJiYgeC5pc1ZhbGlkICE9IHRydWUpIHtcbiAgICAgICAgICAgIGludmFsaWRSZWNvcmRzLnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaW52YWxpZFJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgJChgI3N1cnZleS1wYWdlXyR7Y3VycmVudFBhZ2VJbmRleH1gKS5hZGRDbGFzcygnc3VydmV5LXBhZ2Vfc3VibWl0dGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludmFsaWRSZWNvcmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1J1bGVzKHF1ZXN0aW9uSWQpIHtcbiAgICB2YXIgc2VsZWN0ZWRSdWxlSWRBcnIgPSB0aGlzLnJGb3JtLnZhbHVlLnJ1bGVRdWVzdGlvbkFycmF5LmZpbHRlcih4ID0+IHgucXVlc3Rpb25JZCA9PSBxdWVzdGlvbklkKS5tYXAoeCA9PiBOdW1iZXIoeC5ydWxlSWQpKTtcbiAgICB2YXIgYXJyID0gdGhpcy5zdXJ2ZXlEYXRhLnN1cnZleVJ1bGVzLmZpbHRlcih4ID0+IHNlbGVjdGVkUnVsZUlkQXJyLmZpbmQoYyA9PiBjID09IHgucnVsZUlkKSAhPSBudWxsKTtcbiAgICBhcnIuZm9yRWFjaChydWxlID0+IHtcbiAgICAgIHRoaXMuX2NoZWNrUnVsZUV4cHNVc2VjYXNlLmV4ZWN1dGUoe1xuICAgICAgICBydWxlRXhwczogcnVsZS5ydWxlRXhwcyxcbiAgICAgICAgcXVlc3Rpb25zOiB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLFxuICAgICAgICBjdXJyZW50UGFnZUluZGV4OiB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlXG4gICAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcblxuICAgICAgICB2YXIgaXNQYXNzZWQgPSByZXN1bHQuZXhwcmVzdGlvblJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMDtcbiAgICAgICAgaWYgKGlzUGFzc2VkKSB7XG5cbiAgICAgICAgICBydWxlLnJ1bGVSZXN1bHRRdWVzdGlvbnMuZm9yRWFjaChyZXN1bHRRdWVzdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IHJlc3VsdFF1ZXN0aW9uLnF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uR3JvdXAgPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LmF0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChydWxlLmxvZ2ljQWN0aW9uSWQgPT0gTG9naWNBY3Rpb25FbnVtLlNob3cpIHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc1Nob3cuc2V0VmFsdWUodHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc2V0UXVlc3Rpb25Jc1Nob3cocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvbklkLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5IaWRlKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uR3JvdXAuY29udHJvbHMuaXNTaG93LnNldFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zZXRRdWVzdGlvbklzU2hvdyhxdWVzdGlvbkdyb3VwLnZhbHVlLnF1ZXN0aW9uSWQsIGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5sb2dpY0FjdGlvbklkID09IExvZ2ljQWN0aW9uRW51bS5FbmFibGUpIHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5jb250cm9scy5pc0Rpc2FibGVkLnNldFZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zZXRRdWVzdGlvbklzRGlzYWJsZWQocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvbklkLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUubG9naWNBY3Rpb25JZCA9PSBMb2dpY0FjdGlvbkVudW0uRGlzYWJsZSkge1xuICAgICAgICAgICAgICBxdWVzdGlvbkdyb3VwLmNvbnRyb2xzLmlzRGlzYWJsZWQuc2V0VmFsdWUodHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc2V0UXVlc3Rpb25Jc0Rpc2FibGVkKHF1ZXN0aW9uR3JvdXAudmFsdWUucXVlc3Rpb25JZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUubG9naWNBY3Rpb25JZCA9PSBMb2dpY0FjdGlvbkVudW0uU2V0QW5zd2VyKSB7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uR3JvdXAudmFsdWUucXVlc3Rpb25UeXBlID09IFF1ZXN0aW9uVHlwZUVudW0uTWF0cml4ICYmIHF1ZXN0aW9uR3JvdXAudmFsdWUuaXNNYXRyaXhHcm91cCA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHZhciBzdWJRdWVzdGlvbnMgPSB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbHRlcih4ID0+IHguc3VydmV5UGFnZUluZGV4ID09IHF1ZXN0aW9uR3JvdXAudmFsdWUuc3VydmV5UGFnZUluZGV4ICYmIHguaXNNYXRyaXhHcm91cCA9PSBmYWxzZSk7XG4gICAgICAgICAgICAgIHN1YlF1ZXN0aW9ucy5mb3JFYWNoKHN1YlF1ZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkudmFsdWUuZmluZEluZGV4KHggPT4geC5xdWVzdGlvbklkID09IHN1YlF1ZXN0aW9uLnF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICAgIHZhciBzdWJRdWVzdGlvbkdyb3VwID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5hdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvbkdyb3VwLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgaXNTaG93OiBxdWVzdGlvbkdyb3VwLnZhbHVlLmlzU2hvdyxcbiAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IHF1ZXN0aW9uR3JvdXAudmFsdWUuaXNEaXNhYmxlZFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zZXRRdWVzdGlvbklzRGlzYWJsZWQoc3ViUXVlc3Rpb24ucXVlc3Rpb25JZCwgc3ViUXVlc3Rpb24uaXNEaXNhYmxlZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VydmV5TGliU2VydmljZS5zZXRRdWVzdGlvbklzU2hvdyhzdWJRdWVzdGlvbi5xdWVzdGlvbklkLCBzdWJRdWVzdGlvbi5pc1Nob3cpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJ1bGUucnVsZVJlc3VsdFF1ZXN0aW9ucy5mb3JFYWNoKHJlc3VsdFF1ZXN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS52YWx1ZS5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gcmVzdWx0UXVlc3Rpb24ucXVlc3Rpb25JZCk7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25Hcm91cCA9IHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkuYXQoaW5kZXgpO1xuICAgICAgICAgICAgcXVlc3Rpb25Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgaXNTaG93OiBxdWVzdGlvbkdyb3VwLnZhbHVlLmlzU2hvd19kZWZhdWx0LFxuICAgICAgICAgICAgICBpc0Rpc2FibGVkOiBxdWVzdGlvbkdyb3VwLnZhbHVlLmlzRGlzYWJsZWRfZGVmYXVsdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9zdXJ2ZXlMaWJTZXJ2aWNlLnNldFF1ZXN0aW9uSXNEaXNhYmxlZChxdWVzdGlvbkdyb3VwLnZhbHVlLnF1ZXN0aW9uSWQsIHF1ZXN0aW9uR3JvdXAudmFsdWUuaXNEaXNhYmxlZF9kZWZhdWx0KTtcbiAgICAgICAgICAgIHRoaXMuX3N1cnZleUxpYlNlcnZpY2Uuc2V0UXVlc3Rpb25Jc1Nob3cocXVlc3Rpb25Hcm91cC52YWx1ZS5xdWVzdGlvbklkLCBxdWVzdGlvbkdyb3VwLnZhbHVlLmlzU2hvd19kZWZhdWx0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmV4dFNob3dlZFBhZ2UoKSB7XG4gICAgdmFyIGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUluZGV4LnZhbHVlO1xuICAgIHZhciBzaG93ZWRQYWdlcyA9IHRoaXMuc2hvd2VkU3VydmV5UGFnZXM7XG4gICAgdmFyIG5leHRTaG93ZWRQYWdlcyA9IHNob3dlZFBhZ2VzLmZpbHRlcih4ID0+IHggPiBjdXJyZW50UGFnZUluZGV4KTtcbiAgICBpZiAobmV4dFNob3dlZFBhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXh0U2hvd2VkUGFnZXNbMF07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmV2U2hvd2VkUGFnZSgpIHtcbiAgICB2YXIgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWU7XG4gICAgdmFyIHNob3dlZFBhZ2VzID0gdGhpcy5zaG93ZWRTdXJ2ZXlQYWdlcztcbiAgICB2YXIgcHJldlNob3dlZFBhZ2VzID0gc2hvd2VkUGFnZXMuZmlsdGVyKHggPT4geCA8IGN1cnJlbnRQYWdlSW5kZXgpO1xuICAgIGlmIChwcmV2U2hvd2VkUGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHByZXZTaG93ZWRQYWdlc1twcmV2U2hvd2VkUGFnZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRRdWVzdGlvbkdyb3VwKHF1ZXN0aW9uOiBTdXJ2ZXlRdWVzdGlvbkR0bywgcGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgIT0gNikge1xuICAgICAgdGhpcy5mQ3RybHMucXVlc3Rpb25BcnJheS5wdXNoKHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFF1ZXN0aW9uQ2hpbGRPZlN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XG4gICAgICAgIHN1cnZleVBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICBxdWVzdGlvbklkOiBbcXVlc3Rpb24ucXVlc3Rpb25JZF0sXG4gICAgICAgIHF1ZXN0aW9uVHlwZTogW3F1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkXSxcbiAgICAgICAgaW5wdXRUeXBlSWQ6IFtxdWVzdGlvbi5zdXJ2ZXlBbnN3ZXJzWzBdLmlucHV0VHlwZUlkXSxcbiAgICAgICAgaXNNYXRyaXhHcm91cDogW2ZhbHNlXSxcbiAgICAgICAgYW5zd2VySWQ6IFtudWxsXSxcbiAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgYW5zd2VyVGV4dDogW251bGxdLFxuICAgICAgICBpc1JlcXVpcmVkOiBbcXVlc3Rpb24uaXNSZXF1aXJlZF0sXG4gICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgaXNEaXNhYmxlZDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICBpc1Nob3c6IFtxdWVzdGlvbi5pc1Zpc2FibGVdLFxuICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgaXNTaG93X2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1Zpc2FibGVdXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgICBzdXJ2ZXlQYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgcXVlc3Rpb25JZDogW3F1ZXN0aW9uLnF1ZXN0aW9uSWRdLFxuICAgICAgICBxdWVzdGlvblR5cGU6IFtxdWVzdGlvbi5xdWVzdGlvblR5cGVJZF0sXG4gICAgICAgIGlucHV0VHlwZUlkOiBbcXVlc3Rpb24uc3VydmV5QW5zd2Vyc1swXS5pbnB1dFR5cGVJZF0sXG4gICAgICAgIGlzTWF0cml4R3JvdXA6IFt0cnVlXSxcbiAgICAgICAgYW5zd2VySWQ6IFtudWxsXSxcbiAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgYW5zd2VyVGV4dDogW251bGxdLFxuICAgICAgICBpc1JlcXVpcmVkOiBbcXVlc3Rpb24uaXNSZXF1aXJlZF0sXG4gICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgaXNEaXNhYmxlZDogW3F1ZXN0aW9uLmlzUmVhZE9ubHldLFxuICAgICAgICBpc1Nob3c6IFtxdWVzdGlvbi5pc1Zpc2FibGVdLFxuICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgaXNTaG93X2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1Zpc2FibGVdLFxuICAgICAgfSkpO1xuXG4gICAgICBxdWVzdGlvbi5zdXJ2ZXlTdWJRdWVzdGlvbnMuZm9yRWFjaChzdWJRdWVzdGlvbiA9PiB7XG4gICAgICAgIHRoaXMuZkN0cmxzLnF1ZXN0aW9uQXJyYXkucHVzaCh0aGlzLl9mb3JtQnVpbGRlci5ncm91cDxRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZT4oe1xuICAgICAgICAgIHN1cnZleVBhZ2VJbmRleDogcGFnZUluZGV4LFxuICAgICAgICAgIHF1ZXN0aW9uSWQ6IFtzdWJRdWVzdGlvbi5xdWVzdGlvbklkXSxcbiAgICAgICAgICBxdWVzdGlvblR5cGU6IFtxdWVzdGlvbi5xdWVzdGlvblR5cGVJZF0sXG4gICAgICAgICAgaW5wdXRUeXBlSWQ6IFtxdWVzdGlvbi5zdXJ2ZXlBbnN3ZXJzWzBdLmlucHV0VHlwZUlkXSxcbiAgICAgICAgICBpc01hdHJpeEdyb3VwOiBbZmFsc2VdLFxuICAgICAgICAgIGFuc3dlcklkOiBbbnVsbF0sXG4gICAgICAgICAgYW5zd2VySWRBcnI6IFtudWxsXSxcbiAgICAgICAgICBhbnN3ZXJUZXh0OiBbbnVsbF0sXG4gICAgICAgICAgaXNSZXF1aXJlZDogW3F1ZXN0aW9uLmlzUmVxdWlyZWRdLFxuICAgICAgICAgIGlzVmFsaWQ6IFtudWxsXSxcbiAgICAgICAgICBpc0Rpc2FibGVkOiBbcXVlc3Rpb24uaXNSZWFkT25seV0sXG4gICAgICAgICAgaXNTaG93OiBbcXVlc3Rpb24uaXNWaXNhYmxlXSxcbiAgICAgICAgICBpc0Rpc2FibGVkX2RlZmF1bHQ6IFtxdWVzdGlvbi5pc1JlYWRPbmx5XSxcbiAgICAgICAgICBpc1Nob3dfZGVmYXVsdDogW3F1ZXN0aW9uLmlzVmlzYWJsZV1cbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRRdWVzdGlvblVwZGF0ZXMocGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmZDdHJscy5xdWVzdGlvbkFycmF5LnZhbHVlLmZpbHRlcih4ID0+IHguc3VydmV5UGFnZUluZGV4ID09IHBhZ2VJbmRleCkuZm9yRWFjaChxdWVzdGlvbiA9PiB7XG4gICAgICB0aGlzLl9zdXJ2ZXlMaWJTZXJ2aWNlLnNldFF1ZXN0aW9uSXNTaG93KHF1ZXN0aW9uLnF1ZXN0aW9uSWQsIHF1ZXN0aW9uLmlzU2hvdyk7XG4gICAgICB0aGlzLl9zdXJ2ZXlMaWJTZXJ2aWNlLnNldFF1ZXN0aW9uSXNEaXNhYmxlZChxdWVzdGlvbi5xdWVzdGlvbklkLCBxdWVzdGlvbi5pc0Rpc2FibGVkKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBpZD1cInN1cnZlcnktY2FyZC17e3N1cnZlcnlMaWJyYXJ5RGl2SWR9fVwiIGNsYXNzPVwic3VydmF5LWNhcmRcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdXJ2ZXlQYWdlIG9mIHN1cnZleURhdGE/LnN1cnZleVBhZ2VzOyBsZXQgc3VydmV5UGFnZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgW2F0dHIuaWRdPVwiJ3N1cnZleS1wYWdlXycrc3VydmV5UGFnZUluZGV4XCIgW25nQ2xhc3NdPVwieydkLW5vbmUnOiBzdXJ2ZXlQYWdlSW5kZXggIT0gZkN0cmxzLmN1cnJlbnRQYWdlSW5kZXgudmFsdWV9XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1cnZleVBhZ2Uuc3VydmV5UXVlc3Rpb25Hcm91cHNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2YXktZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIiBbaW5uZXJIVE1MXT1cIml0ZW0ucXVlc3Rpb25Hcm91cE5hbWVcIj5cclxuICAgICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JvdXAtc3ViLXRpdGxlIFwiIFtpbm5lckhUTUxdPVwiaXRlbS5xdWVzdGlvbkdyb3VwRGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBpdGVtLnN1cnZleVF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZSAjcXVlc3Rpb25Cb29sZWFuVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uQm9vbGVhblwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXF1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZSAjcXVlc3Rpb25UZXh0VGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uVGV4dElucHV0XCJcclxuICAgICAgICAgICAgICAgIFtpc1RleHRBcmVhXT1cInF1ZXN0aW9uLmlzQWR2YW5jZVRleHRBcmVhXCIgW2lzQXJhYmljTGFuZ109XCJpc0FyYWJpY0xhbmdcIj48L2xpYi1xdWVzdGlvbi10ZXh0LXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZSAjcXVlc3Rpb25SYWRpb0J1dHRvblRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLlJhZGlvQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPC9saWItcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlICNxdWVzdGlvbkRyb3Bkb3duVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLkRyb3BEb3duXCI+PC9saWItcXVlc3Rpb24tZHJvcGRvd24tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tZHJvcGRvd24tbXVsdGktdGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uRHJvcERvd25NdWx0aVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXF1ZXN0aW9uLWRyb3Bkb3duLW11bHRpLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZSAjcXVlc3Rpb25DaGVja0JveFRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAoZW1pdHRlcik9XCJvblVwZGF0ZUFuc3dlcigkZXZlbnQpXCIgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGVJZCA9PSBxdWVzdGlvblR5cGVFbnVtLkNoZWNrQm94XCI+XHJcbiAgICAgICAgICAgICAgPC9saWItcXVlc3Rpb24tY2hlY2stYm94LXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLW1hdHJpeC10ZW1wbGF0ZSAjcXVlc3Rpb25NYXRyaXhUZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgKGVtaXR0ZXIpPVwib25VcGRhdGVBbnN3ZXIoJGV2ZW50KVwiICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlSWQgPT0gcXVlc3Rpb25UeXBlRW51bS5NYXRyaXhcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZSAjcXVlc3Rpb25DYXNjYWRlVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgIChlbWl0dGVyKT1cIm9uVXBkYXRlQW5zd2VyKCRldmVudClcIiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZUlkID09IHF1ZXN0aW9uVHlwZUVudW0uQ2FzY2FkZVwiXHJcbiAgICAgICAgICAgICAgICBbYXBwbGljYW50S2V5XT1cImFwcGxpY2FudEtleVwiIFtpc1ByZV09XCJpc1ByZVwiIFtzdXJ2ZXlMYW5ndWFnZUlkXT1cInN1cnZleUxhbmd1YWdlSWRcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJzdXJ2ZXlQYWdlSW5kZXhcIj48L2xpYi1xdWVzdGlvbi1jYXNjYWRlLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdXJ2YXktY2FyZC1mb290clwiICpuZ0lmPVwic3VydmV5RGF0YSAhPSBudWxsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCIganVzdGlmeS1jb250ZW50OiBzdGFydDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1wYWdpbmF0aW9uIGZ3LWJvbGRcIj5cclxuICAgICAgICA8c3Bhbj57e2N1cnJ1bnRTaG93ZWRTdXJ2ZXlQYWdlc319PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiBtZS0yXCI+e3tpc0FyYWJpY0xhbmcgPyAn2YXZhicgOiAnb2YnfX0gPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7c2hvd2VkU3VydmV5UGFnZXM/Lmxlbmd0aH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmVyeS1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VydmVyeS1saWIvc3JjL2xpYi9zdXJ2ZXJ5LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3N1cnZleS1saWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBSXZILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxFQUFFLElBQUksYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBa0QsR0FBRyxFQUFNLElBQUksRUFBa0IsTUFBTSxNQUFNLENBQUM7QUFnQnJHLE9BQU8sRUFBZSxXQUFXLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRekUsTUFBTSxPQUFPLG1CQUFtQjtJQWM5QixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFHRCxJQUFJLFlBQVk7UUFDZCxPQUFP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bUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjt3TEFrQ2xCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlMaWJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdXJ2ZXktbGliLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlEdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9zdXJ2ZXkuZHRvJztcclxuaW1wb3J0IHsgUXVlc3Rpb25DaGlsZE9mU3VydmVyeUxpYkZvcm1JbnRlcmZhY2UsIFJ1bGVRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZSwgU3VydmVyeUxpYkZvcm1JbnRlcmZhY2UgfSBmcm9tICcuLi9zaGFyZWQvZm9ybS1pbnRlcmZhY2VzL3N1cnZlcnktbGliLmZvcm0taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25UeXBlRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9xdWVzdGlvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyB2NCBhcyBndWlkR2VuZXJhdG9yIH0gZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uQW5zd2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3F1ZXN0aW9uLWFuc3dlci5tb2RlbCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgb2YsIHRha2UsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExvZ2ljUHJvcGVydHlFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL0xvZ2ljLVByb3BlcnR5LmVudW0nO1xyXG5pbXBvcnQgeyBSdWxlRXhwRHRvIH0gZnJvbSAnLi4vc2hhcmVkL2R0b3MvcnVsZS1leHAuZHRvJztcclxuaW1wb3J0IHsgT3BlcmF0b3JFbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL29wZXJhdG9yLmVudW0nO1xyXG5pbXBvcnQgeyBMb2dpY0FjdGlvbkVudW0gfSBmcm9tICcuLi9zaGFyZWQvZW51bXMvbG9naWMtYWN0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBDaGVja1J1bGVFeHBzVXNlY2FzZSB9IGZyb20gJy4vdXNlY2FzZXMvY2hlY2stcnVsZS1leHBzLnVzZWNhc2UnO1xyXG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJlc3VsdCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvc3VydmVyeS1xdWVzdGlvbi1yZXN1bHQubW9kZWwnO1xyXG5pbXBvcnQgeyBEZWZhdWx0UXVlc3Rpb25BbnN3ZXJEdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9kZWZhdWx0LXF1ZXN0aW9uLWFuc3dlcnMuZHRvJztcclxuaW1wb3J0IHsgUXVlc3Rpb25Cb29sZWFuVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tYm9vbGVhbi10ZW1wbGF0ZS9xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVGV4dFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLXRleHQtdGVtcGxhdGUvcXVlc3Rpb24tdGV4dC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvQnV0dG9uVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlL3F1ZXN0aW9uLXJhZGlvLWJ1dHRvbi10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcXVlc3Rpb24tZHJvcGRvd24tdGVtcGxhdGUvcXVlc3Rpb24tZHJvcGRvd24tdGVtcGxhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUXVlc3Rpb25DaGVja0JveFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZS9xdWVzdGlvbi1jaGVjay1ib3gtdGVtcGxhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGUvcXVlc3Rpb24tbWF0cml4LXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1cnZleUxhbmd1YWdlRHRvIH0gZnJvbSAnLi4vc2hhcmVkL2R0b3Mvc3VydmV5LWxhbmd1YWdlLmR0byc7XHJcbmltcG9ydCB7IFN1cnZleVNlY3Rpb25FbnVtIH0gZnJvbSAnLi4vc2hhcmVkL2VudW1zL3N1cnZleS1zZWN0aW9uLmVudW0nO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25EdG8gfSBmcm9tICcuLi9zaGFyZWQvZHRvcy9zdXJ2ZXktcXVlc3Rpb24uZHRvJztcclxuaW1wb3J0IHsgSW5wdXRUeXBlRW51bSB9IGZyb20gJy4uL3NoYXJlZC9lbnVtcy9pbnB1dC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgc3VydmV5U2VsZWN0b3JzIH0gZnJvbSAnLi9jb3JlL3N0YXRlcy9zdXJ2ZXktc3RvcmUvc3VydmV5LnNlbGVjdG9yJztcclxuaW1wb3J0IHsgcXVlc3Rpb25Hcm91cFNlbGVjdG9ycyB9IGZyb20gJy4vY29yZS9zdGF0ZXMvc3VydmV5LXN0b3JlL3F1ZXN0aW9uLWdyb3VwLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgcXVlc3Rpb25TZWxlY3RvcnMgfSBmcm9tICcuL2NvcmUvc3RhdGVzL3N1cnZleS1zdG9yZS9xdWVzdGlvbi5zZWxlY3Rvcic7XHJcbmltcG9ydCB7IFF1ZXN0aW9uTmdyeE1vZGVsIH0gZnJvbSAnLi9jb3JlL3N0YXRlcy9lbnRpdGVzL3F1ZXN0aW9uLmVudGl0eSc7XHJcbmltcG9ydCB7IHN1cnZleUFjdGlvbnMgfSBmcm9tICcuL2NvcmUvc3RhdGVzL3N1cnZleS1zdG9yZS9zdXJ2ZXkuYWN0aW9uJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3VydmVyeS1saWInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdXJ2ZXktbGliLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zdXJ2ZXktbGliLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFN1cnZlcnlMaWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBzdXJ2ZXJ5TGlicmFyeURpdklkID0gZ3VpZEdlbmVyYXRvcigpIGFzIHN0cmluZztcclxuICByZWxvYWREZWZhdWx0QW5zd2VySWQgPSBndWlkR2VuZXJhdG9yKCkgYXMgc3RyaW5nO1xyXG4gIHJGb3JtOiBGb3JtR3JvdXA8U3VydmVyeUxpYkZvcm1JbnRlcmZhY2U+O1xyXG4gIHF1ZXN0aW9uQW5zd2VyQXJyOlN1cnZleVF1ZXN0aW9uUmVzdWx0W109IFtdO1xyXG5cclxuICBwYWdlUXVlc3Rpb25Hcm91cHMkID0gdGhpcy5fU3RvcmUuc2VsZWN0KHF1ZXN0aW9uR3JvdXBTZWxlY3RvcnMucGFnZVF1ZXN0aW9uR3JvdXBzKTtcclxuICBwYWdlUXVlc3Rpb25zJCA9IHRoaXMuX1N0b3JlLnNlbGVjdChxdWVzdGlvblNlbGVjdG9ycy5wYWdlUXVlc3Rpb25zKTtcclxuXHJcbiAgaXNGaXJzdFBhZ2UkID0gdGhpcy5fU3RvcmUuc2VsZWN0KHN1cnZleVNlbGVjdG9ycy5pc0ZpcnN0UGFnZSk7XHJcbiAgaXNMYXN0UGFnZSQgPSB0aGlzLl9TdG9yZS5zZWxlY3Qoc3VydmV5U2VsZWN0b3JzLmlzTGFzdFBhZ2UpO1xyXG4gIGN1cnJ1bnRTaG93ZWRTdXJ2ZXlQYWdlcyQgPSB0aGlzLl9TdG9yZS5zZWxlY3Qoc3VydmV5U2VsZWN0b3JzLnNlbGVjdGVkUGFnZUluZGV4KS5waXBlKG1hcCh4ID0+IHggKyAxKSk7XHJcblxyXG4gIGdldCBmQ3RybHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yRm9ybS5jb250cm9scztcclxuICB9XHJcblxyXG4gIGdldCBxdWVzdGlvblR5cGVFbnVtKCkge1xyXG4gICAgcmV0dXJuIFF1ZXN0aW9uVHlwZUVudW07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IHN1cnZleVJlc3VsdCgpOiB7IGFuc3dlcnM6IFN1cnZleVF1ZXN0aW9uUmVzdWx0W10sIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGN1cnJlbnRQYWdlSW5kZXg6IHRoaXMuZkN0cmxzLmN1cnJlbnRQYWdlSWQudmFsdWUsXHJcbiAgICAgIGFuc3dlcnM6IHRoaXMucXVlc3Rpb25BbnN3ZXJBcnJcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGlzUHJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3VydmV5TGFuZ3VhZ2VJZDogbnVtYmVyID0gbnVsbDtcclxuICBASW5wdXQoKSBhcHBsaWNhbnRLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgQElucHV0KCkgaXNBcmFiaWNMYW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBzdXJ2ZXlSZXN1bHRFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlRdWVzdGlvblJlc3VsdFtdPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RMYW5ndWFnZUVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3VydmV5TGliU2VydmljZTogU3VydmV5TGliU2VydmljZSwgcHJpdmF0ZSBfU3RvcmU6IFN0b3JlXHJcbiAgICAsIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBfY2hlY2tSdWxlRXhwc1VzZWNhc2U6IENoZWNrUnVsZUV4cHNVc2VjYXNlKSB7XHJcblxyXG4gICAgdGhpcy5yRm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwPFN1cnZlcnlMaWJGb3JtSW50ZXJmYWNlPih7XHJcbiAgICAgIGN1cnJlbnRQYWdlSWQ6IG5ldyBGb3JtQ29udHJvbCgwKSxcclxuICAgICAgc2hvd2VkU3VydmV5UGFnZXM6IG5ldyBGb3JtQ29udHJvbChbXSlcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX1N0b3JlLnNlbGVjdChxdWVzdGlvblNlbGVjdG9ycy5xdWVzdGlvbkFuc3dlcnMpLnN1YnNjcmliZShhcnI9PntcclxuICAgICAgdGhpcy5xdWVzdGlvbkFuc3dlckFyciA9IGFycjtcclxuICAgIH0pXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHF1ZXN0aW9uSWRlbnRpZnkoaW5kZXgsIGl0ZW06IFF1ZXN0aW9uTmdyeE1vZGVsKSB7XHJcbiAgICByZXR1cm4gaXRlbS5xdWVzdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9TdG9yZS5zZWxlY3Qoc3VydmV5U2VsZWN0b3JzLnNlbGVjdGVkUGFnZUlkKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICB0aGlzLmZDdHJscy5jdXJyZW50UGFnZUlkLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX1N0b3JlLnNlbGVjdChzdXJ2ZXlTZWxlY3RvcnMuc2hvd2VkU3VydmV5UGFnZXMpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuZkN0cmxzLnNob3dlZFN1cnZleVBhZ2VzLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdnaW5nTmV4dCgpIHtcclxuICAgIHRoaXMuX1N0b3JlLnNlbGVjdChxdWVzdGlvblNlbGVjdG9ycy5wYWdlUXVlc3Rpb25zKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShhcnIgPT4ge1xyXG4gICAgICB2YXIgaW52YWxpZFJlY29yZHMgPSB0aGlzLmhhdmVJblZhbGlkYXRlUXVlc3Rpb25zKGFycik7XHJcblxyXG4gICAgICBpZiAoaW52YWxpZFJlY29yZHMubGVuZ3RoID09IDApIHtcclxuXHJcbiAgICAgICAgY29uc3QgbmV4dFBhZ2VJZCA9IHRoaXMuZ2V0TmV4dFNob3dlZFBhZ2UoKTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRQYWdlSWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhpcy5fU3RvcmUuZGlzcGF0Y2goc3VydmV5QWN0aW9ucy51cGRhdGVQYWdlSWQoe3BhZ2VJZCA6IG5leHRQYWdlSWR9KSk7XHJcblxyXG4gICAgICAgICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBzY3JvbGxUb3A6ICQoYCNzdXJ2ZXJ5LWNhcmQtJHt0aGlzLnN1cnZlcnlMaWJyYXJ5RGl2SWR9YCkub2Zmc2V0KCkudG9wIC0gMzBcclxuICAgICAgICAgIH0sIDMwMCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgICBcclxuICAgICAgICAgICB0aGlzLnN1cnZleVJlc3VsdEVtaXQuZW1pdCh0aGlzLnF1ZXN0aW9uQW5zd2VyQXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGZpcnN0UXVlc3Rpb24gPSAkKCcuaW52YWxpZC1xdWVzdGlvbicpWzBdO1xyXG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtcclxuICAgICAgICAgIHNjcm9sbFRvcDogJChmaXJzdFF1ZXN0aW9uKS5vZmZzZXQoKS50b3AgLSAyNTBcclxuICAgICAgICB9LCAzMDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUGFnZ2luZ0JhY2soKSB7XHJcbiAgICBjb25zdCBwcmV2UGFnZUlkID0gdGhpcy5nZXRQcmV2U2hvd2VkUGFnZSgpO1xyXG4gICAgaWYgKHByZXZQYWdlSWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9TdG9yZS5kaXNwYXRjaChzdXJ2ZXlBY3Rpb25zLnVwZGF0ZVBhZ2VJZCh7cGFnZUlkIDogcHJldlBhZ2VJZH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGF2ZUluVmFsaWRhdGVRdWVzdGlvbnMocXVlc3Rpb25BcnI6IFF1ZXN0aW9uTmdyeE1vZGVsW10pIHtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuckZvcm0udmFsdWU7XHJcbiAgICB2YXIgaW52YWxpZFJlY29yZHMgPSBbXTtcclxuXHJcbiAgICB2YXIgYXJyID0gcXVlc3Rpb25BcnIuZmlsdGVyKHggPT4geC5pc0Rpc2FibGVkID09IGZhbHNlICYmIHguaXNTaG93ID09IHRydWUpO1xyXG4gICAgYXJyLm1hcCh4ID0+IHtcclxuICAgICAgaWYgKHguaXNSZXF1aXJlZCA9PSB0cnVlICYmIHguaXNWYWxpZCAhPSB0cnVlICYmIHguaXNNYXRyaXhHcm91cCAhPSB0cnVlKSB7XHJcbiAgICAgICAgaW52YWxpZFJlY29yZHMucHVzaCh4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoeC5xdWVzdGlvblR5cGUgPT0gUXVlc3Rpb25UeXBlRW51bS5UZXh0SW5wdXQgJiYgeC5pbnB1dFR5cGVJZCA9PSBJbnB1dFR5cGVFbnVtLkVtYWlsKSB7XHJcbiAgICAgICAgICBpZiAoeC5hbnN3ZXJUZXh0Py50cmltKCkgJiYgeC5pc1ZhbGlkICE9IHRydWUpIHtcclxuICAgICAgICAgICAgaW52YWxpZFJlY29yZHMucHVzaCh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpbnZhbGlkUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICQoYCNzdXJ2ZXktcGFnZV8ke2Zvcm1WYWx1ZS5jdXJyZW50UGFnZUlkfWApLmFkZENsYXNzKCdzdXJ2ZXktcGFnZV9zdWJtaXR0ZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICQoYCNzdXJ2ZXktcGFnZV8ke2Zvcm1WYWx1ZS5jdXJyZW50UGFnZUlkfWApLnJlbW92ZUNsYXNzKCdzdXJ2ZXktcGFnZV9zdWJtaXR0ZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW52YWxpZFJlY29yZHM7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXROZXh0U2hvd2VkUGFnZSgpIHtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuckZvcm0udmFsdWU7XHJcbiAgICB2YXIgc2hvd2VkUGFnZXMgPSBmb3JtVmFsdWUuc2hvd2VkU3VydmV5UGFnZXM7XHJcbiAgICB2YXIgbmV4dFNob3dlZFBhZ2VzID0gc2hvd2VkUGFnZXMuZmlsdGVyKHggPT4geCA+IGZvcm1WYWx1ZS5jdXJyZW50UGFnZUlkKTtcclxuICAgIGlmIChuZXh0U2hvd2VkUGFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gbmV4dFNob3dlZFBhZ2VzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByZXZTaG93ZWRQYWdlKCkge1xyXG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5yRm9ybS52YWx1ZTtcclxuICAgIHZhciBzaG93ZWRQYWdlcyA9IGZvcm1WYWx1ZS5zaG93ZWRTdXJ2ZXlQYWdlcztcclxuICAgIHZhciBwcmV2U2hvd2VkUGFnZXMgPSBzaG93ZWRQYWdlcy5maWx0ZXIoeCA9PiB4IDwgZm9ybVZhbHVlLmN1cnJlbnRQYWdlSWQpO1xyXG4gICAgaWYgKHByZXZTaG93ZWRQYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBwcmV2U2hvd2VkUGFnZXNbcHJldlNob3dlZFBhZ2VzLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJzdXJ2ZXJ5LWNhcmQte3tzdXJ2ZXJ5TGlicmFyeURpdklkfX1cIiBjbGFzcz1cInN1cnZheS1jYXJkXCI+XHJcbiAgPGRpdiBbYXR0ci5pZF09XCInc3VydmV5LXBhZ2VfJytmQ3RybHMuY3VycmVudFBhZ2VJZC52YWx1ZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiAocGFnZVF1ZXN0aW9uR3JvdXBzJCB8IGFzeW5jKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmF5LWNhcmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmF5LWNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJncm91cC10aXRsZVwiIFtpbm5lckhUTUxdPVwiaXRlbS5xdWVzdGlvbkdyb3VwTmFtZVwiPlxyXG4gICAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1zdWItdGl0bGUgXCIgW2lubmVySFRNTF09XCJpdGVtLnF1ZXN0aW9uR3JvdXBEZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgKChwYWdlUXVlc3Rpb25zJHxhc3luYykgfGZpbHRlclF1ZXN0aW9uIDogaXRlbS5xdWVzdGlvbkdyb3VwSWQpOyB0cmFja0J5OnF1ZXN0aW9uSWRlbnRpZnlcIj5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWJvb2xlYW4tdGVtcGxhdGUgI3F1ZXN0aW9uQm9vbGVhblRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSA9PSBxdWVzdGlvblR5cGVFbnVtLkJvb2xlYW5cIj5cclxuICAgICAgICAgICAgICA8L2xpYi1xdWVzdGlvbi1ib29sZWFuLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXRleHQtdGVtcGxhdGUgI3F1ZXN0aW9uVGV4dFRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSA9PSBxdWVzdGlvblR5cGVFbnVtLlRleHRJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBbaXNBcmFiaWNMYW5nXT1cImlzQXJhYmljTGFuZ1wiPjwvbGliLXF1ZXN0aW9uLXRleHQtdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tcmFkaW8tYnV0dG9uLXRlbXBsYXRlICNxdWVzdGlvblJhZGlvQnV0dG9uVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlID09IHF1ZXN0aW9uVHlwZUVudW0uUmFkaW9CdXR0b25cIj5cclxuICAgICAgICAgICAgICA8L2xpYi1xdWVzdGlvbi1yYWRpby1idXR0b24tdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tZHJvcGRvd24tdGVtcGxhdGUgI3F1ZXN0aW9uRHJvcGRvd25UZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGUgPT0gcXVlc3Rpb25UeXBlRW51bS5Ecm9wRG93blwiPjwvbGliLXF1ZXN0aW9uLWRyb3Bkb3duLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLWRyb3Bkb3duLW11bHRpLXRlbXBsYXRlIFtzZXRRdWVzdGlvbl09XCJxdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSA9PSBxdWVzdGlvblR5cGVFbnVtLkRyb3BEb3duTXVsdGlcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1xdWVzdGlvbi1kcm9wZG93bi1tdWx0aS10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1jaGVjay1ib3gtdGVtcGxhdGUgI3F1ZXN0aW9uQ2hlY2tCb3hUZW1wbGF0ZSBbc2V0UXVlc3Rpb25dPVwicXVlc3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGUgPT0gcXVlc3Rpb25UeXBlRW51bS5DaGVja0JveFwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXF1ZXN0aW9uLWNoZWNrLWJveC10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi1tYXRyaXgtdGVtcGxhdGUgI3F1ZXN0aW9uTWF0cml4VGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZSA9PSBxdWVzdGlvblR5cGVFbnVtLk1hdHJpeFwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXF1ZXN0aW9uLW1hdHJpeC10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZSAjcXVlc3Rpb25DYXNjYWRlVGVtcGxhdGUgW3NldFF1ZXN0aW9uXT1cInF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvblR5cGUgPT0gcXVlc3Rpb25UeXBlRW51bS5DYXNjYWRlXCJcclxuICAgICAgICAgICAgICAgIFthcHBsaWNhbnRLZXldPVwiYXBwbGljYW50S2V5XCIgW2lzUHJlXT1cImlzUHJlXCIgW3N1cnZleUxhbmd1YWdlSWRdPVwic3VydmV5TGFuZ3VhZ2VJZFwiXHJcbiAgICAgICAgICAgICAgICBbcGFnZUlkXT1cInF1ZXN0aW9uLnN1cnZleVBhZ2VJZFwiIFtxdWVzdGlvbkdyb3VwSWRdPVwicXVlc3Rpb24ucXVlc3Rpb25Hcm91cElkXCI+PC9saWItcXVlc3Rpb24tY2FzY2FkZS10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic3VydmF5LWNhcmQtZm9vdHJcIiAqbmdJZj1cImZDdHJscy5zaG93ZWRTdXJ2ZXlQYWdlcy52YWx1ZS5sZW5ndGggPiAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgc3R5bGU9XCIganVzdGlmeS1jb250ZW50OiBzdGFydDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInN1cnZheS1wYWdpbmF0aW9uIGZ3LWJvbGRcIj5cclxuICAgICAgICA8c3Bhbj57eyBjdXJydW50U2hvd2VkU3VydmV5UGFnZXMkIHwgYXN5bmN9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTIgbWUtMlwiPnt7aXNBcmFiaWNMYW5nID8gJ9mF2YYnIDogJ29mJ319IDwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57e2ZDdHJscy5zaG93ZWRTdXJ2ZXlQYWdlcy52YWx1ZS5sZW5ndGh9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19